Add underfoot and quantity to hidden items
This commit is contained in:
parent
eb44201f5b
commit
7125cd7c8d
3 changed files with 92 additions and 17 deletions
|
@ -1,6 +1,7 @@
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
#include "project.h"
|
#include "project.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
QString EventType::Object = "event_object";
|
QString EventType::Object = "event_object";
|
||||||
QString EventType::Warp = "event_warp";
|
QString EventType::Warp = "event_warp";
|
||||||
|
@ -131,6 +132,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) {
|
||||||
|
event->put("quantity", 1);
|
||||||
|
event->put("underfoot", false);
|
||||||
|
}
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,14 +212,27 @@ QMap<QString, bool> Event::getExpectedFields()
|
||||||
{"script", true},
|
{"script", true},
|
||||||
};
|
};
|
||||||
} else if (type == EventType::HiddenItem) {
|
} else if (type == EventType::HiddenItem) {
|
||||||
return QMap<QString, bool> {
|
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
||||||
{"type", true},
|
return QMap<QString, bool> {
|
||||||
{"x", true},
|
{"type", true},
|
||||||
{"y", true},
|
{"x", true},
|
||||||
{"elevation", true},
|
{"y", true},
|
||||||
{"item", true},
|
{"elevation", true},
|
||||||
{"flag", 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> {
|
return QMap<QString, bool> {
|
||||||
{"type", true},
|
{"type", true},
|
||||||
|
@ -331,6 +349,10 @@ QJsonObject 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) {
|
||||||
|
hiddenItemObj["quantity"] = this->getInt("quantity");
|
||||||
|
hiddenItemObj["underfoot"] = this->getInt("underfoot") > 0 || this->get("underfoot") == "TRUE";
|
||||||
|
}
|
||||||
this->addCustomValuesTo(&hiddenItemObj);
|
this->addCustomValuesTo(&hiddenItemObj);
|
||||||
|
|
||||||
return hiddenItemObj;
|
return hiddenItemObj;
|
||||||
|
|
|
@ -1407,8 +1407,8 @@ void MainWindow::updateSelectedObjects() {
|
||||||
field_labels["script_var_value"] = "Var Value";
|
field_labels["script_var_value"] = "Var Value";
|
||||||
field_labels["player_facing_direction"] = "Player Facing Direction";
|
field_labels["player_facing_direction"] = "Player Facing Direction";
|
||||||
field_labels["item"] = "Item";
|
field_labels["item"] = "Item";
|
||||||
field_labels["item_unknown5"] = "Unknown 5";
|
field_labels["quantity"] = "Quantity";
|
||||||
field_labels["item_unknown6"] = "Unknown 6";
|
field_labels["underfoot"] = "Requires Itemfinder";
|
||||||
field_labels["weather"] = "Weather";
|
field_labels["weather"] = "Weather";
|
||||||
field_labels["flag"] = "Flag";
|
field_labels["flag"] = "Flag";
|
||||||
field_labels["secret_base_id"] = "Secret Base Id";
|
field_labels["secret_base_id"] = "Secret Base Id";
|
||||||
|
@ -1459,6 +1459,10 @@ void MainWindow::updateSelectedObjects() {
|
||||||
else if (event_type == EventType::HiddenItem) {
|
else if (event_type == EventType::HiddenItem) {
|
||||||
fields << "item";
|
fields << "item";
|
||||||
fields << "flag";
|
fields << "flag";
|
||||||
|
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
||||||
|
fields << "quantity";
|
||||||
|
fields << "underfoot";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (event_type == EventType::SecretBase) {
|
else if (event_type == EventType::SecretBase) {
|
||||||
fields << "secret_base_id";
|
fields << "secret_base_id";
|
||||||
|
@ -1476,8 +1480,19 @@ void MainWindow::updateSelectedObjects() {
|
||||||
fl->setContentsMargins(9, 0, 9, 0);
|
fl->setContentsMargins(9, 0, 9, 0);
|
||||||
fl->setRowWrapPolicy(QFormLayout::WrapLongRows);
|
fl->setRowWrapPolicy(QFormLayout::WrapLongRows);
|
||||||
|
|
||||||
NoScrollComboBox *combo = new NoScrollComboBox(widget);
|
NoScrollSpinBox *spin;
|
||||||
combo->setEditable(true);
|
NoScrollComboBox *combo;
|
||||||
|
QCheckBox *check;
|
||||||
|
|
||||||
|
// Some keys shouldn't use a combobox. This isn't very scalable
|
||||||
|
if (key == "quantity") {
|
||||||
|
spin = new NoScrollSpinBox(widget);
|
||||||
|
} else if (key == "underfoot") {
|
||||||
|
check = new QCheckBox(widget);
|
||||||
|
} else {
|
||||||
|
combo = new NoScrollComboBox(widget);
|
||||||
|
combo->setEditable(true);
|
||||||
|
}
|
||||||
|
|
||||||
// trainer_type has custom values, so it has special signal logic.
|
// trainer_type has custom values, so it has special signal logic.
|
||||||
if (key == "trainer_type") {
|
if (key == "trainer_type") {
|
||||||
|
@ -1515,6 +1530,25 @@ void MainWindow::updateSelectedObjects() {
|
||||||
combo->addItem(value);
|
combo->addItem(value);
|
||||||
}
|
}
|
||||||
combo->addItems(*editor->project->itemNames);
|
combo->addItems(*editor->project->itemNames);
|
||||||
|
} else if (key == "quantity") {
|
||||||
|
spin->setToolTip("The number of items received when the hidden item is picked up.");
|
||||||
|
spin->setMaximum(127);
|
||||||
|
connect(spin, QOverload<int>::of(&NoScrollSpinBox::valueChanged), [item, key](int value) {
|
||||||
|
item->event->put(key, value);
|
||||||
|
});
|
||||||
|
} else if (key == "underfoot") {
|
||||||
|
check->setToolTip("If checked, hidden item can only be picked up using the Itemfinder");
|
||||||
|
connect(check, &QCheckBox::stateChanged, [item, key](int state) {
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case Qt::Checked:
|
||||||
|
item->event->put(key, true);
|
||||||
|
break;
|
||||||
|
case Qt::Unchecked:
|
||||||
|
item->event->put(key, false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
} else if (key == "flag" || key == "event_flag") {
|
} else if (key == "flag" || key == "event_flag") {
|
||||||
if (!editor->project->flagNames->contains(value)) {
|
if (!editor->project->flagNames->contains(value)) {
|
||||||
combo->addItem(value);
|
combo->addItem(value);
|
||||||
|
@ -1585,13 +1619,28 @@ void MainWindow::updateSelectedObjects() {
|
||||||
} else {
|
} else {
|
||||||
combo->addItem(value);
|
combo->addItem(value);
|
||||||
}
|
}
|
||||||
combo->setCurrentText(value);
|
|
||||||
|
|
||||||
fl->addRow(new QLabel(field_labels[key], widget), combo);
|
if (key == "quantity") {
|
||||||
widget->setLayout(fl);
|
spin->setValue(value.toInt());
|
||||||
frame->layout()->addWidget(widget);
|
|
||||||
|
|
||||||
item->bind(combo, key);
|
fl->addRow(new QLabel(field_labels[key], widget), spin);
|
||||||
|
widget->setLayout(fl);
|
||||||
|
frame->layout()->addWidget(widget);
|
||||||
|
} else if (key == "underfoot") {
|
||||||
|
check->setChecked(value.toInt());
|
||||||
|
|
||||||
|
fl->addRow(new QLabel(field_labels[key], widget), check);
|
||||||
|
widget->setLayout(fl);
|
||||||
|
frame->layout()->addWidget(widget);
|
||||||
|
} else {
|
||||||
|
combo->setCurrentText(value);
|
||||||
|
|
||||||
|
fl->addRow(new QLabel(field_labels[key], widget), combo);
|
||||||
|
widget->setLayout(fl);
|
||||||
|
frame->layout()->addWidget(widget);
|
||||||
|
|
||||||
|
item->bind(combo, key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Custom fields table.
|
// Custom fields table.
|
||||||
|
|
|
@ -325,6 +325,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) {
|
||||||
|
bg->put("quantity", event["quantity"].toInt());
|
||||||
|
bg->put("underfoot", event["underfoot"].toBool());
|
||||||
|
}
|
||||||
bg->put("event_group_type", "bg_event_group");
|
bg->put("event_group_type", "bg_event_group");
|
||||||
map->events["bg_event_group"].append(bg);
|
map->events["bg_event_group"].append(bg);
|
||||||
} else if (type == "secret_base") {
|
} else if (type == "secret_base") {
|
||||||
|
|
Loading…
Reference in a new issue