Merge pull request #57 from huderlem/dropdowns

Populated comboboxes and tooltips
This commit is contained in:
Marcus Huderle 2018-07-13 18:44:08 -07:00 committed by GitHub
commit f86cf26d6e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 602 additions and 355 deletions

View file

@ -4,6 +4,8 @@
#include <QPainter> #include <QPainter>
#include <QMouseEvent> #include <QMouseEvent>
bool selectingEvent = false;
Editor::Editor(Ui::MainWindow* ui) Editor::Editor(Ui::MainWindow* ui)
{ {
this->ui = ui; this->ui = ui;
@ -469,6 +471,8 @@ void Editor::displayMapEvents() {
delete events_group; delete events_group;
} }
selected_events->clear();
events_group = new EventGroup; events_group = new EventGroup;
scene->addItem(events_group); scene->addItem(events_group);
@ -484,8 +488,7 @@ void Editor::displayMapEvents() {
} }
DraggablePixmapItem *Editor::addMapEvent(Event *event) { DraggablePixmapItem *Editor::addMapEvent(Event *event) {
DraggablePixmapItem *object = new DraggablePixmapItem(event); DraggablePixmapItem *object = new DraggablePixmapItem(event, this);
object->editor = this;
events_group->addToGroup(object); events_group->addToGroup(object);
return object; return object;
} }
@ -807,18 +810,24 @@ void Editor::updateDiveEmergeMap(QString mapName, QString direction) {
} }
void Editor::updatePrimaryTileset(QString tilesetLabel) void Editor::updatePrimaryTileset(QString tilesetLabel)
{
if (map->layout->tileset_primary_label != tilesetLabel)
{ {
map->layout->tileset_primary_label = tilesetLabel; map->layout->tileset_primary_label = tilesetLabel;
map->layout->tileset_primary = project->getTileset(tilesetLabel); map->layout->tileset_primary = project->getTileset(tilesetLabel);
emit tilesetChanged(map->name); emit tilesetChanged(map->name);
} }
}
void Editor::updateSecondaryTileset(QString tilesetLabel) void Editor::updateSecondaryTileset(QString tilesetLabel)
{
if (map->layout->tileset_secondary_label != tilesetLabel)
{ {
map->layout->tileset_secondary_label = tilesetLabel; map->layout->tileset_secondary_label = tilesetLabel;
map->layout->tileset_secondary = project->getTileset(tilesetLabel); map->layout->tileset_secondary = project->getTileset(tilesetLabel);
emit tilesetChanged(map->name); emit tilesetChanged(map->name);
} }
}
void MetatilesPixmapItem::paintTileChanged(Map *map) { void MetatilesPixmapItem::paintTileChanged(Map *map) {
draw(); draw();
@ -1471,9 +1480,11 @@ void CollisionPixmapItem::pick(QGraphicsSceneMouseEvent *event) {
void DraggablePixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *mouse) { void DraggablePixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *mouse) {
active = true; active = true;
clicking = true;
last_x = (mouse->pos().x() + this->pos().x()) / 16; last_x = (mouse->pos().x() + this->pos().x()) / 16;
last_y = (mouse->pos().y() + this->pos().y()) / 16; last_y = (mouse->pos().y() + this->pos().y()) / 16;
this->editor->selectMapEvent(this, mouse->modifiers() & Qt::ControlModifier);
this->editor->updateSelectedEvents();
selectingEvent = true;
//qDebug() << QString("(%1, %2)").arg(event->get("x")).arg(event->get("y")); //qDebug() << QString("(%1, %2)").arg(event->get("x")).arg(event->get("y"));
} }
@ -1489,7 +1500,6 @@ void DraggablePixmapItem::mouseMoveEvent(QGraphicsSceneMouseEvent *mouse) {
int x = (mouse->pos().x() + this->pos().x()) / 16; int x = (mouse->pos().x() + this->pos().x()) / 16;
int y = (mouse->pos().y() + this->pos().y()) / 16; int y = (mouse->pos().y() + this->pos().y()) / 16;
if (x != last_x || y != last_y) { if (x != last_x || y != last_y) {
clicking = false;
if (editor->selected_events->contains(this)) { if (editor->selected_events->contains(this)) {
for (DraggablePixmapItem *item : *editor->selected_events) { for (DraggablePixmapItem *item : *editor->selected_events) {
item->move(x - last_x, y - last_y); item->move(x - last_x, y - last_y);
@ -1505,13 +1515,15 @@ void DraggablePixmapItem::mouseMoveEvent(QGraphicsSceneMouseEvent *mouse) {
} }
void DraggablePixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouse) { void DraggablePixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouse) {
if (clicking) {
this->editor->selectMapEvent(this, mouse->modifiers() & Qt::ControlModifier);
this->editor->updateSelectedEvents();
}
active = false; active = false;
} }
void DraggablePixmapItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouse) {
if (this->event->get("event_type") == EventType::Warp) {
emit editor->warpEventDoubleClicked(this->event->get("destination_map_name"), this->event->get("destination_warp"));
}
}
QList<DraggablePixmapItem *> *Editor::getObjects() { QList<DraggablePixmapItem *> *Editor::getObjects() {
QList<DraggablePixmapItem *> *list = new QList<DraggablePixmapItem *>; QList<DraggablePixmapItem *> *list = new QList<DraggablePixmapItem *>;
for (Event *event : map->getAllEvents()) { for (Event *event : map->getAllEvents()) {
@ -1532,7 +1544,7 @@ void Editor::redrawObject(DraggablePixmapItem *item) {
if (selected_events && selected_events->contains(item)) { if (selected_events && selected_events->contains(item)) {
QImage image = item->pixmap().toImage(); QImage image = item->pixmap().toImage();
QPainter painter(&image); QPainter painter(&image);
painter.setPen(QColor(250, 100, 25)); painter.setPen(QColor(250, 0, 255));
painter.drawRect(0, 0, image.width() - 1, image.height() - 1); painter.drawRect(0, 0, image.width() - 1, image.height() - 1);
painter.end(); painter.end();
item->setPixmap(QPixmap::fromImage(image)); item->setPixmap(QPixmap::fromImage(image));
@ -1589,39 +1601,19 @@ void Editor::deleteEvent(Event *event) {
//updateSelectedObjects(); //updateSelectedObjects();
} }
// dunno how to detect bubbling. QMouseEvent::isAccepted seems to always be true // It doesn't seem to be possible to prevent the mousePress event
// check if selected_events changed instead. this has the side effect of deselecting // from triggering both event's DraggablePixmapItem and the background mousePress.
// when you click on a selected event, since selected_events doesn't change. // Since the DraggablePixmapItem's event fires first, we can set a temp
// variable "selectingEvent" so that we can detect whether or not the user
QList<DraggablePixmapItem *> selected_events_test; // is clicking on the background instead of an event.
bool clicking = false;
void Editor::objectsView_onMousePress(QMouseEvent *event) { void Editor::objectsView_onMousePress(QMouseEvent *event) {
clicking = true; bool multiSelect = event->modifiers() & Qt::ControlModifier;
selected_events_test = *selected_events; if (!selectingEvent && !multiSelect && selected_events->length() > 1) {
} DraggablePixmapItem *first = selected_events->first();
void Editor::objectsView_onMouseMove(QMouseEvent *event) {
clicking = false;
}
void Editor::objectsView_onMouseRelease(QMouseEvent *event) {
if (clicking) {
if (selected_events_test.length()) {
if (selected_events_test.length() == selected_events->length()) {
bool deselect = true;
for (int i = 0; i < selected_events_test.length(); i++) {
if (selected_events_test.at(i) != selected_events->at(i)) {
deselect = false;
break;
}
}
if (deselect) {
selected_events->clear(); selected_events->clear();
selected_events->append(first);
updateSelectedEvents(); updateSelectedEvents();
} }
}
} selectingEvent = false;
clicking = false;
}
} }

View file

@ -138,6 +138,7 @@ signals:
void selectedObjectsChanged(); void selectedObjectsChanged();
void loadMapRequested(QString, QString); void loadMapRequested(QString, QString);
void tilesetChanged(QString); void tilesetChanged(QString);
void warpEventDoubleClicked(QString mapName, QString warpNum);
}; };
@ -150,13 +151,12 @@ public:
Editor *editor = NULL; Editor *editor = NULL;
Event *event = NULL; Event *event = NULL;
QGraphicsItemAnimation *pos_anim = NULL; QGraphicsItemAnimation *pos_anim = NULL;
DraggablePixmapItem(Event *event_) : QGraphicsPixmapItem(event_->pixmap) { DraggablePixmapItem(Event *event_, Editor *editor_) : QGraphicsPixmapItem(event_->pixmap) {
event = event_; event = event_;
editor = editor_;
updatePosition(); updatePosition();
} }
bool active; bool active;
bool right_click;
bool clicking;
int last_x; int last_x;
int last_y; int last_y;
void updatePosition() { void updatePosition() {
@ -229,6 +229,7 @@ protected:
void mousePressEvent(QGraphicsSceneMouseEvent*); void mousePressEvent(QGraphicsSceneMouseEvent*);
void mouseMoveEvent(QGraphicsSceneMouseEvent*); void mouseMoveEvent(QGraphicsSceneMouseEvent*);
void mouseReleaseEvent(QGraphicsSceneMouseEvent*); void mouseReleaseEvent(QGraphicsSceneMouseEvent*);
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*);
}; };
class EventGroup : public QGraphicsItemGroup { class EventGroup : public QGraphicsItemGroup {

View file

@ -43,13 +43,13 @@ Event* Event::createNewObjectEvent()
event->put("event_group_type", "object_event_group"); event->put("event_group_type", "object_event_group");
event->put("event_type", EventType::Object); event->put("event_type", EventType::Object);
event->put("sprite", "EVENT_OBJ_GFX_BOY_1"); event->put("sprite", "EVENT_OBJ_GFX_BOY_1");
event->put("behavior", "1"); event->put("movement_type", "MOVEMENT_TYPE_LOOK_AROUND");
event->put("radius_x", 0); event->put("radius_x", 0);
event->put("radius_y", 0); event->put("radius_y", 0);
event->put("script_label", "NULL"); event->put("script_label", "NULL");
event->put("event_flag", "0"); event->put("event_flag", "0");
event->put("replacement", "0"); event->put("replacement", "0");
event->put("trainer_see_type", "0"); event->put("is_trainer", "FALSE");
event->put("sight_radius_tree_id", 0); event->put("sight_radius_tree_id", 0);
return event; return event;
} }
@ -89,7 +89,7 @@ Event* Event::createNewSignEvent()
Event *event = new Event; Event *event = new Event;
event->put("event_group_type", "bg_event_group"); event->put("event_group_type", "bg_event_group");
event->put("event_type", EventType::Sign); event->put("event_type", EventType::Sign);
event->put("player_facing_direction", "0"); event->put("player_facing_direction", "BG_EVENT_PLAYER_FACING_ANY");
event->put("script_label", "NULL"); event->put("script_label", "NULL");
return event; return event;
} }
@ -109,7 +109,7 @@ Event* Event::createNewSecretBaseEvent()
Event *event = new Event; Event *event = new Event;
event->put("event_group_type", "bg_event_group"); event->put("event_group_type", "bg_event_group");
event->put("event_type", EventType::SecretBase); event->put("event_type", EventType::SecretBase);
event->put("secret_base_map", "SECRET_BASE_RED_CAVE2_1"); event->put("secret_base_id", "SECRET_BASE_RED_CAVE2_1");
return event; return event;
} }
@ -127,10 +127,10 @@ QString Event::buildObjectEventMacro(int item_index)
text += QString(", %1").arg(x); text += QString(", %1").arg(x);
text += QString(", %1").arg(y); text += QString(", %1").arg(y);
text += QString(", %1").arg(this->get("elevation")); text += QString(", %1").arg(this->get("elevation"));
text += QString(", %1").arg(this->get("behavior")); text += QString(", %1").arg(this->get("movement_type"));
text += QString(", %1").arg(radius_x); text += QString(", %1").arg(radius_x);
text += QString(", %1").arg(radius_y); text += QString(", %1").arg(radius_y);
text += QString(", %1").arg(this->get("trainer_see_type")); text += QString(", %1").arg(this->get("is_trainer"));
text += QString(", %1").arg(this->get("sight_radius_tree_id")); text += QString(", %1").arg(this->get("sight_radius_tree_id"));
text += QString(", %1").arg(this->get("script_label")); text += QString(", %1").arg(this->get("script_label"));
text += QString(", %1").arg(this->get("event_flag")); text += QString(", %1").arg(this->get("event_flag"));
@ -156,10 +156,8 @@ QString Event::buildCoordScriptEventMacro()
text += QString("\tcoord_event %1").arg(this->get("x")); text += QString("\tcoord_event %1").arg(this->get("x"));
text += QString(", %1").arg(this->get("y")); text += QString(", %1").arg(this->get("y"));
text += QString(", %1").arg(this->get("elevation")); text += QString(", %1").arg(this->get("elevation"));
text += QString(", 0");
text += QString(", %1").arg(this->get("script_var")); text += QString(", %1").arg(this->get("script_var"));
text += QString(", %1").arg(this->get("script_var_value")); text += QString(", %1").arg(this->get("script_var_value"));
text += QString(", 0");
text += QString(", %1").arg(this->get("script_label")); text += QString(", %1").arg(this->get("script_label"));
text += "\n"; text += "\n";
return text; return text;
@ -183,7 +181,6 @@ QString Event::buildSignEventMacro()
text += QString(", %1").arg(this->get("y")); text += QString(", %1").arg(this->get("y"));
text += QString(", %1").arg(this->get("elevation")); text += QString(", %1").arg(this->get("elevation"));
text += QString(", %1").arg(this->get("player_facing_direction")); text += QString(", %1").arg(this->get("player_facing_direction"));
text += QString(", 0");
text += QString(", %1").arg(this->get("script_label")); text += QString(", %1").arg(this->get("script_label"));
text += "\n"; text += "\n";
return text; return text;
@ -207,7 +204,7 @@ QString Event::buildSecretBaseEventMacro()
text += QString("\tbg_secret_base_event %1").arg(this->get("x")); text += QString("\tbg_secret_base_event %1").arg(this->get("x"));
text += QString(", %1").arg(this->get("y")); text += QString(", %1").arg(this->get("y"));
text += QString(", %1").arg(this->get("elevation")); text += QString(", %1").arg(this->get("elevation"));
text += QString(", %1").arg(this->get("secret_base_map")); text += QString(", %1").arg(this->get("secret_base_id"));
text += "\n"; text += "\n";
return text; return text;
} }

View file

@ -10,14 +10,8 @@ void GraphicsView::mousePressEvent(QMouseEvent *event) {
void GraphicsView::mouseMoveEvent(QMouseEvent *event) { void GraphicsView::mouseMoveEvent(QMouseEvent *event) {
QGraphicsView::mouseMoveEvent(event); QGraphicsView::mouseMoveEvent(event);
if (editor) {
editor->objectsView_onMouseMove(event);
}
} }
void GraphicsView::mouseReleaseEvent(QMouseEvent *event) { void GraphicsView::mouseReleaseEvent(QMouseEvent *event) {
QGraphicsView::mouseReleaseEvent(event); QGraphicsView::mouseReleaseEvent(event);
if (editor) {
editor->objectsView_onMouseRelease(event);
}
} }

View file

@ -37,6 +37,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(editor, SIGNAL(selectedObjectsChanged()), this, SLOT(updateSelectedObjects())); connect(editor, SIGNAL(selectedObjectsChanged()), this, SLOT(updateSelectedObjects()));
connect(editor, SIGNAL(loadMapRequested(QString, QString)), this, SLOT(onLoadMapRequested(QString, QString))); connect(editor, SIGNAL(loadMapRequested(QString, QString)), this, SLOT(onLoadMapRequested(QString, QString)));
connect(editor, SIGNAL(tilesetChanged(QString)), this, SLOT(onTilesetChanged(QString))); connect(editor, SIGNAL(tilesetChanged(QString)), this, SLOT(onTilesetChanged(QString)));
connect(editor, SIGNAL(warpEventDoubleClicked(QString,QString)), this, SLOT(openWarpMap(QString,QString)));
on_toolButton_Paint_clicked(); on_toolButton_Paint_clicked();
@ -196,6 +197,39 @@ void MainWindow::redrawMapScene()
ui->graphicsView_Elevation->setFixedSize(editor->elevation_metatiles_item->pixmap().width() + 2, editor->elevation_metatiles_item->pixmap().height() + 2); ui->graphicsView_Elevation->setFixedSize(editor->elevation_metatiles_item->pixmap().width() + 2, editor->elevation_metatiles_item->pixmap().height() + 2);
} }
void MainWindow::openWarpMap(QString map_name, QString warp_num) {
// Ensure valid destination map name.
if (!editor->project->mapNames->contains(map_name)) {
qDebug() << QString("Invalid warp destination map name '%1'").arg(map_name);
return;
}
// Ensure valid destination warp number.
bool ok;
int warpNum = warp_num.toInt(&ok, 0);
if (!ok) {
qDebug() << QString("Invalid warp number '%1' for destination map '%2'").arg(warp_num).arg(map_name);
return;
}
// Open the destination map, and select the target warp event.
setMap(map_name);
QList<Event*> warp_events = editor->map->events["warp_event_group"];
if (warp_events.length() > warpNum) {
Event *warp_event = warp_events.at(warpNum);
QList<DraggablePixmapItem *> *all_events = editor->getObjects();
for (DraggablePixmapItem *item : *all_events) {
if (item->event == warp_event) {
editor->selected_events->clear();
editor->selected_events->append(item);
editor->updateSelectedEvents();
}
}
delete all_events;
}
}
void MainWindow::setRecentMap(QString map_name) { void MainWindow::setRecentMap(QString map_name) {
QSettings settings; QSettings settings;
QString key = "project:" + editor->project->root; QString key = "project:" + editor->project->root;
@ -210,7 +244,7 @@ void MainWindow::setRecentMap(QString map_name) {
void MainWindow::displayMapProperties() { void MainWindow::displayMapProperties() {
ui->comboBox_Song->clear(); ui->comboBox_Song->clear();
ui->comboBox_Location->clear(); ui->comboBox_Location->clear();
ui->comboBox_Visibility->clear(); ui->checkBox_Visibility->setChecked(false);
ui->comboBox_Weather->clear(); ui->comboBox_Weather->clear();
ui->comboBox_Type->clear(); ui->comboBox_Type->clear();
ui->comboBox_BattleScene->clear(); ui->comboBox_BattleScene->clear();
@ -229,7 +263,7 @@ void MainWindow::displayMapProperties() {
ui->comboBox_Song->addItems(songs); ui->comboBox_Song->addItems(songs);
ui->comboBox_Song->setCurrentText(map->song); ui->comboBox_Song->setCurrentText(map->song);
ui->comboBox_Location->addItems(project->getLocations()); ui->comboBox_Location->addItems(*project->regionMapSections);
ui->comboBox_Location->setCurrentText(map->location); ui->comboBox_Location->setCurrentText(map->location);
QMap<QString, QStringList> tilesets = project->getTilesets(); QMap<QString, QStringList> tilesets = project->getTilesets();
@ -238,16 +272,15 @@ void MainWindow::displayMapProperties() {
ui->comboBox_SecondaryTileset->addItems(tilesets.value("secondary")); ui->comboBox_SecondaryTileset->addItems(tilesets.value("secondary"));
ui->comboBox_SecondaryTileset->setCurrentText(map->layout->tileset_secondary_label); ui->comboBox_SecondaryTileset->setCurrentText(map->layout->tileset_secondary_label);
ui->comboBox_Visibility->addItems(project->getVisibilities()); ui->checkBox_Visibility->setChecked(map->requiresFlash.toInt() > 0 || map->requiresFlash == "TRUE");
ui->comboBox_Visibility->setCurrentText(map->visibility);
ui->comboBox_Weather->addItems(project->getWeathers()); ui->comboBox_Weather->addItems(*project->weatherNames);
ui->comboBox_Weather->setCurrentText(map->weather); ui->comboBox_Weather->setCurrentText(map->weather);
ui->comboBox_Type->addItems(project->getMapTypes()); ui->comboBox_Type->addItems(*project->mapTypes);
ui->comboBox_Type->setCurrentText(map->type); ui->comboBox_Type->setCurrentText(map->type);
ui->comboBox_BattleScene->addItems(project->getBattleScenes()); ui->comboBox_BattleScene->addItems(*project->mapBattleScenes);
ui->comboBox_BattleScene->setCurrentText(map->battle_scene); ui->comboBox_BattleScene->setCurrentText(map->battle_scene);
ui->checkBox_ShowLocation->setChecked(map->show_location.toInt() > 0 || map->show_location == "TRUE"); ui->checkBox_ShowLocation->setChecked(map->show_location.toInt() > 0 || map->show_location == "TRUE");
@ -267,10 +300,10 @@ void MainWindow::on_comboBox_Location_activated(const QString &location)
} }
} }
void MainWindow::on_comboBox_Visibility_activated(const QString &visibility) void MainWindow::on_comboBox_Visibility_activated(const QString &requiresFlash)
{ {
if (editor && editor->map) { if (editor && editor->map) {
editor->map->visibility = visibility; editor->map->requiresFlash = requiresFlash;
} }
} }
@ -295,6 +328,17 @@ void MainWindow::on_comboBox_BattleScene_activated(const QString &battle_scene)
} }
} }
void MainWindow::on_checkBox_Visibility_clicked(bool checked)
{
if (editor && editor->map) {
if (checked) {
editor->map->requiresFlash = "TRUE";
} else {
editor->map->requiresFlash = "FALSE";
}
}
}
void MainWindow::on_checkBox_ShowLocation_clicked(bool checked) void MainWindow::on_checkBox_ShowLocation_clicked(bool checked)
{ {
if (editor && editor->map) { if (editor && editor->map) {
@ -310,9 +354,17 @@ void MainWindow::loadDataStructures() {
Project *project = editor->project; Project *project = editor->project;
project->readMapLayoutsTable(); project->readMapLayoutsTable();
project->readAllMapLayouts(); project->readAllMapLayouts();
project->readRegionMapSections();
project->readItemNames(); project->readItemNames();
project->readFlagNames(); project->readFlagNames();
project->readVarNames(); project->readVarNames();
project->readMovementTypes();
project->readMapTypes();
project->readMapBattleScenes();
project->readWeatherNames();
project->readCoordEventWeatherNames();
project->readSecretBaseIds();
project->readBgEventFacingDirections();
project->readMapsWithConnections(); project->readMapsWithConnections();
} }
@ -544,12 +596,19 @@ void MainWindow::addNewEvent(QString event_type)
// Should probably just pass layout and let the editor work it out // Should probably just pass layout and let the editor work it out
void MainWindow::updateSelectedObjects() { void MainWindow::updateSelectedObjects() {
QList<DraggablePixmapItem *> *all_events = editor->getObjects(); QList<DraggablePixmapItem *> *all_events = editor->getObjects();
QList<DraggablePixmapItem *> *events = all_events; QList<DraggablePixmapItem *> *events = NULL;
if (editor->selected_events && editor->selected_events->length()) { if (editor->selected_events && editor->selected_events->length()) {
events = editor->selected_events; events = editor->selected_events;
} else {
events = new QList<DraggablePixmapItem*>;
if (all_events && all_events->length()) {
DraggablePixmapItem *selectedEvent = all_events->first();
editor->selected_events->append(selectedEvent);
editor->redrawObject(selectedEvent);
events->append(selectedEvent);
}
} }
QMap<QString, int> event_obj_gfx_constants = editor->project->getEventObjGfxConstants(); QMap<QString, int> event_obj_gfx_constants = editor->project->getEventObjGfxConstants();
@ -597,11 +656,10 @@ void MainWindow::updateSelectedObjects() {
QMap<QString, QString> field_labels; QMap<QString, QString> field_labels;
field_labels["script_label"] = "Script"; field_labels["script_label"] = "Script";
field_labels["event_flag"] = "Event Flag"; field_labels["event_flag"] = "Event Flag";
field_labels["replacement"] = "Replacement"; field_labels["movement_type"] = "Movement";
field_labels["behavior"] = "Behavior";
field_labels["radius_x"] = "Movement Radius X"; field_labels["radius_x"] = "Movement Radius X";
field_labels["radius_y"] = "Movement Radius Y"; field_labels["radius_y"] = "Movement Radius Y";
field_labels["trainer_see_type"] = "Trainer See Type"; field_labels["is_trainer"] = "Trainer";
field_labels["sight_radius_tree_id"] = "Sight Radius / Berry Tree ID"; field_labels["sight_radius_tree_id"] = "Sight Radius / Berry Tree ID";
field_labels["destination_warp"] = "Destination Warp"; field_labels["destination_warp"] = "Destination Warp";
field_labels["destination_map_name"] = "Destination Map"; field_labels["destination_map_name"] = "Destination Map";
@ -613,7 +671,7 @@ void MainWindow::updateSelectedObjects() {
field_labels["item_unknown6"] = "Unknown 6"; field_labels["item_unknown6"] = "Unknown 6";
field_labels["weather"] = "Weather"; field_labels["weather"] = "Weather";
field_labels["flag"] = "Flag"; field_labels["flag"] = "Flag";
field_labels["secret_base_map"] = "Secret Base Map"; field_labels["secret_base_id"] = "Secret Base Id";
QStringList fields; QStringList fields;
@ -634,13 +692,12 @@ void MainWindow::updateSelectedObjects() {
//connect(item, SIGNAL(scriptChanged(QString)), frame->ui->comboBox_script, SLOT(setValue(QString))); //connect(item, SIGNAL(scriptChanged(QString)), frame->ui->comboBox_script, SLOT(setValue(QString)));
*/ */
fields << "behavior"; fields << "movement_type";
fields << "radius_x"; fields << "radius_x";
fields << "radius_y"; fields << "radius_y";
fields << "script_label"; fields << "script_label";
fields << "event_flag"; fields << "event_flag";
fields << "replacement"; fields << "is_trainer";
fields << "trainer_see_type";
fields << "sight_radius_tree_id"; fields << "sight_radius_tree_id";
} }
else if (event_type == EventType::Warp) { else if (event_type == EventType::Warp) {
@ -664,37 +721,96 @@ void MainWindow::updateSelectedObjects() {
fields << "flag"; fields << "flag";
} }
else if (event_type == EventType::SecretBase) { else if (event_type == EventType::SecretBase) {
fields << "secret_base_map"; fields << "secret_base_id";
} }
for (QString key : fields) { for (QString key : fields) {
QString value = item->event->get(key);
QWidget *widget = new QWidget(frame); QWidget *widget = new QWidget(frame);
QFormLayout *fl = new QFormLayout(widget); QFormLayout *fl = new QFormLayout(widget);
fl->setContentsMargins(9, 0, 9, 0); fl->setContentsMargins(9, 0, 9, 0);
QComboBox *combo = new QComboBox(widget);
// is_trainer is the only non-combobox item.
if (key == "is_trainer") {
QCheckBox *checkbox = new QCheckBox(widget);
checkbox->setEnabled(true);
checkbox->setChecked(value.toInt() != 0 && value != "FALSE");
checkbox->setToolTip("Whether or not this object is trainer.");
fl->addRow(new QLabel(field_labels[key], widget), checkbox);
widget->setLayout(fl);
frame->layout()->addWidget(widget);
connect(checkbox, &QCheckBox::stateChanged, [=](int state) {
QString isTrainer = state == Qt::Checked ? "TRUE" : "FALSE";
item->event->put("is_trainer", isTrainer);
});
continue;
}
NoScrollComboBox *combo = new NoScrollComboBox(widget);
combo->setEditable(true); combo->setEditable(true);
QString value = item->event->get(key);
if (key == "destination_map_name") { if (key == "destination_map_name") {
if (!editor->project->mapNames->contains(value)) { if (!editor->project->mapNames->contains(value)) {
combo->addItem(value); combo->addItem(value);
} }
combo->addItems(*editor->project->mapNames); combo->addItems(*editor->project->mapNames);
combo->setToolTip("The destination map name of the warp.");
} else if (key == "destination_warp") {
combo->setToolTip("The warp id on the destination map.");
} else if (key == "item") { } else if (key == "item") {
if (!editor->project->itemNames->contains(value)) { if (!editor->project->itemNames->contains(value)) {
combo->addItem(value); combo->addItem(value);
} }
combo->addItems(*editor->project->itemNames); combo->addItems(*editor->project->itemNames);
} else if (key == "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);
} }
combo->addItems(*editor->project->flagNames); combo->addItems(*editor->project->flagNames);
if (key == "flag")
combo->setToolTip("The flag which is set when the hidden item is picked up.");
else if (key == "event_flag")
combo->setToolTip("The flag which hides the object when set.");
} else if (key == "script_var") { } else if (key == "script_var") {
if (!editor->project->varNames->contains(value)) { if (!editor->project->varNames->contains(value)) {
combo->addItem(value); combo->addItem(value);
} }
combo->addItems(*editor->project->varNames); combo->addItems(*editor->project->varNames);
combo->setToolTip("The variable by which the script is triggered. The script is triggered when this variable's value matches 'Var Value'.");
} else if (key == "script_var_value") {
combo->setToolTip("The variable's value which triggers the script.");
} else if (key == "movement_type") {
if (!editor->project->movementTypes->contains(value)) {
combo->addItem(value);
}
combo->addItems(*editor->project->movementTypes);
combo->setToolTip("The object's natural movement behavior when the player is not interacting with it.");
} else if (key == "weather") {
if (!editor->project->coordEventWeatherNames->contains(value)) {
combo->addItem(value);
}
combo->addItems(*editor->project->coordEventWeatherNames);
combo->setToolTip("The weather that starts when the player steps on this spot.");
} else if (key == "secret_base_id") {
if (!editor->project->secretBaseIds->contains(value)) {
combo->addItem(value);
}
combo->addItems(*editor->project->secretBaseIds);
combo->setToolTip("The secret base id which is inside this secret base entrance. Secret base ids are meant to be unique to each and every secret base entrance.");
} else if (key == "player_facing_direction") {
if (!editor->project->bgEventFacingDirections->contains(value)) {
combo->addItem(value);
}
combo->addItems(*editor->project->bgEventFacingDirections);
combo->setToolTip("The direction which the player must be facing to be able to interact with this event.");
} else if (key == "radius_x") {
combo->setToolTip("The maximum number of metatiles this object is allowed to move left or right during its normal movement behavior actions.");
} else if (key == "radius_y") {
combo->setToolTip("The maximum number of metatiles this object is allowed to move up or down during its normal movement behavior actions.");
} else if (key == "script_label") {
combo->setToolTip("The script which is executed with this event.");
} else if (key == "sight_radius_tree_id") {
combo->setToolTip("The maximum sight range of a trainer, OR the unique id of the berry tree.");
} else { } else {
combo->addItem(value); combo->addItem(value);
} }

View file

@ -32,6 +32,7 @@ private slots:
void on_action_Open_Project_triggered(); void on_action_Open_Project_triggered();
void on_mapList_activated(const QModelIndex &index); void on_mapList_activated(const QModelIndex &index);
void on_action_Save_Project_triggered(); void on_action_Save_Project_triggered();
void openWarpMap(QString map_name, QString warp_num);
void undo(); void undo();
void redo(); void redo();
@ -98,6 +99,8 @@ private slots:
void on_checkBox_smartPaths_stateChanged(int selected); void on_checkBox_smartPaths_stateChanged(int selected);
void on_checkBox_Visibility_clicked(bool checked);
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
QStandardItemModel *mapListModel; QStandardItemModel *mapListModel;

View file

@ -69,6 +69,9 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<widget class="QWidget" name="tab_Map"> <widget class="QWidget" name="tab_Map">
<property name="toolTip">
<string/>
</property>
<attribute name="icon"> <attribute name="icon">
<iconset resource="resources/images.qrc"> <iconset resource="resources/images.qrc">
<normaloff>:/icons/map.ico</normaloff>:/icons/map.ico</iconset> <normaloff>:/icons/map.ico</normaloff>:/icons/map.ico</iconset>
@ -76,6 +79,9 @@
<attribute name="title"> <attribute name="title">
<string>Map</string> <string>Map</string>
</attribute> </attribute>
<attribute name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Edit the map layout.&lt;/p&gt;&lt;p&gt;Select metatiles or collision attributes from the right panel, and paint them onto the map.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_9"> <layout class="QGridLayout" name="gridLayout_9">
<property name="leftMargin"> <property name="leftMargin">
<number>0</number> <number>0</number>
@ -164,6 +170,9 @@
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pencil&lt;/p&gt;&lt;p&gt;Click and drag to draw on the map.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Paint</string> <string>Paint</string>
</property> </property>
@ -187,6 +196,9 @@
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pointer&lt;/p&gt;&lt;p&gt;Does nothing&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Select</string> <string>Select</string>
</property> </property>
@ -201,6 +213,9 @@
</item> </item>
<item> <item>
<widget class="QToolButton" name="toolButton_Fill"> <widget class="QToolButton" name="toolButton_Fill">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Flood Fill&lt;/p&gt;&lt;p&gt;Fills all similar tiles in a region with the selected metatiles or collision attributes&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Fill</string> <string>Fill</string>
</property> </property>
@ -215,6 +230,9 @@
</item> </item>
<item> <item>
<widget class="QToolButton" name="toolButton_Dropper"> <widget class="QToolButton" name="toolButton_Dropper">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Eye Dropper&lt;/p&gt;&lt;p&gt;Click to select a metatile or collision attribute.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Dropper</string> <string>Dropper</string>
</property> </property>
@ -229,6 +247,9 @@
</item> </item>
<item> <item>
<widget class="QCheckBox" name="checkBox_smartPaths"> <widget class="QCheckBox" name="checkBox_smartPaths">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Smart-path mode allows easier drawing of paths. If a 3x3 metatile block is selcted in the right panel, then smart path mode will automatically form a pathway using those selected blocks.&lt;/p&gt;&lt;p&gt;When smart-path mode is &lt;span style=&quot; font-weight:600;&quot;&gt;not&lt;/span&gt; enabled, clicking and dragging a selection will tile it in a grid.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">margin-left: 10px</string> <string notr="true">margin-left: 10px</string>
</property> </property>
@ -239,6 +260,9 @@
</item> </item>
<item> <item>
<widget class="QCheckBox" name="checkBox_ToggleGrid"> <widget class="QCheckBox" name="checkBox_ToggleGrid">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Toggles a grid over the map's metatile boundaries.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true"/> <string notr="true"/>
</property> </property>
@ -262,6 +286,9 @@
</item> </item>
<item> <item>
<widget class="QPushButton" name="pushButton"> <widget class="QPushButton" name="pushButton">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Change a map layout's width and height.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Change Dimensions</string> <string>Change Dimensions</string>
</property> </property>
@ -490,7 +517,13 @@
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QComboBox" name="comboBox_PrimaryTileset"> <widget class="NoScrollComboBox" name="comboBox_PrimaryTileset">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Primary Tileset&lt;/p&gt;&lt;p&gt;Defines the first 0x200 metatiles available for the map.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -504,7 +537,13 @@
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QComboBox" name="comboBox_SecondaryTileset"> <widget class="NoScrollComboBox" name="comboBox_SecondaryTileset">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Secondary Tileset&lt;/p&gt;&lt;p&gt;Defines the second 0x200 metatiles available for the map.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -574,6 +613,9 @@
<height>48</height> <height>48</height>
</size> </size>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The border is a 2x2 metatile which is repeated outside of the map layout's boundary. Draw on this border area to modify it.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::StyledPanel</enum> <enum>QFrame::StyledPanel</enum>
</property> </property>
@ -846,7 +888,10 @@
<bool>true</bool> <bool>true</bool>
</property> </property>
<attribute name="title"> <attribute name="title">
<string>Objects</string> <string>Events</string>
</attribute>
<attribute name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Edit the map's events.&lt;/p&gt;&lt;p&gt;View and modify objects, warps, signs, etc.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_10"> <layout class="QGridLayout" name="gridLayout_10">
<property name="leftMargin"> <property name="leftMargin">
@ -1107,6 +1152,9 @@
<height>32</height> <height>32</height>
</size> </size>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Add a new event to the map.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>New Object</string> <string>New Object</string>
</property> </property>
@ -1133,6 +1181,9 @@
<height>32</height> <height>32</height>
</size> </size>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Delete the selected event from the map.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Delete</string> <string>Delete</string>
</property> </property>
@ -1172,7 +1223,7 @@
</widget> </widget>
<widget class="QWidget" name="tab_Attributes"> <widget class="QWidget" name="tab_Attributes">
<attribute name="title"> <attribute name="title">
<string>Attributes</string> <string>Header</string>
</attribute> </attribute>
<widget class="QFrame" name="frame_3"> <widget class="QFrame" name="frame_3">
<property name="enabled"> <property name="enabled">
@ -1182,211 +1233,146 @@
<rect> <rect>
<x>10</x> <x>10</x>
<y>10</y> <y>10</y>
<width>301</width> <width>381</width>
<height>251</height> <height>311</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::StyledPanel</enum> <enum>QFrame::StyledPanel</enum>
</property> </property>
<property name="frameShadow"> <property name="frameShadow">
<enum>QFrame::Raised</enum> <enum>QFrame::Raised</enum>
</property> </property>
<widget class="QLabel" name="label_3"> <layout class="QFormLayout" name="formLayout_2">
<property name="geometry"> <property name="verticalSpacing">
<rect> <number>12</number>
<x>20</x>
<y>30</y>
<width>47</width>
<height>21</height>
</rect>
</property> </property>
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>Song</string> <string>Song</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_4"> </item>
<property name="geometry"> <item row="0" column="1">
<rect> <widget class="QComboBox" name="comboBox_Song">
<x>20</x> <property name="toolTip">
<y>60</y> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The default background music for this map.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<width>47</width>
<height>21</height>
</rect>
</property> </property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>Location</string> <string>Location</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_5"> </item>
<property name="geometry"> <item row="1" column="1">
<rect> <widget class="QComboBox" name="comboBox_Location">
<x>20</x> <property name="toolTip">
<y>90</y> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The section of the region map which the map is grouped under. This also determines the name of the map that is display when the player enters it.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<width>47</width>
<height>21</height>
</rect>
</property> </property>
<property name="text"> <property name="editable">
<string>Visibility</string> <bool>true</bool>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_6"> </item>
<property name="geometry"> <item row="2" column="0">
<rect> <widget class="QLabel" name="label_5">
<x>20</x> <property name="text">
<y>120</y> <string>Requires Flash</string>
<width>47</width>
<height>21</height>
</rect>
</property> </property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_6">
<property name="text"> <property name="text">
<string>Weather</string> <string>Weather</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_7"> </item>
<property name="geometry"> <item row="3" column="1">
<rect> <widget class="QComboBox" name="comboBox_Weather">
<x>20</x> <property name="toolTip">
<y>150</y> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The default weather for this map.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<width>47</width>
<height>21</height>
</rect>
</property> </property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_7">
<property name="text"> <property name="text">
<string>Type</string> <string>Type</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_8"> </item>
<property name="geometry"> <item row="4" column="1">
<rect>
<x>20</x>
<y>180</y>
<width>101</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Show location name</string>
</property>
</widget>
<widget class="QLabel" name="label_9">
<property name="geometry">
<rect>
<x>20</x>
<y>210</y>
<width>81</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Battle scene</string>
</property>
</widget>
<widget class="QComboBox" name="comboBox_Location">
<property name="geometry">
<rect>
<x>80</x>
<y>60</y>
<width>211</width>
<height>22</height>
</rect>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
<widget class="QComboBox" name="comboBox_Visibility">
<property name="geometry">
<rect>
<x>80</x>
<y>90</y>
<width>211</width>
<height>22</height>
</rect>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
<widget class="QComboBox" name="comboBox_Song">
<property name="geometry">
<rect>
<x>80</x>
<y>30</y>
<width>211</width>
<height>22</height>
</rect>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
<widget class="QComboBox" name="comboBox_Weather">
<property name="geometry">
<rect>
<x>80</x>
<y>120</y>
<width>211</width>
<height>22</height>
</rect>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
<widget class="QComboBox" name="comboBox_Type"> <widget class="QComboBox" name="comboBox_Type">
<property name="geometry"> <property name="toolTip">
<rect> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The map type is a general attribute, which is used for many different things. For example. it determines whether biking or running is allowed.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<x>80</x>
<y>150</y>
<width>211</width>
<height>22</height>
</rect>
</property> </property>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
<widget class="QComboBox" name="comboBox_BattleScene"> </item>
<property name="geometry"> <item row="5" column="0">
<rect> <widget class="QLabel" name="label_8">
<x>90</x> <property name="text">
<y>210</y> <string>Show Location Name</string>
<width>201</width>
<height>22</height>
</rect>
</property>
<property name="editable">
<bool>true</bool>
</property> </property>
</widget> </widget>
</item>
<item row="5" column="1">
<widget class="QCheckBox" name="checkBox_ShowLocation"> <widget class="QCheckBox" name="checkBox_ShowLocation">
<property name="geometry"> <property name="toolTip">
<rect> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Whether or not to display the location name when the player enters the map.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<x>130</x>
<y>180</y>
<width>161</width>
<height>21</height>
</rect>
</property> </property>
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_10"> </item>
<property name="geometry"> <item row="6" column="0">
<rect> <widget class="QLabel" name="label_9">
<x>0</x>
<y>0</y>
<width>47</width>
<height>13</height>
</rect>
</property>
<property name="text"> <property name="text">
<string>Header</string> <string>Battle scene</string>
</property> </property>
</widget> </widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="comboBox_BattleScene">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines the type of battle scene graphics to use.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="checkBox_Visibility">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Whether or not the map is dark and requires Flash to illuminate.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</widget> </widget>
<widget class="QWidget" name="tab_Connections"> <widget class="QWidget" name="tab_Connections">
@ -1480,6 +1466,9 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Add a new connection.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
@ -1492,6 +1481,9 @@
</item> </item>
<item> <item>
<widget class="QPushButton" name="pushButton_RemoveConnection"> <widget class="QPushButton" name="pushButton_RemoveConnection">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Remove the currently-selected connection.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
@ -1540,6 +1532,9 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If enabled, connections will automatically be updated on the connected map.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Mirror</string> <string>Mirror</string>
</property> </property>
@ -1602,6 +1597,9 @@
</property> </property>
<item> <item>
<widget class="QComboBox" name="comboBox_ConnectionDirection"> <widget class="QComboBox" name="comboBox_ConnectionDirection">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The direction of the connection.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<item> <item>
<property name="text"> <property name="text">
<string>up</string> <string>up</string>
@ -1649,6 +1647,9 @@
</item> </item>
<item> <item>
<widget class="QComboBox" name="comboBox_ConnectedMap"> <widget class="QComboBox" name="comboBox_ConnectedMap">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The destination map name of the connection.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -1663,6 +1664,9 @@
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox_ConnectionOffset"> <widget class="QSpinBox" name="spinBox_ConnectionOffset">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The number of metatiles to offset the connection.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="minimum"> <property name="minimum">
<number>-999</number> <number>-999</number>
</property> </property>
@ -1840,6 +1844,9 @@
</item> </item>
<item> <item>
<widget class="QComboBox" name="comboBox_DiveMap"> <widget class="QComboBox" name="comboBox_DiveMap">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Destination map name when using &lt;span style=&quot; font-weight:600;&quot;&gt;Dive&lt;/span&gt;. If empty, no such connection will exist.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -1854,6 +1861,9 @@
</item> </item>
<item> <item>
<widget class="QComboBox" name="comboBox_EmergeMap"> <widget class="QComboBox" name="comboBox_EmergeMap">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Destination map name when emerging using &lt;span style=&quot; font-weight:600;&quot;&gt;Dive&lt;/span&gt;. If empty, no such connection will exist.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -1989,6 +1999,11 @@
<extends>QToolButton</extends> <extends>QToolButton</extends>
<header>neweventtoolbutton.h</header> <header>neweventtoolbutton.h</header>
</customwidget> </customwidget>
<customwidget>
<class>NoScrollComboBox</class>
<extends>QComboBox</extends>
<header>noscrollcombobox.h</header>
</customwidget>
</customwidgets> </customwidgets>
<resources> <resources>
<include location="resources/images.qrc"/> <include location="resources/images.qrc"/>

2
map.h
View file

@ -127,7 +127,7 @@ public:
QString song; QString song;
QString layout_id; QString layout_id;
QString location; QString location;
QString visibility; QString requiresFlash;
QString weather; QString weather;
QString type; QString type;
QString unknown; QString unknown;

15
noscrollcombobox.cpp Normal file
View file

@ -0,0 +1,15 @@
#include "noscrollcombobox.h"
NoScrollComboBox::NoScrollComboBox(QWidget *parent)
: QComboBox(parent)
{
// Don't let scrolling hijack focus.
setFocusPolicy(Qt::StrongFocus);
}
void NoScrollComboBox::wheelEvent(QWheelEvent *event)
{
// Only allow scrolling to modify contents when it explicitly has focus.
if (hasFocus())
QComboBox::wheelEvent(event);
}

17
noscrollcombobox.h Normal file
View file

@ -0,0 +1,17 @@
#ifndef NOSCROLLCOMBOBOX_H
#define NOSCROLLCOMBOBOX_H
#include <QComboBox>
class NoScrollComboBox : public QComboBox
{
Q_OBJECT
public:
explicit NoScrollComboBox(QWidget *parent = nullptr);
void wheelEvent(QWheelEvent *event);
private:
};
#endif // NOSCROLLCOMBOBOX_H

16
noscrollspinbox.cpp Normal file
View file

@ -0,0 +1,16 @@
#include "noscrollspinbox.h"
NoScrollSpinBox::NoScrollSpinBox(QWidget *parent)
: QSpinBox(parent)
{
// Don't let scrolling hijack focus.
setFocusPolicy(Qt::StrongFocus);
}
void NoScrollSpinBox::wheelEvent(QWheelEvent *event)
{
// Only allow scrolling to modify contents when it explicitly has focus.
if (hasFocus())
QSpinBox::wheelEvent(event);
}

17
noscrollspinbox.h Normal file
View file

@ -0,0 +1,17 @@
#ifndef NOSCROLLSPINBOX_H
#define NOSCROLLSPINBOX_H
#include <QSpinBox>
class NoScrollSpinBox : public QSpinBox
{
Q_OBJECT
public:
explicit NoScrollSpinBox(QWidget *parent = nullptr);
void wheelEvent(QWheelEvent *event);
private:
};
#endif // NOSCROLLSPINBOX_H

View file

@ -105,7 +105,13 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox_x"> <widget class="NoScrollSpinBox" name="spinBox_x">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The X coordinate of this object.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="minimum"> <property name="minimum">
<number>-32768</number> <number>-32768</number>
</property> </property>
@ -129,7 +135,13 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox_y"> <widget class="NoScrollSpinBox" name="spinBox_y">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The Y coordinate of this object.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="minimum"> <property name="minimum">
<number>-32768</number> <number>-32768</number>
</property> </property>
@ -153,7 +165,13 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox_z"> <widget class="NoScrollSpinBox" name="spinBox_z">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The elevation of this object.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="maximum"> <property name="maximum">
<number>15</number> <number>15</number>
</property> </property>
@ -210,7 +228,7 @@
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QComboBox" name="comboBox_sprite"> <widget class="NoScrollComboBox" name="comboBox_sprite">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -220,6 +238,12 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The sprite graphics to use for this object.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -239,6 +263,18 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<customwidgets>
<customwidget>
<class>NoScrollComboBox</class>
<extends>QComboBox</extends>
<header>noscrollcombobox.h</header>
</customwidget>
<customwidget>
<class>NoScrollSpinBox</class>
<extends>QSpinBox</extends>
<header>noscrollspinbox.h</header>
</customwidget>
</customwidgets>
<tabstops> <tabstops>
<tabstop>spinBox_x</tabstop> <tabstop>spinBox_x</tabstop>
<tabstop>spinBox_y</tabstop> <tabstop>spinBox_y</tabstop>

View file

@ -25,7 +25,9 @@ SOURCES += main.cpp\
objectpropertiesframe.cpp \ objectpropertiesframe.cpp \
graphicsview.cpp \ graphicsview.cpp \
parseutil.cpp \ parseutil.cpp \
neweventtoolbutton.cpp neweventtoolbutton.cpp \
noscrollcombobox.cpp \
noscrollspinbox.cpp
HEADERS += mainwindow.h \ HEADERS += mainwindow.h \
project.h \ project.h \
@ -39,7 +41,9 @@ HEADERS += mainwindow.h \
objectpropertiesframe.h \ objectpropertiesframe.h \
graphicsview.h \ graphicsview.h \
parseutil.h \ parseutil.h \
neweventtoolbutton.h neweventtoolbutton.h \
noscrollcombobox.h \
noscrollspinbox.h
FORMS += mainwindow.ui \ FORMS += mainwindow.ui \
objectpropertiesframe.ui objectpropertiesframe.ui

View file

@ -17,9 +17,17 @@ Project::Project()
groupNames = new QStringList; groupNames = new QStringList;
map_groups = new QMap<QString, int>; map_groups = new QMap<QString, int>;
mapNames = new QStringList; mapNames = new QStringList;
regionMapSections = new QStringList;
itemNames = new QStringList; itemNames = new QStringList;
flagNames = new QStringList; flagNames = new QStringList;
varNames = new QStringList; varNames = new QStringList;
movementTypes = new QStringList;
mapTypes = new QStringList;
mapBattleScenes = new QStringList;
weatherNames = new QStringList;
coordEventWeatherNames = new QStringList;
secretBaseIds = new QStringList;
bgEventFacingDirections = new QStringList;
map_cache = new QMap<QString, Map*>; map_cache = new QMap<QString, Map*>;
mapConstantsToMapNames = new QMap<QString, QString>; mapConstantsToMapNames = new QMap<QString, QString>;
mapNamesToMapConstants = new QMap<QString, QString>; mapNamesToMapConstants = new QMap<QString, QString>;
@ -164,7 +172,7 @@ void Project::readMapHeader(Map* map) {
map->song = header->value(4); map->song = header->value(4);
map->layout_id = header->value(5); map->layout_id = header->value(5);
map->location = header->value(6); map->location = header->value(6);
map->visibility = header->value(7); map->requiresFlash = header->value(7);
map->weather = header->value(8); map->weather = header->value(8);
map->type = header->value(9); map->type = header->value(9);
map->unknown = header->value(10); map->unknown = header->value(10);
@ -179,13 +187,13 @@ void Project::setNewMapHeader(Map* map, int mapIndex) {
map->connections_label = "0x0"; map->connections_label = "0x0";
map->song = "MUS_DAN02"; map->song = "MUS_DAN02";
map->layout_id = QString("%1").arg(mapIndex); map->layout_id = QString("%1").arg(mapIndex);
map->location = "0"; map->location = "MAPSEC_LITTLEROOT_TOWN";
map->visibility = "0"; map->requiresFlash = "FALSE";
map->weather = "2"; map->weather = "WEATHER_SUNNY";
map->type = "1"; map->type = "MAP_TYPE_TOWN";
map->unknown = "0"; map->unknown = "0";
map->show_location = "1"; map->show_location = "TRUE";
map->battle_scene = "0"; map->battle_scene = "MAP_BATTLE_SCENE_NORMAL";
} }
void Project::saveMapHeader(Map *map) { void Project::saveMapHeader(Map *map) {
@ -207,7 +215,7 @@ void Project::saveMapHeader(Map *map) {
text += QString("\t.2byte %1\n").arg(map->song); text += QString("\t.2byte %1\n").arg(map->song);
text += QString("\t.2byte %1\n").arg(map->layout_id); text += QString("\t.2byte %1\n").arg(map->layout_id);
text += QString("\t.byte %1\n").arg(map->location); text += QString("\t.byte %1\n").arg(map->location);
text += QString("\t.byte %1\n").arg(map->visibility); text += QString("\t.byte %1\n").arg(map->requiresFlash);
text += QString("\t.byte %1\n").arg(map->weather); text += QString("\t.byte %1\n").arg(map->weather);
text += QString("\t.byte %1\n").arg(map->type); text += QString("\t.byte %1\n").arg(map->type);
text += QString("\t.2byte %1\n").arg(map->unknown); text += QString("\t.2byte %1\n").arg(map->unknown);
@ -982,15 +990,6 @@ QList<QStringList>* Project::parseAsm(QString text) {
return parser->parseAsm(text); return parser->parseAsm(text);
} }
QStringList Project::getLocations() {
// TODO
QStringList names;
for (int i = 0; i < 88; i++) {
names.append(QString("%1").arg(i));
}
return names;
}
QStringList Project::getVisibilities() { QStringList Project::getVisibilities() {
// TODO // TODO
QStringList names; QStringList names;
@ -1041,31 +1040,10 @@ QMap<QString, QStringList> Project::getTilesets() {
return allTilesets; return allTilesets;
} }
QStringList Project::getWeathers() { void Project::readRegionMapSections() {
// TODO QString filepath = root + "/include/constants/region_map_sections.h";
QStringList names; QStringList prefixes = (QStringList() << "MAPSEC_");
for (int i = 0; i < 16; i++) { readCDefinesSorted(filepath, prefixes, regionMapSections);
names.append(QString("%1").arg(i));
}
return names;
}
QStringList Project::getMapTypes() {
// TODO
QStringList names;
for (int i = 0; i < 16; i++) {
names.append(QString("%1").arg(i));
}
return names;
}
QStringList Project::getBattleScenes() {
// TODO
QStringList names;
for (int i = 0; i < 16; i++) {
names.append(QString("%1").arg(i));
}
return names;
} }
void Project::readItemNames() { void Project::readItemNames() {
@ -1086,6 +1064,48 @@ void Project::readVarNames() {
readCDefinesSorted(filepath, prefixes, varNames); readCDefinesSorted(filepath, prefixes, varNames);
} }
void Project::readMovementTypes() {
QString filepath = root + "/include/constants/event_object_movement_constants.h";
QStringList prefixes = (QStringList() << "MOVEMENT_TYPE_");
readCDefinesSorted(filepath, prefixes, movementTypes);
}
void Project::readMapTypes() {
QString filepath = root + "/include/constants/map_types.h";
QStringList prefixes = (QStringList() << "MAP_TYPE_");
readCDefinesSorted(filepath, prefixes, mapTypes);
}
void Project::readMapBattleScenes() {
QString filepath = root + "/include/constants/map_types.h";
QStringList prefixes = (QStringList() << "MAP_BATTLE_SCENE_");
readCDefinesSorted(filepath, prefixes, mapBattleScenes);
}
void Project::readWeatherNames() {
QString filepath = root + "/include/constants/weather.h";
QStringList prefixes = (QStringList() << "WEATHER_");
readCDefinesSorted(filepath, prefixes, weatherNames);
}
void Project::readCoordEventWeatherNames() {
QString filepath = root + "/include/constants/weather.h";
QStringList prefixes = (QStringList() << "COORD_EVENT_WEATHER_");
readCDefinesSorted(filepath, prefixes, coordEventWeatherNames);
}
void Project::readSecretBaseIds() {
QString filepath = root + "/include/constants/secret_bases.h";
QStringList prefixes = (QStringList() << "SECRET_BASE_");
readCDefinesSorted(filepath, prefixes, secretBaseIds);
}
void Project::readBgEventFacingDirections() {
QString filepath = root + "/include/constants/bg_event_constants.h";
QStringList prefixes = (QStringList() << "BG_EVENT_PLAYER_FACING_");
readCDefinesSorted(filepath, prefixes, bgEventFacingDirections);
}
void Project::readCDefinesSorted(QString filepath, QStringList prefixes, QStringList* definesToSet) { void Project::readCDefinesSorted(QString filepath, QStringList prefixes, QStringList* definesToSet) {
QString text = readTextFile(filepath); QString text = readTextFile(filepath);
if (!text.isNull()) { if (!text.isNull()) {
@ -1098,6 +1118,8 @@ void Project::readCDefinesSorted(QString filepath, QStringList prefixes, QString
definesInverse.insert(defines[defineName], defineName); definesInverse.insert(defines[defineName], defineName);
} }
*definesToSet = definesInverse.values(); *definesToSet = definesInverse.values();
} else {
qDebug() << "Failed to read C defines file: " << filepath;
} }
} }
@ -1319,10 +1341,10 @@ void Project::readMapEvents(Map *map) {
object->put("x", command.value(i++).toInt(nullptr, 0)); object->put("x", command.value(i++).toInt(nullptr, 0));
object->put("y", command.value(i++).toInt(nullptr, 0)); object->put("y", command.value(i++).toInt(nullptr, 0));
object->put("elevation", command.value(i++)); object->put("elevation", command.value(i++));
object->put("behavior", command.value(i++)); object->put("movement_type", command.value(i++));
object->put("radius_x", command.value(i++).toInt(nullptr, 0)); object->put("radius_x", command.value(i++).toInt(nullptr, 0));
object->put("radius_y", command.value(i++).toInt(nullptr, 0)); object->put("radius_y", command.value(i++).toInt(nullptr, 0));
object->put("trainer_see_type", command.value(i++)); object->put("is_trainer", command.value(i++));
object->put("sight_radius_tree_id", command.value(i++)); object->put("sight_radius_tree_id", command.value(i++));
object->put("script_label", command.value(i++)); object->put("script_label", command.value(i++));
object->put("event_flag", command.value(i++)); object->put("event_flag", command.value(i++));
@ -1363,12 +1385,6 @@ void Project::readMapEvents(Map *map) {
if (command.value(0) == "coord_event") { if (command.value(0) == "coord_event") {
Event *coord = new Event; Event *coord = new Event;
coord->put("map_name", map->name); coord->put("map_name", map->name);
bool old_macro = false;
if (command.length() >= 9) {
command.removeAt(7);
command.removeAt(4);
old_macro = true;
}
int i = 1; int i = 1;
coord->put("x", command.value(i++)); coord->put("x", command.value(i++));
coord->put("y", command.value(i++)); coord->put("y", command.value(i++));
@ -1376,9 +1392,6 @@ void Project::readMapEvents(Map *map) {
coord->put("script_var", command.value(i++)); coord->put("script_var", command.value(i++));
coord->put("script_var_value", command.value(i++)); coord->put("script_var_value", command.value(i++));
coord->put("script_label", command.value(i++)); coord->put("script_label", command.value(i++));
//coord_unknown3
//coord_unknown4
coord->put("event_group_type", "coord_event_group"); coord->put("event_group_type", "coord_event_group");
coord->put("event_type", EventType::CoordScript); coord->put("event_type", EventType::CoordScript);
map->events["coord_event_group"].append(coord); map->events["coord_event_group"].append(coord);
@ -1407,7 +1420,6 @@ void Project::readMapEvents(Map *map) {
bg->put("y", command.value(i++)); bg->put("y", command.value(i++));
bg->put("elevation", command.value(i++)); bg->put("elevation", command.value(i++));
bg->put("player_facing_direction", command.value(i++)); bg->put("player_facing_direction", command.value(i++));
i++;
bg->put("script_label", command.value(i++)); bg->put("script_label", command.value(i++));
//sign_unknown7 //sign_unknown7
bg->put("event_group_type", "bg_event_group"); bg->put("event_group_type", "bg_event_group");
@ -1432,7 +1444,7 @@ void Project::readMapEvents(Map *map) {
bg->put("x", command.value(i++)); bg->put("x", command.value(i++));
bg->put("y", command.value(i++)); bg->put("y", command.value(i++));
bg->put("elevation", command.value(i++)); bg->put("elevation", command.value(i++));
bg->put("secret_base_map", command.value(i++)); bg->put("secret_base_id", command.value(i++));
bg->put("event_group_type", "bg_event_group"); bg->put("event_group_type", "bg_event_group");
bg->put("event_type", EventType::SecretBase); bg->put("event_type", EventType::SecretBase);
map->events["bg_event_group"].append(bg); map->events["bg_event_group"].append(bg);

View file

@ -23,9 +23,17 @@ public:
QList<QString> mapLayoutsTableMaster; QList<QString> mapLayoutsTableMaster;
QMap<QString, MapLayout*> mapLayouts; QMap<QString, MapLayout*> mapLayouts;
QMap<QString, MapLayout*> mapLayoutsMaster; QMap<QString, MapLayout*> mapLayoutsMaster;
QStringList *regionMapSections = NULL;
QStringList *itemNames = NULL; QStringList *itemNames = NULL;
QStringList *flagNames = NULL; QStringList *flagNames = NULL;
QStringList *varNames = NULL; QStringList *varNames = NULL;
QStringList *movementTypes = NULL;
QStringList *mapTypes = NULL;
QStringList *mapBattleScenes = NULL;
QStringList *weatherNames = NULL;
QStringList *coordEventWeatherNames = NULL;
QStringList *secretBaseIds = NULL;
QStringList *bgEventFacingDirections = NULL;
QStringList mapsWithConnections; QStringList mapsWithConnections;
QMap<QString, Map*> *map_cache; QMap<QString, Map*> *map_cache;
@ -72,15 +80,19 @@ public:
QList<QStringList>* parseAsm(QString text); QList<QStringList>* parseAsm(QString text);
QStringList getSongNames(); QStringList getSongNames();
QStringList getLocations();
QStringList getVisibilities(); QStringList getVisibilities();
QMap<QString, QStringList> getTilesets(); QMap<QString, QStringList> getTilesets();
QStringList getWeathers(); void readRegionMapSections();
QStringList getMapTypes();
QStringList getBattleScenes();
void readItemNames(); void readItemNames();
void readFlagNames(); void readFlagNames();
void readVarNames(); void readVarNames();
void readMovementTypes();
void readMapTypes();
void readMapBattleScenes();
void readWeatherNames();
void readCoordEventWeatherNames();
void readSecretBaseIds();
void readBgEventFacingDirections();
void loadEventPixmaps(QList<Event*> objects); void loadEventPixmaps(QList<Event*> objects);
QMap<QString, int> getEventObjGfxConstants(); QMap<QString, int> getEventObjGfxConstants();