diff --git a/src/core/event.cpp b/src/core/event.cpp index e8750971..a13ed790 100644 --- a/src/core/event.cpp +++ b/src/core/event.cpp @@ -59,6 +59,9 @@ Event* Event::createNewObjectEvent(Project *project) event->put("event_type", EventType::Object); event->put("sprite", project->getEventObjGfxConstants().keys().first()); event->put("movement_type", project->movementTypes->first()); + if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) { + event->put("in_connection", false); + } event->put("radius_x", 0); event->put("radius_y", 0); event->put("script_label", "NULL"); @@ -163,19 +166,36 @@ QMap Event::getExpectedFields() { QString type = this->get("event_type"); if (type == EventType::Object) { - return QMap { - {"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}, - }; + if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) { + return QMap { + {"graphics_id", 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 { + {"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) { return QMap { {"x", true}, @@ -270,6 +290,9 @@ QJsonObject Event::buildObjectEventJSON() { QJsonObject eventObj; eventObj["graphics_id"] = this->get("sprite"); + if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) { + eventObj["in_connection"] = this->getInt("in_connection") > 0 || this->get("in_connection") == "TRUE"; + } eventObj["x"] = this->getU16("x"); eventObj["y"] = this->getU16("y"); eventObj["elevation"] = this->getInt("elevation"); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 15f74808..590c8f88 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1401,6 +1401,7 @@ void MainWindow::updateSelectedObjects() { field_labels["radius_y"] = "Movement Radius Y"; field_labels["trainer_type"] = "Trainer Type"; field_labels["sight_radius_tree_id"] = "Sight Radius / Berry Tree ID"; + field_labels["in_connection"] = "In Connection"; field_labels["destination_warp"] = "Destination Warp"; field_labels["destination_map_name"] = "Destination Map"; field_labels["script_var"] = "Var"; @@ -1439,6 +1440,9 @@ void MainWindow::updateSelectedObjects() { fields << "event_flag"; fields << "trainer_type"; fields << "sight_radius_tree_id"; + if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) { + fields << "in_connection"; + } } else if (event_type == EventType::Warp) { fields << "destination_map_name"; @@ -1487,7 +1491,7 @@ void MainWindow::updateSelectedObjects() { // Some keys shouldn't use a combobox. This isn't very scalable if (key == "quantity") { spin = new NoScrollSpinBox(widget); - } else if (key == "underfoot") { + } else if (key == "underfoot" || key == "in_connection") { check = new QCheckBox(widget); } else { combo = new NoScrollComboBox(widget); @@ -1533,22 +1537,8 @@ void MainWindow::updateSelectedObjects() { } else if (key == "quantity") { spin->setToolTip("The number of items received when the hidden item is picked up."); spin->setMaximum(127); - connect(spin, QOverload::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); @@ -1616,6 +1606,8 @@ void MainWindow::updateSelectedObjects() { combo->setToolTip("The maximum sight range of a trainer,\n" "OR the unique id of the berry tree."); combo->setMinimumContentsLength(4); + } else if (key == "in_connection") { + check->setToolTip("Check if object is positioned in the connection to another map."); } else { combo->addItem(value); } @@ -1626,12 +1618,29 @@ void MainWindow::updateSelectedObjects() { fl->addRow(new QLabel(field_labels[key], widget), spin); widget->setLayout(fl); frame->layout()->addWidget(widget); - } else if (key == "underfoot") { + + connect(spin, QOverload::of(&NoScrollSpinBox::valueChanged), [item, key](int value) { + item->event->put(key, value); + }); + + } else if (key == "underfoot" || key == "in_connection") { check->setChecked(value.toInt()); fl->addRow(new QLabel(field_labels[key], widget), check); widget->setLayout(fl); frame->layout()->addWidget(widget); + + 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 { combo->setCurrentText(value); diff --git a/src/project.cpp b/src/project.cpp index 3906f0a6..f2a2ee6e 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -209,6 +209,9 @@ bool Project::loadMapData(Map* map) { Event *object = new Event(event, EventType::Object); object->put("map_name", map->name); object->put("sprite", event["graphics_id"].toString()); + if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) { + object->put("in_connection", event["in_connection"].toBool()); + } object->put("x", QString::number(event["x"].toInt())); object->put("y", QString::number(event["y"].toInt())); object->put("elevation", QString::number(event["elevation"].toInt()));