├── .clang-format ├── .gitattributes ├── .github ├── dependabot.yml └── workflows │ ├── build-appimage.yml │ ├── build-clang-format.yml │ ├── build-flatpak.yml │ ├── build-release.yml │ ├── build-test.yml │ ├── deploy-beta.yml │ ├── deploy-pages.yml │ └── deploy-release.yml ├── .gitignore ├── AUTHORS.txt ├── CMakeLists.txt ├── COPYING.txt ├── MMAPPER_VERSION ├── NEWS.md ├── README.md ├── appdata ├── CMakeLists.txt ├── org.mume.MMapper.appdata.xml └── screenshot1.png ├── cmake ├── FindQtKeychain.cmake └── GenerateQRC.cmake ├── docs ├── _config.yml ├── _layouts │ └── default.html ├── about.md ├── assets │ ├── css │ │ └── style.css │ └── js │ │ └── download-highlight.js ├── ideas.txt ├── index.md ├── linux.md ├── macos.md ├── mapping_advice.txt ├── mmapper_mm2xml.xsd ├── pathmachine.txt └── windows.md ├── external ├── drmingw │ └── CMakeLists.txt ├── glm │ └── CMakeLists.txt ├── images │ └── CMakeLists.txt ├── map │ └── CMakeLists.txt ├── openssl │ └── CMakeLists.txt ├── qtkeychain │ └── CMakeLists.txt └── zlib │ └── CMakeLists.txt ├── iwyu-mapping-qt.imp ├── iwyu-mapping-stl.imp ├── iwyu-mapping.imp ├── manifest.json ├── snapcraft.yaml ├── src ├── CMakeLists.txt ├── MacOSXBundleInfo.plist.in ├── adventure │ ├── adventuresession.cpp │ ├── adventuresession.h │ ├── adventuretracker.cpp │ ├── adventuretracker.h │ ├── adventurewidget.cpp │ ├── adventurewidget.h │ ├── lineparsers.cpp │ ├── lineparsers.h │ ├── xpstatuswidget.cpp │ └── xpstatuswidget.h ├── client │ ├── ClientTelnet.cpp │ ├── ClientTelnet.h │ ├── ClientWidget.cpp │ ├── ClientWidget.h │ ├── ClientWidget.ui │ ├── PaletteManager.cpp │ ├── PaletteManager.h │ ├── PasswordDialog.cpp │ ├── PasswordDialog.h │ ├── PreviewWidget.cpp │ ├── PreviewWidget.h │ ├── displaywidget.cpp │ ├── displaywidget.h │ ├── inputwidget.cpp │ ├── inputwidget.h │ ├── stackedinputwidget.cpp │ └── stackedinputwidget.h ├── clock │ ├── mumeclock.cpp │ ├── mumeclock.h │ ├── mumeclockwidget.cpp │ ├── mumeclockwidget.h │ ├── mumeclockwidget.ui │ ├── mumemoment.cpp │ └── mumemoment.h ├── configuration │ ├── NamedConfig.h │ ├── PasswordConfig.cpp │ ├── PasswordConfig.h │ ├── configuration.cpp │ └── configuration.h ├── display │ ├── CanvasMouseModeEnum.h │ ├── Characters.cpp │ ├── Characters.h │ ├── ConnectionLineBuilder.cpp │ ├── ConnectionLineBuilder.h │ ├── Connections.cpp │ ├── Connections.h │ ├── Filenames.cpp │ ├── Filenames.h │ ├── IMapBatchesFinisher.cpp │ ├── IMapBatchesFinisher.h │ ├── InfoMarkSelection.cpp │ ├── InfoMarkSelection.h │ ├── Infomarks.cpp │ ├── Infomarks.h │ ├── MapBatches.cpp │ ├── MapBatches.h │ ├── MapCanvasConfig.h │ ├── MapCanvasData.cpp │ ├── MapCanvasData.h │ ├── MapCanvasRoomDrawer.cpp │ ├── MapCanvasRoomDrawer.h │ ├── RoadIndex.cpp │ ├── RoadIndex.h │ ├── RoomSelections.cpp │ ├── Textures.cpp │ ├── Textures.h │ ├── connectionselection.cpp │ ├── connectionselection.h │ ├── mapcanvas.cpp │ ├── mapcanvas.h │ ├── mapcanvas_gl.cpp │ ├── mapwindow.cpp │ ├── mapwindow.h │ ├── prespammedpath.cpp │ └── prespammedpath.h ├── entitlements.plist ├── global │ ├── AnsiOstream.cpp │ ├── AnsiOstream.h │ ├── AnsiTextUtils.cpp │ ├── AnsiTextUtils.h │ ├── Array.h │ ├── AsyncTasks.cpp │ ├── AsyncTasks.h │ ├── Badge.cpp │ ├── Badge.h │ ├── CaseUtils.cpp │ ├── CaseUtils.h │ ├── ChangeMonitor.h │ ├── CharUtils.cpp │ ├── CharUtils.h │ ├── Charset-Utf16.cpp │ ├── Charset-Utf8.cpp │ ├── Charset.cpp │ ├── Charset.h │ ├── Color.cpp │ ├── Color.h │ ├── ConfigConsts-Computed.h │ ├── ConfigConsts.h │ ├── ConfigEnums.h │ ├── Connections.cpp │ ├── Connections.h │ ├── Consts.cpp │ ├── Consts.h │ ├── ConversionResult.h │ ├── Diff.cpp │ ├── Diff.h │ ├── EnumIndexedArray.h │ ├── FixedPoint.h │ ├── Flags.cpp │ ├── Flags.h │ ├── HideQDebug.cpp │ ├── HideQDebug.h │ ├── IndexedVector.h │ ├── IndexedVectorWithDefault.cpp │ ├── IndexedVectorWithDefault.h │ ├── JsonArray.h │ ├── JsonDoc.h │ ├── JsonObj.cpp │ ├── JsonObj.h │ ├── JsonValue.cpp │ ├── JsonValue.h │ ├── LineUtils.cpp │ ├── LineUtils.h │ ├── MakeQPointer.h │ ├── MmQtHandle.h │ ├── NamedColors.cpp │ ├── NamedColors.h │ ├── NullPointerException.cpp │ ├── NullPointerException.h │ ├── OrderedMap.cpp │ ├── OrderedMap.h │ ├── OrderedSet.cpp │ ├── OrderedSet.h │ ├── PrintUtils.cpp │ ├── PrintUtils.h │ ├── QuotedQString.h │ ├── RAII.cpp │ ├── RAII.h │ ├── RuleOf5.h │ ├── SendToUser.cpp │ ├── SendToUser.h │ ├── Signal2.h │ ├── SignalBlocker.cpp │ ├── SignalBlocker.h │ ├── StorageUtils.cpp │ ├── StorageUtils.h │ ├── StringView.cpp │ ├── StringView.h │ ├── TabUtils.cpp │ ├── TabUtils.h │ ├── TaggedInt.h │ ├── TaggedString.cpp │ ├── TaggedString.h │ ├── TextBuffer.cpp │ ├── TextBuffer.h │ ├── TextUtils.cpp │ ├── TextUtils.h │ ├── Timer.cpp │ ├── Timer.h │ ├── Version.cpp.in │ ├── Version.h │ ├── WeakHandle.cpp │ ├── WeakHandle.h │ ├── WinSock.cpp │ ├── WinSock.h │ ├── bits.h │ ├── cast_error.cpp │ ├── cast_error.h │ ├── emojis.cpp │ ├── emojis.h │ ├── entities-xforeach.txt │ ├── entities.cpp │ ├── entities.h │ ├── enums.h │ ├── float_cast.cpp │ ├── float_cast.h │ ├── hash.h │ ├── int_cast.cpp │ ├── int_cast.h │ ├── io.cpp │ ├── io.h │ ├── logging.cpp │ ├── logging.h │ ├── macros.h │ ├── mm_source_location.h │ ├── parserutils.cpp │ ├── parserutils.h │ ├── progresscounter.cpp │ ├── progresscounter.h │ ├── random.cpp │ ├── random.h │ ├── range.h │ ├── string_view_utils.cpp │ ├── string_view_utils.h │ ├── tests.cpp │ ├── tests.h │ ├── thread_utils.cpp │ ├── thread_utils.h │ ├── unquote.cpp │ ├── unquote.h │ ├── utils.cpp │ ├── utils.h │ ├── window_utils.cpp │ ├── window_utils.h │ ├── zpipe.cpp │ └── zpipe.h ├── group │ ├── CGroupChar.cpp │ ├── CGroupChar.h │ ├── ColorGenerator.cpp │ ├── ColorGenerator.h │ ├── GroupManagerApi.cpp │ ├── GroupManagerApi.h │ ├── enums.cpp │ ├── enums.h │ ├── groupwidget.cpp │ ├── groupwidget.h │ ├── mmapper2character.cpp │ ├── mmapper2character.h │ ├── mmapper2group.cpp │ └── mmapper2group.h ├── logger │ ├── autologger.cpp │ └── autologger.h ├── main.cpp ├── mainwindow │ ├── DescriptionWidget.cpp │ ├── DescriptionWidget.h │ ├── MapZoomSlider.cpp │ ├── MapZoomSlider.h │ ├── UpdateDialog.cpp │ ├── UpdateDialog.h │ ├── aboutdialog.cpp │ ├── aboutdialog.h │ ├── aboutdialog.ui │ ├── findroomsdlg.cpp │ ├── findroomsdlg.h │ ├── findroomsdlg.ui │ ├── infomarkseditdlg.cpp │ ├── infomarkseditdlg.h │ ├── infomarkseditdlg.ui │ ├── mainwindow-async.cpp │ ├── mainwindow-saveslots.cpp │ ├── mainwindow.cpp │ ├── mainwindow.h │ ├── metatypes.cpp │ ├── metatypes.h │ ├── roomeditattrdlg.cpp │ ├── roomeditattrdlg.h │ ├── roomeditattrdlg.ui │ ├── utils.cpp │ └── utils.h ├── map │ ├── AbstractChangeVisitor.cpp │ ├── AbstractChangeVisitor.h │ ├── Change.cpp │ ├── Change.h │ ├── ChangeList.cpp │ ├── ChangeList.h │ ├── ChangePrinter.cpp │ ├── ChangePrinter.h │ ├── ChangeTypes.cpp │ ├── ChangeTypes.h │ ├── Changes.cpp │ ├── Changes.h │ ├── CommandId.cpp │ ├── CommandId.h │ ├── Compare.h │ ├── ConnectedRoomFlags.h │ ├── Crtp.h │ ├── Diff-Test.cpp │ ├── Diff.cpp │ ├── Diff.h │ ├── DoorFlags.cpp │ ├── DoorFlags.h │ ├── ExitDirection.cpp │ ├── ExitDirection.h │ ├── ExitFieldVariant.cpp │ ├── ExitFieldVariant.h │ ├── ExitFields.cpp │ ├── ExitFields.h │ ├── ExitFlags.cpp │ ├── ExitFlags.h │ ├── ExitsFlags.h │ ├── InOutEnum.cpp │ ├── InOutEnum.h │ ├── InvalidMapOperation.cpp │ ├── InvalidMapOperation.h │ ├── Map.cpp │ ├── Map.h │ ├── MapConsistencyError.cpp │ ├── MapConsistencyError.h │ ├── ParseTree.cpp │ ├── ParseTree.h │ ├── PromptFlags.cpp │ ├── PromptFlags.h │ ├── RawExit.cpp │ ├── RawExit.h │ ├── RawRoom.cpp │ ├── RawRoom.h │ ├── RawRooms.cpp │ ├── RawRooms.h │ ├── Remapping.cpp │ ├── Remapping.h │ ├── RoomFieldVariant.h │ ├── RoomFields.cpp │ ├── RoomFields.h │ ├── RoomHandle.cpp │ ├── RoomHandle.h │ ├── RoomIdSet.cpp │ ├── RoomIdSet.h │ ├── RoomRecipient.cpp │ ├── RoomRecipient.h │ ├── RoomRevert.cpp │ ├── RoomRevert.h │ ├── ServerIdMap.cpp │ ├── ServerIdMap.h │ ├── SpatialDb.cpp │ ├── SpatialDb.h │ ├── TinyRoomIdSet.cpp │ ├── TinyRoomIdSet.h │ ├── World-BaseMap.cpp │ ├── World.cpp │ ├── World.h │ ├── WorldAreaMap.cpp │ ├── WorldAreaMap.h │ ├── WorldBuilder.cpp │ ├── WorldBuilder.h │ ├── coordinate.cpp │ ├── coordinate.h │ ├── enums.cpp │ ├── enums.h │ ├── exit.h │ ├── infomark.cpp │ ├── infomark.h │ ├── mmapper2room.cpp │ ├── mmapper2room.h │ ├── parseevent.cpp │ ├── parseevent.h │ ├── room.cpp │ ├── room.h │ ├── roomid.cpp │ ├── roomid.h │ ├── sanitizer.cpp │ ├── sanitizer.h │ ├── utils.cpp │ └── utils.h ├── mapdata │ ├── GenericFind.cpp │ ├── GenericFind.h │ ├── MarkerList.cpp │ ├── MarkerList.h │ ├── mapdata.cpp │ ├── mapdata.h │ ├── roomfilter.cpp │ ├── roomfilter.h │ ├── roomselection.cpp │ ├── roomselection.h │ ├── shortestpath.cpp │ └── shortestpath.h ├── mapfrontend │ ├── mapfrontend.cpp │ └── mapfrontend.h ├── mapstorage │ ├── MmpMapStorage.cpp │ ├── MmpMapStorage.h │ ├── PandoraMapStorage.cpp │ ├── PandoraMapStorage.h │ ├── RawMapData.cpp │ ├── RawMapData.h │ ├── XmlMapStorage.cpp │ ├── XmlMapStorage.h │ ├── abstractmapstorage.cpp │ ├── abstractmapstorage.h │ ├── filesaver.cpp │ ├── filesaver.h │ ├── jsonmapstorage.cpp │ ├── jsonmapstorage.h │ ├── mapstorage.cpp │ └── mapstorage.h ├── mpi │ ├── mpifilter.cpp │ ├── mpifilter.h │ ├── remoteedit.cpp │ ├── remoteedit.h │ ├── remoteeditprocess.cpp │ ├── remoteeditprocess.h │ ├── remoteeditsession.cpp │ ├── remoteeditsession.h │ ├── remoteeditwidget.cpp │ └── remoteeditwidget.h ├── observer │ ├── gameobserver.cpp │ └── gameobserver.h ├── opengl │ ├── Font.cpp │ ├── Font.h │ ├── FontFormatFlags.h │ ├── OpenGL.cpp │ ├── OpenGL.h │ ├── OpenGLTypes.cpp │ ├── OpenGLTypes.h │ └── legacy │ │ ├── AbstractShaderProgram.cpp │ │ ├── AbstractShaderProgram.h │ │ ├── Binders.cpp │ │ ├── Binders.h │ │ ├── FontMesh3d.cpp │ │ ├── FontMesh3d.h │ │ ├── Legacy.cpp │ │ ├── Legacy.h │ │ ├── Meshes.cpp │ │ ├── Meshes.h │ │ ├── ShaderUtils.cpp │ │ ├── ShaderUtils.h │ │ ├── Shaders.cpp │ │ ├── Shaders.h │ │ ├── SimpleMesh.cpp │ │ ├── SimpleMesh.h │ │ ├── VBO.cpp │ │ ├── VBO.h │ │ └── impl_gl20.cpp ├── org.mume.MMapper.desktop ├── parser │ ├── Abbrev.cpp │ ├── Abbrev.h │ ├── AbstractParser-Actions.cpp │ ├── AbstractParser-Commands.cpp │ ├── AbstractParser-Commands.h │ ├── AbstractParser-Config.cpp │ ├── AbstractParser-Group.cpp │ ├── AbstractParser-Mark.cpp │ ├── AbstractParser-Room.cpp │ ├── AbstractParser-Timer.cpp │ ├── AbstractParser-Utils.cpp │ ├── AbstractParser-Utils.h │ ├── Action.cpp │ ├── Action.h │ ├── CommandQueue.cpp │ ├── CommandQueue.h │ ├── DoorAction.cpp │ ├── DoorAction.h │ ├── LineFlags.h │ ├── SendToUserSourceEnum.h │ ├── abstractparser.cpp │ ├── abstractparser.h │ ├── mumexmlparser-gmcp.cpp │ ├── mumexmlparser.cpp │ └── mumexmlparser.h ├── pathmachine │ ├── approved.cpp │ ├── approved.h │ ├── crossover.cpp │ ├── crossover.h │ ├── experimenting.cpp │ ├── experimenting.h │ ├── mmapper2pathmachine.cpp │ ├── mmapper2pathmachine.h │ ├── onebyone.cpp │ ├── onebyone.h │ ├── path.cpp │ ├── path.h │ ├── pathmachine.cpp │ ├── pathmachine.h │ ├── pathparameters.h │ ├── roomsignalhandler.cpp │ ├── roomsignalhandler.h │ ├── syncing.cpp │ └── syncing.h ├── preferences │ ├── AdvancedGraphics.cpp │ ├── AdvancedGraphics.h │ ├── AnsiColorDialog.cpp │ ├── AnsiColorDialog.h │ ├── AnsiColorDialog.ui │ ├── ansicombo.cpp │ ├── ansicombo.h │ ├── autologpage.cpp │ ├── autologpage.h │ ├── autologpage.ui │ ├── clientpage.cpp │ ├── clientpage.h │ ├── clientpage.ui │ ├── configdialog.cpp │ ├── configdialog.h │ ├── configdialog.ui │ ├── generalpage.cpp │ ├── generalpage.h │ ├── generalpage.ui │ ├── graphicspage.cpp │ ├── graphicspage.h │ ├── graphicspage.ui │ ├── mumeprotocolpage.cpp │ ├── mumeprotocolpage.h │ ├── mumeprotocolpage.ui │ ├── parserpage.cpp │ ├── parserpage.h │ ├── parserpage.ui │ ├── pathmachinepage.cpp │ ├── pathmachinepage.h │ └── pathmachinepage.ui ├── proxy │ ├── AbstractTelnet.cpp │ ├── AbstractTelnet.h │ ├── GmcpMessage.cpp │ ├── GmcpMessage.h │ ├── GmcpModule.cpp │ ├── GmcpModule.h │ ├── GmcpUtils.cpp │ ├── GmcpUtils.h │ ├── MudTelnet.cpp │ ├── MudTelnet.h │ ├── ProxyParserApi.cpp │ ├── ProxyParserApi.h │ ├── TaggedBytes.h │ ├── TextCodec.cpp │ ├── TextCodec.h │ ├── UserTelnet.cpp │ ├── UserTelnet.h │ ├── connectionlistener.cpp │ ├── connectionlistener.h │ ├── mumesocket.cpp │ ├── mumesocket.h │ ├── proxy.cpp │ ├── proxy.h │ ├── telnetfilter.cpp │ └── telnetfilter.h ├── resources │ ├── LICENSE.GLM │ ├── LICENSE.GPL2 │ ├── LICENSE.LGPL │ ├── LICENSE.OPENSSL │ ├── LICENSE.QTKEYCHAIN │ ├── beta.qrc │ ├── emojis │ │ └── short-codes.json │ ├── fonts │ │ ├── Cantarell18.bmfc │ │ ├── Cantarell18.fnt │ │ ├── Cantarell18_0.png │ │ ├── Cantarell27.bmfc │ │ ├── Cantarell27.fnt │ │ ├── Cantarell27_0.png │ │ ├── Cantarell36.bmfc │ │ ├── Cantarell36.fnt │ │ ├── Cantarell36_0.png │ │ ├── DejaVuSansMono.ttf │ │ ├── LICENSE │ │ └── README │ ├── icons │ │ ├── affect-bashed.png │ │ ├── affect-blind.png │ │ ├── affect-hungry.png │ │ ├── affect-poison.png │ │ ├── affect-ride.png │ │ ├── affect-sanctuary.png │ │ ├── affect-slept.png │ │ ├── affect-snared.png │ │ ├── affect-thirsty.png │ │ ├── affect-waiting.png │ │ ├── affect-wound.png │ │ ├── autologgercfg.png │ │ ├── cancel.png │ │ ├── connectioncreate.png │ │ ├── connectiondelete.png │ │ ├── connectionedit.png │ │ ├── connectionselection.png │ │ ├── connectiontemplate.png │ │ ├── copy.png │ │ ├── cut.png │ │ ├── disconnecteast.png │ │ ├── disconnectnorth.png │ │ ├── disconnectsouth.png │ │ ├── disconnectwest.png │ │ ├── edit.png │ │ ├── edittemplate.png │ │ ├── exit.png │ │ ├── filenew.png │ │ ├── fileopen.png │ │ ├── filesave.png │ │ ├── follow.png │ │ ├── force.png │ │ ├── generalcfg.png │ │ ├── goto.png │ │ ├── graphicscfg.png │ │ ├── group-recolor.png │ │ ├── hand.png │ │ ├── hi128-app-mmapper-beta.png │ │ ├── hi128-app-mmapper-release.png │ │ ├── hi16-app-mmapper-beta.png │ │ ├── hi16-app-mmapper-release.png │ │ ├── hi256-app-mmapper-beta.png │ │ ├── hi256-app-mmapper-release.png │ │ ├── hi32-app-mmapper-beta.png │ │ ├── hi32-app-mmapper-release.png │ │ ├── hi48-app-mmapper-beta.png │ │ ├── hi48-app-mmapper-release.png │ │ ├── hi96-app-mmapper-beta.png │ │ ├── hi96-app-mmapper-release.png │ │ ├── infomarkcreate.png │ │ ├── infomarkdelete.png │ │ ├── infomarkedit.png │ │ ├── infomarkselection.png │ │ ├── layerdown.png │ │ ├── layerhome.png │ │ ├── layerup.png │ │ ├── m-beta.png │ │ ├── m-release.png │ │ ├── map.png │ │ ├── mapmove.png │ │ ├── merge.png │ │ ├── moveeast.png │ │ ├── movenorth.png │ │ ├── movesouth.png │ │ ├── movewest.png │ │ ├── mumeprotocolcfg.png │ │ ├── new.png │ │ ├── neweast.png │ │ ├── newnorth.png │ │ ├── newsouth.png │ │ ├── newwest.png │ │ ├── offline.png │ │ ├── onewayconnectioncreate.png │ │ ├── online.png │ │ ├── open.png │ │ ├── parsercfg.png │ │ ├── paste.png │ │ ├── pathmachinecfg.png │ │ ├── play.png │ │ ├── position-dead.png │ │ ├── position-fighting.png │ │ ├── position-incapacitated.png │ │ ├── position-resting.png │ │ ├── position-sitting.png │ │ ├── position-sleeping.png │ │ ├── position-standing.png │ │ ├── preferences.png │ │ ├── raypick.png │ │ ├── reload.png │ │ ├── roomconnecttoneighbours.png │ │ ├── roomcreate.png │ │ ├── roomdelete.png │ │ ├── roomedit.png │ │ ├── roomfind.png │ │ ├── roommergedown.png │ │ ├── roommergeup.png │ │ ├── roommovedown.png │ │ ├── roommoveup.png │ │ ├── roomselection.png │ │ ├── roomtemplate.png │ │ ├── save.png │ │ ├── terminal.png │ │ ├── viewmag+.png │ │ ├── viewmag-.png │ │ └── viewmagfit.png │ ├── macosx │ │ ├── m-beta.icns │ │ └── m-release.icns │ ├── mmapper2.qrc │ ├── pixmaps │ │ ├── char-arrows.png │ │ ├── char-room-sel.png │ │ ├── door-down.png │ │ ├── door-east.png │ │ ├── door-north.png │ │ ├── door-south.png │ │ ├── door-up.png │ │ ├── door-west.png │ │ ├── exit-climb-down.png │ │ ├── exit-climb-up.png │ │ ├── exit-down.png │ │ ├── exit-up.png │ │ ├── load-armour.png │ │ ├── load-attention.png │ │ ├── load-boat.png │ │ ├── load-clock.png │ │ ├── load-coach.png │ │ ├── load-darkword.png │ │ ├── load-deathtrap.png │ │ ├── load-equipment.png │ │ ├── load-ferry.png │ │ ├── load-food.png │ │ ├── load-herb.png │ │ ├── load-horse.png │ │ ├── load-key.png │ │ ├── load-mail.png │ │ ├── load-mule.png │ │ ├── load-pack.png │ │ ├── load-rohirrim.png │ │ ├── load-stable.png │ │ ├── load-trained.png │ │ ├── load-treasure.png │ │ ├── load-warg.png │ │ ├── load-watch.png │ │ ├── load-water.png │ │ ├── load-weapon.png │ │ ├── load-whiteword.png │ │ ├── mellon.png │ │ ├── mob-aggmob.png │ │ ├── mob-armourshop.png │ │ ├── mob-clericguild.png │ │ ├── mob-elitemob.png │ │ ├── mob-foodshop.png │ │ ├── mob-guild.png │ │ ├── mob-mageguild.png │ │ ├── mob-milkable.png │ │ ├── mob-passivemob.png │ │ ├── mob-petshop.png │ │ ├── mob-questmob.png │ │ ├── mob-rangerguild.png │ │ ├── mob-rattlesnake.png │ │ ├── mob-rent.png │ │ ├── mob-scoutguild.png │ │ ├── mob-shop.png │ │ ├── mob-smob.png │ │ ├── mob-warriorguild.png │ │ ├── mob-weaponshop.png │ │ ├── no-ride.png │ │ ├── road-all.png │ │ ├── road-e.png │ │ ├── road-es.png │ │ ├── road-esw.png │ │ ├── road-ew.png │ │ ├── road-n.png │ │ ├── road-ne.png │ │ ├── road-nes.png │ │ ├── road-new.png │ │ ├── road-none.png │ │ ├── road-ns.png │ │ ├── road-nsw.png │ │ ├── road-nw.png │ │ ├── road-s.png │ │ ├── road-sw.png │ │ ├── road-w.png │ │ ├── room-modified.png │ │ ├── room-needs-update.png │ │ ├── room-sel-distant.png │ │ ├── room-sel-move-bad.png │ │ ├── room-sel-move-good.png │ │ ├── room-sel.png │ │ ├── splash-beta.png │ │ ├── splash-release.png │ │ ├── stream-in-down.png │ │ ├── stream-in-east.png │ │ ├── stream-in-north.png │ │ ├── stream-in-south.png │ │ ├── stream-in-up.png │ │ ├── stream-in-west.png │ │ ├── stream-out-down.png │ │ ├── stream-out-east.png │ │ ├── stream-out-north.png │ │ ├── stream-out-south.png │ │ ├── stream-out-up.png │ │ ├── stream-out-west.png │ │ ├── terrain-brush.png │ │ ├── terrain-cavern.png │ │ ├── terrain-city.png │ │ ├── terrain-field.png │ │ ├── terrain-forest.png │ │ ├── terrain-hills.png │ │ ├── terrain-indoors.png │ │ ├── terrain-mountains.png │ │ ├── terrain-rapids.png │ │ ├── terrain-road.png │ │ ├── terrain-shallow.png │ │ ├── terrain-tunnel.png │ │ ├── terrain-undefined.png │ │ ├── terrain-underwater.png │ │ ├── terrain-water.png │ │ ├── trail-all.png │ │ ├── trail-e.png │ │ ├── trail-es.png │ │ ├── trail-esw.png │ │ ├── trail-ew.png │ │ ├── trail-n.png │ │ ├── trail-ne.png │ │ ├── trail-nes.png │ │ ├── trail-new.png │ │ ├── trail-none.png │ │ ├── trail-ns.png │ │ ├── trail-nsw.png │ │ ├── trail-nw.png │ │ ├── trail-s.png │ │ ├── trail-sw.png │ │ ├── trail-w.png │ │ ├── wall-east.png │ │ ├── wall-north.png │ │ ├── wall-south.png │ │ └── wall-west.png │ ├── release.qrc │ ├── shaders │ │ └── legacy │ │ │ ├── font │ │ │ ├── frag.glsl │ │ │ └── vert.glsl │ │ │ ├── plain │ │ │ ├── acolor │ │ │ │ ├── frag.glsl │ │ │ │ └── vert.glsl │ │ │ └── ucolor │ │ │ │ ├── frag.glsl │ │ │ │ └── vert.glsl │ │ │ ├── point │ │ │ ├── frag.glsl │ │ │ └── vert.glsl │ │ │ └── tex │ │ │ ├── acolor │ │ │ ├── frag.glsl │ │ │ └── vert.glsl │ │ │ └── ucolor │ │ │ ├── frag.glsl │ │ │ └── vert.glsl │ └── win32 │ │ ├── beta.rc │ │ ├── m-beta.ico │ │ ├── m-release.ico │ │ └── release.rc ├── roompanel │ ├── RoomManager.cpp │ ├── RoomManager.h │ ├── RoomMob.cpp │ ├── RoomMob.h │ ├── RoomMobs.cpp │ ├── RoomMobs.h │ ├── RoomWidget.cpp │ └── RoomWidget.h ├── syntax │ ├── Accept.cpp │ ├── Accept.h │ ├── IArgument.cpp │ ├── IArgument.h │ ├── IMatchErrorLogger.h │ ├── MatchResult.cpp │ ├── MatchResult.h │ ├── ParseResult.h │ ├── ParserInput.cpp │ ├── ParserInput.h │ ├── Sublist.cpp │ ├── Sublist.h │ ├── SyntaxArgs.cpp │ ├── SyntaxArgs.h │ ├── TokenMatcher.cpp │ ├── TokenMatcher.h │ ├── TreeParser.cpp │ ├── TreeParser.h │ ├── User.h │ ├── Value.cpp │ └── Value.h ├── timers │ ├── CTimers.cpp │ └── CTimers.h └── viewers │ ├── AnsiViewWindow.cpp │ ├── AnsiViewWindow.h │ ├── LaunchAsyncViewer.h │ ├── TopLevelWindows.cpp │ └── TopLevelWindows.h └── tests ├── CMakeLists.txt ├── TestCTimers.cpp ├── TestCTimers.h ├── TestGlobal.cpp ├── TestGlobal.h ├── TestGroup.cpp ├── TestMainWindow.cpp ├── TestMainWindow.h ├── TestMap.cpp ├── TestMap.h ├── TestProxy.cpp ├── TestProxy.h ├── roompanel ├── TestRoomManager.cpp ├── TestRoomManager.h ├── TestRoomMob.cpp ├── TestRoomMob.h ├── TestRoomMobs.cpp └── TestRoomMobs.h ├── testadventure.cpp ├── testadventure.h ├── testclock.cpp ├── testclock.h ├── testexpandoracommon.cpp ├── testexpandoracommon.h ├── testparser.cpp └── testparser.h /.gitattributes: -------------------------------------------------------------------------------- 1 | *.cpp diff=cpp 2 | *.[ch] diff=cpp 3 | *.glsl diff=cpp 4 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Please see the documentation for all configuration options: 2 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 3 | 4 | version: 2 5 | updates: 6 | 7 | # Maintain dependencies for GitHub Actions 8 | - package-ecosystem: "github-actions" 9 | directory: "/" 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/workflows/build-clang-format.yml: -------------------------------------------------------------------------------- 1 | name: clang-format-check 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | workflow_dispatch: 9 | 10 | jobs: 11 | formatting-check: 12 | name: Formatting Check 13 | runs-on: ubuntu-latest 14 | strategy: 15 | matrix: 16 | path: 17 | - check: 'src' 18 | - check: 'tests' 19 | steps: 20 | - uses: actions/checkout@v4 21 | - name: Run clang-format style check 22 | uses: jidicula/clang-format-action@v4.15.0 23 | with: 24 | clang-format-version: '14' 25 | check-path: ${{ matrix.path['check'] }} 26 | exclude-regex: ${{ matrix.path['exclude'] }} 27 | -------------------------------------------------------------------------------- /.github/workflows/deploy-pages.yml: -------------------------------------------------------------------------------- 1 | name: deploy-pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | paths: 8 | - 'docs/**' 9 | workflow_run: 10 | workflows: ["deploy-release"] 11 | types: 12 | - completed 13 | workflow_dispatch: 14 | 15 | permissions: 16 | contents: read 17 | pages: write 18 | id-token: write 19 | 20 | jobs: 21 | build: 22 | runs-on: ubuntu-latest 23 | if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }} 24 | 25 | steps: 26 | - name: Checkout 27 | uses: actions/checkout@v4 28 | - name: Setup Pages 29 | uses: actions/configure-pages@v5 30 | - name: Build 31 | uses: actions/jekyll-build-pages@v1 32 | with: 33 | source: ./docs 34 | destination: ./_site 35 | - name: Upload artifact 36 | uses: actions/upload-pages-artifact@v3 37 | with: 38 | path: ./_site 39 | 40 | deploy: 41 | runs-on: ubuntu-latest 42 | needs: build 43 | steps: 44 | - name: Deploy to GitHub Pages 45 | id: deployment 46 | uses: actions/deploy-pages@v4 47 | environment: 48 | name: github-pages 49 | url: ${{ steps.deployment.outputs.page_url }} 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | cmake-build-debug/ 2 | winbuild/ 3 | build/ 4 | out/ 5 | **CMakeFiles/ 6 | **.bak 7 | *.user 8 | *~ 9 | *.autosave 10 | *Thumbs.db 11 | Makefile 12 | .qmake.stash 13 | **.mm2 14 | **/.DS_Store 15 | .clang-tidy 16 | .idea 17 | .vs 18 | .vscode 19 | CMakeSettings.json 20 | cmake-build-debug/ 21 | 22 | 23 | # snapcraft 24 | parts/ 25 | prime/ 26 | snap/ 27 | stage/ 28 | *.snap 29 | *_source.tar.bz2 30 | -------------------------------------------------------------------------------- /AUTHORS.txt: -------------------------------------------------------------------------------- 1 | Dmitrijs Barbarins (Azazello) 2 | Kevin Wilson (Cuantar) 3 | 'Elval' (Elval) 4 | Kasparme (Gamor) 5 | Jan 'Kovis' Struhar (Kovis) 6 | Jean-Yves Perrier (Teoli) 7 | Kalev Lember (Kalev) 8 | 'Korir' (Korir) 9 | 'Krush' (Krush) 10 | Marek Krejza (Caligor) 11 | Massimiliano Ghilardi (Cosmos) 12 | Mattias 'Mew_' Viklund (Mirnir) 13 | 'Midoc' (Arfang) 14 | Mike Repass (Taryn) 15 | Nils Schimmelmann (Jahara) 16 | Thomas Equeter (Waba) 17 | Ulf Hermann (Alve) 18 | -------------------------------------------------------------------------------- /MMAPPER_VERSION: -------------------------------------------------------------------------------- 1 | 24.03.1 2 | -------------------------------------------------------------------------------- /appdata/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # Linux Install Settings 2 | if(UNIX AND NOT APPLE) 3 | install(FILES org.mume.MMapper.appdata.xml 4 | DESTINATION share/metainfo 5 | COMPONENT desktopintegration 6 | ) 7 | endif(UNIX AND NOT APPLE) 8 | -------------------------------------------------------------------------------- /appdata/screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/appdata/screenshot1.png -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | title: Play MUME with MMapper 2 | description: MMapper is a mud mapper especially written for the mud MUME 3 | logo: https://raw.githubusercontent.com/MUME/MMapper/master//src/resources/icons/hi256-app-mmapper-release.png 4 | screenshot: https://raw.githubusercontent.com/MUME/MMapper/master/appdata/screenshot1.png 5 | authors: https://raw.githubusercontent.com/MUME/MMapper/master/AUTHORS.txt -------------------------------------------------------------------------------- /external/glm/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | find_path(GLM_INCLUDE_DIR glm/glm.hpp PATHS /app/include) 2 | 3 | # Check if glm was found and set up include directories 4 | if(GLM_INCLUDE_DIR) 5 | message(STATUS "Found glm: ${GLM_INCLUDE_DIR}") 6 | set(GLM_INCLUDE_DIR ${GLM_INCLUDE_DIR} PARENT_SCOPE) 7 | set(GLM_FOUND true PARENT_SCOPE) 8 | else() 9 | message(STATUS "Could not find a local glm; downloading to local source tree") 10 | include(ExternalProject) 11 | ExternalProject_Add(glm 12 | URL "https://github.com/g-truc/glm/releases/download/0.9.9.7/glm-0.9.9.7.zip" 13 | URL_HASH SHA1=CCA9124F1E06FAB44B17D0C0BE651977E508F3AC 14 | 15 | SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/glm" 16 | UPDATE_COMMAND "" 17 | CONFIGURE_COMMAND "" 18 | BUILD_COMMAND "" 19 | INSTALL_COMMAND "" 20 | ALWAYS 0 21 | ) 22 | ExternalProject_Get_Property(glm SOURCE_DIR) 23 | set(GLM_INCLUDE_DIR ${SOURCE_DIR} PARENT_SCOPE) 24 | endif() 25 | -------------------------------------------------------------------------------- /iwyu-mapping-stl.imp: -------------------------------------------------------------------------------- 1 | [ 2 | {include: ["", private, "", public]}, 3 | {include: ["", private, "", public]}, 4 | {include: ["", private, "", public]}, 5 | {include: ["", private, "", public]}, 6 | {include: ["", private, "", public]}, 7 | {include: ["", private, "", public]}, 8 | 9 | # NOTE: this is the correct header for std::abs() in c++17 10 | {include: ["", private, "", public]}, 11 | 12 | {include: ["", public, "", public]}, 13 | {include: ["", public, "", public]}, 14 | {include: ["", public, "", public]}, 15 | ] 16 | -------------------------------------------------------------------------------- /iwyu-mapping.imp: -------------------------------------------------------------------------------- 1 | [ 2 | { ref: "iwyu-mapping-qt.imp" }, 3 | { ref: "iwyu-mapping-stl.imp" }, 4 | ] 5 | -------------------------------------------------------------------------------- /src/adventure/xpstatuswidget.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2023 The MMapper Authors 4 | // Author: Mike Repass (Taryn) 5 | 6 | #include "../global/ChangeMonitor.h" 7 | #include "../global/macros.h" 8 | #include "adventuretracker.h" 9 | 10 | #include 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | class NODISCARD_QOBJECT XPStatusWidget : public QPushButton 17 | { 18 | Q_OBJECT 19 | 20 | private: 21 | QStatusBar *m_statusBar = nullptr; 22 | AdventureTracker &m_tracker; 23 | std::shared_ptr m_session; 24 | Signal2Lifetime m_lifetime; 25 | 26 | public: 27 | explicit XPStatusWidget(AdventureTracker &at, QStatusBar *sb, QWidget *parent); 28 | 29 | protected: 30 | void enterEvent(QEvent *event) override; 31 | void leaveEvent(QEvent *event) override; 32 | 33 | private: 34 | void updateContent(); 35 | 36 | public slots: 37 | void slot_updatedSession(const std::shared_ptr &session); 38 | }; 39 | -------------------------------------------------------------------------------- /src/client/PasswordDialog.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | #include "../global/macros.h" 5 | 6 | #include 7 | #include 8 | 9 | struct InputWidgetOutputs; 10 | 11 | class NODISCARD_QOBJECT PasswordDialog final : public QDialog 12 | { 13 | Q_OBJECT 14 | 15 | public: 16 | explicit PasswordDialog(InputWidgetOutputs &outputs, QWidget *parent = nullptr); 17 | 18 | protected: 19 | NODISCARD bool focusNextPrevChild(bool next) override; 20 | 21 | private slots: 22 | void accept() override; 23 | void reject() override; 24 | 25 | private: 26 | QLineEdit *m_passwordLineEdit; 27 | InputWidgetOutputs &m_outputs; 28 | }; 29 | -------------------------------------------------------------------------------- /src/client/PreviewWidget.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "displaywidget.h" 6 | 7 | #include 8 | #include 9 | 10 | class NODISCARD_QOBJECT PreviewWidget final : public QTextEdit 11 | { 12 | Q_OBJECT 13 | 14 | public: 15 | explicit PreviewWidget(QWidget *parent = nullptr); 16 | ~PreviewWidget() final = default; 17 | 18 | void init(const QFont &mainDisplayFont); 19 | 20 | public: 21 | void displayText(const QString &fullText); 22 | 23 | private: 24 | AnsiTextHelper helper; 25 | }; 26 | -------------------------------------------------------------------------------- /src/configuration/PasswordConfig.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../global/RuleOf5.h" 6 | 7 | #include 8 | #include 9 | 10 | #ifndef MMAPPER_NO_QTKEYCHAIN 11 | #include 12 | #endif 13 | 14 | class PasswordConfig final : public QObject 15 | { 16 | Q_OBJECT 17 | 18 | private: 19 | #ifndef MMAPPER_NO_QTKEYCHAIN 20 | QKeychain::ReadPasswordJob m_readJob; 21 | QKeychain::WritePasswordJob m_writeJob; 22 | #endif 23 | 24 | public: 25 | explicit PasswordConfig(QObject *parent = nullptr); 26 | ~PasswordConfig() final = default; 27 | DELETE_CTORS_AND_ASSIGN_OPS(PasswordConfig); 28 | 29 | void setPassword(const QString &password); 30 | void getPassword(); 31 | 32 | signals: 33 | void sig_error(const QString &msg); 34 | void sig_incomingPassword(const QString &password); 35 | }; 36 | -------------------------------------------------------------------------------- /src/display/CanvasMouseModeEnum.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../global/macros.h" 6 | 7 | enum class NODISCARD CanvasMouseModeEnum { 8 | NONE, 9 | MOVE, 10 | RAYPICK_ROOMS, 11 | SELECT_ROOMS, 12 | SELECT_CONNECTIONS, 13 | CREATE_ROOMS, 14 | CREATE_CONNECTIONS, 15 | CREATE_ONEWAY_CONNECTIONS, 16 | SELECT_INFOMARKS, 17 | CREATE_INFOMARKS 18 | }; 19 | -------------------------------------------------------------------------------- /src/display/ConnectionLineBuilder.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "../map/ExitDirection.h" 7 | #include "../opengl/OpenGL.h" 8 | 9 | #include 10 | 11 | class NODISCARD ConnectionLineBuilder final 12 | { 13 | private: 14 | std::vector &m_points; 15 | 16 | public: 17 | explicit ConnectionLineBuilder(std::vector &points) 18 | : m_points{points} 19 | {} 20 | 21 | private: 22 | void addVertex(float x, float y, float z) { m_points.emplace_back(x, y, z); } 23 | 24 | private: 25 | void drawConnStartLineUp(bool neighbours, float srcZ); 26 | void drawConnStartLineDown(bool neighbours, float srcZ); 27 | 28 | private: 29 | void drawConnEndLineUp(bool neighbours, float dX, float dY, float dstZ); 30 | void drawConnEndLineDown(bool neighbours, float dX, float dY, float dstZ); 31 | 32 | public: 33 | void drawConnLineStart(ExitDirEnum dir, bool neighbours, float srcZ); 34 | void drawConnLineEnd2Way(ExitDirEnum endDir, bool neighbours, float dX, float dY, float dstZ); 35 | void drawConnLineEnd1Way(ExitDirEnum endDir, float dX, float dY, float dstZ); 36 | }; 37 | -------------------------------------------------------------------------------- /src/display/Filenames.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "../group/mmapper2character.h" 7 | #include "../map/mmapper2room.h" 8 | #include "RoadIndex.h" 9 | 10 | #include 11 | 12 | NODISCARD extern QString getResourceFilenameRaw(const QString &dir, const QString &name); 13 | NODISCARD extern QString getPixmapFilenameRaw(const QString &name); 14 | NODISCARD extern QString getPixmapFilename(RoomTerrainEnum); 15 | NODISCARD extern QString getPixmapFilename(RoomLoadFlagEnum); 16 | NODISCARD extern QString getPixmapFilename(RoomMobFlagEnum); 17 | NODISCARD extern QString getPixmapFilename(TaggedRoad); 18 | NODISCARD extern QString getPixmapFilename(TaggedTrail); 19 | NODISCARD extern QString getIconFilename(CharacterPositionEnum); 20 | NODISCARD extern QString getIconFilename(CharacterAffectEnum); 21 | -------------------------------------------------------------------------------- /src/display/IMapBatchesFinisher.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "IMapBatchesFinisher.h" 5 | 6 | IMapBatchesFinisher::~IMapBatchesFinisher() = default; 7 | -------------------------------------------------------------------------------- /src/display/IMapBatchesFinisher.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "../global/macros.h" 6 | 7 | #include 8 | #include 9 | 10 | class GLFont; 11 | class OpenGL; 12 | struct MapBatches; 13 | 14 | struct NODISCARD IMapBatchesFinisher 15 | { 16 | public: 17 | virtual ~IMapBatchesFinisher(); 18 | 19 | private: 20 | virtual void virt_finish(MapBatches &output, OpenGL &gl, GLFont &font) const = 0; 21 | 22 | public: 23 | void finish(MapBatches &output, OpenGL &gl, GLFont &font) const 24 | { 25 | virt_finish(output, gl, font); 26 | } 27 | }; 28 | 29 | struct NODISCARD SharedMapBatchFinisher final : public std::shared_ptr 30 | {}; 31 | using FutureSharedMapBatchFinisher = std::future; 32 | -------------------------------------------------------------------------------- /src/display/MapBatches.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "MapBatches.h" 5 | -------------------------------------------------------------------------------- /src/display/MapCanvasConfig.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../global/ChangeMonitor.h" 6 | 7 | namespace MapCanvasConfig { 8 | 9 | void registerChangeCallback(const ChangeMonitor::Lifetime &lifetime, 10 | ChangeMonitor::Function callback); 11 | 12 | NODISCARD extern std::string getCurrentOpenGLVersion(); 13 | 14 | NODISCARD extern bool isIn3dMode(); 15 | extern void set3dMode(bool); 16 | NODISCARD extern bool isAutoTilt(); 17 | extern void setAutoTilt(bool val); 18 | NODISCARD extern bool getShowPerfStats(); 19 | extern void setShowPerfStats(bool); 20 | 21 | } // namespace MapCanvasConfig 22 | -------------------------------------------------------------------------------- /src/display/RoadIndex.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Nils Schimmelmann (Jahara) 4 | 5 | #include "RoadIndex.h" 6 | 7 | #include "../map/ExitDirection.h" 8 | #include "../map/exit.h" 9 | #include "../map/room.h" 10 | 11 | #include 12 | 13 | RoadIndexMaskEnum getRoadIndex(const ExitDirEnum dir) 14 | { 15 | if (!isNESW(dir)) { 16 | throw std::invalid_argument("dir"); 17 | } 18 | 19 | return static_cast(1 << static_cast(dir)); 20 | } 21 | 22 | RoadIndexMaskEnum getRoadIndex(const RawRoom &room) 23 | { 24 | RoadIndexMaskEnum roadIndex = RoadIndexMaskEnum::NONE; 25 | 26 | for (const ExitDirEnum dir : ALL_EXITS_NESW) { 27 | if (room.getExit(dir).exitIsRoad()) { 28 | roadIndex |= getRoadIndex(dir); 29 | } 30 | } 31 | 32 | return roadIndex; 33 | } 34 | -------------------------------------------------------------------------------- /src/display/prespammedpath.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Ulf Hermann (Alve) 4 | // Author: Marek Krejza (Caligor) 5 | 6 | #include "prespammedpath.h" 7 | 8 | #include "../map/CommandId.h" 9 | #include "../parser/abstractparser.h" 10 | 11 | #include 12 | 13 | // #define TEST 14 | #ifdef TEST 15 | static constexpr const bool USE_TEST = true; 16 | #else 17 | static constexpr const bool USE_TEST = false; 18 | #endif 19 | 20 | PrespammedPath::PrespammedPath(QObject *const parent) 21 | : QObject(parent) 22 | { 23 | if (USE_TEST) { 24 | m_queue.append(CommandEnum::DOWN); 25 | m_queue.append(CommandEnum::EAST); 26 | m_queue.append(CommandEnum::SOUTH); 27 | m_queue.append(CommandEnum::SOUTH); 28 | m_queue.append(CommandEnum::WEST); 29 | m_queue.append(CommandEnum::NORTH); 30 | m_queue.append(CommandEnum::WEST); 31 | } 32 | } 33 | 34 | PrespammedPath::~PrespammedPath() = default; 35 | 36 | void PrespammedPath::slot_setPath(const CommandQueue queue) 37 | { 38 | m_queue = std::move(queue); 39 | emit sig_update(); 40 | } 41 | -------------------------------------------------------------------------------- /src/display/prespammedpath.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | 7 | #include "../parser/CommandQueue.h" 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | class MapCanvas; 14 | class MapData; 15 | 16 | class NODISCARD_QOBJECT PrespammedPath final : public QObject 17 | { 18 | Q_OBJECT 19 | 20 | private: 21 | CommandQueue m_queue; 22 | 23 | public: 24 | explicit PrespammedPath(QObject *parent); 25 | ~PrespammedPath() final; 26 | 27 | public: 28 | NODISCARD const CommandQueue &getQueue() const { return m_queue; } 29 | 30 | signals: 31 | void sig_update(); 32 | 33 | public slots: 34 | void slot_setPath(CommandQueue); 35 | }; 36 | -------------------------------------------------------------------------------- /src/entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.cs.disable-library-validation 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/global/AsyncTasks.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "progresscounter.h" 6 | 7 | #include 8 | #include 9 | 10 | namespace async_tasks { 11 | using BackgroundWorker = std::function; 12 | using OnSuccess = std::function; 13 | 14 | extern void init(); 15 | extern void cleanup(); 16 | extern void startAsyncTask(std::string name, BackgroundWorker backgroundWorker, OnSuccess onSuccess); 17 | } // namespace async_tasks 18 | -------------------------------------------------------------------------------- /src/global/Badge.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "macros.h" 6 | 7 | // refer to Badge.cpp for an example 8 | template 9 | class NODISCARD Badge final 10 | { 11 | // Only members of T can call the private Badge() constructor. 12 | friend T; 13 | // Caution: Don't change this to '= default'; this must be a non-default constructor, 14 | explicit Badge() {} 15 | }; 16 | 17 | namespace example { 18 | extern void badge_example(); 19 | } // namespace example 20 | -------------------------------------------------------------------------------- /src/global/ChangeMonitor.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "Signal2.h" 6 | 7 | #include 8 | 9 | class NODISCARD ChangeMonitor final 10 | { 11 | public: 12 | using Sig = ::Signal2<>; 13 | using Function = Sig::Function; 14 | using Lifetime = Signal2Lifetime; 15 | Sig m_sig; 16 | 17 | public: 18 | void registerChangeCallback(const Lifetime &lifetime, Function callback) 19 | { 20 | return m_sig.connect(lifetime, std::move(callback)); 21 | } 22 | 23 | public: 24 | void notifyAll() { m_sig.invoke(); } 25 | }; 26 | -------------------------------------------------------------------------------- /src/global/ConfigConsts-Computed.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "ConfigEnums.h" 6 | 7 | #include 8 | 9 | #include 10 | #include 11 | 12 | static inline constexpr const PlatformEnum CURRENT_PLATFORM = [] { 13 | #if defined(Q_OS_WIN) 14 | return PlatformEnum::Windows; 15 | #elif defined(Q_OS_MAC) 16 | return PlatformEnum::Mac; 17 | #elif defined(Q_OS_LINUX) 18 | return PlatformEnum::Linux; 19 | #else 20 | throw std::runtime_error("unsupported platform"); 21 | #endif 22 | }(); 23 | 24 | static inline constexpr const EnvironmentEnum CURRENT_ENVIRONMENT = [] { 25 | #if Q_PROCESSOR_WORDSIZE == 4 26 | return EnvironmentEnum::Env32Bit; 27 | #elif Q_PROCESSOR_WORDSIZE == 8 28 | return EnvironmentEnum::Env64Bit; 29 | #else 30 | throw std::runtime_error("unsupported environment"); 31 | #endif 32 | }(); 33 | -------------------------------------------------------------------------------- /src/global/ConfigEnums.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "macros.h" 6 | 7 | enum class NODISCARD AutoLoggerEnum { KeepForever, DeleteDays, DeleteSize }; 8 | enum class NODISCARD CharacterEncodingEnum { LATIN1, UTF8, ASCII }; 9 | enum class NODISCARD EnvironmentEnum { Unknown, Env32Bit, Env64Bit }; 10 | enum class NODISCARD MapModeEnum { PLAY, MAP, OFFLINE }; 11 | enum class NODISCARD PlatformEnum { Unknown, Windows, Mac, Linux }; 12 | -------------------------------------------------------------------------------- /src/global/Connections.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "Connections.h" 5 | 6 | namespace mmqt { 7 | 8 | SingleConnection::~SingleConnection() 9 | { 10 | disconnect(); 11 | } 12 | 13 | SingleConnection &SingleConnection::operator=(QMetaObject::Connection c) 14 | { 15 | disconnect(); 16 | m_connection = std::move(c); 17 | return *this; 18 | } 19 | void SingleConnection::disconnect() 20 | { 21 | if (m_connection.has_value()) { 22 | QObject::disconnect(m_connection.value()); 23 | } 24 | m_connection.reset(); 25 | } 26 | 27 | Connections::~Connections() 28 | { 29 | disconnectAll(); 30 | } 31 | 32 | Connections &Connections::operator+=(QMetaObject::Connection c) 33 | { 34 | m_connections.emplace_back(std::move(c)); 35 | return *this; 36 | } 37 | 38 | void Connections::disconnectAll() 39 | { 40 | for (const auto &c : m_connections) { 41 | QObject::disconnect(c); 42 | } 43 | m_connections.clear(); 44 | } 45 | 46 | } // namespace mmqt 47 | -------------------------------------------------------------------------------- /src/global/Connections.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "macros.h" 6 | 7 | #include 8 | #include 9 | 10 | #include 11 | #include 12 | 13 | namespace mmqt { 14 | class NODISCARD SingleConnection final 15 | { 16 | private: 17 | std::optional m_connection; 18 | 19 | public: 20 | SingleConnection() = default; 21 | ~SingleConnection(); 22 | SingleConnection(const SingleConnection &) = delete; 23 | SingleConnection &operator=(const SingleConnection &) = delete; 24 | 25 | public: 26 | SingleConnection &operator=(QMetaObject::Connection c); 27 | void disconnect(); 28 | }; 29 | 30 | class NODISCARD Connections final 31 | { 32 | private: 33 | std::vector m_connections; 34 | 35 | public: 36 | Connections() = default; 37 | ~Connections(); 38 | Connections(const Connections &) = delete; 39 | Connections &operator=(const Connections &) = delete; 40 | 41 | public: 42 | Connections &operator+=(QMetaObject::Connection c); 43 | void disconnectAll(); 44 | }; 45 | 46 | } // namespace mmqt 47 | -------------------------------------------------------------------------------- /src/global/Consts.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "Consts.h" 5 | 6 | static_assert(char_consts::C_BACKSPACE == 'H' - 'A' + 1); 7 | static_assert(char_consts::C_CTRL_U == 'U' - 'A' + 1); 8 | static_assert(char_consts::C_CTRL_W == 'W' - 'A' + 1); 9 | static_assert(char_consts::C_SPACE == 0x20); 10 | static_assert(char_consts::C_NBSP == static_cast(0xA0)); 11 | 12 | static_assert(string_consts::SV_SPACE.size() == 1); 13 | static_assert(string_consts::SV_TWO_SPACES.size() == 2); 14 | static_assert(string_consts::SV_TWO_SPACES.front() == char_consts::C_SPACE); 15 | static_assert(string_consts::SV_TWO_SPACES.back() == char_consts::C_SPACE); 16 | 17 | static_assert(string_consts::SV_CRLF.size() == 2); 18 | static_assert(string_consts::SV_CRLF.front() == char_consts::C_CARRIAGE_RETURN); 19 | static_assert(string_consts::SV_CRLF.back() == char_consts::C_NEWLINE); 20 | -------------------------------------------------------------------------------- /src/global/MakeQPointer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "macros.h" 6 | 7 | #include 8 | #include 9 | 10 | #include 11 | 12 | namespace mmqt { 13 | template 14 | NODISCARD auto makeQPointer(Args &&...args) 15 | -> std::enable_if_t, QPointer> 16 | { 17 | auto ptr = std::make_unique(std::forward(args)...); 18 | if (ptr->QObject::parent() == nullptr) { 19 | throw std::runtime_error("QObject constructed without a parent"); 20 | } 21 | // transfer ownership, now that we've confirmed that the parent object owns it 22 | return QPointer{ptr.release()}; 23 | } 24 | } // namespace mmqt 25 | -------------------------------------------------------------------------------- /src/global/NullPointerException.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Ulf Hermann (Alve) 4 | // Author: Marek Krejza (Caligor) 5 | 6 | #include "NullPointerException.h" 7 | 8 | NullPointerException::NullPointerException() 9 | : runtime_error("NullPointerException") 10 | {} 11 | NullPointerException::~NullPointerException() = default; 12 | -------------------------------------------------------------------------------- /src/global/NullPointerException.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | 7 | #include "RuleOf5.h" 8 | #include "macros.h" 9 | 10 | #include 11 | 12 | struct NODISCARD NullPointerException final : public std::runtime_error 13 | { 14 | NullPointerException(); 15 | ~NullPointerException() final; 16 | DEFAULT_CTORS_AND_ASSIGN_OPS(NullPointerException); 17 | }; 18 | -------------------------------------------------------------------------------- /src/global/OrderedMap.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "OrderedMap.h" 5 | -------------------------------------------------------------------------------- /src/global/OrderedSet.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "OrderedSet.h" 5 | -------------------------------------------------------------------------------- /src/global/QuotedQString.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "macros.h" 7 | 8 | #include 9 | #include 10 | 11 | class NODISCARD QuotedQString final 12 | { 13 | private: 14 | QString m_str; 15 | 16 | public: 17 | explicit QuotedQString(QString input) 18 | : m_str{std::move(input)} 19 | {} 20 | 21 | friend QDebug &operator<<(QDebug &debug, const QuotedQString &q) 22 | { 23 | debug.quote(); 24 | debug << q.m_str; 25 | debug.noquote(); 26 | return debug; 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /src/global/RAII.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Nils Schimmelmann (Jahara) 4 | 5 | #include "RAII.h" 6 | 7 | #include 8 | 9 | #include 10 | 11 | RAIICallback::RAIICallback(RAIICallback &&rhs) noexcept 12 | : m_was_moved{std::exchange(rhs.m_was_moved, true)} 13 | { 14 | static_assert(std::is_nothrow_swappable_v); 15 | std::swap(m_callback, rhs.m_callback); 16 | } 17 | 18 | RAIICallback::RAIICallback(RAIICallback::Callback &&callback) noexcept 19 | : m_callback{std::move(callback)} 20 | { 21 | static_assert(std::is_nothrow_move_constructible_v); 22 | } 23 | 24 | RAIICallback::~RAIICallback() 25 | { 26 | if (!m_was_moved) { 27 | try { 28 | m_callback(); 29 | } catch (...) { 30 | qWarning() << "Exception in callback"; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/global/RAII.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "RuleOf5.h" 7 | #include "utils.h" 8 | 9 | #include 10 | #include 11 | 12 | class NODISCARD RAIICallback final 13 | { 14 | private: 15 | using Callback = std::function; 16 | Callback m_callback; 17 | bool m_was_moved = false; 18 | 19 | public: 20 | /* move ctor */ 21 | RAIICallback(RAIICallback &&rhs) noexcept; 22 | DELETE_COPY_CTOR(RAIICallback); 23 | DELETE_ASSIGN_OPS(RAIICallback); 24 | 25 | public: 26 | explicit RAIICallback(Callback &&callback) noexcept; 27 | ~RAIICallback(); 28 | }; 29 | -------------------------------------------------------------------------------- /src/global/SendToUser.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "SendToUser.h" 5 | 6 | #include "Signal2.h" 7 | #include "thread_utils.h" 8 | 9 | #include 10 | 11 | namespace global { 12 | 13 | static auto &getSendToUser() 14 | { 15 | static Signal2 sig2_sendToUser; 16 | return sig2_sendToUser; 17 | } 18 | 19 | void registerSendToUser(Signal2Lifetime &lifetime, Signal2::Function callback) 20 | { 21 | ABORT_IF_NOT_ON_MAIN_THREAD(); 22 | auto &sig2 = getSendToUser(); 23 | sig2.connect(lifetime, std::move(callback)); 24 | } 25 | 26 | void sendToUser(const QString &str) 27 | { 28 | ABORT_IF_NOT_ON_MAIN_THREAD(); 29 | auto &fn = getSendToUser(); 30 | fn.invoke(str); 31 | } 32 | } // namespace global 33 | -------------------------------------------------------------------------------- /src/global/SendToUser.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "Signal2.h" 6 | 7 | #include 8 | 9 | namespace global { 10 | void registerSendToUser(Signal2Lifetime &, Signal2::Function callback); 11 | void sendToUser(const QString &str); 12 | } // namespace global 13 | -------------------------------------------------------------------------------- /src/global/SignalBlocker.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "SignalBlocker.h" 5 | 6 | #include "utils.h" 7 | 8 | #include 9 | 10 | #include 11 | 12 | SignalBlocker::SignalBlocker(QObject &in) 13 | : obj{in} 14 | , wasBlocked{obj.signalsBlocked()} 15 | { 16 | if (!wasBlocked) { 17 | obj.blockSignals(true); 18 | } 19 | } 20 | 21 | SignalBlocker::~SignalBlocker() 22 | { 23 | if (!wasBlocked) { 24 | obj.blockSignals(false); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/global/SignalBlocker.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "RuleOf5.h" 6 | #include "utils.h" 7 | 8 | #include 9 | #include 10 | 11 | class QWidget; 12 | 13 | // Less error-prone than QSignalBlocker, because it forbids discarding, copying, and moving. 14 | // NOTE: This is not related to Signal, which is a simpler replacement for QT signals. 15 | class NODISCARD SignalBlocker final 16 | { 17 | private: 18 | QObject &obj; 19 | const bool wasBlocked; 20 | 21 | public: 22 | explicit SignalBlocker(QObject &in); 23 | ~SignalBlocker(); 24 | DELETE_CTORS_AND_ASSIGN_OPS(SignalBlocker); 25 | }; 26 | -------------------------------------------------------------------------------- /src/global/TabUtils.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "TabUtils.h" 5 | 6 | #include "LineUtils.h" 7 | 8 | static_assert(next_tab_stop(0) == 8); 9 | static_assert(next_tab_stop(1) == 8); 10 | static_assert(next_tab_stop(7) == 8); 11 | static_assert(next_tab_stop(8) == 16); 12 | static_assert(next_tab_stop(9) == 16); 13 | static_assert(next_tab_stop(15) == 16); 14 | 15 | namespace mmqt { 16 | int measureExpandedTabsOneLine(const QStringView line, const int startingColumn) 17 | { 18 | int col = startingColumn; 19 | for (const auto &c : line) { 20 | assert(c != char_consts::C_NEWLINE); 21 | if (c == char_consts::C_TAB) { 22 | col += 8 - (col % 8); 23 | } else { 24 | col += 1; 25 | } 26 | } 27 | return col; 28 | } 29 | 30 | int measureExpandedTabsOneLine(const QString &line, const int startingColumn) 31 | { 32 | return measureExpandedTabsOneLine(QStringView{line}, startingColumn); 33 | } 34 | 35 | } // namespace mmqt 36 | -------------------------------------------------------------------------------- /src/global/TabUtils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "macros.h" 6 | 7 | #include 8 | 9 | namespace mmqt { 10 | NODISCARD extern int measureExpandedTabsOneLine(QStringView line, int starting_at); 11 | NODISCARD extern int measureExpandedTabsOneLine(const QString &line, int starting_at); 12 | } // namespace mmqt 13 | 14 | NODISCARD static inline constexpr int tab_advance(int col) 15 | { 16 | return 8 - (col % 8); 17 | } 18 | 19 | NODISCARD static inline constexpr int next_tab_stop(int col) 20 | { 21 | return col + tab_advance(col); 22 | } 23 | -------------------------------------------------------------------------------- /src/global/TaggedString.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "TaggedString.h" 5 | 6 | #include "tests.h" 7 | 8 | namespace test { 9 | 10 | namespace { // anonymous 11 | struct NODISCARD FakeTag final 12 | { 13 | NODISCARD static bool isValid(std::string_view) { return true; } 14 | }; 15 | struct NODISCARD FakeTag2 final 16 | { 17 | NODISCARD static bool isValid(std::string_view) { return true; } 18 | }; 19 | } // namespace 20 | 21 | void testTaggedString() 22 | { 23 | // constexpr const char latin1[]{"latin1\xFF"}; 24 | constexpr const char utf8[]{"utf8\xC3\xBF"}; 25 | { 26 | MAYBE_UNUSED auto ignored = TaggedStringUtf8{utf8}.getStdStringUtf8(); 27 | TEST_ASSERT(ignored == utf8); 28 | } 29 | { 30 | MAYBE_UNUSED auto ignored = TaggedBoxedStringUtf8{utf8}.toStdStringUtf8(); 31 | TEST_ASSERT(ignored == utf8); 32 | } 33 | { 34 | MAYBE_UNUSED auto ignored = TaggedBoxedStringUtf8{ 35 | TaggedStringUtf8{ 36 | utf8}}.toStdStringUtf8(); 37 | TEST_ASSERT(ignored == utf8); 38 | } 39 | } 40 | } // namespace test 41 | -------------------------------------------------------------------------------- /src/global/TextBuffer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "TextUtils.h" 6 | #include "macros.h" 7 | 8 | #include 9 | 10 | namespace mmqt { 11 | class NODISCARD TextBuffer final 12 | { 13 | private: 14 | QString m_text; 15 | 16 | public: 17 | void reserve(int len) { m_text.reserve(len); } 18 | NODISCARD const QString &getQString() const { return m_text; } 19 | NODISCARD auto length() const { return m_text.length(); } 20 | 21 | public: 22 | void append(char c) { m_text.append(c); } 23 | void append(QChar c) { m_text.append(c); } 24 | void append(const QString &line) { m_text.append(line); } 25 | void append(const QStringView line) { m_text.append(line); } 26 | void appendUf8(std::string_view sv) { m_text.append(mmqt::toQStringUtf8(sv)); } 27 | 28 | public: 29 | void appendJustified(QStringView line, int maxLen); 30 | void appendExpandedTabs(QStringView line, int start_at = 0); 31 | 32 | public: 33 | NODISCARD bool isEmpty() const; 34 | NODISCARD bool hasTrailingNewline() const; 35 | }; 36 | } // namespace mmqt 37 | -------------------------------------------------------------------------------- /src/global/Timer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "RuleOf5.h" 6 | #include "macros.h" 7 | #include "mm_source_location.h" 8 | 9 | #include 10 | #include 11 | 12 | #include 13 | 14 | struct NODISCARD Timer final 15 | { 16 | private: 17 | using clock = std::chrono::steady_clock; 18 | static inline thread_local size_t tl_depth = 0; 19 | clock::time_point m_beg = clock::now(); 20 | mm::source_location m_loc; 21 | std::string_view m_name = ""; 22 | size_t m_depth = tl_depth++; 23 | 24 | public: 25 | explicit Timer(mm::source_location loc, std::string_view name); 26 | DELETE_CTORS_AND_ASSIGN_OPS(Timer); 27 | ~Timer(); 28 | }; 29 | 30 | #define DECL_TIMER(var, name) auto var = (Timer{MM_SOURCE_LOCATION(), name}) 31 | -------------------------------------------------------------------------------- /src/global/Version.cpp.in: -------------------------------------------------------------------------------- 1 | // This generated file exists to set the MMapper version. 2 | 3 | #include "global/Version.h" 4 | 5 | const char *getMMapperVersion() 6 | { 7 | return "${MMAPPER_VERSION_STRING}"; 8 | } 9 | 10 | const char *getMMapperBranch() 11 | { 12 | return "${GIT_BRANCH}"; 13 | } 14 | 15 | bool isMMapperBeta() 16 | { 17 | return ${MMAPPER_BETA}; 18 | } 19 | -------------------------------------------------------------------------------- /src/global/Version.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "macros.h" 6 | 7 | NODISCARD const char *getMMapperVersion(); 8 | NODISCARD const char *getMMapperBranch(); 9 | NODISCARD bool isMMapperBeta(); 10 | -------------------------------------------------------------------------------- /src/global/WinSock.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "macros.h" 7 | 8 | class NODISCARD WinSock final 9 | { 10 | public: 11 | WinSock(); 12 | virtual ~WinSock(); 13 | 14 | NODISCARD static bool tuneKeepAlive(unsigned int socket, 15 | unsigned long maxIdleMillis, 16 | unsigned long intervalMillis); 17 | }; 18 | -------------------------------------------------------------------------------- /src/global/cast_error.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "cast_error.h" 5 | 6 | CastErrorException::~CastErrorException() = default; 7 | -------------------------------------------------------------------------------- /src/global/cast_error.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "macros.h" 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | enum class NODISCARD CastErrorEnum : uint8_t { 12 | Success, 13 | NotFinite, 14 | TooSmall, 15 | TooBig, 16 | RoundTripFailure, 17 | }; 18 | 19 | #ifdef __clang__ 20 | #pragma clang diagnostic push 21 | #pragma clang diagnostic ignored "-Wpadded" 22 | #endif 23 | struct NODISCARD CastErrorException : public std::runtime_error 24 | { 25 | CastErrorEnum err = CastErrorEnum::Success; 26 | 27 | explicit CastErrorException(const CastErrorEnum e) 28 | : std::runtime_error{"CastErrorException"} 29 | , err{e} 30 | { 31 | assert(e != CastErrorEnum::Success); 32 | } 33 | ~CastErrorException() override; 34 | }; 35 | #ifdef __clang__ 36 | #pragma clang diagnostic pop 37 | #endif 38 | -------------------------------------------------------------------------------- /src/global/emojis.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2025 The MMapper Authors 4 | 5 | #include "macros.h" 6 | 7 | class QString; 8 | 9 | namespace mmqt { 10 | NODISCARD bool containsNonLatin1Codepoints(const QString &s); 11 | // e.g. replace "\u1F44D" with ":+1:" 12 | NODISCARD QString decodeEmojiShortCodes(const QString &s); 13 | // e.g. replace ":+1:" with "\u1F44D" 14 | NODISCARD QString encodeEmojiShortCodes(const QString &s); 15 | } // namespace mmqt 16 | 17 | extern void tryLoadEmojis(const QString &filename); 18 | 19 | namespace test { 20 | extern void test_emojis(); 21 | } 22 | -------------------------------------------------------------------------------- /src/global/hash.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "macros.h" 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | template 12 | MAYBE_UNUSED NODISCARD static auto numeric_hash(const T val) noexcept 13 | -> std::enable_if_t, size_t> 14 | { 15 | static constexpr const size_t size = sizeof(val); 16 | char buf[size]; 17 | std::memcpy(buf, &val, size); 18 | return std::hash()({buf, size}); 19 | } 20 | -------------------------------------------------------------------------------- /src/global/mm_source_location.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "macros.h" 6 | 7 | #include 8 | 9 | #if __cplusplus >= 202000L \ 10 | && __has_builtin(__builtin_source_location) // && __cpp_lib_source_location >= 201907L 11 | #include 12 | namespace mm { 13 | using source_location = std::source_location; 14 | } 15 | #define MM_SOURCE_LOCATION() (std::source_location::current()) 16 | #else 17 | namespace mm { 18 | // TODO: replace this with C++20's std::source_location 19 | struct NODISCARD source_location final 20 | { 21 | const char *m_file_name = ""; 22 | const char *m_function_name = ""; 23 | std::uint_least32_t m_line = 0; 24 | 25 | NODISCARD const char *file_name() const { return this->m_file_name; } 26 | NODISCARD const char *function_name() const { return this->m_function_name; } 27 | NODISCARD std::uint_least32_t line() const { return this->m_line; } 28 | }; 29 | } // namespace mm 30 | #define MM_SOURCE_LOCATION() (mm::source_location{__FILE__, __FUNCTION__, __LINE__}) 31 | #endif 32 | -------------------------------------------------------------------------------- /src/global/parserutils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | // Author: Nils Schimmelmann (Jahara) 7 | 8 | #include "macros.h" 9 | 10 | #include 11 | #include 12 | 13 | class QString; 14 | 15 | namespace ParserUtils { 16 | QString &removeAnsiMarksInPlace(QString &str); 17 | 18 | NODISCARD bool isWhitespaceNormalized(std::string_view sv); 19 | NODISCARD std::string normalizeWhitespace(std::string str); 20 | 21 | } // namespace ParserUtils 22 | -------------------------------------------------------------------------------- /src/global/random.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Nils Schimmelmann (Jahara) 4 | 5 | #include "random.h" 6 | 7 | NODISCARD static auto expensiveSeed() 8 | { 9 | return std::random_device{}(); 10 | } 11 | 12 | RandomEngine::RandomEngine() 13 | : std::mt19937{expensiveSeed()} 14 | {} 15 | 16 | RandomEngine &RandomEngine::getSingleton() 17 | { 18 | static RandomEngine singleton; 19 | return singleton; 20 | } 21 | 22 | size_t getRandom(const size_t max) 23 | { 24 | std::uniform_int_distribution dist{0u, max}; // inclusive 25 | return dist(RandomEngine::getSingleton()); 26 | } 27 | -------------------------------------------------------------------------------- /src/global/random.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "RuleOf5.h" 7 | #include "macros.h" 8 | 9 | #include 10 | #include 11 | 12 | class NODISCARD RandomEngine final : public std::mt19937 13 | { 14 | private: 15 | RandomEngine(); 16 | 17 | public: 18 | ~RandomEngine() = default; 19 | DELETE_CTORS_AND_ASSIGN_OPS(RandomEngine); 20 | 21 | public: 22 | NODISCARD static RandomEngine &getSingleton(); 23 | }; 24 | 25 | // returns a uniformly-distributed random number in [0..max], inclusive 26 | NODISCARD extern size_t getRandom(size_t max); 27 | 28 | template 29 | NODISCARD decltype(auto) chooseRandomElement(T &container) 30 | { 31 | if (container.empty()) { 32 | throw std::invalid_argument("container"); 33 | } 34 | const auto dir = getRandom(container.size() - 1u); 35 | return container[dir]; 36 | } 37 | -------------------------------------------------------------------------------- /src/global/range.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "macros.h" 7 | 8 | #include // IWYU pragma: keep (std::rbegin) 9 | 10 | template 11 | struct NODISCARD range 12 | { 13 | It begin_; 14 | It end_; 15 | 16 | NODISCARD It begin() const { return begin_; } 17 | NODISCARD It end() const { return end_; } 18 | }; 19 | 20 | template 21 | NODISCARD range make_range(It begin, It end) 22 | { 23 | return range{begin, end}; 24 | } 25 | 26 | template 27 | NODISCARD auto make_forward_range(T &&container) 28 | { 29 | return make_range(std::begin(container), std::end(container)); 30 | } 31 | 32 | template 33 | NODISCARD auto make_reverse_range(T &&container) 34 | { 35 | return make_range(std::rbegin(container), std::rend(container)); 36 | } 37 | -------------------------------------------------------------------------------- /src/global/tests.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "tests.h" 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | #include 11 | 12 | NORETURN 13 | void test_assert_fail(const mm::source_location loc, const char *const reason) 14 | { 15 | QMessageLogger(loc.file_name(), static_cast(loc.line()), loc.function_name()) 16 | .fatal("test assertion failed: expression (%s) is false at %s:%d", 17 | (reason != nullptr) ? reason : "false", 18 | loc.file_name(), 19 | loc.line()); 20 | 21 | #ifdef __clang__ 22 | #pragma clang diagnostic push 23 | #pragma clang diagnostic ignored "-Wunreachable-code" 24 | #endif 25 | // in case fatal() somehow returns... 26 | // NOLINTNEXTLINE 27 | std::abort(); 28 | #ifdef __clang__ 29 | #pragma clang diagnostic pop 30 | #endif 31 | } 32 | -------------------------------------------------------------------------------- /src/global/tests.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "mm_source_location.h" 6 | 7 | NORETURN 8 | extern void test_assert_fail(mm::source_location loc, const char *reason); 9 | #define TEST_ASSERT(x) \ 10 | do { \ 11 | if (!(x)) { \ 12 | test_assert_fail(MM_SOURCE_LOCATION(), #x); \ 13 | } \ 14 | } while (false) 15 | -------------------------------------------------------------------------------- /src/global/thread_utils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "macros.h" 6 | #include "mm_source_location.h" 7 | 8 | namespace thread_utils { 9 | 10 | NODISCARD extern bool isOnMainThread(); 11 | 12 | #define ABORT_IF_NOT_ON_MAIN_THREAD() ::thread_utils::abortIfNotOnMainThread(MM_SOURCE_LOCATION()) 13 | extern void abortIfNotOnMainThread(mm::source_location loc); 14 | 15 | } // namespace thread_utils 16 | -------------------------------------------------------------------------------- /src/global/window_utils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | class QObject; 6 | class QWidget; 7 | class QString; 8 | 9 | namespace mmqt { 10 | // recursively disconnect all children 11 | extern void rdisconnect(QObject *obj); 12 | extern void setWindowTitle2(QWidget &widget, const QString &program, const QString &title); 13 | } // namespace mmqt 14 | -------------------------------------------------------------------------------- /src/group/ColorGenerator.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "../global/RuleOf5.h" 6 | #include "../global/macros.h" 7 | 8 | #include 9 | 10 | #include 11 | 12 | struct ColorGeneratorImpl; 13 | 14 | class ColorGenerator final 15 | { 16 | private: 17 | std::unique_ptr m_impl; 18 | 19 | public: 20 | explicit ColorGenerator(); 21 | ~ColorGenerator(); 22 | 23 | DEFAULT_MOVES_DELETE_COPIES(ColorGenerator); 24 | 25 | public: 26 | void init(QColor color); 27 | 28 | public: 29 | NODISCARD QColor getNextColor(); 30 | void releaseColor(QColor color); 31 | }; 32 | -------------------------------------------------------------------------------- /src/group/GroupManagerApi.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "GroupManagerApi.h" 5 | 6 | #include "mmapper2character.h" 7 | #include "mmapper2group.h" 8 | 9 | void GroupManagerApi::refresh() 10 | { 11 | return m_group.characterChanged(true); 12 | } 13 | 14 | SharedGroupChar GroupManagerApi::getMember(const GroupId id) 15 | { 16 | if (id == INVALID_GROUPID) { 17 | throw std::invalid_argument("invalid id"); 18 | } 19 | return m_group.getCharById(id); 20 | } 21 | 22 | SharedGroupChar GroupManagerApi::getMember(const CharacterName &name) 23 | { 24 | if (name.isEmpty()) { 25 | throw std::invalid_argument("empty name"); 26 | } 27 | return m_group.getCharByName(name); 28 | } 29 | 30 | const GroupVector &GroupManagerApi::getMembers() 31 | { 32 | return m_group.selectAll(); 33 | } 34 | -------------------------------------------------------------------------------- /src/group/GroupManagerApi.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "CGroupChar.h" 6 | #include "mmapper2character.h" 7 | 8 | class Mmapper2Group; 9 | 10 | class NODISCARD GroupManagerApi final 11 | { 12 | private: 13 | Mmapper2Group &m_group; 14 | 15 | public: 16 | explicit GroupManagerApi(Mmapper2Group &group) 17 | : m_group(group) 18 | {} 19 | ~GroupManagerApi() = default; 20 | DELETE_CTORS_AND_ASSIGN_OPS(GroupManagerApi); 21 | 22 | public: 23 | void refresh(); 24 | NODISCARD SharedGroupChar getMember(const GroupId id); 25 | NODISCARD SharedGroupChar getMember(const CharacterName &name); 26 | NODISCARD const GroupVector &getMembers(); 27 | }; 28 | -------------------------------------------------------------------------------- /src/group/enums.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "../global/Array.h" 7 | #include "mmapper2character.h" 8 | 9 | #include 10 | 11 | #define DECL_GETTER(E, N, name) const MMapper::Array &name(); 12 | #define DECL_GETTER_DEFINED(E, N, name) const std::vector &name(); 13 | 14 | namespace enums { 15 | DECL_GETTER_DEFINED(CharacterPositionEnum, NUM_CHARACTER_POSITIONS, getAllCharacterPositions) 16 | DECL_GETTER_DEFINED(CharacterTypeEnum, NUM_CHARACTER_TYPES, getAllCharacterTypes) 17 | DECL_GETTER(CharacterAffectEnum, NUM_CHARACTER_AFFECTS, getAllCharacterAffects) 18 | } // namespace enums 19 | 20 | #undef DECL_GETTER 21 | #undef DECL_GETTER_DEFINED 22 | 23 | #define ALL_CHARACTER_AFFECTS ::enums::getAllCharacterAffects() 24 | 25 | /* NOTE: These are actually used; but they're hidden in macros as DEFINED_CHARACTER_##X##_TYPES */ 26 | #define DEFINED_CHARACTER_POSITIONS ::enums::getDefinedCharacterPositions() 27 | #define DEFINED_CHARACTER_TYPES ::enums::getDefinedCharacterTypes() 28 | -------------------------------------------------------------------------------- /src/group/mmapper2character.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "mmapper2character.h" 5 | 6 | #include "../global/Charset.h" 7 | 8 | #include 9 | 10 | namespace tags { 11 | bool CharacterNameTag::isValid(const std::string_view sv) 12 | { 13 | return charset::isValidUtf8(sv); 14 | } 15 | bool CharacterLabelTag::isValid(const std::string_view sv) 16 | { 17 | return charset::isValidUtf8(sv); 18 | } 19 | bool CharacterRoomNameTag::isValid(const std::string_view sv) 20 | { 21 | return charset::isValidUtf8(sv); 22 | } 23 | } // namespace tags 24 | -------------------------------------------------------------------------------- /src/logger/autologger.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Mattias 'Mew_' Viklund (Mirnir) 5 | 6 | #include "../global/macros.h" 7 | 8 | #include 9 | #include 10 | 11 | #include 12 | #include 13 | 14 | class NODISCARD_QOBJECT AutoLogger final : public QObject 15 | { 16 | Q_OBJECT 17 | 18 | private: 19 | const std::string m_runId; 20 | std::fstream m_logFile; 21 | int m_curBytes = 0; 22 | int m_curFile = 0; 23 | bool m_shouldLog = true; 24 | 25 | public: 26 | explicit AutoLogger(QObject *parent); 27 | ~AutoLogger() final; 28 | 29 | private: 30 | NODISCARD bool writeLine(const QString &str); 31 | void deleteOldLogs(); 32 | static void deleteLogs(const QFileInfoList &files); 33 | NODISCARD bool showDeleteDialog(QString message); 34 | NODISCARD bool createFile(); 35 | 36 | public slots: 37 | void slot_writeToLog(const QString &str); 38 | void slot_shouldLog(bool echo); 39 | void slot_onConnected(); 40 | }; 41 | -------------------------------------------------------------------------------- /src/mainwindow/DescriptionWidget.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2025 The MMapper Authors 4 | 5 | #include "../map/RoomHandle.h" 6 | 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | class NODISCARD_QOBJECT DescriptionWidget final : public QWidget 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | explicit DescriptionWidget(QWidget *parent = nullptr); 22 | ~DescriptionWidget() final = default; 23 | 24 | public: 25 | void updateRoom(const RoomHandle &r); 26 | 27 | protected: 28 | void resizeEvent(QResizeEvent *event) override; 29 | 30 | protected: 31 | NODISCARD QSize minimumSizeHint() const override; 32 | NODISCARD QSize sizeHint() const override; 33 | 34 | private: 35 | void scanDirectories(); 36 | void updateBackground(); 37 | 38 | private: 39 | QLabel *m_label; 40 | QTextEdit *m_textEdit; 41 | 42 | private: 43 | QCache m_imageCache; 44 | std::map m_availableFiles; 45 | QFileSystemWatcher m_watcher; 46 | 47 | private: 48 | QString m_fileName; 49 | }; 50 | -------------------------------------------------------------------------------- /src/mainwindow/MapZoomSlider.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019-2024 The MMapper Authors 4 | 5 | #include "../display/MapCanvasData.h" 6 | #include "../global/RuleOf5.h" 7 | #include "../global/macros.h" 8 | 9 | #include 10 | 11 | class MapWindow; 12 | 13 | class NODISCARD_QOBJECT MapZoomSlider final : public QSlider 14 | { 15 | private: 16 | static constexpr float SCALE = 100.f; 17 | static constexpr float INV_SCALE = 1.f / SCALE; 18 | 19 | // can't get this to work as constexpr, so we'll just inline the static min/max. 20 | static int calcPos(const float zoom) noexcept; 21 | static inline const int min = calcPos(ScaleFactor::MIN_VALUE); 22 | static inline const int max = calcPos(ScaleFactor::MAX_VALUE); 23 | MapWindow &m_map; 24 | 25 | public: 26 | explicit MapZoomSlider(MapWindow &map, QWidget *const parent); 27 | ~MapZoomSlider() final; 28 | 29 | public: 30 | void requestChange(); 31 | 32 | void setFromActual(); 33 | 34 | private: 35 | static int clamp(int val) { return std::clamp(val, min, max); } 36 | }; 37 | -------------------------------------------------------------------------------- /src/mainwindow/aboutdialog.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Kalev Lember (Kalev) 5 | 6 | #include "../global/macros.h" 7 | #include "ui_aboutdialog.h" 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | class QObject; 14 | class QTextBrowser; 15 | class QWidget; 16 | 17 | class NODISCARD_QOBJECT AboutDialog : public QDialog, private Ui::AboutDialog 18 | { 19 | Q_OBJECT 20 | 21 | public: 22 | explicit AboutDialog(QWidget *parent); 23 | 24 | private: 25 | void setFixedFont(QTextBrowser *browser); 26 | }; 27 | -------------------------------------------------------------------------------- /src/mainwindow/metatypes.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | extern void registerMetatypes(); 6 | -------------------------------------------------------------------------------- /src/mainwindow/utils.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019-2024 The MMapper Authors 3 | 4 | #include "utils.h" 5 | 6 | #include "../display/mapcanvas.h" 7 | #include "../display/mapwindow.h" 8 | 9 | CanvasDisabler::CanvasDisabler(MapWindow &in_window) 10 | : window{in_window} 11 | { 12 | window.getCanvas()->setEnabled(false); 13 | } 14 | 15 | CanvasDisabler::~CanvasDisabler() 16 | { 17 | window.getCanvas()->setEnabled(true); 18 | window.hideSplashImage(); 19 | } 20 | 21 | MapFrontendBlocker::MapFrontendBlocker(MapFrontend &in_data) 22 | : data(in_data) 23 | { 24 | data.block(); 25 | } 26 | 27 | MapFrontendBlocker::~MapFrontendBlocker() 28 | { 29 | data.unblock(); 30 | } 31 | -------------------------------------------------------------------------------- /src/mainwindow/utils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019-2024 The MMapper Authors 4 | 5 | #include "../global/RuleOf5.h" 6 | #include "../global/macros.h" 7 | 8 | class QObject; 9 | class MapFrontend; 10 | class MapWindow; 11 | 12 | class NODISCARD CanvasDisabler final 13 | { 14 | private: 15 | MapWindow &window; 16 | 17 | public: 18 | explicit CanvasDisabler(MapWindow &in_window); 19 | ~CanvasDisabler(); 20 | DELETE_CTORS_AND_ASSIGN_OPS(CanvasDisabler); 21 | }; 22 | 23 | class NODISCARD MapFrontendBlocker final 24 | { 25 | public: 26 | explicit MapFrontendBlocker(MapFrontend &in_data); 27 | ~MapFrontendBlocker(); 28 | 29 | public: 30 | MapFrontendBlocker() = delete; 31 | DELETE_CTORS_AND_ASSIGN_OPS(MapFrontendBlocker); 32 | 33 | private: 34 | MapFrontend &data; 35 | }; 36 | -------------------------------------------------------------------------------- /src/map/AbstractChangeVisitor.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "AbstractChangeVisitor.h" 5 | 6 | AbstractChangeVisitor::~AbstractChangeVisitor() = default; 7 | -------------------------------------------------------------------------------- /src/map/AbstractChangeVisitor.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "../global/macros.h" 6 | #include "Change.h" 7 | #include "ChangeTypes.h" 8 | 9 | struct NODISCARD AbstractChangeVisitor 10 | { 11 | public: 12 | virtual ~AbstractChangeVisitor(); 13 | 14 | private: 15 | #define X_NOP() 16 | #define X_DECL_PURE_VIRT_ACCEPT(_Type) virtual void virt_accept(const _Type &) = 0; 17 | XFOREACH_CHANGE_TYPE(X_DECL_PURE_VIRT_ACCEPT, X_NOP) 18 | #undef X_DECL_PURE_VIRT_ACCEPT 19 | #undef X_NOP 20 | 21 | public: 22 | void accept(const Change &change) 23 | { 24 | change.acceptVisitor([this](const auto &x) { this->virt_accept(x); }); 25 | } 26 | }; 27 | -------------------------------------------------------------------------------- /src/map/Change.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "Change.h" 5 | -------------------------------------------------------------------------------- /src/map/ChangeList.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "ChangeList.h" 5 | -------------------------------------------------------------------------------- /src/map/ChangeList.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "../global/MmQtHandle.h" 6 | #include "../global/macros.h" 7 | #include "Change.h" 8 | #include "Map.h" 9 | 10 | #include 11 | 12 | class NODISCARD ChangeList final 13 | { 14 | private: 15 | std::vector m_changes; 16 | 17 | public: 18 | void add(const Change &change) { m_changes.emplace_back(change); } 19 | #define X_NOP() 20 | #define X_DEFINE_ADD(_Type) \ 21 | void add(const _Type &change) \ 22 | { \ 23 | add(Change{change}); \ 24 | } 25 | XFOREACH_CHANGE_TYPE(X_DEFINE_ADD, X_NOP) 26 | #undef X_DEFINE_ADD 27 | #undef X_NOP 28 | 29 | public: 30 | const std::vector &getChanges() const 31 | { 32 | return m_changes; 33 | } 34 | NODISCARD bool empty() const 35 | { 36 | return m_changes.empty(); 37 | } 38 | }; 39 | 40 | using SigMapChangeList = MmQtHandle; 41 | Q_DECLARE_METATYPE(SigMapChangeList) 42 | -------------------------------------------------------------------------------- /src/map/ChangeTypes.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "ChangeTypes.h" 5 | -------------------------------------------------------------------------------- /src/map/Changes.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "ChangeList.h" 6 | #include "ChangeTypes.h" 7 | 8 | void connectToNeighbors(ChangeList &changes, 9 | const RoomHandle &room, 10 | const ConnectToNeighborsArgs &args = {}); 11 | -------------------------------------------------------------------------------- /src/map/Compare.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "RawRoom.h" 6 | #include "room.h" 7 | 8 | NODISCARD extern ComparisonResultEnum compare(const RawRoom &, 9 | const ParseEvent &event, 10 | int tolerance); 11 | NODISCARD extern ComparisonResultEnum compareWeakProps(const RawRoom &, const ParseEvent &event); 12 | -------------------------------------------------------------------------------- /src/map/DoorFlags.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "DoorFlags.h" 5 | 6 | std::string_view to_string_view(const DoorFlagEnum flag) 7 | { 8 | #define X_CASE(UPPER_CASE, lower_case, CamelCase, friendly) \ 9 | do { \ 10 | case DoorFlagEnum::UPPER_CASE: \ 11 | return #UPPER_CASE; \ 12 | } while (false); 13 | switch (flag) { 14 | XFOREACH_DOOR_FLAG(X_CASE) 15 | } 16 | return "*BUG*"; 17 | #undef X_CASE 18 | } 19 | 20 | std::string_view getName(const DoorFlagEnum flag) 21 | { 22 | #define X_CASE(UPPER_CASE, lower_case, CamelCase, friendly) \ 23 | do { \ 24 | case DoorFlagEnum::UPPER_CASE: \ 25 | return friendly; \ 26 | } while (false); 27 | switch (flag) { 28 | XFOREACH_DOOR_FLAG(X_CASE) 29 | } 30 | return "*BUG*"; 31 | #undef X_CASE 32 | } 33 | -------------------------------------------------------------------------------- /src/map/ExitFieldVariant.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "ExitFieldVariant.h" 5 | 6 | #include "../global/Charset.h" 7 | #include "sanitizer.h" 8 | 9 | DoorName makeDoorName(std::string doorName) 10 | { 11 | return DoorName{sanitizer::sanitizeOneLine(std::move(doorName))}; 12 | } 13 | 14 | namespace mmqt { 15 | DoorName makeDoorName(const QString &doorName) 16 | { 17 | return ::makeDoorName(toStdStringUtf8(doorName)); 18 | } 19 | } // namespace mmqt 20 | 21 | bool tags::DoorNameTag::isValid(std::string_view sv) 22 | { 23 | return sanitizer::isSanitizedOneLine(sv); 24 | } 25 | -------------------------------------------------------------------------------- /src/map/ExitFields.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "ExitFields.h" 5 | -------------------------------------------------------------------------------- /src/map/ExitFields.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "../global/macros.h" 6 | #include "Crtp.h" 7 | 8 | struct NODISCARD ExitFields final : public ExitFieldsGetters, 9 | public ExitFieldsSetters 10 | { 11 | public: 12 | #define X_DECL_FIELD(_Type, _Prop, _OptInit) _Type _Prop _OptInit; 13 | XFOREACH_EXIT_PROPERTY(X_DECL_FIELD) 14 | #undef X_DECL_FIELD 15 | 16 | public: 17 | NODISCARD bool operator==(const ExitFields &rhs) const 18 | { 19 | #define X_CHECK(_Type, _Prop, _OptInit) \ 20 | if ((_Prop) != (rhs._Prop)) { \ 21 | return false; \ 22 | } 23 | XFOREACH_EXIT_PROPERTY(X_CHECK) 24 | #undef X_CHECK 25 | return true; 26 | } 27 | NODISCARD bool operator!=(const ExitFields &rhs) const 28 | { 29 | return !(rhs == *this); 30 | } 31 | 32 | private: 33 | friend ExitFieldsGetters; 34 | friend ExitFieldsSetters; 35 | NODISCARD ExitFields &getExitFields() 36 | { 37 | return *this; 38 | } 39 | NODISCARD const ExitFields &getExitFields() const 40 | { 41 | return *this; 42 | } 43 | }; 44 | -------------------------------------------------------------------------------- /src/map/ExitFlags.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "ExitFlags.h" 5 | 6 | std::string_view to_string_view(const ExitFlagEnum flag) 7 | { 8 | #define X_CASE(UPPER_CASE, lower_case, CamelCase, friendly) \ 9 | do { \ 10 | case ExitFlagEnum::UPPER_CASE: \ 11 | return #UPPER_CASE; \ 12 | } while (false); 13 | switch (flag) { 14 | XFOREACH_EXIT_FLAG(X_CASE) 15 | } 16 | return "*BUG*"; 17 | #undef X_CASE 18 | } 19 | 20 | std::string_view getName(const ExitFlagEnum flag) 21 | { 22 | #define X_CASE(UPPER_CASE, lower_case, CamelCase, friendly) \ 23 | do { \ 24 | case ExitFlagEnum::UPPER_CASE: \ 25 | return friendly; \ 26 | } while (false); 27 | switch (flag) { 28 | XFOREACH_EXIT_FLAG(X_CASE) 29 | } 30 | return "*BUG*"; 31 | #undef X_CASE 32 | } 33 | -------------------------------------------------------------------------------- /src/map/InOutEnum.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "InOutEnum.h" 5 | -------------------------------------------------------------------------------- /src/map/InOutEnum.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "../global/macros.h" 6 | #include "roomid.h" 7 | 8 | enum class NODISCARD InOutEnum { In, Out }; 9 | NODISCARD static inline constexpr InOutEnum opposite(const InOutEnum mode) 10 | { 11 | return (mode == InOutEnum::In) ? InOutEnum::Out : InOutEnum::In; 12 | } 13 | -------------------------------------------------------------------------------- /src/map/InvalidMapOperation.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "InvalidMapOperation.h" 5 | 6 | #include 7 | 8 | InvalidMapOperation::InvalidMapOperation(const std::string_view message) 9 | : std::runtime_error(std::string(message)) 10 | {} 11 | 12 | InvalidMapOperation::~InvalidMapOperation() = default; 13 | -------------------------------------------------------------------------------- /src/map/InvalidMapOperation.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "../global/macros.h" 6 | 7 | #include 8 | #include 9 | 10 | struct NODISCARD InvalidMapOperation : public std::runtime_error 11 | { 12 | explicit InvalidMapOperation(std::string_view message = "InvalidMapOperation"); 13 | ~InvalidMapOperation() override; 14 | }; 15 | -------------------------------------------------------------------------------- /src/map/MapConsistencyError.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (c) 2025 The MMapper Authors 3 | 4 | #include "MapConsistencyError.h" 5 | 6 | MapConsistencyError::~MapConsistencyError() = default; 7 | -------------------------------------------------------------------------------- /src/map/MapConsistencyError.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (c) 2025 The MMapper Authors 4 | 5 | #include "../global/macros.h" 6 | 7 | #include 8 | #include 9 | 10 | struct NODISCARD MapConsistencyError final : public std::runtime_error 11 | { 12 | explicit MapConsistencyError(const std::string &msg) 13 | : std::runtime_error("MapConsistencyError: " + msg) 14 | {} 15 | ~MapConsistencyError() final; 16 | }; 17 | -------------------------------------------------------------------------------- /src/map/PromptFlags.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "PromptFlags.h" 5 | 6 | NODISCARD std::string_view to_string_view(const PromptFogEnum val) 7 | { 8 | #define X_CASE(X) \ 9 | case PromptFogEnum::X: \ 10 | return #X; 11 | switch (val) { 12 | XFOREACH_PROMPT_FOG_ENUM(X_CASE) 13 | } 14 | std::abort(); 15 | #undef X_CASE 16 | } 17 | NODISCARD std::string_view to_string_view(const PromptWeatherEnum val) 18 | { 19 | #define X_CASE(X) \ 20 | case PromptWeatherEnum::X: \ 21 | return #X; 22 | switch (val) { 23 | XFOREACH_PROMPT_WEATHER_ENUM(X_CASE) 24 | } 25 | std::abort(); 26 | #undef X_CASE 27 | } 28 | -------------------------------------------------------------------------------- /src/map/RawRooms.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "RawRooms.h" 5 | 6 | #include "../global/logging.h" 7 | 8 | void RawRooms::setExitFlags_safe(const RoomId id, const ExitDirEnum dir, const ExitFlags flags) 9 | { 10 | setExitExitFlags(id, dir, flags); 11 | enforceInvariants(id, dir); 12 | } 13 | 14 | void RawRooms::enforceInvariants(const RoomId id, const ExitDirEnum dir) 15 | { 16 | ::enforceInvariants(getRawRoomRef(id).getExit(dir)); 17 | } 18 | 19 | void RawRooms::enforceInvariants(const RoomId id) 20 | { 21 | ::enforceInvariants(getRawRoomRef(id)); 22 | } 23 | 24 | bool RawRooms::satisfiesInvariants(const RoomId id, const ExitDirEnum dir) const 25 | { 26 | return ::satisfiesInvariants(getRawRoomRef(id).getExit(dir)); 27 | } 28 | 29 | bool RawRooms::satisfiesInvariants(const RoomId id) const 30 | { 31 | return ::satisfiesInvariants(getRawRoomRef(id)); 32 | } 33 | -------------------------------------------------------------------------------- /src/map/RoomFields.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "RoomFields.h" 5 | -------------------------------------------------------------------------------- /src/map/RoomIdSet.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "RoomIdSet.h" 5 | 6 | #include "../global/tests.h" 7 | 8 | namespace test { 9 | void testRoomIdSet() 10 | { 11 | RoomIdSet a; 12 | RoomIdSet b; 13 | 14 | TEST_ASSERT(a == b); 15 | TEST_ASSERT(!a.contains(RoomId(1))); 16 | 17 | a.insert(RoomId(1)); 18 | 19 | TEST_ASSERT(a.contains(RoomId(1))); 20 | TEST_ASSERT(a != b); 21 | 22 | b.insert(RoomId(1)); 23 | TEST_ASSERT(!a.containsElementNotIn(b)); 24 | TEST_ASSERT(a == b); 25 | 26 | a.insert(RoomId(7)); 27 | TEST_ASSERT(a.containsElementNotIn(b)); 28 | TEST_ASSERT(a != b); 29 | 30 | b.insert(RoomId(7)); 31 | TEST_ASSERT(!a.containsElementNotIn(b)); 32 | TEST_ASSERT(a == b); 33 | 34 | b.erase(RoomId(7)); 35 | TEST_ASSERT(a.containsElementNotIn(b)); 36 | TEST_ASSERT(a != b); 37 | 38 | b.insert(RoomId(8)); 39 | TEST_ASSERT(a.containsElementNotIn(b)); 40 | TEST_ASSERT(a != b); 41 | 42 | b.insert(RoomId(7)); 43 | TEST_ASSERT(!a.containsElementNotIn(b)); 44 | TEST_ASSERT(a != b); 45 | } 46 | } // namespace test 47 | -------------------------------------------------------------------------------- /src/map/RoomRecipient.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Ulf Hermann (Alve) 4 | // Author: Marek Krejza (Caligor) 5 | 6 | #include "RoomRecipient.h" 7 | 8 | RoomRecipient::RoomRecipient() = default; 9 | RoomRecipient::~RoomRecipient() = default; 10 | -------------------------------------------------------------------------------- /src/map/RoomRecipient.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | // Author: Nils Schimmelmann (Jahara) 7 | 8 | #include "../global/RuleOf5.h" 9 | #include "../global/macros.h" 10 | #include "roomid.h" 11 | 12 | class MapData; 13 | class RoomHandle; 14 | 15 | /*! \brief Interface giving briefly access to a mutex-protected room. 16 | * 17 | * See MapFrontend::lookingForRooms(). 18 | */ 19 | class NODISCARD RoomRecipient 20 | { 21 | public: 22 | RoomRecipient(); 23 | virtual ~RoomRecipient(); 24 | 25 | private: 26 | virtual void virt_receiveRoom(const RoomHandle &) = 0; 27 | 28 | public: 29 | void receiveRoom(const RoomHandle &room) { virt_receiveRoom(room); } 30 | 31 | public: 32 | DELETE_CTORS_AND_ASSIGN_OPS(RoomRecipient); 33 | }; 34 | -------------------------------------------------------------------------------- /src/map/RoomRevert.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "../global/macros.h" 6 | #include "Changes.h" 7 | 8 | #include 9 | #include 10 | 11 | namespace room_revert { 12 | 13 | struct NODISCARD RevertPlan final 14 | { 15 | RawRoom expect; // what we expect to see at the end 16 | ChangeList changes; // changes to apply 17 | bool hintUndelete = false; 18 | bool warnNoEntrances = false; 19 | }; 20 | 21 | // assumes the current map is a modified version of the base map 22 | NODISCARD std::optional build_plan(AnsiOstream &os, 23 | const Map ¤tMap, 24 | RoomId roomId, 25 | const Map &baseMap); 26 | 27 | } // namespace room_revert 28 | -------------------------------------------------------------------------------- /src/map/ServerIdMap.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "ServerIdMap.h" 5 | 6 | #include "../global/AnsiOstream.h" 7 | 8 | void ServerIdMap::printStats(ProgressCounter & /*pc*/, AnsiOstream &os) const 9 | { 10 | static constexpr auto green = getRawAnsi(AnsiColor16Enum::green); 11 | os << "Unique server ids assigned: " << ColoredValue{green, this->size()} << ".\n"; 12 | } 13 | -------------------------------------------------------------------------------- /src/map/exit.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | 7 | #include "../global/macros.h" 8 | #include "../global/range.h" 9 | #include "DoorFlags.h" 10 | #include "ExitDirection.h" 11 | #include "ExitFieldVariant.h" 12 | #include "ExitFlags.h" 13 | #include "roomid.h" 14 | 15 | #include 16 | #include 17 | #include 18 | 19 | // X(_Type, _Name, _OptInit) 20 | #define XFOREACH_EXIT_STRING_PROPERTY(X) X(DoorName, doorName, ) 21 | 22 | // X(_Type, _Name, _OptInit) 23 | #define XFOREACH_EXIT_FLAG_PROPERTY(X) \ 24 | X(ExitFlags, exitFlags, ) \ 25 | X(DoorFlags, doorFlags, ) 26 | 27 | // X(_Type, _Name, _OptInit) 28 | #define XFOREACH_EXIT_PROPERTY(X) \ 29 | XFOREACH_EXIT_STRING_PROPERTY(X) \ 30 | XFOREACH_EXIT_FLAG_PROPERTY(X) 31 | -------------------------------------------------------------------------------- /src/map/roomid.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "roomid.h" 5 | 6 | #include "../global/AnsiOstream.h" 7 | 8 | #include 9 | 10 | std::ostream &operator<<(std::ostream &os, const RoomId id) 11 | { 12 | return os << "RoomId(" << id.value() << ")"; 13 | } 14 | 15 | std::ostream &operator<<(std::ostream &os, const ExternalRoomId id) 16 | { 17 | return os << "ExternalRoomId(" << id.value() << ")"; 18 | } 19 | 20 | std::ostream &operator<<(std::ostream &os, const ServerRoomId id) 21 | { 22 | return os << "ServerRoomId(" << id.value() << ")"; 23 | } 24 | 25 | /// 26 | 27 | AnsiOstream &operator<<(AnsiOstream &os, const RoomId id) 28 | { 29 | return os << "RoomId(" << id.value() << ")"; 30 | } 31 | 32 | AnsiOstream &operator<<(AnsiOstream &os, const ExternalRoomId id) 33 | { 34 | return os << "ExternalRoomId(" << id.value() << ")"; 35 | } 36 | 37 | AnsiOstream &operator<<(AnsiOstream &os, const ServerRoomId id) 38 | { 39 | return os << "ServerRoomId(" << id.value() << ")"; 40 | } 41 | -------------------------------------------------------------------------------- /src/map/utils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | // Author: Nils Schimmelmann (Jahara) 7 | 8 | #include "../global/macros.h" 9 | 10 | #include 11 | #include 12 | 13 | class Coordinate; 14 | 15 | enum class NODISCARD FindCoordEnum : uint8_t { InUse, Available }; 16 | NODISCARD extern Coordinate getNearestFree( 17 | const Coordinate &c, const std::function &check); 18 | -------------------------------------------------------------------------------- /src/mapdata/GenericFind.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "GenericFind.h" 5 | 6 | #include "../map/Map.h" 7 | #include "roomfilter.h" 8 | 9 | RoomIdSet genericFind(const Map &map, const RoomFilter &f) 10 | { 11 | RoomIdSet result; 12 | for (const RoomId id : map.getRooms()) { 13 | const auto &room = map.getRawRoom(id); 14 | if (f.filter(room)) { 15 | result.insert(id); 16 | } 17 | } 18 | return result; 19 | } 20 | -------------------------------------------------------------------------------- /src/mapdata/GenericFind.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "../global/macros.h" 6 | #include "../map/RoomIdSet.h" 7 | 8 | class Map; 9 | class RoomFilter; 10 | 11 | NODISCARD RoomIdSet genericFind(const Map &map, const RoomFilter &f); 12 | -------------------------------------------------------------------------------- /src/mapdata/MarkerList.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "MarkerList.h" 5 | -------------------------------------------------------------------------------- /src/mapdata/MarkerList.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2021 The MMapper Authors 4 | 5 | #include "../map/infomark.h" 6 | 7 | #include 8 | #include 9 | 10 | using MarkerList = std::vector; 11 | -------------------------------------------------------------------------------- /src/mapdata/roomselection.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Ulf Hermann (Alve) 4 | // Author: Marek Krejza (Caligor) 5 | 6 | #include "roomselection.h" 7 | 8 | #include "mapdata.h" 9 | 10 | #include 11 | 12 | RoomSelection::RoomSelection(Badge, RoomIdSet set) 13 | : m_set{std::move(set)} 14 | {} 15 | 16 | SharedRoomSelection RoomSelection::createSelection(RoomIdSet set) 17 | { 18 | return std::make_shared(Badge{}, std::move(set)); 19 | } 20 | 21 | RoomId RoomSelection::getFirstRoomId() const 22 | { 23 | if (empty()) { 24 | throw std::runtime_error("empty"); 25 | } 26 | return m_set.first(); 27 | } 28 | 29 | void RoomSelection::insert(const RoomHandle &room) 30 | { 31 | insert(room.getId()); 32 | } 33 | 34 | void RoomSelection::removeMissing(MapData &mapData) 35 | { 36 | mapData.removeMissing(m_set); 37 | } 38 | -------------------------------------------------------------------------------- /src/mapdata/shortestpath.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: 'Elval' (Elval) 5 | 6 | #include "../map/DoorFlags.h" 7 | #include "../map/ExitDirection.h" 8 | #include "../map/ExitFieldVariant.h" 9 | #include "../map/ExitFlags.h" 10 | #include "../parser/abstractparser.h" 11 | 12 | #include 13 | #include 14 | 15 | struct NODISCARD SPNode final 16 | { 17 | RoomHandle r; 18 | int parent = 0; 19 | double dist = 0.0; 20 | ExitDirEnum lastdir = ExitDirEnum::NONE; 21 | }; 22 | 23 | class NODISCARD ShortestPathRecipient 24 | { 25 | public: 26 | virtual ~ShortestPathRecipient(); 27 | 28 | private: 29 | virtual void virt_receiveShortestPath(QVector spnodes, int endpoint) = 0; 30 | 31 | public: 32 | void receiveShortestPath(QVector spnodes, const int endpoint) 33 | { 34 | virt_receiveShortestPath(spnodes, endpoint); 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /src/mapstorage/RawMapData.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2021 The MMapper Authors 3 | 4 | #include "RawMapData.h" 5 | -------------------------------------------------------------------------------- /src/observer/gameobserver.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2023 The MMapper Authors 3 | // Author: Mike Repass (Taryn) 4 | 5 | #include "gameobserver.h" 6 | 7 | #include "../global/parserutils.h" 8 | 9 | void GameObserver::observeConnected() 10 | { 11 | sig2_connected.invoke(); 12 | } 13 | 14 | void GameObserver::observeSentToMud(const QString &input) 15 | { 16 | auto str = input; 17 | ParserUtils::removeAnsiMarksInPlace(str); 18 | sig2_sentToMudString.invoke(str); 19 | } 20 | 21 | void GameObserver::observeSentToUser(const QString &input) 22 | { 23 | auto str = input; 24 | ParserUtils::removeAnsiMarksInPlace(str); 25 | sig2_sentToUserString.invoke(str); 26 | } 27 | 28 | void GameObserver::observeSentToUserGmcp(const GmcpMessage &m) 29 | { 30 | sig2_sentToUserGmcp.invoke(m); 31 | } 32 | 33 | void GameObserver::observeToggledEchoMode(const bool echo) 34 | { 35 | sig2_toggledEchoMode.invoke(echo); 36 | } 37 | -------------------------------------------------------------------------------- /src/observer/gameobserver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2023 The MMapper Authors 4 | // Author: Mike Repass (Taryn) 5 | 6 | #include "../global/ChangeMonitor.h" 7 | #include "../global/Signal2.h" 8 | #include "../proxy/GmcpMessage.h" 9 | 10 | #include 11 | 12 | class NODISCARD_QOBJECT GameObserver final 13 | { 14 | public: 15 | Signal2<> sig2_connected; 16 | 17 | Signal2 sig2_sentToMudString; // removes ANSI 18 | Signal2 sig2_sentToUserString; // removes ANSI 19 | 20 | Signal2 sig2_sentToUserGmcp; 21 | Signal2 sig2_toggledEchoMode; 22 | 23 | public: 24 | void observeConnected(); 25 | void observeSentToMud(const QString &ba); 26 | void observeSentToUser(const QString &ba); 27 | void observeSentToUserGmcp(const GmcpMessage &m); 28 | void observeToggledEchoMode(bool echo); 29 | }; 30 | -------------------------------------------------------------------------------- /src/opengl/FontFormatFlags.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "../global/Flags.h" 7 | 8 | #include 9 | 10 | enum class NODISCARD FontFormatFlagEnum { 11 | NONE, 12 | ITALICS, 13 | UNDERLINE, 14 | /// Horizontal centering; mutually exclusive with HALIGN_RIGHT. 15 | /// Note: HALIGN_CENTER takes precedence over HALIGN_RIGHT if both are set. 16 | HALIGN_CENTER, 17 | /// Horizontal right-alignemnt; mutually exclusive with HALIGN_CENTER. 18 | HALIGN_RIGHT, 19 | // 20 | // NOTE: You must manually update the count if you add any flags. 21 | // 22 | }; 23 | 24 | DEFINE_ENUM_COUNT(FontFormatFlagEnum, 5); 25 | 26 | struct NODISCARD FontFormatFlags final 27 | : public enums::Flags 28 | { 29 | public: 30 | using Flags::Flags; 31 | }; 32 | -------------------------------------------------------------------------------- /src/opengl/OpenGLTypes.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "OpenGLTypes.h" 5 | 6 | #include "../display/Textures.h" 7 | #include "../global/utils.h" 8 | 9 | #include 10 | #include 11 | 12 | IRenderable::~IRenderable() = default; 13 | 14 | TexturedRenderable::TexturedRenderable(const MMTextureId tex, 15 | std::unique_ptr moved_mesh) 16 | : m_texture(tex) 17 | , m_mesh(std::move(moved_mesh)) 18 | { 19 | std::ignore = deref(m_mesh); 20 | } 21 | 22 | TexturedRenderable::~TexturedRenderable() = default; 23 | 24 | void TexturedRenderable::virt_clear() 25 | { 26 | m_mesh->clear(); 27 | } 28 | 29 | void TexturedRenderable::virt_reset() 30 | { 31 | m_texture = INVALID_MM_TEXTURE_ID; 32 | m_mesh->reset(); 33 | } 34 | 35 | bool TexturedRenderable::virt_isEmpty() const 36 | { 37 | return m_mesh->isEmpty(); 38 | } 39 | 40 | void TexturedRenderable::virt_render(const GLRenderState &renderState) 41 | { 42 | /* overrides the texture of the provided state */ 43 | m_mesh->render(renderState.withTexture0(m_texture)); 44 | } 45 | -------------------------------------------------------------------------------- /src/opengl/legacy/FontMesh3d.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "FontMesh3d.h" 5 | 6 | #include "../../display/Textures.h" 7 | 8 | #include 9 | #include 10 | 11 | namespace Legacy { 12 | 13 | FontMesh3d::FontMesh3d(const SharedFunctions &functions, 14 | const std::shared_ptr &sharedShader, 15 | SharedMMTexture texture, 16 | const DrawModeEnum mode, 17 | const std::vector &verts) 18 | : Base{functions, sharedShader, mode, verts} 19 | , m_texture{std::move(texture)} 20 | {} 21 | 22 | FontMesh3d::~FontMesh3d() = default; 23 | 24 | GLRenderState FontMesh3d::virt_modifyRenderState(const GLRenderState &renderState) const 25 | { 26 | const SharedMMTexture &shared = m_texture; 27 | const MMTexture &tex = *shared; 28 | const MMTextureId id = tex.getId(); 29 | 30 | return renderState.withBlend(BlendModeEnum::TRANSPARENCY) 31 | .withDepthFunction(std::nullopt) 32 | .withTexture0(id); 33 | } 34 | 35 | } // namespace Legacy 36 | -------------------------------------------------------------------------------- /src/opengl/legacy/Meshes.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "Meshes.h" 5 | -------------------------------------------------------------------------------- /src/opengl/legacy/ShaderUtils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "Legacy.h" 6 | #include "VBO.h" 7 | 8 | #include 9 | #include 10 | 11 | namespace ShaderUtils { 12 | using Functions = Legacy::Functions; 13 | using Program = Legacy::Program; 14 | 15 | struct NODISCARD Source final 16 | { 17 | const std::string filename; 18 | const std::string source; 19 | 20 | explicit Source() = default; 21 | explicit Source(std::nullptr_t) = delete; 22 | explicit Source(std::string moved_filename, std::string moved_source) 23 | : filename{std::move(moved_filename)} 24 | , source{std::move(moved_source)} 25 | {} 26 | 27 | explicit operator bool() const { return !filename.empty() || !source.empty(); } 28 | }; 29 | 30 | NODISCARD Program loadShaders(Functions &gl, const Source &vert, const Source &frag); 31 | 32 | } // namespace ShaderUtils 33 | -------------------------------------------------------------------------------- /src/opengl/legacy/SimpleMesh.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "SimpleMesh.h" 5 | -------------------------------------------------------------------------------- /src/org.mume.MMapper.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=MMapper 3 | GenericName=MUME Mapper 4 | Exec=mmapper 5 | Icon=org.mume.MMapper 6 | StartupWMClass=mmapper 7 | Terminal=false 8 | Type=Application 9 | Categories=Qt;Game;RolePlaying; 10 | -------------------------------------------------------------------------------- /src/parser/Abbrev.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "../global/StringView.h" 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | NODISCARD bool isAbbrev(StringView input, std::string_view command, int minAbbrev); 15 | 16 | struct NODISCARD Abbrev final 17 | { 18 | private: 19 | const char *m_command = nullptr; 20 | int m_minAbbrev = 0; 21 | int m_len = 0; 22 | 23 | public: 24 | Abbrev() = default; 25 | explicit Abbrev(std::nullptr_t) = delete; 26 | explicit Abbrev(std::nullptr_t, int) = delete; 27 | explicit Abbrev(const char *arg_command, int arg_minAbbrev = -1); 28 | 29 | NODISCARD bool matches(StringView input) const 30 | { 31 | return ::isAbbrev(input, m_command, m_minAbbrev); 32 | } 33 | explicit operator bool() const; 34 | NODISCARD const char *getCommand() const { return m_command; } 35 | NODISCARD int getMinAbbrev() const { return m_minAbbrev; } 36 | NODISCARD int getLength() const { return m_len; } 37 | NODISCARD QString describe() const; 38 | }; 39 | -------------------------------------------------------------------------------- /src/parser/AbstractParser-Utils.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Nils Schimmelmann (Jahara) 4 | 5 | #include "AbstractParser-Utils.h" 6 | 7 | #include "../configuration/configuration.h" 8 | 9 | #include 10 | #include 11 | 12 | bool isOffline() 13 | { 14 | return getConfig().general.mapMode == MapModeEnum::OFFLINE; 15 | } 16 | 17 | bool isOnline() 18 | { 19 | return !isOffline(); 20 | } 21 | 22 | std::string_view enabledString(const bool isEnabled) 23 | { 24 | static constexpr const std::string_view enabled{"enabled"}; 25 | static constexpr const std::string_view disabled{"disabled"}; 26 | return isEnabled ? enabled : disabled; 27 | } 28 | 29 | bool isValidPrefix(const char c) 30 | { 31 | return ascii::isPunct(c); 32 | } 33 | 34 | std::string concatenate_unquoted(const Vector &input) 35 | { 36 | std::ostringstream oss; 37 | bool first = true; 38 | for (const Value &val : input) { 39 | if (first) { 40 | first = false; 41 | } else { 42 | oss << " "; 43 | } 44 | oss << val.getString(); 45 | } 46 | return oss.str(); 47 | }; 48 | -------------------------------------------------------------------------------- /src/parser/AbstractParser-Utils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "../syntax/Value.h" 7 | 8 | #include 9 | 10 | NODISCARD bool isOffline(); 11 | NODISCARD bool isOnline(); 12 | NODISCARD std::string_view enabledString(bool isEnabled); 13 | NODISCARD bool isValidPrefix(char c); 14 | 15 | template 16 | void send_ok(T &os) 17 | { 18 | // Note: MUME uses "Ok." rahter than "OK." 19 | os << "Ok.\n"; 20 | } 21 | 22 | NODISCARD std::string concatenate_unquoted(const Vector &input); 23 | -------------------------------------------------------------------------------- /src/parser/Action.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Nils Schimmelmann (Jahara) 4 | 5 | #include "Action.h" 6 | 7 | #include 8 | 9 | IAction::~IAction() = default; 10 | 11 | void IAction::match(const StringView input) const 12 | { 13 | return virt_match(input); 14 | } 15 | 16 | void StartsWithAction::virt_match(const StringView input) const 17 | { 18 | if (input.startsWith(m_match)) { 19 | m_callback(input); 20 | } 21 | } 22 | 23 | void EndsWithAction::virt_match(const StringView input) const 24 | { 25 | if (input.endsWith(m_match)) { 26 | m_callback(input); 27 | } 28 | } 29 | 30 | NODISCARD static std::regex createRegex(const std::string &pattern) 31 | { 32 | return std::regex(pattern, std::regex::nosubs | std::regex::optimize); 33 | } 34 | 35 | RegexAction::RegexAction(const std::string &pattern, const ActionCallback &callback) 36 | : m_regex{createRegex(pattern)} 37 | , m_callback{callback} 38 | {} 39 | 40 | void RegexAction::virt_match(const StringView input) const 41 | { 42 | if (std::regex_match(input.begin(), input.end(), m_regex)) { 43 | m_callback(input); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/parser/DoorAction.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Nils Schimmelmann (Jahara) 4 | 5 | #include "DoorAction.h" 6 | 7 | #include "../global/enums.h" 8 | 9 | #include 10 | 11 | namespace enums { 12 | 13 | const MMapper::Array &getAllDoorActionTypes() 14 | { 15 | static const auto g_door_actions = genEnumValues(); 16 | return g_door_actions; 17 | } 18 | 19 | } // namespace enums 20 | -------------------------------------------------------------------------------- /src/parser/DoorAction.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "../global/Array.h" 7 | 8 | #include 9 | 10 | enum class NODISCARD DoorActionEnum { 11 | OPEN, 12 | CLOSE, 13 | LOCK, 14 | UNLOCK, 15 | PICK, 16 | ROCK, 17 | BASH, 18 | BREAK, 19 | BLOCK, 20 | KNOCK, 21 | NONE 22 | }; 23 | 24 | /* does not include NONE */ 25 | static constexpr const size_t NUM_DOOR_ACTION_TYPES = 10; 26 | 27 | namespace enums { 28 | #define ALL_DOOR_ACTION_TYPES ::enums::getAllDoorActionTypes() 29 | NODISCARD const MMapper::Array &getAllDoorActionTypes(); 30 | 31 | } // namespace enums 32 | -------------------------------------------------------------------------------- /src/parser/SendToUserSourceEnum.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "global/macros.h" 6 | 7 | #include 8 | 9 | enum class NODISCARD SendToUserSourceEnum : uint8_t { 10 | FromMud, 11 | DuplicatePrompt, 12 | SimulatedPrompt, 13 | SimulatedOutput, 14 | FromMMapper, 15 | NoLongerPrompted, 16 | }; 17 | -------------------------------------------------------------------------------- /src/pathmachine/crossover.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | // Author: Ulf Hermann (Alve) 4 | // Author: Marek Krejza (Caligor) 5 | 6 | #include "crossover.h" 7 | 8 | #include "../map/ExitDirection.h" 9 | #include "../map/room.h" 10 | #include "../mapdata/mapdata.h" 11 | #include "experimenting.h" 12 | 13 | #include 14 | 15 | struct PathParameters; 16 | 17 | Crossover::Crossover(MapFrontend &map, 18 | std::shared_ptr _paths, 19 | const ExitDirEnum _dirCode, 20 | PathParameters &_params) 21 | : Experimenting(std::move(_paths), _dirCode, _params) 22 | , m_map{map} 23 | {} 24 | 25 | void Crossover::virt_receiveRoom(const RoomHandle &room) 26 | { 27 | if (deref(shortPaths).empty()) { 28 | m_map.releaseRoom(*this, room.getId()); 29 | } 30 | 31 | for (auto &shortPath : *shortPaths) { 32 | augmentPath(shortPath, room); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/pathmachine/crossover.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | 7 | #include "../map/DoorFlags.h" 8 | #include "../map/ExitDirection.h" 9 | #include "../map/ExitFieldVariant.h" 10 | #include "../map/ExitFlags.h" 11 | #include "experimenting.h" 12 | #include "path.h" 13 | 14 | #include 15 | 16 | class MapFrontend; 17 | struct PathParameters; 18 | 19 | class NODISCARD Crossover final : public Experimenting 20 | { 21 | private: 22 | MapFrontend &m_map; 23 | 24 | public: 25 | Crossover(MapFrontend &map, 26 | std::shared_ptr paths, 27 | ExitDirEnum dirCode, 28 | PathParameters ¶ms); 29 | 30 | private: 31 | void virt_receiveRoom(const RoomHandle &) final; 32 | }; 33 | -------------------------------------------------------------------------------- /src/pathmachine/mmapper2pathmachine.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | 7 | #include "../map/parseevent.h" 8 | #include "pathmachine.h" 9 | 10 | #include 11 | #include 12 | 13 | class Configuration; 14 | class MapFrontend; 15 | class ParseEvent; 16 | class QObject; 17 | 18 | /** 19 | @author alve,,, 20 | */ 21 | class NODISCARD_QOBJECT Mmapper2PathMachine final : public PathMachine 22 | { 23 | Q_OBJECT 24 | 25 | public: 26 | explicit Mmapper2PathMachine(MapFrontend &map, QObject *parent); 27 | 28 | signals: 29 | void sig_state(const QString &); 30 | 31 | public slots: 32 | void slot_handleParseEvent(const SigParseEvent &); 33 | }; 34 | -------------------------------------------------------------------------------- /src/pathmachine/onebyone.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | 7 | #include "../map/parseevent.h" 8 | #include "experimenting.h" 9 | 10 | #include 11 | 12 | class ParseEvent; 13 | class Path; 14 | class RoomSignalHandler; 15 | struct PathParameters; 16 | 17 | class NODISCARD OneByOne final : public Experimenting 18 | { 19 | private: 20 | SharedParseEvent event; 21 | RoomSignalHandler *handler = nullptr; 22 | 23 | public: 24 | explicit OneByOne(const SigParseEvent &sigParseEvent, 25 | PathParameters &in_params, 26 | RoomSignalHandler *handler); 27 | 28 | private: 29 | void virt_receiveRoom(const RoomHandle &room) final; 30 | 31 | public: 32 | void addPath(std::shared_ptr path); 33 | }; 34 | -------------------------------------------------------------------------------- /src/pathmachine/pathparameters.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | 7 | #include "../global/macros.h" 8 | 9 | #include 10 | 11 | struct NODISCARD PathParameters final 12 | { 13 | double acceptBestRelative = 10.0; 14 | double acceptBestAbsolute = 3.0; 15 | double newRoomPenalty = 5.0; 16 | double multipleConnectionsPenalty = 2.0; 17 | double correctPositionBonus = 5.1; 18 | double maxPaths = 500.0; 19 | int matchingTolerance = 5; 20 | uint32_t maxSkipped = 1; 21 | }; 22 | -------------------------------------------------------------------------------- /src/preferences/AdvancedGraphics.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../display/MapCanvasConfig.h" 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | #include 12 | 13 | class SliderSpinboxButton; 14 | class NODISCARD_QOBJECT AdvancedGraphicsGroupBox final : public QObject 15 | { 16 | Q_OBJECT 17 | 18 | private: 19 | friend SliderSpinboxButton; 20 | 21 | private: 22 | QGroupBox *const m_groupBox; 23 | using UniqueSsb = std::unique_ptr; 24 | std::vector m_ssbs; 25 | // purposely unused; this variable exists as an RAII for the change monitors. 26 | Signal2Lifetime m_lifetime; 27 | 28 | public: 29 | explicit AdvancedGraphicsGroupBox(QGroupBox &groupBox); 30 | ~AdvancedGraphicsGroupBox() final; 31 | 32 | public: 33 | explicit operator QGroupBox &() { return deref(m_groupBox); } 34 | NODISCARD QGroupBox *getGroupBox() { return m_groupBox; } 35 | 36 | private: 37 | void graphicsSettingsChanged() { emit sig_graphicsSettingsChanged(); } 38 | void enableSsbs(bool enabled); 39 | 40 | signals: 41 | void sig_graphicsSettingsChanged(); 42 | }; 43 | -------------------------------------------------------------------------------- /src/preferences/AnsiColorDialog.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Jan 'Kovis' Struhar (Kovis) 5 | // Author: Marek Krejza (Caligor) 6 | // Author: Nils Schimmelmann (Jahara) 7 | 8 | #include "../global/macros.h" 9 | 10 | #include 11 | 12 | #include 13 | 14 | namespace Ui { 15 | class AnsiColorDialog; 16 | } 17 | 18 | class NODISCARD_QOBJECT AnsiColorDialog final : public QDialog 19 | { 20 | Q_OBJECT 21 | 22 | public: 23 | NODISCARD static QString getColor(const QString &ansiString, QWidget *parent); 24 | 25 | private: 26 | QString m_resultAnsiString; 27 | const std::unique_ptr m_ui; 28 | 29 | public: 30 | explicit AnsiColorDialog(const QString &ansiString, QWidget *parent); 31 | explicit AnsiColorDialog(QWidget *parent); 32 | ~AnsiColorDialog() final; 33 | 34 | public: 35 | NODISCARD QString getAnsiString() const { return m_resultAnsiString; } 36 | 37 | private: 38 | void ansiComboChange(); 39 | 40 | public slots: 41 | void slot_ansiComboChange(); 42 | void slot_updateColors(); 43 | void slot_generateNewAnsiColor(); 44 | }; 45 | -------------------------------------------------------------------------------- /src/preferences/autologpage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Mattias 'Mew_' Viklund (Mirnir) 5 | 6 | #include "../global/macros.h" 7 | 8 | #include 9 | #include 10 | 11 | namespace Ui { 12 | class AutoLogPage; 13 | } 14 | 15 | class NODISCARD_QOBJECT AutoLogPage final : public QWidget 16 | { 17 | Q_OBJECT 18 | 19 | private: 20 | Ui::AutoLogPage *const ui; 21 | 22 | public: 23 | explicit AutoLogPage(QWidget *parent); 24 | ~AutoLogPage() final; 25 | 26 | public slots: 27 | void slot_loadConfig(); 28 | void slot_logStrategyChanged(int); 29 | void slot_selectLogLocationButtonClicked(int); 30 | }; 31 | -------------------------------------------------------------------------------- /src/preferences/clientpage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "../global/macros.h" 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | class QObject; 13 | 14 | namespace Ui { 15 | class ClientPage; 16 | } 17 | 18 | class NODISCARD_QOBJECT ClientPage final : public QWidget 19 | { 20 | Q_OBJECT 21 | 22 | private: 23 | Ui::ClientPage *const ui; 24 | 25 | public: 26 | explicit ClientPage(QWidget *parent); 27 | ~ClientPage() final; 28 | 29 | void updateFontAndColors(); 30 | 31 | public slots: 32 | void slot_loadConfig(); 33 | void slot_onChangeFont(); 34 | void slot_onChangeBackgroundColor(); 35 | void slot_onChangeForegroundColor(); 36 | void slot_onChangeColumns(int); 37 | void slot_onChangeRows(int); 38 | void slot_onChangeLinesOfScrollback(int); 39 | void slot_onChangeLinesOfInputHistory(int); 40 | void slot_onChangeTabCompletionDictionarySize(int); 41 | }; 42 | -------------------------------------------------------------------------------- /src/preferences/configdialog.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | // Author: Nils Schimmelmann (Jahara) 7 | 8 | #include "../global/macros.h" 9 | 10 | #include 11 | #include 12 | #include 13 | 14 | class QListWidgetItem; 15 | class QObject; 16 | class QShowEvent; 17 | class QStackedWidget; 18 | class QWidget; 19 | 20 | namespace Ui { 21 | class ConfigDialog; 22 | } 23 | 24 | class NODISCARD_QOBJECT ConfigDialog final : public QDialog 25 | { 26 | Q_OBJECT 27 | 28 | private: 29 | Ui::ConfigDialog *const ui; 30 | QStackedWidget *m_pagesWidget = nullptr; 31 | 32 | public: 33 | explicit ConfigDialog(QWidget *parent); 34 | ~ConfigDialog() final; 35 | 36 | protected: 37 | void showEvent(QShowEvent *event) override; 38 | 39 | private: 40 | void createIcons(); 41 | 42 | signals: 43 | void sig_graphicsSettingsChanged(); 44 | void sig_loadConfig(); 45 | 46 | public slots: 47 | void slot_changePage(QListWidgetItem *current, QListWidgetItem *previous); 48 | }; 49 | -------------------------------------------------------------------------------- /src/preferences/mumeprotocolpage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Nils Schimmelmann (Jahara) 5 | 6 | #include "../global/macros.h" 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | class QObject; 13 | 14 | namespace Ui { 15 | class MumeProtocolPage; 16 | } 17 | 18 | class NODISCARD_QOBJECT MumeProtocolPage final : public QWidget 19 | { 20 | Q_OBJECT 21 | 22 | private: 23 | Ui::MumeProtocolPage *const ui; 24 | 25 | public: 26 | explicit MumeProtocolPage(QWidget *parent); 27 | ~MumeProtocolPage() final; 28 | 29 | public slots: 30 | void slot_loadConfig(); 31 | void slot_internalEditorRadioButtonChanged(bool); 32 | void slot_externalEditorCommandTextChanged(QString); 33 | void slot_externalEditorBrowseButtonClicked(bool); 34 | }; 35 | -------------------------------------------------------------------------------- /src/preferences/parserpage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | 7 | #include "../global/macros.h" 8 | #include "ui_parserpage.h" 9 | 10 | #include 11 | #include 12 | #include 13 | 14 | class QObject; 15 | 16 | enum class NODISCARD UiCharsetEnum { AsciiOrLatin1, UTF8 }; 17 | 18 | class NODISCARD_QOBJECT ParserPage : public QWidget, private Ui::ParserPage 19 | { 20 | Q_OBJECT 21 | 22 | public: 23 | explicit ParserPage(QWidget *parent); 24 | 25 | public slots: 26 | void slot_loadConfig(); 27 | void slot_roomNameColorClicked(); 28 | void slot_roomDescColorClicked(); 29 | }; 30 | -------------------------------------------------------------------------------- /src/preferences/pathmachinepage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | // Author: Ulf Hermann (Alve) 5 | // Author: Marek Krejza (Caligor) 6 | 7 | #include "../global/macros.h" 8 | #include "ui_pathmachinepage.h" 9 | 10 | #include 11 | #include 12 | #include 13 | 14 | class QObject; 15 | 16 | class NODISCARD_QOBJECT PathmachinePage : public QWidget, private Ui::PathmachinePage 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | explicit PathmachinePage(QWidget *parent); 22 | 23 | public slots: 24 | void slot_loadConfig(); 25 | void slot_acceptBestRelativeDoubleSpinBoxValueChanged(double); 26 | void slot_acceptBestAbsoluteDoubleSpinBoxValueChanged(double); 27 | void slot_newRoomPenaltyDoubleSpinBoxValueChanged(double); 28 | void slot_correctPositionBonusDoubleSpinBoxValueChanged(double); 29 | void slot_multipleConnectionsPenaltyDoubleSpinBoxValueChanged(double); 30 | void slot_maxPathsValueChanged(int); 31 | void slot_matchingToleranceSpinBoxValueChanged(int); 32 | }; 33 | -------------------------------------------------------------------------------- /src/proxy/GmcpUtils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../global/macros.h" 6 | 7 | class QString; 8 | 9 | namespace GmcpUtils { 10 | NODISCARD QString escapeGmcpStringData(const QString &); 11 | } // namespace GmcpUtils 12 | 13 | namespace test { 14 | extern void testGmcpUtils(); 15 | } // namespace test 16 | -------------------------------------------------------------------------------- /src/proxy/ProxyParserApi.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "ProxyParserApi.h" 5 | 6 | #include "proxy.h" 7 | 8 | // This reports the state of the outbound/toMud socket. 9 | bool ProxyMudConnectionApi::isConnected() const 10 | { 11 | return m_proxy.isConnected(); 12 | } 13 | 14 | // This only affects the outbound/toMud socket. 15 | void ProxyMudConnectionApi::connectToMud() 16 | { 17 | m_proxy.connectToMud(); 18 | } 19 | 20 | // This only affects the outbound/toMud socket. 21 | void ProxyMudConnectionApi::disconnectFromMud() 22 | { 23 | m_proxy.disconnectFromMud(); 24 | } 25 | 26 | bool ProxyUserGmcpApi::isUserGmcpModuleEnabled(const GmcpModuleTypeEnum &mod) const 27 | { 28 | return m_proxy.isUserGmcpModuleEnabled(mod); 29 | } 30 | 31 | void ProxyUserGmcpApi::gmcpToUser(const GmcpMessage &msg) 32 | { 33 | m_proxy.gmcpToUser(msg); 34 | } 35 | 36 | bool ProxyMudGmcpApi::isMudGmcpModuleEnabled(const GmcpModuleTypeEnum &mod) const 37 | { 38 | return m_proxy.isMudGmcpModuleEnabled(mod); 39 | } 40 | 41 | void ProxyMudGmcpApi::gmcpToMud(const GmcpMessage &msg) 42 | { 43 | m_proxy.gmcpToMud(msg); 44 | } 45 | -------------------------------------------------------------------------------- /src/proxy/ProxyParserApi.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "GmcpModule.h" 6 | 7 | class GmcpMessage; 8 | class Proxy; 9 | 10 | class NODISCARD ProxyMudConnectionApi final 11 | { 12 | private: 13 | Proxy &m_proxy; 14 | 15 | public: 16 | explicit ProxyMudConnectionApi(Proxy &proxy) 17 | : m_proxy{proxy} 18 | {} 19 | 20 | public: 21 | NODISCARD bool isConnected() const; 22 | void connectToMud(); 23 | void disconnectFromMud(); 24 | }; 25 | 26 | class NODISCARD ProxyUserGmcpApi final 27 | { 28 | private: 29 | Proxy &m_proxy; 30 | 31 | public: 32 | explicit ProxyUserGmcpApi(Proxy &proxy) 33 | : m_proxy{proxy} 34 | {} 35 | 36 | public: 37 | NODISCARD bool isUserGmcpModuleEnabled(const GmcpModuleTypeEnum &mod) const; 38 | void gmcpToUser(const GmcpMessage &msg); 39 | }; 40 | 41 | class NODISCARD ProxyMudGmcpApi final 42 | { 43 | private: 44 | Proxy &m_proxy; 45 | 46 | public: 47 | explicit ProxyMudGmcpApi(Proxy &proxy) 48 | : m_proxy{proxy} 49 | {} 50 | 51 | public: 52 | NODISCARD bool isMudGmcpModuleEnabled(const GmcpModuleTypeEnum &mod) const; 53 | void gmcpToMud(const GmcpMessage &msg); 54 | }; 55 | -------------------------------------------------------------------------------- /src/resources/LICENSE.GLM: -------------------------------------------------------------------------------- 1 | The MIT License 2 | Copyright (c) 2005 - 2014 G-Truc Creation 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /src/resources/beta.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | icons/m-beta.png 4 | pixmaps/splash-beta.png 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/resources/fonts/Cantarell18.bmfc: -------------------------------------------------------------------------------- 1 | # AngelCode Bitmap Font Generator configuration file 2 | fileVersion=1 3 | 4 | # font settings 5 | fontName=Cantarell 6 | fontFile= 7 | charSet=0 8 | fontSize=18 9 | aa=4 10 | scaleH=100 11 | useSmoothing=1 12 | isBold=0 13 | isItalic=0 14 | useUnicode=1 15 | disableBoxChars=1 16 | outputInvalidCharGlyph=0 17 | dontIncludeKerningPairs=0 18 | useHinting=1 19 | renderFromOutline=1 20 | useClearType=1 21 | 22 | # character alignment 23 | paddingDown=0 24 | paddingUp=0 25 | paddingRight=0 26 | paddingLeft=0 27 | spacingHoriz=1 28 | spacingVert=1 29 | useFixedHeight=0 30 | forceZero=0 31 | 32 | # output file 33 | outWidth=256 34 | outHeight=256 35 | outBitDepth=32 36 | fontDescFormat=1 37 | fourChnlPacked=0 38 | textureFormat=png 39 | textureCompression=0 40 | alphaChnl=0 41 | redChnl=4 42 | greenChnl=4 43 | blueChnl=4 44 | invA=0 45 | invR=0 46 | invG=0 47 | invB=0 48 | 49 | # outline 50 | outlineThickness=0 51 | 52 | # selected chars 53 | chars=32-126,160-255 54 | 55 | # imported icon images 56 | -------------------------------------------------------------------------------- /src/resources/fonts/Cantarell18_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/fonts/Cantarell18_0.png -------------------------------------------------------------------------------- /src/resources/fonts/Cantarell27.bmfc: -------------------------------------------------------------------------------- 1 | # AngelCode Bitmap Font Generator configuration file 2 | fileVersion=1 3 | 4 | # font settings 5 | fontName=Cantarell 6 | fontFile= 7 | charSet=0 8 | fontSize=27 9 | aa=4 10 | scaleH=100 11 | useSmoothing=1 12 | isBold=0 13 | isItalic=0 14 | useUnicode=1 15 | disableBoxChars=1 16 | outputInvalidCharGlyph=0 17 | dontIncludeKerningPairs=0 18 | useHinting=1 19 | renderFromOutline=1 20 | useClearType=1 21 | 22 | # character alignment 23 | paddingDown=0 24 | paddingUp=0 25 | paddingRight=0 26 | paddingLeft=0 27 | spacingHoriz=1 28 | spacingVert=1 29 | useFixedHeight=0 30 | forceZero=0 31 | 32 | # output file 33 | outWidth=256 34 | outHeight=256 35 | outBitDepth=32 36 | fontDescFormat=1 37 | fourChnlPacked=0 38 | textureFormat=png 39 | textureCompression=0 40 | alphaChnl=0 41 | redChnl=4 42 | greenChnl=4 43 | blueChnl=4 44 | invA=0 45 | invR=0 46 | invG=0 47 | invB=0 48 | 49 | # outline 50 | outlineThickness=0 51 | 52 | # selected chars 53 | chars=32-126,160-255 54 | 55 | # imported icon images 56 | -------------------------------------------------------------------------------- /src/resources/fonts/Cantarell27_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/fonts/Cantarell27_0.png -------------------------------------------------------------------------------- /src/resources/fonts/Cantarell36.bmfc: -------------------------------------------------------------------------------- 1 | # AngelCode Bitmap Font Generator configuration file 2 | fileVersion=1 3 | 4 | # font settings 5 | fontName=Cantarell 6 | fontFile= 7 | charSet=0 8 | fontSize=36 9 | aa=4 10 | scaleH=100 11 | useSmoothing=1 12 | isBold=0 13 | isItalic=0 14 | useUnicode=1 15 | disableBoxChars=1 16 | outputInvalidCharGlyph=0 17 | dontIncludeKerningPairs=0 18 | useHinting=1 19 | renderFromOutline=1 20 | useClearType=1 21 | 22 | # character alignment 23 | paddingDown=0 24 | paddingUp=0 25 | paddingRight=0 26 | paddingLeft=0 27 | spacingHoriz=1 28 | spacingVert=1 29 | useFixedHeight=0 30 | forceZero=0 31 | 32 | # output file 33 | outWidth=256 34 | outHeight=256 35 | outBitDepth=32 36 | fontDescFormat=1 37 | fourChnlPacked=0 38 | textureFormat=png 39 | textureCompression=0 40 | alphaChnl=0 41 | redChnl=4 42 | greenChnl=4 43 | blueChnl=4 44 | invA=0 45 | invR=0 46 | invG=0 47 | invB=0 48 | 49 | # outline 50 | outlineThickness=0 51 | 52 | # selected chars 53 | chars=32-126,160-255 54 | 55 | # imported icon images 56 | -------------------------------------------------------------------------------- /src/resources/fonts/Cantarell36_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/fonts/Cantarell36_0.png -------------------------------------------------------------------------------- /src/resources/fonts/DejaVuSansMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/fonts/DejaVuSansMono.ttf -------------------------------------------------------------------------------- /src/resources/fonts/README: -------------------------------------------------------------------------------- 1 | DejaVu fonts 2.37 (c)2004-2016 DejaVu fonts team 2 | ------------------------------------------------ 3 | 4 | The DejaVu fonts are a font family based on the Bitstream Vera Fonts 5 | (http://gnome.org/fonts/). Its purpose is to provide a wider range of 6 | characters (see status.txt for more information) while maintaining the 7 | original look and feel. 8 | 9 | DejaVu fonts are based on Bitstream Vera fonts version 1.10. 10 | 11 | Available fonts (Sans = sans serif, Mono = monospaced): 12 | 13 | DejaVu Sans Mono 14 | 15 | For more information go to http://dejavu.sourceforge.net/. 16 | -------------------------------------------------------------------------------- /src/resources/icons/affect-bashed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-bashed.png -------------------------------------------------------------------------------- /src/resources/icons/affect-blind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-blind.png -------------------------------------------------------------------------------- /src/resources/icons/affect-hungry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-hungry.png -------------------------------------------------------------------------------- /src/resources/icons/affect-poison.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-poison.png -------------------------------------------------------------------------------- /src/resources/icons/affect-ride.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-ride.png -------------------------------------------------------------------------------- /src/resources/icons/affect-sanctuary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-sanctuary.png -------------------------------------------------------------------------------- /src/resources/icons/affect-slept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-slept.png -------------------------------------------------------------------------------- /src/resources/icons/affect-snared.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-snared.png -------------------------------------------------------------------------------- /src/resources/icons/affect-thirsty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-thirsty.png -------------------------------------------------------------------------------- /src/resources/icons/affect-waiting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-waiting.png -------------------------------------------------------------------------------- /src/resources/icons/affect-wound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/affect-wound.png -------------------------------------------------------------------------------- /src/resources/icons/autologgercfg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/autologgercfg.png -------------------------------------------------------------------------------- /src/resources/icons/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/cancel.png -------------------------------------------------------------------------------- /src/resources/icons/connectioncreate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/connectioncreate.png -------------------------------------------------------------------------------- /src/resources/icons/connectiondelete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/connectiondelete.png -------------------------------------------------------------------------------- /src/resources/icons/connectionedit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/connectionedit.png -------------------------------------------------------------------------------- /src/resources/icons/connectionselection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/connectionselection.png -------------------------------------------------------------------------------- /src/resources/icons/connectiontemplate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/connectiontemplate.png -------------------------------------------------------------------------------- /src/resources/icons/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/copy.png -------------------------------------------------------------------------------- /src/resources/icons/cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/cut.png -------------------------------------------------------------------------------- /src/resources/icons/disconnecteast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/disconnecteast.png -------------------------------------------------------------------------------- /src/resources/icons/disconnectnorth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/disconnectnorth.png -------------------------------------------------------------------------------- /src/resources/icons/disconnectsouth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/disconnectsouth.png -------------------------------------------------------------------------------- /src/resources/icons/disconnectwest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/disconnectwest.png -------------------------------------------------------------------------------- /src/resources/icons/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/edit.png -------------------------------------------------------------------------------- /src/resources/icons/edittemplate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/edittemplate.png -------------------------------------------------------------------------------- /src/resources/icons/exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/exit.png -------------------------------------------------------------------------------- /src/resources/icons/filenew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/filenew.png -------------------------------------------------------------------------------- /src/resources/icons/fileopen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/fileopen.png -------------------------------------------------------------------------------- /src/resources/icons/filesave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/filesave.png -------------------------------------------------------------------------------- /src/resources/icons/follow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/follow.png -------------------------------------------------------------------------------- /src/resources/icons/force.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/force.png -------------------------------------------------------------------------------- /src/resources/icons/generalcfg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/generalcfg.png -------------------------------------------------------------------------------- /src/resources/icons/goto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/goto.png -------------------------------------------------------------------------------- /src/resources/icons/graphicscfg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/graphicscfg.png -------------------------------------------------------------------------------- /src/resources/icons/group-recolor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/group-recolor.png -------------------------------------------------------------------------------- /src/resources/icons/hand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hand.png -------------------------------------------------------------------------------- /src/resources/icons/hi128-app-mmapper-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi128-app-mmapper-beta.png -------------------------------------------------------------------------------- /src/resources/icons/hi128-app-mmapper-release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi128-app-mmapper-release.png -------------------------------------------------------------------------------- /src/resources/icons/hi16-app-mmapper-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi16-app-mmapper-beta.png -------------------------------------------------------------------------------- /src/resources/icons/hi16-app-mmapper-release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi16-app-mmapper-release.png -------------------------------------------------------------------------------- /src/resources/icons/hi256-app-mmapper-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi256-app-mmapper-beta.png -------------------------------------------------------------------------------- /src/resources/icons/hi256-app-mmapper-release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi256-app-mmapper-release.png -------------------------------------------------------------------------------- /src/resources/icons/hi32-app-mmapper-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi32-app-mmapper-beta.png -------------------------------------------------------------------------------- /src/resources/icons/hi32-app-mmapper-release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi32-app-mmapper-release.png -------------------------------------------------------------------------------- /src/resources/icons/hi48-app-mmapper-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi48-app-mmapper-beta.png -------------------------------------------------------------------------------- /src/resources/icons/hi48-app-mmapper-release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi48-app-mmapper-release.png -------------------------------------------------------------------------------- /src/resources/icons/hi96-app-mmapper-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi96-app-mmapper-beta.png -------------------------------------------------------------------------------- /src/resources/icons/hi96-app-mmapper-release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/hi96-app-mmapper-release.png -------------------------------------------------------------------------------- /src/resources/icons/infomarkcreate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/infomarkcreate.png -------------------------------------------------------------------------------- /src/resources/icons/infomarkdelete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/infomarkdelete.png -------------------------------------------------------------------------------- /src/resources/icons/infomarkedit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/infomarkedit.png -------------------------------------------------------------------------------- /src/resources/icons/infomarkselection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/infomarkselection.png -------------------------------------------------------------------------------- /src/resources/icons/layerdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/layerdown.png -------------------------------------------------------------------------------- /src/resources/icons/layerhome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/layerhome.png -------------------------------------------------------------------------------- /src/resources/icons/layerup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/layerup.png -------------------------------------------------------------------------------- /src/resources/icons/m-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/m-beta.png -------------------------------------------------------------------------------- /src/resources/icons/m-release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/m-release.png -------------------------------------------------------------------------------- /src/resources/icons/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/map.png -------------------------------------------------------------------------------- /src/resources/icons/mapmove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/mapmove.png -------------------------------------------------------------------------------- /src/resources/icons/merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/merge.png -------------------------------------------------------------------------------- /src/resources/icons/moveeast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/moveeast.png -------------------------------------------------------------------------------- /src/resources/icons/movenorth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/movenorth.png -------------------------------------------------------------------------------- /src/resources/icons/movesouth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/movesouth.png -------------------------------------------------------------------------------- /src/resources/icons/movewest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/movewest.png -------------------------------------------------------------------------------- /src/resources/icons/mumeprotocolcfg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/mumeprotocolcfg.png -------------------------------------------------------------------------------- /src/resources/icons/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/new.png -------------------------------------------------------------------------------- /src/resources/icons/neweast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/neweast.png -------------------------------------------------------------------------------- /src/resources/icons/newnorth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/newnorth.png -------------------------------------------------------------------------------- /src/resources/icons/newsouth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/newsouth.png -------------------------------------------------------------------------------- /src/resources/icons/newwest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/newwest.png -------------------------------------------------------------------------------- /src/resources/icons/offline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/offline.png -------------------------------------------------------------------------------- /src/resources/icons/onewayconnectioncreate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/onewayconnectioncreate.png -------------------------------------------------------------------------------- /src/resources/icons/online.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/online.png -------------------------------------------------------------------------------- /src/resources/icons/open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/open.png -------------------------------------------------------------------------------- /src/resources/icons/parsercfg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/parsercfg.png -------------------------------------------------------------------------------- /src/resources/icons/paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/paste.png -------------------------------------------------------------------------------- /src/resources/icons/pathmachinecfg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/pathmachinecfg.png -------------------------------------------------------------------------------- /src/resources/icons/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/play.png -------------------------------------------------------------------------------- /src/resources/icons/position-dead.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/position-dead.png -------------------------------------------------------------------------------- /src/resources/icons/position-fighting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/position-fighting.png -------------------------------------------------------------------------------- /src/resources/icons/position-incapacitated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/position-incapacitated.png -------------------------------------------------------------------------------- /src/resources/icons/position-resting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/position-resting.png -------------------------------------------------------------------------------- /src/resources/icons/position-sitting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/position-sitting.png -------------------------------------------------------------------------------- /src/resources/icons/position-sleeping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/position-sleeping.png -------------------------------------------------------------------------------- /src/resources/icons/position-standing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/position-standing.png -------------------------------------------------------------------------------- /src/resources/icons/preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/preferences.png -------------------------------------------------------------------------------- /src/resources/icons/raypick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/raypick.png -------------------------------------------------------------------------------- /src/resources/icons/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/reload.png -------------------------------------------------------------------------------- /src/resources/icons/roomconnecttoneighbours.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roomconnecttoneighbours.png -------------------------------------------------------------------------------- /src/resources/icons/roomcreate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roomcreate.png -------------------------------------------------------------------------------- /src/resources/icons/roomdelete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roomdelete.png -------------------------------------------------------------------------------- /src/resources/icons/roomedit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roomedit.png -------------------------------------------------------------------------------- /src/resources/icons/roomfind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roomfind.png -------------------------------------------------------------------------------- /src/resources/icons/roommergedown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roommergedown.png -------------------------------------------------------------------------------- /src/resources/icons/roommergeup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roommergeup.png -------------------------------------------------------------------------------- /src/resources/icons/roommovedown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roommovedown.png -------------------------------------------------------------------------------- /src/resources/icons/roommoveup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roommoveup.png -------------------------------------------------------------------------------- /src/resources/icons/roomselection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roomselection.png -------------------------------------------------------------------------------- /src/resources/icons/roomtemplate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/roomtemplate.png -------------------------------------------------------------------------------- /src/resources/icons/save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/save.png -------------------------------------------------------------------------------- /src/resources/icons/terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/terminal.png -------------------------------------------------------------------------------- /src/resources/icons/viewmag+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/viewmag+.png -------------------------------------------------------------------------------- /src/resources/icons/viewmag-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/viewmag-.png -------------------------------------------------------------------------------- /src/resources/icons/viewmagfit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/icons/viewmagfit.png -------------------------------------------------------------------------------- /src/resources/macosx/m-beta.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/macosx/m-beta.icns -------------------------------------------------------------------------------- /src/resources/macosx/m-release.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/macosx/m-release.icns -------------------------------------------------------------------------------- /src/resources/pixmaps/char-arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/char-arrows.png -------------------------------------------------------------------------------- /src/resources/pixmaps/char-room-sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/char-room-sel.png -------------------------------------------------------------------------------- /src/resources/pixmaps/door-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/door-down.png -------------------------------------------------------------------------------- /src/resources/pixmaps/door-east.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/door-east.png -------------------------------------------------------------------------------- /src/resources/pixmaps/door-north.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/door-north.png -------------------------------------------------------------------------------- /src/resources/pixmaps/door-south.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/door-south.png -------------------------------------------------------------------------------- /src/resources/pixmaps/door-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/door-up.png -------------------------------------------------------------------------------- /src/resources/pixmaps/door-west.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/door-west.png -------------------------------------------------------------------------------- /src/resources/pixmaps/exit-climb-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/exit-climb-down.png -------------------------------------------------------------------------------- /src/resources/pixmaps/exit-climb-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/exit-climb-up.png -------------------------------------------------------------------------------- /src/resources/pixmaps/exit-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/exit-down.png -------------------------------------------------------------------------------- /src/resources/pixmaps/exit-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/exit-up.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-armour.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-armour.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-attention.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-attention.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-boat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-boat.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-clock.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-coach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-coach.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-darkword.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-darkword.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-deathtrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-deathtrap.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-equipment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-equipment.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-ferry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-ferry.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-food.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-food.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-herb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-herb.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-horse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-horse.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-key.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-mail.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-mule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-mule.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-pack.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-rohirrim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-rohirrim.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-stable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-stable.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-trained.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-trained.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-treasure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-treasure.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-warg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-warg.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-watch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-watch.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-water.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-weapon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-weapon.png -------------------------------------------------------------------------------- /src/resources/pixmaps/load-whiteword.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/load-whiteword.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mellon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mellon.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-aggmob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-aggmob.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-armourshop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-armourshop.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-clericguild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-clericguild.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-elitemob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-elitemob.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-foodshop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-foodshop.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-guild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-guild.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-mageguild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-mageguild.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-milkable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-milkable.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-passivemob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-passivemob.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-petshop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-petshop.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-questmob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-questmob.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-rangerguild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-rangerguild.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-rattlesnake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-rattlesnake.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-rent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-rent.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-scoutguild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-scoutguild.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-shop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-shop.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-smob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-smob.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-warriorguild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-warriorguild.png -------------------------------------------------------------------------------- /src/resources/pixmaps/mob-weaponshop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/mob-weaponshop.png -------------------------------------------------------------------------------- /src/resources/pixmaps/no-ride.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/no-ride.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-all.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-e.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-es.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-esw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-esw.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-ew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-ew.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-n.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-ne.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-nes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-nes.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-new.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-none.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-ns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-ns.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-nsw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-nsw.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-nw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-nw.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-s.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-sw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-sw.png -------------------------------------------------------------------------------- /src/resources/pixmaps/road-w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/road-w.png -------------------------------------------------------------------------------- /src/resources/pixmaps/room-modified.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/room-modified.png -------------------------------------------------------------------------------- /src/resources/pixmaps/room-needs-update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/room-needs-update.png -------------------------------------------------------------------------------- /src/resources/pixmaps/room-sel-distant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/room-sel-distant.png -------------------------------------------------------------------------------- /src/resources/pixmaps/room-sel-move-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/room-sel-move-bad.png -------------------------------------------------------------------------------- /src/resources/pixmaps/room-sel-move-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/room-sel-move-good.png -------------------------------------------------------------------------------- /src/resources/pixmaps/room-sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/room-sel.png -------------------------------------------------------------------------------- /src/resources/pixmaps/splash-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/splash-beta.png -------------------------------------------------------------------------------- /src/resources/pixmaps/splash-release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/splash-release.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-in-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-in-down.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-in-east.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-in-east.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-in-north.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-in-north.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-in-south.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-in-south.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-in-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-in-up.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-in-west.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-in-west.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-out-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-out-down.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-out-east.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-out-east.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-out-north.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-out-north.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-out-south.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-out-south.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-out-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-out-up.png -------------------------------------------------------------------------------- /src/resources/pixmaps/stream-out-west.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/stream-out-west.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-brush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-brush.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-cavern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-cavern.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-city.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-city.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-field.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-field.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-forest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-forest.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-hills.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-hills.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-indoors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-indoors.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-mountains.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-mountains.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-rapids.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-rapids.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-road.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-road.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-shallow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-shallow.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-tunnel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-tunnel.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-undefined.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-undefined.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-underwater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-underwater.png -------------------------------------------------------------------------------- /src/resources/pixmaps/terrain-water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/terrain-water.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-all.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-e.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-es.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-esw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-esw.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-ew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-ew.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-n.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-ne.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-nes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-nes.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-new.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-none.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-ns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-ns.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-nsw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-nsw.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-nw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-nw.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-s.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-sw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-sw.png -------------------------------------------------------------------------------- /src/resources/pixmaps/trail-w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/trail-w.png -------------------------------------------------------------------------------- /src/resources/pixmaps/wall-east.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/wall-east.png -------------------------------------------------------------------------------- /src/resources/pixmaps/wall-north.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/wall-north.png -------------------------------------------------------------------------------- /src/resources/pixmaps/wall-south.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/wall-south.png -------------------------------------------------------------------------------- /src/resources/pixmaps/wall-west.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/pixmaps/wall-west.png -------------------------------------------------------------------------------- /src/resources/release.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | icons/m-release.png 4 | pixmaps/splash-release.png 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/font/frag.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform sampler2D uFontTexture; 5 | 6 | varying vec4 vColor; 7 | varying vec2 vTexCoord; 8 | 9 | void main() 10 | { 11 | gl_FragColor = vColor * texture2D(uFontTexture, vTexCoord); 12 | } 13 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/plain/acolor/frag.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform vec4 uColor; 5 | 6 | varying vec4 vColor; 7 | 8 | void main() 9 | { 10 | gl_FragColor = vColor * uColor; 11 | } 12 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/plain/acolor/vert.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform mat4 uMVP; 5 | 6 | attribute vec4 aColor; 7 | attribute vec3 aVert; 8 | 9 | varying vec4 vColor; 10 | 11 | void main() 12 | { 13 | vColor = aColor; 14 | gl_Position = uMVP * vec4(aVert, 1.0); 15 | } 16 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/plain/ucolor/frag.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform vec4 uColor; 5 | 6 | void main() 7 | { 8 | gl_FragColor = uColor; 9 | } 10 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/plain/ucolor/vert.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform mat4 uMVP; 5 | 6 | attribute vec3 aVert; 7 | 8 | void main() 9 | { 10 | gl_Position = uMVP * vec4(aVert, 1.0); 11 | } 12 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/point/frag.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform vec4 uColor; 5 | 6 | varying vec4 vColor; 7 | 8 | void main() 9 | { 10 | gl_FragColor = vColor * uColor; 11 | } 12 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/point/vert.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform mat4 uMVP; 5 | uniform float uPointSize; 6 | 7 | attribute vec4 aColor; 8 | attribute vec3 aVert; 9 | 10 | varying vec4 vColor; 11 | 12 | void main() 13 | { 14 | vColor = aColor; 15 | gl_PointSize = uPointSize; 16 | gl_Position = uMVP * vec4(aVert, 1.0); 17 | } 18 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/tex/acolor/frag.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform sampler2D uTexture; 5 | uniform vec4 uColor; 6 | 7 | varying vec4 vColor; 8 | varying vec2 vTexCoord; 9 | 10 | void main() 11 | { 12 | gl_FragColor = vColor * uColor * texture2D(uTexture, vTexCoord); 13 | } 14 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/tex/acolor/vert.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform mat4 uMVP; 5 | 6 | attribute vec4 aColor; 7 | attribute vec2 aTexCoord; 8 | attribute vec3 aVert; 9 | 10 | varying vec4 vColor; 11 | varying vec2 vTexCoord; 12 | 13 | void main() 14 | { 15 | vColor = aColor; 16 | vTexCoord = aTexCoord; 17 | gl_Position = uMVP * vec4(aVert, 1.0); 18 | } 19 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/tex/ucolor/frag.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform sampler2D uTexture; 5 | uniform vec4 uColor; 6 | 7 | varying vec2 vTexCoord; 8 | 9 | void main() 10 | { 11 | gl_FragColor = uColor * texture2D(uTexture, vTexCoord); 12 | } 13 | -------------------------------------------------------------------------------- /src/resources/shaders/legacy/tex/ucolor/vert.glsl: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | uniform mat4 uMVP; 5 | 6 | attribute vec2 aTexCoord; 7 | attribute vec3 aVert; 8 | 9 | varying vec2 vTexCoord; 10 | 11 | void main() 12 | { 13 | vTexCoord = aTexCoord; 14 | gl_Position = uMVP * vec4(aVert, 1.0); 15 | } 16 | -------------------------------------------------------------------------------- /src/resources/win32/beta.rc: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON DISCARDABLE "./resources/win32/m-beta.ico" 2 | -------------------------------------------------------------------------------- /src/resources/win32/m-beta.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/win32/m-beta.ico -------------------------------------------------------------------------------- /src/resources/win32/m-release.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/src/resources/win32/m-release.ico -------------------------------------------------------------------------------- /src/resources/win32/release.rc: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON DISCARDABLE "./resources/win32/m-release.ico" 2 | -------------------------------------------------------------------------------- /src/syntax/Accept.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "Accept.h" 5 | 6 | #include 7 | #include 8 | 9 | namespace syntax { 10 | 11 | Accept::Accept(Accept::Function fn, std::string help) 12 | : m_function(std::make_shared(std::move(fn))) 13 | , m_help(std::move(help)) 14 | { 15 | if (*m_function == nullptr) { 16 | throw NullPointerException(); 17 | } 18 | } 19 | 20 | Accept Accept::convert(Function2 fn, std::string help) 21 | { 22 | return Accept( 23 | [callback = std::move(fn)](User &u, const Pair *args) -> void { 24 | const auto argv = getAnyVectorReversed(args); 25 | callback(u, argv); 26 | }, 27 | std::move(help)); 28 | } 29 | 30 | void Accept::call(User &user, const Pair *const matched) const 31 | { 32 | m_function->operator()(user, matched); 33 | } 34 | 35 | std::ostream &operator<<(std::ostream &os, const Accept &accept) 36 | { 37 | return os << "Accept{" << accept.m_help << "}"; 38 | } 39 | 40 | } // namespace syntax 41 | -------------------------------------------------------------------------------- /src/syntax/Accept.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../global/NullPointerException.h" 6 | #include "User.h" 7 | #include "Value.h" 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | namespace syntax { 14 | 15 | class NODISCARD Accept final 16 | { 17 | public: 18 | using Function = std::function; 19 | using Function2 = std::function; 20 | 21 | private: 22 | std::shared_ptr m_function; 23 | std::string m_help; 24 | 25 | public: 26 | Accept() = delete; 27 | DEFAULT_RULE_OF_5(Accept); 28 | 29 | explicit Accept(Function fn, std::string help); 30 | NODISCARD static Accept convert(Function2 fn, std::string help); 31 | 32 | void operator()(User &user, const Pair *const matched) const { call(user, matched); } 33 | void call(User &user, const Pair *matched) const; 34 | NODISCARD const std::string &getHelp() const { return m_help; } 35 | 36 | public: 37 | friend std::ostream &operator<<(std::ostream &os, const Accept &accept); 38 | }; 39 | 40 | } // namespace syntax 41 | -------------------------------------------------------------------------------- /src/syntax/IArgument.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "IArgument.h" 5 | 6 | #include 7 | 8 | namespace syntax { 9 | 10 | IArgument::~IArgument() = default; 11 | 12 | MatchResult IArgument::match(const ParserInput &input, IMatchErrorLogger *logger) const 13 | { 14 | return virt_match(input, logger); 15 | } 16 | 17 | std::ostream &IArgument::to_stream(std::ostream &os) const 18 | { 19 | return virt_to_stream(os); 20 | } 21 | 22 | std::ostream &operator<<(std::ostream &os, const IArgument &arg) 23 | { 24 | return arg.to_stream(os); 25 | } 26 | 27 | } // namespace syntax 28 | -------------------------------------------------------------------------------- /src/syntax/IArgument.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "MatchResult.h" 6 | 7 | #include 8 | #include 9 | 10 | namespace syntax { 11 | 12 | struct IMatchErrorLogger; 13 | class ParserInput; 14 | 15 | struct NODISCARD IArgument 16 | { 17 | public: 18 | virtual ~IArgument(); 19 | IArgument() = default; 20 | DEFAULT_CTORS_AND_ASSIGN_OPS(IArgument); 21 | 22 | private: 23 | NODISCARD virtual MatchResult virt_match(const ParserInput &input, 24 | IMatchErrorLogger *logger) const = 0; 25 | virtual std::ostream &virt_to_stream(std::ostream &) const = 0; 26 | 27 | public: 28 | NODISCARD MatchResult match(const ParserInput &input, IMatchErrorLogger *logger) const; 29 | std::ostream &to_stream(std::ostream &os) const; 30 | 31 | public: 32 | friend std::ostream &operator<<(std::ostream &os, const IArgument &arg); 33 | }; 34 | 35 | } // namespace syntax 36 | -------------------------------------------------------------------------------- /src/syntax/IMatchErrorLogger.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../global/RuleOf5.h" 6 | #include "../global/macros.h" 7 | 8 | #include 9 | 10 | namespace syntax { 11 | 12 | struct NODISCARD IMatchErrorLogger 13 | { 14 | public: 15 | IMatchErrorLogger() = default; 16 | virtual ~IMatchErrorLogger(); 17 | DEFAULT_CTORS_AND_ASSIGN_OPS(IMatchErrorLogger); 18 | 19 | private: 20 | virtual void virt_logError(std::string s) = 0; 21 | 22 | public: 23 | void logError(std::string s) { virt_logError(std::move(s)); } 24 | }; 25 | 26 | } // namespace syntax 27 | -------------------------------------------------------------------------------- /src/syntax/TokenMatcher.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2019 The MMapper Authors 3 | 4 | #include "TokenMatcher.h" 5 | 6 | #include "../global/TextUtils.h" 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | namespace syntax { 13 | 14 | IMatchErrorLogger::~IMatchErrorLogger() = default; 15 | 16 | MatchResult TokenMatcher::tryMatch(const ParserInput &sv, IMatchErrorLogger *logger) const 17 | { 18 | return m_self->match(sv, logger); 19 | } 20 | 21 | std::ostream &operator<<(std::ostream &os, const TokenMatcher &token) 22 | { 23 | // os << "TokenMatcher("; 24 | os << *token.m_self; 25 | // os << ")"; 26 | return os; 27 | } 28 | 29 | } // namespace syntax 30 | -------------------------------------------------------------------------------- /src/syntax/User.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../global/AnsiOstream.h" 6 | #include "../global/macros.h" 7 | 8 | struct NODISCARD User 9 | { 10 | private: 11 | AnsiOstream &m_aos; 12 | 13 | public: 14 | explicit User(AnsiOstream &aos) 15 | : m_aos{aos} 16 | {} 17 | 18 | NODISCARD AnsiOstream &getOstream() const { return m_aos; } 19 | }; 20 | -------------------------------------------------------------------------------- /src/viewers/AnsiViewWindow.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "global/macros.h" 6 | 7 | #include 8 | #include 9 | 10 | #include 11 | #include 12 | 13 | class QTextBrowser; 14 | 15 | class NODISCARD AnsiViewWindow final : public QMainWindow 16 | { 17 | private: 18 | std::unique_ptr m_view; 19 | 20 | public: 21 | explicit AnsiViewWindow(const QString &program, const QString &title, std::string_view message); 22 | ~AnsiViewWindow() final; 23 | }; 24 | 25 | // Yes, this interface is a bit silly to mix Qt and std types, 26 | // but the program/title are for the UI, 27 | // while the body is interpreted to format text into a document. 28 | NODISCARD std::unique_ptr makeAnsiViewWindow(const QString &program, 29 | const QString &title, 30 | std::string_view body); 31 | -------------------------------------------------------------------------------- /src/viewers/TopLevelWindows.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include 6 | 7 | class QString; 8 | class QMainWindow; 9 | 10 | extern void initTopLevelWindows(); 11 | extern void destroyTopLevelWindows(); 12 | extern void addTopLevelWindow(std::unique_ptr window); 13 | -------------------------------------------------------------------------------- /tests/TestCTimers.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2023 The MMapper Authors 4 | 5 | #include "../src/global/macros.h" 6 | 7 | #include 8 | 9 | class NODISCARD_QOBJECT TestCTimers final : public QObject 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | TestCTimers(); 15 | ~TestCTimers() final; 16 | 17 | private Q_SLOTS: 18 | void testAddRemoveTimer(); 19 | void testAddRemoveCountdown(); 20 | void testElapsedTime(); 21 | void testCountdownCompletion(); 22 | void testClearFunctionality(); 23 | void testMultipleTimersAndCountdowns(); 24 | }; 25 | -------------------------------------------------------------------------------- /tests/TestGroup.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MUME/MMapper/aa6e658df766e0918139abcfcae463a0285af7a5/tests/TestGroup.cpp -------------------------------------------------------------------------------- /tests/TestMainWindow.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../src/global/macros.h" 6 | 7 | #include 8 | 9 | class NODISCARD_QOBJECT TestMainWindow final : public QObject 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | TestMainWindow(); 15 | ~TestMainWindow() final; 16 | 17 | private: 18 | private Q_SLOTS: 19 | void updaterTest(); 20 | }; 21 | -------------------------------------------------------------------------------- /tests/TestMap.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | // Copyright (C) 2024 The MMapper Authors 3 | 4 | #include "TestMap.h" 5 | 6 | #include "../src/global/HideQDebug.h" 7 | #include "../src/map/Diff.h" 8 | #include "../src/map/Map.h" 9 | #include "../src/map/TinyRoomIdSet.h" 10 | #include "../src/map/sanitizer.h" 11 | 12 | #include 13 | #include 14 | 15 | TestMap::TestMap() = default; 16 | 17 | TestMap::~TestMap() = default; 18 | 19 | void TestMap::diffTest() 20 | { 21 | mmqt::HideQDebug forThisTest; 22 | test::testMapDiff(); 23 | } 24 | 25 | void TestMap::mapTest() 26 | { 27 | mmqt::HideQDebug forThisTest; 28 | test::testMap(); 29 | } 30 | 31 | void TestMap::sanitizerTest() 32 | { 33 | mmqt::HideQDebug forThisTest; 34 | test::testSanitizer(); 35 | } 36 | 37 | void TestMap::tinyRoomIdSetTest() 38 | { 39 | mmqt::HideQDebug forThisTest; 40 | test::testTinyRoomIdSet(); 41 | } 42 | 43 | QTEST_MAIN(TestMap) 44 | -------------------------------------------------------------------------------- /tests/TestMap.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2024 The MMapper Authors 4 | 5 | #include "../src/global/macros.h" 6 | 7 | #include 8 | 9 | class NODISCARD_QOBJECT TestMap final : public QObject 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | TestMap(); 15 | ~TestMap() final; 16 | 17 | private Q_SLOTS: 18 | static void diffTest(); 19 | static void mapTest(); 20 | static void sanitizerTest(); 21 | static void tinyRoomIdSetTest(); 22 | }; 23 | -------------------------------------------------------------------------------- /tests/TestProxy.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../src/global/macros.h" 6 | 7 | #include 8 | 9 | class NODISCARD_QOBJECT TestProxy final : public QObject 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | TestProxy() = default; 15 | ~TestProxy() override = default; 16 | 17 | private Q_SLOTS: 18 | static void escapeTest(); 19 | static void gmcpMessageDeserializeTest(); 20 | static void gmcpMessageSerializeTest(); 21 | static void gmcpModuleTest(); 22 | static void telnetFilterTest(); 23 | }; 24 | -------------------------------------------------------------------------------- /tests/roompanel/TestRoomManager.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2023 The MMapper Authors 4 | 5 | #include "../src/global/macros.h" 6 | #include "../src/roompanel/RoomManager.h" 7 | 8 | #include 9 | 10 | class NODISCARD_QOBJECT TestRoomManager final : public QObject 11 | { 12 | Q_OBJECT 13 | 14 | private: 15 | RoomManager &m_manager; 16 | 17 | public: 18 | explicit TestRoomManager(RoomManager &manager); 19 | ~TestRoomManager() final; 20 | 21 | private: 22 | private Q_SLOTS: 23 | void init(); 24 | void cleanup(); 25 | void testSlotReset(); 26 | void testParseGmcpAddValidMessage(); 27 | void testParseGmcpInvalidMessage(); 28 | void testParseGmcpUpdateValidMessage(); 29 | }; 30 | -------------------------------------------------------------------------------- /tests/roompanel/TestRoomMob.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2023 The MMapper Authors 4 | 5 | #include "../src/global/macros.h" 6 | 7 | #include 8 | 9 | class NODISCARD_QOBJECT TestRoomMob final : public QObject 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | TestRoomMob(); 15 | ~TestRoomMob() final; 16 | 17 | private: 18 | private Q_SLOTS: 19 | void testInitialization(); 20 | void testSetGetId(); 21 | void testSetGetField(); 22 | void testAllocAndUpdate(); 23 | void testFlagsAndFields(); 24 | }; 25 | -------------------------------------------------------------------------------- /tests/roompanel/TestRoomMobs.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2023 The MMapper Authors 4 | 5 | #include "../src/global/macros.h" 6 | 7 | #include 8 | 9 | class NODISCARD_QOBJECT TestRoomMobs final : public QObject 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | TestRoomMobs(); 15 | ~TestRoomMobs() final; 16 | 17 | private Q_SLOTS: 18 | void testAddMob(); 19 | void testRemoveMobById(); 20 | void testUpdateMob(); 21 | void testResetMobs(); 22 | }; 23 | -------------------------------------------------------------------------------- /tests/testadventure.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2023 The MMapper Authors 4 | 5 | #include "../src/adventure/lineparsers.h" 6 | #include "../src/global/macros.h" 7 | 8 | #include 9 | 10 | class NODISCARD_QOBJECT TestAdventure final : public QObject 11 | { 12 | Q_OBJECT 13 | 14 | private slots: 15 | static void testSessionHourlyRateXP(); 16 | static void testAchievementParser(); 17 | static void testHintParser(); 18 | static void testKillAndXPParser(); 19 | static void testE2E(); 20 | }; 21 | -------------------------------------------------------------------------------- /tests/testclock.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../src/global/macros.h" 6 | 7 | #include 8 | 9 | class NODISCARD_QOBJECT TestClock final : public QObject 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | TestClock(); 15 | ~TestClock() final; 16 | 17 | private Q_SLOTS: 18 | // MumeClock 19 | void mumeClockTest(); 20 | void parseMumeTimeTest(); 21 | void getMumeMonthTest(); 22 | void parseWeatherTest(); 23 | void parseWeatherClockSkewTest(); 24 | void parseClockTimeTest(); 25 | void precsionTimeoutTest(); 26 | void moonClockTest(); 27 | }; 28 | -------------------------------------------------------------------------------- /tests/testexpandoracommon.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../src/map/RoomHandle.h" 6 | #include "../src/map/parseevent.h" 7 | #include "../src/map/room.h" 8 | 9 | #include 10 | #include 11 | 12 | #include 13 | 14 | struct NODISCARD QtRoomWrapper final 15 | { 16 | std::shared_ptr shared; 17 | 18 | NODISCARD auto getTerrainType() const { return shared->getTerrainType(); } 19 | NODISCARD decltype(auto) getExit(ExitDirEnum dir) const { return shared->getExit(dir); } 20 | }; 21 | 22 | Q_DECLARE_METATYPE(QtRoomWrapper); 23 | Q_DECLARE_METATYPE(ParseEvent) 24 | Q_DECLARE_METATYPE(ComparisonResultEnum) 25 | 26 | class NODISCARD_QOBJECT TestExpandoraCommon final : public QObject 27 | { 28 | Q_OBJECT 29 | 30 | public: 31 | TestExpandoraCommon(); 32 | ~TestExpandoraCommon() final; 33 | 34 | private: 35 | private Q_SLOTS: 36 | void roomCompareTest_data(); 37 | void roomCompareTest(); 38 | }; 39 | -------------------------------------------------------------------------------- /tests/testparser.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | // Copyright (C) 2019 The MMapper Authors 4 | 5 | #include "../src/global/macros.h" 6 | 7 | #include 8 | 9 | class NODISCARD_QOBJECT TestParser final : public QObject 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | TestParser(); 15 | ~TestParser() final; 16 | 17 | private Q_SLOTS: 18 | // ParserUtils 19 | static void createParseEventTest(); 20 | static void removeAnsiMarksTest(); 21 | static void toAsciiTest(); 22 | }; 23 | --------------------------------------------------------------------------------