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 "map.h"
|
||||
#include "project.h"
|
||||
#include "config.h"
|
||||
|
||||
QString EventType::Object = "event_object";
|
||||
QString EventType::Warp = "event_warp";
|
||||
|
@ -131,6 +132,10 @@ Event* Event::createNewHiddenItemEvent(Project *project)
|
|||
event->put("item", project->itemNames->first());
|
||||
event->put("flag", project->flagNames->first());
|
||||
event->put("elevation", 3);
|
||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
||||
event->put("quantity", 1);
|
||||
event->put("underfoot", false);
|
||||
}
|
||||
return event;
|
||||
}
|
||||
|
||||
|
@ -207,6 +212,18 @@ QMap<QString, bool> Event::getExpectedFields()
|
|||
{"script", true},
|
||||
};
|
||||
} else if (type == EventType::HiddenItem) {
|
||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
||||
return QMap<QString, bool> {
|
||||
{"type", true},
|
||||
{"x", true},
|
||||
{"y", true},
|
||||
{"elevation", true},
|
||||
{"item", true},
|
||||
{"flag", true},
|
||||
{"quantity", true},
|
||||
{"underfoot", true},
|
||||
};
|
||||
} else {
|
||||
return QMap<QString, bool> {
|
||||
{"type", true},
|
||||
{"x", true},
|
||||
|
@ -215,6 +232,7 @@ QMap<QString, bool> Event::getExpectedFields()
|
|||
{"item", true},
|
||||
{"flag", true},
|
||||
};
|
||||
}
|
||||
} else if (type == EventType::SecretBase) {
|
||||
return QMap<QString, bool> {
|
||||
{"type", true},
|
||||
|
@ -331,6 +349,10 @@ QJsonObject Event::buildHiddenItemEventJSON()
|
|||
hiddenItemObj["elevation"] = this->getInt("elevation");
|
||||
hiddenItemObj["item"] = this->get("item");
|
||||
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);
|
||||
|
||||
return hiddenItemObj;
|
||||
|
|
|
@ -1407,8 +1407,8 @@ void MainWindow::updateSelectedObjects() {
|
|||
field_labels["script_var_value"] = "Var Value";
|
||||
field_labels["player_facing_direction"] = "Player Facing Direction";
|
||||
field_labels["item"] = "Item";
|
||||
field_labels["item_unknown5"] = "Unknown 5";
|
||||
field_labels["item_unknown6"] = "Unknown 6";
|
||||
field_labels["quantity"] = "Quantity";
|
||||
field_labels["underfoot"] = "Requires Itemfinder";
|
||||
field_labels["weather"] = "Weather";
|
||||
field_labels["flag"] = "Flag";
|
||||
field_labels["secret_base_id"] = "Secret Base Id";
|
||||
|
@ -1459,6 +1459,10 @@ void MainWindow::updateSelectedObjects() {
|
|||
else if (event_type == EventType::HiddenItem) {
|
||||
fields << "item";
|
||||
fields << "flag";
|
||||
if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) {
|
||||
fields << "quantity";
|
||||
fields << "underfoot";
|
||||
}
|
||||
}
|
||||
else if (event_type == EventType::SecretBase) {
|
||||
fields << "secret_base_id";
|
||||
|
@ -1476,8 +1480,19 @@ void MainWindow::updateSelectedObjects() {
|
|||
fl->setContentsMargins(9, 0, 9, 0);
|
||||
fl->setRowWrapPolicy(QFormLayout::WrapLongRows);
|
||||
|
||||
NoScrollComboBox *combo = new NoScrollComboBox(widget);
|
||||
NoScrollSpinBox *spin;
|
||||
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.
|
||||
if (key == "trainer_type") {
|
||||
|
@ -1515,6 +1530,25 @@ void MainWindow::updateSelectedObjects() {
|
|||
combo->addItem(value);
|
||||
}
|
||||
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") {
|
||||
if (!editor->project->flagNames->contains(value)) {
|
||||
combo->addItem(value);
|
||||
|
@ -1585,6 +1619,20 @@ void MainWindow::updateSelectedObjects() {
|
|||
} else {
|
||||
combo->addItem(value);
|
||||
}
|
||||
|
||||
if (key == "quantity") {
|
||||
spin->setValue(value.toInt());
|
||||
|
||||
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);
|
||||
|
@ -1593,6 +1641,7 @@ void MainWindow::updateSelectedObjects() {
|
|||
|
||||
item->bind(combo, key);
|
||||
}
|
||||
}
|
||||
|
||||
// Custom fields table.
|
||||
if (event_type != EventType::HealLocation) {
|
||||
|
|
|
@ -325,6 +325,10 @@ bool Project::loadMapData(Map* map) {
|
|||
bg->put("elevation", QString::number(event["elevation"].toInt()));
|
||||
bg->put("item", event["item"].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");
|
||||
map->events["bg_event_group"].append(bg);
|
||||
} else if (type == "secret_base") {
|
||||
|
|
Loading…
Reference in a new issue