Add config options for some project-specific features
This commit is contained in:
parent
aa2ce13551
commit
125a287b9c
7 changed files with 328 additions and 223 deletions
|
@ -113,6 +113,13 @@ public:
|
||||||
this->baseGameVersion = BaseGameVersion::pokeemerald;
|
this->baseGameVersion = BaseGameVersion::pokeemerald;
|
||||||
this->useEncounterJson = true;
|
this->useEncounterJson = true;
|
||||||
this->useCustomBorderSize = false;
|
this->useCustomBorderSize = false;
|
||||||
|
this->enableEventWeatherTrigger = true;
|
||||||
|
this->enableEventSecretBase = true;
|
||||||
|
this->enableHiddenItemQuantity = false;
|
||||||
|
this->enableHiddenItemRequiresItemfinder = false;
|
||||||
|
this->enableHealLocationRespawnData = false;
|
||||||
|
this->enableObjectEventInConnection = false;
|
||||||
|
this->enableFloorNumber = false;
|
||||||
this->customScripts.clear();
|
this->customScripts.clear();
|
||||||
}
|
}
|
||||||
void setBaseGameVersion(BaseGameVersion baseGameVersion);
|
void setBaseGameVersion(BaseGameVersion baseGameVersion);
|
||||||
|
@ -125,6 +132,20 @@ public:
|
||||||
QString getProjectDir();
|
QString getProjectDir();
|
||||||
void setUseCustomBorderSize(bool enable);
|
void setUseCustomBorderSize(bool enable);
|
||||||
bool getUseCustomBorderSize();
|
bool getUseCustomBorderSize();
|
||||||
|
void setEventWeatherTriggerEnabled(bool enable);
|
||||||
|
bool getEventWeatherTriggerEnabled();
|
||||||
|
void setEventSecretBaseEnabled(bool enable);
|
||||||
|
bool getEventSecretBaseEnabled();
|
||||||
|
void setHiddenItemQuantityEnabled(bool enable);
|
||||||
|
bool getHiddenItemQuantityEnabled();
|
||||||
|
void setHiddenItemRequiresItemfinderEnabled(bool enable);
|
||||||
|
bool getHiddenItemRequiresItemfinderEnabled();
|
||||||
|
void setHealLocationRespawnDataEnabled(bool enable);
|
||||||
|
bool getHealLocationRespawnDataEnabled();
|
||||||
|
void setObjectEventInConnectionEnabled(bool enable);
|
||||||
|
bool getObjectEventInConnectionEnabled();
|
||||||
|
void setFloorNumberEnabled(bool enable);
|
||||||
|
bool getFloorNumberEnabled();
|
||||||
void setCustomScripts(QList<QString> scripts);
|
void setCustomScripts(QList<QString> scripts);
|
||||||
QList<QString> getCustomScripts();
|
QList<QString> getCustomScripts();
|
||||||
protected:
|
protected:
|
||||||
|
@ -138,6 +159,13 @@ private:
|
||||||
bool useEncounterJson;
|
bool useEncounterJson;
|
||||||
bool usePoryScript;
|
bool usePoryScript;
|
||||||
bool useCustomBorderSize;
|
bool useCustomBorderSize;
|
||||||
|
bool enableEventWeatherTrigger;
|
||||||
|
bool enableEventSecretBase;
|
||||||
|
bool enableHiddenItemQuantity;
|
||||||
|
bool enableHiddenItemRequiresItemfinder;
|
||||||
|
bool enableHealLocationRespawnData;
|
||||||
|
bool enableObjectEventInConnection;
|
||||||
|
bool enableFloorNumber;
|
||||||
QList<QString> customScripts;
|
QList<QString> customScripts;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
122
src/config.cpp
122
src/config.cpp
|
@ -380,6 +380,48 @@ void ProjectConfig::parseConfigKeyValue(QString key, QString value) {
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
logWarn(QString("Invalid config value for use_custom_border_size: '%1'. Must be 0 or 1.").arg(value));
|
logWarn(QString("Invalid config value for use_custom_border_size: '%1'. Must be 0 or 1.").arg(value));
|
||||||
}
|
}
|
||||||
|
} else if (key == "enable_event_weather_trigger") {
|
||||||
|
bool ok;
|
||||||
|
this->enableEventWeatherTrigger = value.toInt(&ok);
|
||||||
|
if (!ok) {
|
||||||
|
logWarn(QString("Invalid config value for enable_event_weather_trigger: '%1'. Must be 0 or 1.").arg(value));
|
||||||
|
}
|
||||||
|
} else if (key == "enable_event_secret_base") {
|
||||||
|
bool ok;
|
||||||
|
this->enableEventSecretBase = value.toInt(&ok);
|
||||||
|
if (!ok) {
|
||||||
|
logWarn(QString("Invalid config value for enable_event_secret_base: '%1'. Must be 0 or 1.").arg(value));
|
||||||
|
}
|
||||||
|
} else if (key == "enable_hidden_item_quantity") {
|
||||||
|
bool ok;
|
||||||
|
this->enableHiddenItemQuantity = value.toInt(&ok);
|
||||||
|
if (!ok) {
|
||||||
|
logWarn(QString("Invalid config value for enable_hidden_item_quantity: '%1'. Must be 0 or 1.").arg(value));
|
||||||
|
}
|
||||||
|
} else if (key == "enable_hidden_item_requires_itemfinder") {
|
||||||
|
bool ok;
|
||||||
|
this->enableHiddenItemRequiresItemfinder = value.toInt(&ok);
|
||||||
|
if (!ok) {
|
||||||
|
logWarn(QString("Invalid config value for enable_hidden_item_requires_itemfinder: '%1'. Must be 0 or 1.").arg(value));
|
||||||
|
}
|
||||||
|
} else if (key == "enable_heal_location_respawn_data") {
|
||||||
|
bool ok;
|
||||||
|
this->enableHealLocationRespawnData = value.toInt(&ok);
|
||||||
|
if (!ok) {
|
||||||
|
logWarn(QString("Invalid config value for enable_heal_location_respawn_data: '%1'. Must be 0 or 1.").arg(value));
|
||||||
|
}
|
||||||
|
} else if (key == "enable_object_event_in_connection") {
|
||||||
|
bool ok;
|
||||||
|
this->enableObjectEventInConnection = value.toInt(&ok);
|
||||||
|
if (!ok) {
|
||||||
|
logWarn(QString("Invalid config value for enable_object_event_in_connection: '%1'. Must be 0 or 1.").arg(value));
|
||||||
|
}
|
||||||
|
} else if (key == "enable_floor_number") {
|
||||||
|
bool ok;
|
||||||
|
this->enableFloorNumber = value.toInt(&ok);
|
||||||
|
if (!ok) {
|
||||||
|
logWarn(QString("Invalid config value for enable_floor_number: '%1'. Must be 0 or 1.").arg(value));
|
||||||
|
}
|
||||||
} else if (key == "custom_scripts") {
|
} else if (key == "custom_scripts") {
|
||||||
this->customScripts.clear();
|
this->customScripts.clear();
|
||||||
QList<QString> paths = value.split(",");
|
QList<QString> paths = value.split(",");
|
||||||
|
@ -400,6 +442,13 @@ QMap<QString, QString> ProjectConfig::getKeyValueMap() {
|
||||||
map.insert("use_encounter_json", QString::number(this->useEncounterJson));
|
map.insert("use_encounter_json", QString::number(this->useEncounterJson));
|
||||||
map.insert("use_poryscript", QString::number(this->usePoryScript));
|
map.insert("use_poryscript", QString::number(this->usePoryScript));
|
||||||
map.insert("use_custom_border_size", QString::number(this->useCustomBorderSize));
|
map.insert("use_custom_border_size", QString::number(this->useCustomBorderSize));
|
||||||
|
map.insert("enable_event_weather_trigger", QString::number(this->enableEventWeatherTrigger));
|
||||||
|
map.insert("enable_event_secret_base", QString::number(this->enableEventSecretBase));
|
||||||
|
map.insert("enable_hidden_item_quantity", QString::number(this->enableHiddenItemQuantity));
|
||||||
|
map.insert("enable_hidden_item_requires_itemfinder", QString::number(this->enableHiddenItemRequiresItemfinder));
|
||||||
|
map.insert("enable_heal_location_respawn_data", QString::number(this->enableHealLocationRespawnData));
|
||||||
|
map.insert("enable_object_event_in_connection", QString::number(this->enableObjectEventInConnection));
|
||||||
|
map.insert("enable_floor_number", QString::number(this->enableFloorNumber));
|
||||||
map.insert("custom_scripts", this->customScripts.join(","));
|
map.insert("custom_scripts", this->customScripts.join(","));
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
@ -430,7 +479,15 @@ void ProjectConfig::onNewConfigFileCreated() {
|
||||||
this->baseGameVersion = static_cast<BaseGameVersion>(baseGameVersionComboBox->currentData().toInt());
|
this->baseGameVersion = static_cast<BaseGameVersion>(baseGameVersionComboBox->currentData().toInt());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this->useCustomBorderSize = this->baseGameVersion == BaseGameVersion::pokefirered;
|
bool isPokefirered = this->baseGameVersion == BaseGameVersion::pokefirered;
|
||||||
|
this->useCustomBorderSize = isPokefirered;
|
||||||
|
this->enableEventWeatherTrigger = !isPokefirered;
|
||||||
|
this->enableEventSecretBase = !isPokefirered;
|
||||||
|
this->enableHiddenItemQuantity = isPokefirered;
|
||||||
|
this->enableHiddenItemRequiresItemfinder = isPokefirered;
|
||||||
|
this->enableHealLocationRespawnData = isPokefirered;
|
||||||
|
this->enableObjectEventInConnection = isPokefirered;
|
||||||
|
this->enableFloorNumber = isPokefirered;
|
||||||
this->useEncounterJson = true;
|
this->useEncounterJson = true;
|
||||||
this->usePoryScript = false;
|
this->usePoryScript = false;
|
||||||
this->customScripts.clear();
|
this->customScripts.clear();
|
||||||
|
@ -480,6 +537,69 @@ bool ProjectConfig::getUseCustomBorderSize() {
|
||||||
return this->useCustomBorderSize;
|
return this->useCustomBorderSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProjectConfig::setEventWeatherTriggerEnabled(bool enable) {
|
||||||
|
this->enableEventWeatherTrigger = enable;
|
||||||
|
this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProjectConfig::getEventWeatherTriggerEnabled() {
|
||||||
|
return this->enableEventWeatherTrigger;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProjectConfig::setEventSecretBaseEnabled(bool enable) {
|
||||||
|
this->enableEventSecretBase = enable;
|
||||||
|
this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProjectConfig::getEventSecretBaseEnabled() {
|
||||||
|
return this->enableEventSecretBase;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProjectConfig::setHiddenItemQuantityEnabled(bool enable) {
|
||||||
|
this->enableHiddenItemQuantity = enable;
|
||||||
|
this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProjectConfig::getHiddenItemQuantityEnabled() {
|
||||||
|
return this->enableHiddenItemQuantity;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProjectConfig::setHiddenItemRequiresItemfinderEnabled(bool enable) {
|
||||||
|
this->enableHiddenItemRequiresItemfinder = enable;
|
||||||
|
this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProjectConfig::getHiddenItemRequiresItemfinderEnabled() {
|
||||||
|
return this->enableHiddenItemRequiresItemfinder;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProjectConfig::setHealLocationRespawnDataEnabled(bool enable) {
|
||||||
|
this->enableHealLocationRespawnData = enable;
|
||||||
|
this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProjectConfig::getHealLocationRespawnDataEnabled() {
|
||||||
|
return this->enableHealLocationRespawnData;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProjectConfig::setObjectEventInConnectionEnabled(bool enable) {
|
||||||
|
this->enableObjectEventInConnection = enable;
|
||||||
|
this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProjectConfig::getObjectEventInConnectionEnabled() {
|
||||||
|
return this->enableObjectEventInConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProjectConfig::setFloorNumberEnabled(bool enable) {
|
||||||
|
this->enableFloorNumber = enable;
|
||||||
|
this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProjectConfig::getFloorNumberEnabled() {
|
||||||
|
return this->enableFloorNumber;
|
||||||
|
}
|
||||||
|
|
||||||
void ProjectConfig::setCustomScripts(QList<QString> scripts) {
|
void ProjectConfig::setCustomScripts(QList<QString> scripts) {
|
||||||
this->customScripts = scripts;
|
this->customScripts = scripts;
|
||||||
this->save();
|
this->save();
|
||||||
|
|
|
@ -60,7 +60,7 @@ Event* Event::createNewObjectEvent(Project *project)
|
||||||
event->put("event_type", EventType::Object);
|
event->put("event_type", EventType::Object);
|
||||||
event->put("sprite", project->getEventObjGfxConstants().keys().first());
|
event->put("sprite", project->getEventObjGfxConstants().keys().first());
|
||||||
event->put("movement_type", project->movementTypes->first());
|
event->put("movement_type", project->movementTypes->first());
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getObjectEventInConnectionEnabled()) {
|
||||||
event->put("in_connection", false);
|
event->put("in_connection", false);
|
||||||
}
|
}
|
||||||
event->put("radius_x", 0);
|
event->put("radius_x", 0);
|
||||||
|
@ -93,7 +93,7 @@ Event* Event::createNewHealLocationEvent(QString map_name)
|
||||||
event->put("loc_name", QString(Map::mapConstantFromName(map_name)).remove(0,4));
|
event->put("loc_name", QString(Map::mapConstantFromName(map_name)).remove(0,4));
|
||||||
event->put("id_name", map_name.replace(QRegularExpression("([a-z])([A-Z])"), "\\1_\\2").toUpper());
|
event->put("id_name", map_name.replace(QRegularExpression("([a-z])([A-Z])"), "\\1_\\2").toUpper());
|
||||||
event->put("elevation", 3);
|
event->put("elevation", 3);
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getHealLocationRespawnDataEnabled()) {
|
||||||
event->put("respawn_map", map_name);
|
event->put("respawn_map", map_name);
|
||||||
event->put("respawn_npc", 1);
|
event->put("respawn_npc", 1);
|
||||||
}
|
}
|
||||||
|
@ -141,8 +141,10 @@ Event* Event::createNewHiddenItemEvent(Project *project)
|
||||||
event->put("item", project->itemNames->first());
|
event->put("item", project->itemNames->first());
|
||||||
event->put("flag", project->flagNames->first());
|
event->put("flag", project->flagNames->first());
|
||||||
event->put("elevation", 3);
|
event->put("elevation", 3);
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getHiddenItemQuantityEnabled()) {
|
||||||
event->put("quantity", 1);
|
event->put("quantity", 1);
|
||||||
|
}
|
||||||
|
if (projectConfig.getHiddenItemRequiresItemfinderEnabled()) {
|
||||||
event->put("underfoot", false);
|
event->put("underfoot", false);
|
||||||
}
|
}
|
||||||
return event;
|
return event;
|
||||||
|
@ -168,108 +170,101 @@ int Event::getPixelY()
|
||||||
return (this->y() * 16) - qMax(0, this->spriteHeight - 16);
|
return (this->y() * 16) - qMax(0, this->spriteHeight - 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QMap<QString, bool> expectedObjectFields {
|
||||||
|
{"graphics_id", true},
|
||||||
|
{"x", true},
|
||||||
|
{"y", true},
|
||||||
|
{"elevation", true},
|
||||||
|
{"movement_type", true},
|
||||||
|
{"movement_range_x", true},
|
||||||
|
{"movement_range_y", true},
|
||||||
|
{"trainer_type", true},
|
||||||
|
{"trainer_sight_or_berry_tree_id", true},
|
||||||
|
{"script", true},
|
||||||
|
{"flag", true},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QMap<QString, bool> expectedWarpFields {
|
||||||
|
{"x", true},
|
||||||
|
{"y", true},
|
||||||
|
{"elevation", true},
|
||||||
|
{"dest_map", true},
|
||||||
|
{"dest_warp_id", true},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QMap<QString, bool> expectedTriggerFields {
|
||||||
|
{"type", true},
|
||||||
|
{"x", true},
|
||||||
|
{"y", true},
|
||||||
|
{"elevation", true},
|
||||||
|
{"var", true},
|
||||||
|
{"var_value", true},
|
||||||
|
{"script", true},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QMap<QString, bool> expectedWeatherTriggerFields {
|
||||||
|
{"type", true},
|
||||||
|
{"x", true},
|
||||||
|
{"y", true},
|
||||||
|
{"elevation", true},
|
||||||
|
{"weather", true},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QMap<QString, bool> expectedSignFields {
|
||||||
|
{"type", true},
|
||||||
|
{"x", true},
|
||||||
|
{"y", true},
|
||||||
|
{"elevation", true},
|
||||||
|
{"player_facing_dir", true},
|
||||||
|
{"script", true},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QMap<QString, bool> expectedHiddenItemFields {
|
||||||
|
{"type", true},
|
||||||
|
{"x", true},
|
||||||
|
{"y", true},
|
||||||
|
{"elevation", true},
|
||||||
|
{"item", true},
|
||||||
|
{"flag", true},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QMap<QString, bool> expectedSecretBaseFields {
|
||||||
|
{"type", true},
|
||||||
|
{"x", true},
|
||||||
|
{"y", true},
|
||||||
|
{"elevation", true},
|
||||||
|
{"secret_base_id", true},
|
||||||
|
};
|
||||||
|
|
||||||
QMap<QString, bool> Event::getExpectedFields()
|
QMap<QString, bool> Event::getExpectedFields()
|
||||||
{
|
{
|
||||||
QString type = this->get("event_type");
|
QString type = this->get("event_type");
|
||||||
|
QMap<QString, bool> expectedFields = QMap<QString, bool>();
|
||||||
if (type == EventType::Object) {
|
if (type == EventType::Object) {
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
expectedFields = expectedObjectFields;
|
||||||
return QMap<QString, bool> {
|
if (projectConfig.getObjectEventInConnectionEnabled()) {
|
||||||
{"graphics_id", true},
|
expectedFields.insert("in_connection", true);
|
||||||
{"in_connection", true},
|
|
||||||
{"x", true},
|
|
||||||
{"y", true},
|
|
||||||
{"elevation", true},
|
|
||||||
{"movement_type", true},
|
|
||||||
{"movement_range_x", true},
|
|
||||||
{"movement_range_y", true},
|
|
||||||
{"trainer_type", true},
|
|
||||||
{"trainer_sight_or_berry_tree_id", true},
|
|
||||||
{"script", true},
|
|
||||||
{"flag", true},
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return QMap<QString, bool> {
|
|
||||||
{"graphics_id", true},
|
|
||||||
{"x", true},
|
|
||||||
{"y", true},
|
|
||||||
{"elevation", true},
|
|
||||||
{"movement_type", true},
|
|
||||||
{"movement_range_x", true},
|
|
||||||
{"movement_range_y", true},
|
|
||||||
{"trainer_type", true},
|
|
||||||
{"trainer_sight_or_berry_tree_id", true},
|
|
||||||
{"script", true},
|
|
||||||
{"flag", true},
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
} else if (type == EventType::Warp) {
|
} else if (type == EventType::Warp) {
|
||||||
return QMap<QString, bool> {
|
expectedFields = expectedWarpFields;
|
||||||
{"x", true},
|
|
||||||
{"y", true},
|
|
||||||
{"elevation", true},
|
|
||||||
{"dest_map", true},
|
|
||||||
{"dest_warp_id", true},
|
|
||||||
};
|
|
||||||
} else if (type == EventType::Trigger) {
|
} else if (type == EventType::Trigger) {
|
||||||
return QMap<QString, bool> {
|
expectedFields = expectedTriggerFields;
|
||||||
{"type", true},
|
|
||||||
{"x", true},
|
|
||||||
{"y", true},
|
|
||||||
{"elevation", true},
|
|
||||||
{"var", true},
|
|
||||||
{"var_value", true},
|
|
||||||
{"script", true},
|
|
||||||
};
|
|
||||||
} else if (type == EventType::WeatherTrigger) {
|
} else if (type == EventType::WeatherTrigger) {
|
||||||
return QMap<QString, bool> {
|
expectedFields = expectedWeatherTriggerFields;
|
||||||
{"type", true},
|
|
||||||
{"x", true},
|
|
||||||
{"y", true},
|
|
||||||
{"elevation", true},
|
|
||||||
{"weather", true},
|
|
||||||
};
|
|
||||||
} else if (type == EventType::Sign) {
|
} else if (type == EventType::Sign) {
|
||||||
return QMap<QString, bool> {
|
expectedFields = expectedSignFields;
|
||||||
{"type", true},
|
|
||||||
{"x", true},
|
|
||||||
{"y", true},
|
|
||||||
{"elevation", true},
|
|
||||||
{"player_facing_dir", true},
|
|
||||||
{"script", true},
|
|
||||||
};
|
|
||||||
} else if (type == EventType::HiddenItem) {
|
} else if (type == EventType::HiddenItem) {
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
expectedFields = expectedHiddenItemFields;
|
||||||
return QMap<QString, bool> {
|
if (projectConfig.getHiddenItemQuantityEnabled()) {
|
||||||
{"type", true},
|
expectedFields.insert("quantity", true);
|
||||||
{"x", true},
|
}
|
||||||
{"y", true},
|
if (projectConfig.getHiddenItemRequiresItemfinderEnabled()) {
|
||||||
{"elevation", true},
|
expectedFields.insert("underfoot", true);
|
||||||
{"item", true},
|
|
||||||
{"flag", true},
|
|
||||||
{"quantity", true},
|
|
||||||
{"underfoot", true},
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return QMap<QString, bool> {
|
|
||||||
{"type", true},
|
|
||||||
{"x", true},
|
|
||||||
{"y", true},
|
|
||||||
{"elevation", true},
|
|
||||||
{"item", true},
|
|
||||||
{"flag", true},
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
} else if (type == EventType::SecretBase) {
|
} else if (type == EventType::SecretBase) {
|
||||||
return QMap<QString, bool> {
|
expectedFields = expectedSecretBaseFields;
|
||||||
{"type", true},
|
|
||||||
{"x", true},
|
|
||||||
{"y", true},
|
|
||||||
{"elevation", true},
|
|
||||||
{"secret_base_id", true},
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return QMap<QString, bool>();
|
|
||||||
}
|
}
|
||||||
|
return expectedFields;
|
||||||
};
|
};
|
||||||
|
|
||||||
void Event::readCustomValues(QJsonObject values)
|
void Event::readCustomValues(QJsonObject values)
|
||||||
|
@ -296,7 +291,7 @@ OrderedJson::object Event::buildObjectEventJSON()
|
||||||
{
|
{
|
||||||
OrderedJson::object eventObj;
|
OrderedJson::object eventObj;
|
||||||
eventObj["graphics_id"] = this->get("sprite");
|
eventObj["graphics_id"] = this->get("sprite");
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getObjectEventInConnectionEnabled()) {
|
||||||
eventObj["in_connection"] = this->getInt("in_connection") > 0 || this->get("in_connection") == "TRUE";
|
eventObj["in_connection"] = this->getInt("in_connection") > 0 || this->get("in_connection") == "TRUE";
|
||||||
}
|
}
|
||||||
eventObj["x"] = this->getS16("x");
|
eventObj["x"] = this->getS16("x");
|
||||||
|
@ -378,8 +373,10 @@ OrderedJson::object Event::buildHiddenItemEventJSON()
|
||||||
hiddenItemObj["elevation"] = this->getInt("elevation");
|
hiddenItemObj["elevation"] = this->getInt("elevation");
|
||||||
hiddenItemObj["item"] = this->get("item");
|
hiddenItemObj["item"] = this->get("item");
|
||||||
hiddenItemObj["flag"] = this->get("flag");
|
hiddenItemObj["flag"] = this->get("flag");
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getHiddenItemQuantityEnabled()) {
|
||||||
hiddenItemObj["quantity"] = this->getInt("quantity");
|
hiddenItemObj["quantity"] = this->getInt("quantity");
|
||||||
|
}
|
||||||
|
if (projectConfig.getHiddenItemRequiresItemfinderEnabled()) {
|
||||||
hiddenItemObj["underfoot"] = this->getInt("underfoot") > 0 || this->get("underfoot") == "TRUE";
|
hiddenItemObj["underfoot"] = this->getInt("underfoot") > 0 || this->get("underfoot") == "TRUE";
|
||||||
}
|
}
|
||||||
this->addCustomValuesTo(&hiddenItemObj);
|
this->addCustomValuesTo(&hiddenItemObj);
|
||||||
|
|
|
@ -26,7 +26,7 @@ HealLocation HealLocation::fromEvent(Event *event)
|
||||||
}
|
}
|
||||||
hl.x = event->getU16("x");
|
hl.x = event->getU16("x");
|
||||||
hl.y = event->getU16("y");
|
hl.y = event->getU16("y");
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getHealLocationRespawnDataEnabled()) {
|
||||||
hl.respawnNPC = event->getU16("respawn_npc");
|
hl.respawnNPC = event->getU16("respawn_npc");
|
||||||
hl.respawnMap = Map::mapConstantFromName(event->get("respawn_map")).remove(0,4);
|
hl.respawnMap = Map::mapConstantFromName(event->get("respawn_map")).remove(0,4);
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,44 +174,50 @@ void MainWindow::setProjectSpecificUIVisibility()
|
||||||
ui->checkBox_AllowRunning->setVisible(false);
|
ui->checkBox_AllowRunning->setVisible(false);
|
||||||
ui->checkBox_AllowBiking->setVisible(false);
|
ui->checkBox_AllowBiking->setVisible(false);
|
||||||
ui->checkBox_AllowEscapeRope->setVisible(false);
|
ui->checkBox_AllowEscapeRope->setVisible(false);
|
||||||
ui->spinBox_FloorNumber->setVisible(false);
|
|
||||||
ui->label_AllowRunning->setVisible(false);
|
ui->label_AllowRunning->setVisible(false);
|
||||||
ui->label_AllowBiking->setVisible(false);
|
ui->label_AllowBiking->setVisible(false);
|
||||||
ui->label_AllowEscapeRope->setVisible(false);
|
ui->label_AllowEscapeRope->setVisible(false);
|
||||||
ui->label_FloorNumber->setVisible(false);
|
|
||||||
ui->newEventToolButton->newWeatherTriggerAction->setVisible(true);
|
|
||||||
ui->newEventToolButton->newSecretBaseAction->setVisible(true);
|
|
||||||
ui->actionRegion_Map_Editor->setVisible(true);
|
ui->actionRegion_Map_Editor->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case BaseGameVersion::pokeemerald:
|
case BaseGameVersion::pokeemerald:
|
||||||
ui->checkBox_AllowRunning->setVisible(true);
|
ui->checkBox_AllowRunning->setVisible(true);
|
||||||
ui->checkBox_AllowBiking->setVisible(true);
|
ui->checkBox_AllowBiking->setVisible(true);
|
||||||
ui->checkBox_AllowEscapeRope->setVisible(true);
|
ui->checkBox_AllowEscapeRope->setVisible(true);
|
||||||
ui->spinBox_FloorNumber->setVisible(false);
|
|
||||||
ui->label_AllowRunning->setVisible(true);
|
ui->label_AllowRunning->setVisible(true);
|
||||||
ui->label_AllowBiking->setVisible(true);
|
ui->label_AllowBiking->setVisible(true);
|
||||||
ui->label_AllowEscapeRope->setVisible(true);
|
ui->label_AllowEscapeRope->setVisible(true);
|
||||||
ui->label_FloorNumber->setVisible(false);
|
|
||||||
ui->newEventToolButton->newWeatherTriggerAction->setVisible(true);
|
|
||||||
ui->newEventToolButton->newSecretBaseAction->setVisible(true);
|
|
||||||
ui->actionRegion_Map_Editor->setVisible(true);
|
ui->actionRegion_Map_Editor->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case BaseGameVersion::pokefirered:
|
case BaseGameVersion::pokefirered:
|
||||||
ui->checkBox_AllowRunning->setVisible(true);
|
ui->checkBox_AllowRunning->setVisible(true);
|
||||||
ui->checkBox_AllowBiking->setVisible(true);
|
ui->checkBox_AllowBiking->setVisible(true);
|
||||||
ui->checkBox_AllowEscapeRope->setVisible(true);
|
ui->checkBox_AllowEscapeRope->setVisible(true);
|
||||||
ui->spinBox_FloorNumber->setVisible(true);
|
|
||||||
ui->label_AllowRunning->setVisible(true);
|
ui->label_AllowRunning->setVisible(true);
|
||||||
ui->label_AllowBiking->setVisible(true);
|
ui->label_AllowBiking->setVisible(true);
|
||||||
ui->label_AllowEscapeRope->setVisible(true);
|
ui->label_AllowEscapeRope->setVisible(true);
|
||||||
ui->label_FloorNumber->setVisible(true);
|
|
||||||
ui->newEventToolButton->newWeatherTriggerAction->setVisible(false);
|
|
||||||
ui->newEventToolButton->newSecretBaseAction->setVisible(false);
|
|
||||||
// TODO: pokefirered is not set up for the Region Map Editor and vice versa.
|
// TODO: pokefirered is not set up for the Region Map Editor and vice versa.
|
||||||
// porymap will crash on attempt. Remove below once resolved
|
// porymap will crash on attempt. Remove below once resolved
|
||||||
ui->actionRegion_Map_Editor->setVisible(false);
|
ui->actionRegion_Map_Editor->setVisible(false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (projectConfig.getEventWeatherTriggerEnabled()) {
|
||||||
|
ui->newEventToolButton->newWeatherTriggerAction->setVisible(true);
|
||||||
|
} else {
|
||||||
|
ui->newEventToolButton->newWeatherTriggerAction->setVisible(false);
|
||||||
|
}
|
||||||
|
if (projectConfig.getEventSecretBaseEnabled()) {
|
||||||
|
ui->newEventToolButton->newSecretBaseAction->setVisible(true);
|
||||||
|
} else {
|
||||||
|
ui->newEventToolButton->newSecretBaseAction->setVisible(false);
|
||||||
|
}
|
||||||
|
if (projectConfig.getFloorNumberEnabled()) {
|
||||||
|
ui->spinBox_FloorNumber->setVisible(true);
|
||||||
|
ui->label_FloorNumber->setVisible(true);
|
||||||
|
} else {
|
||||||
|
ui->spinBox_FloorNumber->setVisible(false);
|
||||||
|
ui->label_FloorNumber->setVisible(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::mapSortOrder_changed(QAction *action)
|
void MainWindow::mapSortOrder_changed(QAction *action)
|
||||||
|
@ -707,6 +713,8 @@ bool MainWindow::loadDataStructures() {
|
||||||
&& project->readMapTypes()
|
&& project->readMapTypes()
|
||||||
&& project->readMapBattleScenes()
|
&& project->readMapBattleScenes()
|
||||||
&& project->readWeatherNames()
|
&& project->readWeatherNames()
|
||||||
|
&& project->readCoordEventWeatherNames()
|
||||||
|
&& project->readSecretBaseIds()
|
||||||
&& project->readBgEventFacingDirections()
|
&& project->readBgEventFacingDirections()
|
||||||
&& project->readTrainerTypes()
|
&& project->readTrainerTypes()
|
||||||
&& project->readMetatileBehaviors()
|
&& project->readMetatileBehaviors()
|
||||||
|
@ -716,10 +724,6 @@ bool MainWindow::loadDataStructures() {
|
||||||
&& project->readMiscellaneousConstants()
|
&& project->readMiscellaneousConstants()
|
||||||
&& project->readSpeciesIconPaths()
|
&& project->readSpeciesIconPaths()
|
||||||
&& project->readWildMonData();
|
&& project->readWildMonData();
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokeemerald || projectConfig.getBaseGameVersion() == BaseGameVersion::pokeruby)
|
|
||||||
success = success
|
|
||||||
&& project->readSecretBaseIds()
|
|
||||||
&& project->readCoordEventWeatherNames();
|
|
||||||
|
|
||||||
return success && loadProjectCombos();
|
return success && loadProjectCombos();
|
||||||
}
|
}
|
||||||
|
@ -1466,7 +1470,10 @@ void MainWindow::updateSelectedObjects() {
|
||||||
|
|
||||||
QList<EventPropertiesFrame *> frames;
|
QList<EventPropertiesFrame *> frames;
|
||||||
|
|
||||||
bool pokefirered = projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered;
|
bool inConnectionEnabled = projectConfig.getObjectEventInConnectionEnabled();
|
||||||
|
bool quantityEnabled = projectConfig.getHiddenItemQuantityEnabled();
|
||||||
|
bool underfootEnabled = projectConfig.getHiddenItemRequiresItemfinderEnabled();
|
||||||
|
bool respawnDataEnabled = projectConfig.getHealLocationRespawnDataEnabled();
|
||||||
for (DraggablePixmapItem *item : *events) {
|
for (DraggablePixmapItem *item : *events) {
|
||||||
EventPropertiesFrame *frame = new EventPropertiesFrame(item->event);
|
EventPropertiesFrame *frame = new EventPropertiesFrame(item->event);
|
||||||
// frame->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
// frame->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||||
|
@ -1561,9 +1568,7 @@ void MainWindow::updateSelectedObjects() {
|
||||||
fields << "event_flag";
|
fields << "event_flag";
|
||||||
fields << "trainer_type";
|
fields << "trainer_type";
|
||||||
fields << "sight_radius_tree_id";
|
fields << "sight_radius_tree_id";
|
||||||
if (pokefirered) {
|
if (inConnectionEnabled) fields << "in_connection";
|
||||||
fields << "in_connection";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (event_type == EventType::Warp) {
|
else if (event_type == EventType::Warp) {
|
||||||
fields << "destination_map_name";
|
fields << "destination_map_name";
|
||||||
|
@ -1584,10 +1589,8 @@ void MainWindow::updateSelectedObjects() {
|
||||||
else if (event_type == EventType::HiddenItem) {
|
else if (event_type == EventType::HiddenItem) {
|
||||||
fields << "item";
|
fields << "item";
|
||||||
fields << "flag";
|
fields << "flag";
|
||||||
if (pokefirered) {
|
if (quantityEnabled) fields << "quantity";
|
||||||
fields << "quantity";
|
if (underfootEnabled) fields << "underfoot";
|
||||||
fields << "underfoot";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (event_type == EventType::SecretBase) {
|
else if (event_type == EventType::SecretBase) {
|
||||||
fields << "secret_base_id";
|
fields << "secret_base_id";
|
||||||
|
@ -1596,7 +1599,7 @@ void MainWindow::updateSelectedObjects() {
|
||||||
// Hide elevation so users don't get impression that editing it is meaningful.
|
// Hide elevation so users don't get impression that editing it is meaningful.
|
||||||
frame->ui->spinBox_z->setVisible(false);
|
frame->ui->spinBox_z->setVisible(false);
|
||||||
frame->ui->label_z->setVisible(false);
|
frame->ui->label_z->setVisible(false);
|
||||||
if (pokefirered) {
|
if (respawnDataEnabled) {
|
||||||
fields << "respawn_map";
|
fields << "respawn_map";
|
||||||
fields << "respawn_npc";
|
fields << "respawn_npc";
|
||||||
}
|
}
|
||||||
|
|
140
src/project.cpp
140
src/project.cpp
|
@ -178,81 +178,38 @@ void Project::setNewMapConnections(Map *map) {
|
||||||
map->connections.clear();
|
map->connections.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QMap<QString, bool> defaultTopLevelMapFields {
|
||||||
|
{"id", true},
|
||||||
|
{"name", true},
|
||||||
|
{"layout", true},
|
||||||
|
{"music", true},
|
||||||
|
{"region_map_section", true},
|
||||||
|
{"requires_flash", true},
|
||||||
|
{"weather", true},
|
||||||
|
{"map_type", true},
|
||||||
|
{"show_map_name", true},
|
||||||
|
{"battle_scene", true},
|
||||||
|
{"connections", true},
|
||||||
|
{"object_events", true},
|
||||||
|
{"warp_events", true},
|
||||||
|
{"coord_events", true},
|
||||||
|
{"bg_events", true},
|
||||||
|
{"shared_events_map", true},
|
||||||
|
{"shared_scripts_map", true},
|
||||||
|
};
|
||||||
|
|
||||||
QMap<QString, bool> Project::getTopLevelMapFields() {
|
QMap<QString, bool> Project::getTopLevelMapFields() {
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokeemerald) {
|
QMap<QString, bool> topLevelMapFields = defaultTopLevelMapFields;
|
||||||
return QMap<QString, bool>
|
if (projectConfig.getBaseGameVersion() != BaseGameVersion::pokeruby) {
|
||||||
{
|
topLevelMapFields.insert("allow_cycling", true);
|
||||||
{"id", true},
|
topLevelMapFields.insert("allow_escaping", true);
|
||||||
{"name", true},
|
topLevelMapFields.insert("allow_running", true);
|
||||||
{"layout", true},
|
|
||||||
{"music", true},
|
|
||||||
{"region_map_section", true},
|
|
||||||
{"requires_flash", true},
|
|
||||||
{"weather", true},
|
|
||||||
{"map_type", true},
|
|
||||||
{"allow_cycling", true},
|
|
||||||
{"allow_escaping", true},
|
|
||||||
{"allow_running", true},
|
|
||||||
{"show_map_name", true},
|
|
||||||
{"battle_scene", true},
|
|
||||||
{"connections", true},
|
|
||||||
{"object_events", true},
|
|
||||||
{"warp_events", true},
|
|
||||||
{"coord_events", true},
|
|
||||||
{"bg_events", true},
|
|
||||||
{"shared_events_map", true},
|
|
||||||
{"shared_scripts_map", true},
|
|
||||||
};
|
|
||||||
} else if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
|
||||||
return QMap<QString, bool>
|
|
||||||
{
|
|
||||||
{"id", true},
|
|
||||||
{"name", true},
|
|
||||||
{"layout", true},
|
|
||||||
{"music", true},
|
|
||||||
{"region_map_section", true},
|
|
||||||
{"requires_flash", true},
|
|
||||||
{"weather", true},
|
|
||||||
{"map_type", true},
|
|
||||||
{"allow_cycling", true},
|
|
||||||
{"allow_escaping", true},
|
|
||||||
{"allow_running", true},
|
|
||||||
{"show_map_name", true},
|
|
||||||
{"floor_number", true},
|
|
||||||
{"battle_scene", true},
|
|
||||||
{"connections", true},
|
|
||||||
{"object_events", true},
|
|
||||||
{"warp_events", true},
|
|
||||||
{"coord_events", true},
|
|
||||||
{"bg_events", true},
|
|
||||||
{"shared_events_map", true},
|
|
||||||
{"shared_scripts_map", true},
|
|
||||||
};
|
|
||||||
} else if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokeruby) {
|
|
||||||
return QMap<QString, bool>
|
|
||||||
{
|
|
||||||
{"id", true},
|
|
||||||
{"name", true},
|
|
||||||
{"layout", true},
|
|
||||||
{"music", true},
|
|
||||||
{"region_map_section", true},
|
|
||||||
{"requires_flash", true},
|
|
||||||
{"weather", true},
|
|
||||||
{"map_type", true},
|
|
||||||
{"show_map_name", true},
|
|
||||||
{"battle_scene", true},
|
|
||||||
{"connections", true},
|
|
||||||
{"object_events", true},
|
|
||||||
{"warp_events", true},
|
|
||||||
{"coord_events", true},
|
|
||||||
{"bg_events", true},
|
|
||||||
{"shared_events_map", true},
|
|
||||||
{"shared_scripts_map", true},
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
logError("Invalid game version");
|
|
||||||
return QMap<QString, bool>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (projectConfig.getFloorNumberEnabled()) {
|
||||||
|
topLevelMapFields.insert("floor_number", true);
|
||||||
|
}
|
||||||
|
return topLevelMapFields;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Project::loadMapData(Map* map) {
|
bool Project::loadMapData(Map* map) {
|
||||||
|
@ -278,14 +235,12 @@ bool Project::loadMapData(Map* map) {
|
||||||
map->requiresFlash = QString::number(mapObj["requires_flash"].toBool());
|
map->requiresFlash = QString::number(mapObj["requires_flash"].toBool());
|
||||||
map->show_location = QString::number(mapObj["show_map_name"].toBool());
|
map->show_location = QString::number(mapObj["show_map_name"].toBool());
|
||||||
map->battle_scene = mapObj["battle_scene"].toString();
|
map->battle_scene = mapObj["battle_scene"].toString();
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokeemerald) {
|
if (projectConfig.getBaseGameVersion() != BaseGameVersion::pokeruby) {
|
||||||
map->allowBiking = QString::number(mapObj["allow_cycling"].toBool());
|
|
||||||
map->allowEscapeRope = QString::number(mapObj["allow_escaping"].toBool());
|
|
||||||
map->allowRunning = QString::number(mapObj["allow_running"].toBool());
|
|
||||||
} else if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
|
||||||
map->allowBiking = QString::number(mapObj["allow_cycling"].toBool());
|
map->allowBiking = QString::number(mapObj["allow_cycling"].toBool());
|
||||||
map->allowEscapeRope = QString::number(mapObj["allow_escaping"].toBool());
|
map->allowEscapeRope = QString::number(mapObj["allow_escaping"].toBool());
|
||||||
map->allowRunning = QString::number(mapObj["allow_running"].toBool());
|
map->allowRunning = QString::number(mapObj["allow_running"].toBool());
|
||||||
|
}
|
||||||
|
if (projectConfig.getFloorNumberEnabled()) {
|
||||||
map->floorNumber = mapObj["floor_number"].toInt();
|
map->floorNumber = mapObj["floor_number"].toInt();
|
||||||
}
|
}
|
||||||
map->sharedEventsMap = mapObj["shared_events_map"].toString();
|
map->sharedEventsMap = mapObj["shared_events_map"].toString();
|
||||||
|
@ -299,7 +254,7 @@ bool Project::loadMapData(Map* map) {
|
||||||
Event *object = new Event(event, EventType::Object);
|
Event *object = new Event(event, EventType::Object);
|
||||||
object->put("map_name", map->name);
|
object->put("map_name", map->name);
|
||||||
object->put("sprite", event["graphics_id"].toString());
|
object->put("sprite", event["graphics_id"].toString());
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getObjectEventInConnectionEnabled()) {
|
||||||
object->put("in_connection", event["in_connection"].toBool());
|
object->put("in_connection", event["in_connection"].toBool());
|
||||||
}
|
}
|
||||||
object->put("x", QString::number(event["x"].toInt()));
|
object->put("x", QString::number(event["x"].toInt()));
|
||||||
|
@ -360,7 +315,7 @@ bool Project::loadMapData(Map* map) {
|
||||||
heal->put("destination_map_name", mapConstantsToMapNames->value(map->name));
|
heal->put("destination_map_name", mapConstantsToMapNames->value(map->name));
|
||||||
heal->put("event_group_type", "heal_event_group");
|
heal->put("event_group_type", "heal_event_group");
|
||||||
heal->put("event_type", EventType::HealLocation);
|
heal->put("event_type", EventType::HealLocation);
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getHealLocationRespawnDataEnabled()) {
|
||||||
heal->put("respawn_map", mapConstantsToMapNames->value(QString("MAP_" + loc.respawnMap)));
|
heal->put("respawn_map", mapConstantsToMapNames->value(QString("MAP_" + loc.respawnMap)));
|
||||||
heal->put("respawn_npc", loc.respawnNPC);
|
heal->put("respawn_npc", loc.respawnNPC);
|
||||||
}
|
}
|
||||||
|
@ -423,8 +378,10 @@ bool Project::loadMapData(Map* map) {
|
||||||
bg->put("elevation", QString::number(event["elevation"].toInt()));
|
bg->put("elevation", QString::number(event["elevation"].toInt()));
|
||||||
bg->put("item", event["item"].toString());
|
bg->put("item", event["item"].toString());
|
||||||
bg->put("flag", event["flag"].toString());
|
bg->put("flag", event["flag"].toString());
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getHiddenItemQuantityEnabled()) {
|
||||||
bg->put("quantity", event["quantity"].toInt());
|
bg->put("quantity", event["quantity"].toInt());
|
||||||
|
}
|
||||||
|
if (projectConfig.getHiddenItemRequiresItemfinderEnabled()) {
|
||||||
bg->put("underfoot", event["underfoot"].toBool());
|
bg->put("underfoot", event["underfoot"].toBool());
|
||||||
}
|
}
|
||||||
bg->put("event_group_type", "bg_event_group");
|
bg->put("event_group_type", "bg_event_group");
|
||||||
|
@ -513,16 +470,13 @@ void Project::setNewMapHeader(Map* map, int mapIndex) {
|
||||||
map->song = defaultSong;
|
map->song = defaultSong;
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokeruby) {
|
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokeruby) {
|
||||||
map->show_location = "TRUE";
|
map->show_location = "TRUE";
|
||||||
} else if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokeemerald) {
|
} else {
|
||||||
map->allowBiking = "1";
|
|
||||||
map->allowEscapeRope = "0";
|
|
||||||
map->allowRunning = "1";
|
|
||||||
map->show_location = "1";
|
|
||||||
} else if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
|
||||||
map->allowBiking = "1";
|
map->allowBiking = "1";
|
||||||
map->allowEscapeRope = "0";
|
map->allowEscapeRope = "0";
|
||||||
map->allowRunning = "1";
|
map->allowRunning = "1";
|
||||||
map->show_location = "1";
|
map->show_location = "1";
|
||||||
|
}
|
||||||
|
if (projectConfig.getFloorNumberEnabled()) {
|
||||||
map->floorNumber = 0;
|
map->floorNumber = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -903,7 +857,7 @@ void Project::saveMapConstantsHeader() {
|
||||||
// and indexes as defines in root + /include/constants/heal_locations.h
|
// and indexes as defines in root + /include/constants/heal_locations.h
|
||||||
void Project::saveHealLocationStruct(Map *map) {
|
void Project::saveHealLocationStruct(Map *map) {
|
||||||
QString constantPrefix, arrayName;
|
QString constantPrefix, arrayName;
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getHealLocationRespawnDataEnabled()) {
|
||||||
constantPrefix = "SPAWN_";
|
constantPrefix = "SPAWN_";
|
||||||
arrayName = "sSpawnPoints";
|
arrayName = "sSpawnPoints";
|
||||||
} else {
|
} else {
|
||||||
|
@ -971,7 +925,7 @@ void Project::saveHealLocationStruct(Map *map) {
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getHealLocationRespawnDataEnabled()) {
|
||||||
// Save second array (map where player respawns for each heal location)
|
// Save second array (map where player respawns for each heal location)
|
||||||
data_text += QString("};\n\n%1%2u16 sWhiteoutRespawnHealCenterMapIdxs[][2] =\n{\n")
|
data_text += QString("};\n\n%1%2u16 sWhiteoutRespawnHealCenterMapIdxs[][2] =\n{\n")
|
||||||
.arg(dataQualifiers.value("heal_locations").isStatic ? "static " : "")
|
.arg(dataQualifiers.value("heal_locations").isStatic ? "static " : "")
|
||||||
|
@ -1403,7 +1357,7 @@ void Project::saveMap(Map *map) {
|
||||||
mapObj["allow_escaping"] = map->allowEscapeRope.toInt() > 0 || map->allowEscapeRope == "TRUE";
|
mapObj["allow_escaping"] = map->allowEscapeRope.toInt() > 0 || map->allowEscapeRope == "TRUE";
|
||||||
mapObj["allow_running"] = map->allowRunning.toInt() > 0 || map->allowRunning == "TRUE";
|
mapObj["allow_running"] = map->allowRunning.toInt() > 0 || map->allowRunning == "TRUE";
|
||||||
mapObj["show_map_name"] = map->show_location.toInt() > 0 || map->show_location == "TRUE";
|
mapObj["show_map_name"] = map->show_location.toInt() > 0 || map->show_location == "TRUE";
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getFloorNumberEnabled()) {
|
||||||
mapObj["floor_number"] = map->floorNumber;
|
mapObj["floor_number"] = map->floorNumber;
|
||||||
}
|
}
|
||||||
mapObj["battle_scene"] = map->battle_scene;
|
mapObj["battle_scene"] = map->battle_scene;
|
||||||
|
@ -2159,7 +2113,7 @@ bool Project::readHealLocations() {
|
||||||
QString text = parser.readTextFile(root + "/" + filename);
|
QString text = parser.readTextFile(root + "/" + filename);
|
||||||
text.replace(QRegularExpression("//.*?(\r\n?|\n)|/\\*.*?\\*/", QRegularExpression::DotMatchesEverythingOption), "");
|
text.replace(QRegularExpression("//.*?(\r\n?|\n)|/\\*.*?\\*/", QRegularExpression::DotMatchesEverythingOption), "");
|
||||||
|
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
if (projectConfig.getHealLocationRespawnDataEnabled()) {
|
||||||
dataQualifiers.insert("heal_locations", getDataQualifiers(text, "sSpawnPoints"));
|
dataQualifiers.insert("heal_locations", getDataQualifiers(text, "sSpawnPoints"));
|
||||||
QRegularExpression spawnRegex("SPAWN_(?<id>[A-Za-z0-9_]+)\\s*- 1\\]\\s* = \\{MAP_GROUP[\\(\\s]+(?<map>[A-Za-z0-9_]+)[\\s\\)]+,\\s*MAP_NUM[\\(\\s]+(\\2)[\\s\\)]+,\\s*(?<x>[0-9A-Fa-fx]+),\\s*(?<y>[0-9A-Fa-fx]+)");
|
QRegularExpression spawnRegex("SPAWN_(?<id>[A-Za-z0-9_]+)\\s*- 1\\]\\s* = \\{MAP_GROUP[\\(\\s]+(?<map>[A-Za-z0-9_]+)[\\s\\)]+,\\s*MAP_NUM[\\(\\s]+(\\2)[\\s\\)]+,\\s*(?<x>[0-9A-Fa-fx]+),\\s*(?<y>[0-9A-Fa-fx]+)");
|
||||||
QRegularExpression respawnMapRegex("SPAWN_(?<id>[A-Za-z0-9_]+)\\s*- 1\\]\\s* = \\{MAP_GROUP[\\(\\s]+(?<map>[A-Za-z0-9_]+)[\\s\\)]+,\\s*MAP_NUM[\\(\\s]+(\\2)[\\s\\)]+}");
|
QRegularExpression respawnMapRegex("SPAWN_(?<id>[A-Za-z0-9_]+)\\s*- 1\\]\\s* = \\{MAP_GROUP[\\(\\s]+(?<map>[A-Za-z0-9_]+)[\\s\\)]+,\\s*MAP_NUM[\\(\\s]+(\\2)[\\s\\)]+}");
|
||||||
|
@ -2302,6 +2256,8 @@ bool Project::readWeatherNames() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Project::readCoordEventWeatherNames() {
|
bool Project::readCoordEventWeatherNames() {
|
||||||
|
if (!projectConfig.getEventWeatherTriggerEnabled()) return true;
|
||||||
|
|
||||||
coordEventWeatherNames->clear();
|
coordEventWeatherNames->clear();
|
||||||
QStringList prefixes = (QStringList() << "COORD_EVENT_WEATHER_");
|
QStringList prefixes = (QStringList() << "COORD_EVENT_WEATHER_");
|
||||||
QString filename = "include/constants/weather.h";
|
QString filename = "include/constants/weather.h";
|
||||||
|
@ -2315,6 +2271,8 @@ bool Project::readCoordEventWeatherNames() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Project::readSecretBaseIds() {
|
bool Project::readSecretBaseIds() {
|
||||||
|
if (!projectConfig.getEventSecretBaseEnabled()) return true;
|
||||||
|
|
||||||
secretBaseIds->clear();
|
secretBaseIds->clear();
|
||||||
QStringList prefixes = (QStringList() << "SECRET_BASE_[A-Za-z0-9_]*_[0-9]+");
|
QStringList prefixes = (QStringList() << "SECRET_BASE_[A-Za-z0-9_]*_[0-9]+");
|
||||||
QString filename = "include/constants/secret_bases.h";
|
QString filename = "include/constants/secret_bases.h";
|
||||||
|
|
|
@ -122,31 +122,25 @@ void NewMapPopup::setDefaultValues(int groupNum, QString mapSec) {
|
||||||
ui->checkBox_NewMap_Allow_Running->setVisible(false);
|
ui->checkBox_NewMap_Allow_Running->setVisible(false);
|
||||||
ui->checkBox_NewMap_Allow_Biking->setVisible(false);
|
ui->checkBox_NewMap_Allow_Biking->setVisible(false);
|
||||||
ui->checkBox_NewMap_Allow_Escape_Rope->setVisible(false);
|
ui->checkBox_NewMap_Allow_Escape_Rope->setVisible(false);
|
||||||
ui->spinBox_NewMap_Floor_Number->setVisible(false);
|
|
||||||
ui->label_NewMap_Allow_Running->setVisible(false);
|
ui->label_NewMap_Allow_Running->setVisible(false);
|
||||||
ui->label_NewMap_Allow_Biking->setVisible(false);
|
ui->label_NewMap_Allow_Biking->setVisible(false);
|
||||||
ui->label_NewMap_Allow_Escape_Rope->setVisible(false);
|
ui->label_NewMap_Allow_Escape_Rope->setVisible(false);
|
||||||
ui->label_NewMap_Floor_Number->setVisible(false);
|
|
||||||
break;
|
break;
|
||||||
case BaseGameVersion::pokeemerald:
|
case BaseGameVersion::pokeemerald:
|
||||||
ui->checkBox_NewMap_Allow_Running->setVisible(true);
|
ui->checkBox_NewMap_Allow_Running->setVisible(true);
|
||||||
ui->checkBox_NewMap_Allow_Biking->setVisible(true);
|
ui->checkBox_NewMap_Allow_Biking->setVisible(true);
|
||||||
ui->checkBox_NewMap_Allow_Escape_Rope->setVisible(true);
|
ui->checkBox_NewMap_Allow_Escape_Rope->setVisible(true);
|
||||||
ui->spinBox_NewMap_Floor_Number->setVisible(false);
|
|
||||||
ui->label_NewMap_Allow_Running->setVisible(true);
|
ui->label_NewMap_Allow_Running->setVisible(true);
|
||||||
ui->label_NewMap_Allow_Biking->setVisible(true);
|
ui->label_NewMap_Allow_Biking->setVisible(true);
|
||||||
ui->label_NewMap_Allow_Escape_Rope->setVisible(true);
|
ui->label_NewMap_Allow_Escape_Rope->setVisible(true);
|
||||||
ui->label_NewMap_Floor_Number->setVisible(false);
|
|
||||||
break;
|
break;
|
||||||
case BaseGameVersion::pokefirered:
|
case BaseGameVersion::pokefirered:
|
||||||
ui->checkBox_NewMap_Allow_Running->setVisible(true);
|
ui->checkBox_NewMap_Allow_Running->setVisible(true);
|
||||||
ui->checkBox_NewMap_Allow_Biking->setVisible(true);
|
ui->checkBox_NewMap_Allow_Biking->setVisible(true);
|
||||||
ui->checkBox_NewMap_Allow_Escape_Rope->setVisible(true);
|
ui->checkBox_NewMap_Allow_Escape_Rope->setVisible(true);
|
||||||
ui->spinBox_NewMap_Floor_Number->setVisible(true);
|
|
||||||
ui->label_NewMap_Allow_Running->setVisible(true);
|
ui->label_NewMap_Allow_Running->setVisible(true);
|
||||||
ui->label_NewMap_Allow_Biking->setVisible(true);
|
ui->label_NewMap_Allow_Biking->setVisible(true);
|
||||||
ui->label_NewMap_Allow_Escape_Rope->setVisible(true);
|
ui->label_NewMap_Allow_Escape_Rope->setVisible(true);
|
||||||
ui->label_NewMap_Floor_Number->setVisible(true);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (projectConfig.getUseCustomBorderSize()) {
|
if (projectConfig.getUseCustomBorderSize()) {
|
||||||
|
@ -160,6 +154,13 @@ void NewMapPopup::setDefaultValues(int groupNum, QString mapSec) {
|
||||||
ui->label_NewMap_BorderWidth->setVisible(false);
|
ui->label_NewMap_BorderWidth->setVisible(false);
|
||||||
ui->label_NewMap_BorderHeight->setVisible(false);
|
ui->label_NewMap_BorderHeight->setVisible(false);
|
||||||
}
|
}
|
||||||
|
if (projectConfig.getFloorNumberEnabled()) {
|
||||||
|
ui->spinBox_NewMap_Floor_Number->setVisible(true);
|
||||||
|
ui->label_NewMap_Floor_Number->setVisible(true);
|
||||||
|
} else {
|
||||||
|
ui->spinBox_NewMap_Floor_Number->setVisible(false);
|
||||||
|
ui->label_NewMap_Floor_Number->setVisible(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NewMapPopup::on_lineEdit_NewMap_Name_textChanged(const QString &text) {
|
void NewMapPopup::on_lineEdit_NewMap_Name_textChanged(const QString &text) {
|
||||||
|
@ -223,14 +224,12 @@ void NewMapPopup::on_pushButton_NewMap_Accept_clicked() {
|
||||||
newMap->isFlyable = "TRUE";
|
newMap->isFlyable = "TRUE";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokeemerald) {
|
if (projectConfig.getBaseGameVersion() != BaseGameVersion::pokeruby) {
|
||||||
newMap->allowRunning = this->ui->checkBox_NewMap_Allow_Running->isChecked() ? "1" : "0";
|
|
||||||
newMap->allowBiking = this->ui->checkBox_NewMap_Allow_Biking->isChecked() ? "1" : "0";
|
|
||||||
newMap->allowEscapeRope = this->ui->checkBox_NewMap_Allow_Escape_Rope->isChecked() ? "1" : "0";
|
|
||||||
} else if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
|
||||||
newMap->allowRunning = this->ui->checkBox_NewMap_Allow_Running->isChecked() ? "1" : "0";
|
newMap->allowRunning = this->ui->checkBox_NewMap_Allow_Running->isChecked() ? "1" : "0";
|
||||||
newMap->allowBiking = this->ui->checkBox_NewMap_Allow_Biking->isChecked() ? "1" : "0";
|
newMap->allowBiking = this->ui->checkBox_NewMap_Allow_Biking->isChecked() ? "1" : "0";
|
||||||
newMap->allowEscapeRope = this->ui->checkBox_NewMap_Allow_Escape_Rope->isChecked() ? "1" : "0";
|
newMap->allowEscapeRope = this->ui->checkBox_NewMap_Allow_Escape_Rope->isChecked() ? "1" : "0";
|
||||||
|
}
|
||||||
|
if (projectConfig.getFloorNumberEnabled()) {
|
||||||
newMap->floorNumber = this->ui->spinBox_NewMap_Floor_Number->value();
|
newMap->floorNumber = this->ui->spinBox_NewMap_Floor_Number->value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue