Coder Social home page Coder Social logo

spair / strongdmm Goto Github PK

View Code? Open in Web Editor NEW
120.0 4.0 67.0 226.89 MB

Robust map editor for BYOND

License: GNU General Public License v3.0

Go 100.00%
byond dmm ss13 dreammaker dm mapeditor strongdmm map editor sdmm go golang golang-application desktop tgm

strongdmm's Introduction

Strong Dream Map Maker · GitHub release Github All Releases CI

Download StrongDMM

Windows download link Linux download link macOS download ink


StrongDMM Logo

StrongDMM is an alternative yet robust map editor for BYOND.

It was built with the idea of creating a more flexible, fast, and extensible tool than the BYOND built-in map editor. The editor has the same features as DM, but provides much more and improves the general map editing experience.

Features

The editor offers a range of new features:

  • TGM support with built-in map merger (no need to use external scripts and pre-commit hooks);
  • Almost instant environment open;
  • Custom layers filter;
  • Built-in screenshot tool;
  • Smooth zoom-in/zoom-out;
  • Robust "Search";
  • Improved shortcuts;
  • Robust variables editor and variables preview;
  • Optional sanitization of variables;
  • Open with CLI.

...and a lot more...

StrongDMM Example

How to Use

StrongDMM is a single executable, which doesn't require any installation. You can download it from any of the provided links and start it right away.

Download Links:

Release page contains all distributed files. It also has sha256 hashes info for every executable for validation purposes.

CLI Usage

StrongDMM do support CLI to quickly open maps. Provide .dme or .dmm files as program arguments:

With DME
strongdmm.exe path/to/environment.dme ./map1.dmm ../path/map2.dmm
Without DME
strongdmm.exe ./map1.dmm ../path/map2.dmm

When providing .dmm files without .dme, a proper environment file will be found automatically.

Support

ko-fi

StrongDMM was developed without any monetization in mind. The main motivation is the enthusiasm for creating cool stuff.
Your support can demonstrate your appreciation and will motivate further development of the project.

Additionally, if you have specific features in mind that you'd like implemented in the editor, we can focus on your needs.
Feel free to reach out to me through my public contact to discuss details: E-Mail

FAQ

Q. My antivirus software detects something suspicious in the editor binaries. Is it ok?
A. Yes, it's a false positive reaction to the way Golang, the development language, creates binaries. Read more: Golang FAQ

Q. How do I verify my executables?
A. Verify them using sha256 hashes, available on the releases page.

Q. But how can I trust executables on the release page?
A. Executables are built with the CI pipeline. You can verify the process yourself or build the executables manually from the source code.

Q. How to uninstall the editor?
A. StrongDMM doesn't require installation, so no specific uninstallation process is needed. Simply delete the executable and, if desired, its directory on your OS to remove editor data.

Q. Where do I find editor data?
A. For Windows: C:\Users\USER\AppData\Roaming\StrongDMM, for Linux/macOS: ~/.strongdmm.

Q. How to move the map?
A. Drag the map using the middle mouse button, or by holding the space key. Alternatively, you can use the arrow keys.

Q. How to zoom?
A. Zoom using your mouse scroll wheel or the +/- keys on the keyboard.

Q. How to change the save format?
A. Go to File -> Preferences... in the menu bar and select the desired format.

Q. The editor crashed. Where can I find logs?
A. Access logs via the menu: Help -> Open Logs Folder.

How to Build

Building the application involves two steps:

  1. Build the sdmmparser library;
  2. Build the editor.

sdmmparser is a Rust library based on the SpacemanDMM parser and is compiled to a staticlib. It can be found at internal/third_party/sdmmparser/src.

Prerequisites

  • Go: version 1.20 or higher.
  • Rust: version 1.79.0.
  • (Optional) Task: for running build scripts.

For Windows

Ensure your Rust is configured to use the stable-x86_64-pc-windows-gnu toolchain, as Go can't use MSVC for builds and requires GNU. The easiest way to get the GNU compiler is to install MinGW through chocolatey, msys2, etc.

After installing MinGW, ensure that the path to its bin folder is added to the PATH environment variable.

For Linux

You may need to install dependencies for building GUI apps: sudo apt install xorg-dev libgtk-3-dev.

Steps

Using Task

Task is a cross-platform Make alternative with scripts in Taskfile.yml.

With Task installed:

  • task build: Builds sdmmparser and the editor (output in dst directory).
  • task run: Runs the editor (compiles first if needed).

Manually

  1. First, build the sdmmparser library.
    Navigate to third_party/sdmmparser/src and run cargo build --release.
    This step is needed only once unless sdmmparser is modified.
  2. In the root directory:
    • go build .: Builds the editor (executable named sdmm.exe/sdmm in the root).
    • go run .: Runs the editor.

Credits

StrongDMM uses SpacemanDMM parser made by SpaceManiac.
The application icon is designed by Clément "Topy".

License

See the LICENSE file for license rights and limitations (GPL-3.0).

strongdmm's People

Contributors

arthur-holiday avatar d0sboots avatar dependabot[bot] avatar igorsaux avatar itsmeow avatar kiborg04 avatar kuberoot avatar lemoninthedark avatar lettern avatar mc-oofert avatar out-of-phaze avatar spacemaniac avatar spair avatar thechosenevilone avatar ynot01 avatar zewaka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

strongdmm's Issues

Screenshot tool

Decoupled feature request from #21 by @KathrinBailey

Would it also be possible to get something akin to mapdiffbot and render an image of the entire map and put it on your clipboard, or save it as a .png or something? It'd be helpful to be able to get high resolution images of large parts of the map.

Map Corrupts after saving, unable to edit further

Editing a lavaland ruin for TG, after I saved it then compiled in dreammaker, it deleted a few tiles completely and replaced some other tiles with sinks as shown here:
image

Trying to save the file after this occurs causes StrongDMM to freeze completely and does not allow any other action to occur. I had to forcequit the application in task manager. Saving does not succeed.

Trying to edit the map in dreammaker afterwards gives this error
image

Feature Request: add "Overlay Ruler" and/or X/Y lock.

On BYOND DMM, the ability to move along a specific X or Y axis can be done using the Mouse Wheel, (+Control) to pan, while not moving your mouse.

This can be used for moving selections on a single axis, and can be helpful when shifting objects about.

As this keybind is not retained, the ability to shift things along one Axis (Ie X:025 to X:050) while retaining the same Axis (Ie Y:025) is made harder.

Adding in an Overlay Ruler, that displays a count of tiles under it, and has a visual Overlay that can aid in placement/moving of Selection Objects is desired.

Otherwise, the ability to Pan along a specific Axis (ie Byond DMM Control Scheme Parity or otherwise) while moving a selection is desired.

Idea: Readd synchronize maps option

An older version of StrongDMM seemed to have an option to synchronize coordinates when switching from one map to another which was very useful for Multiz mapping. Would it be possible to bring that feature back?

Reference:

image

New logo proposal

It has occured to me that the current logo isn't really suited for an app icon. I'm a graphic designer and I use Strong DMM. Here is a quick proposal for a new logo. If you're willing to change the logo, I can take any criticism on this proposal and I can create any number of logos till it's good.

If you want to keep the current one then you can close this issue.
strongDMM

Bug: holding the button when entering Edit... the crash occurs

(translated text from one language to another)
when trying to delay any button in Edit... (aka VV) when we edit a line, the program crashes. In my case, I changed the health value of the creature and to make it immortal, I held the zero button and got a crash.

Stuck on parsing environment

Every version since 0.2 gets stuck on parsing environment for me. Not sure if there are logs somewhere I could provide. The tree does load but the parsing environment popup never closes, not sure whether that is relevant.

Feature Request: Instance Editor Locator

Not sure where to put feature requests, so here it is.

The base BYOND editor has a function to locate instances within a .dmm file by right clicking on the instance and allowing you to jump between all instances of the instance within the map file.

Currently, you can only see the changed instance variables, so it would be great to have parity with the base BYOND editor.

Feature Request: Delete Instance in Obj Panel

Hello! First off i would like to say that i really enjoy SDMM right now as it is a very robust tool, even with the current threat of map corruption (Haven't run into it yet).

Would it be possible to get a feature that allows us to delete Instances from the Object Panel, or is that impossible?

2.
Would it also be possible to add a new window that shows every change done to the map from the very last time that the map was saved. so i.e a window that chows all area,turf,obj,mob etc changes with the option to undo ANY of them regardless of when said change was made in the list?

Opening bs12's torch-1.dmm crashes the application

Opening maps/torch/torch1_deck5.dmm at commit Baystation12/Baystation12@80e2f51 crashes the application. It gives the following stacktrace:

13:43:52.029 [main] ERROR strongdmm.StrongDMM$Companion - Unhandled exception
kotlin.KotlinNullPointerException: null
	at strongdmm.byond.dmm.parser.TGMParser.parse(TGMParser.kt:45)
	at strongdmm.byond.dmm.parser.DmmParser.parse(DmmParser.kt:12)
	at strongdmm.service.map.MapHolderService$handleOpenMap$1.invoke(MapHolderService.kt:170)
	at strongdmm.service.map.MapHolderService$handleOpenMap$1.invoke(MapHolderService.kt:28)
	at strongdmm.event.Event.reply(Event.kt:26)
	at strongdmm.service.EnvironmentService.handleFetchOpenedEnvironment(EnvironmentService.kt:46)
	at strongdmm.service.EnvironmentService.access$handleFetchOpenedEnvironment(EnvironmentService.kt:15)
	at strongdmm.service.EnvironmentService$2.invoke(EnvironmentService.kt:20)
	at strongdmm.service.EnvironmentService$2.invoke(EnvironmentService.kt:15)
	at strongdmm.event.EventBus.notify(EventBus.kt:19)
	at strongdmm.event.EventHandler$DefaultImpls.sendEvent(EventHandler.kt:13)
	at strongdmm.service.map.MapHolderService.sendEvent(MapHolderService.kt:28)
	at strongdmm.service.map.MapHolderService.handleOpenMap(MapHolderService.kt:169)
	at strongdmm.service.map.MapHolderService.access$handleOpenMap(MapHolderService.kt:28)
	at strongdmm.service.map.MapHolderService$2.invoke(MapHolderService.kt:44)
	at strongdmm.service.map.MapHolderService$2.invoke(MapHolderService.kt:28)
	at strongdmm.event.EventBus.notify(EventBus.kt:19)
	at strongdmm.event.EventHandler$DefaultImpls.sendEvent(EventHandler.kt:13)
	at strongdmm.ui.dialog.available_maps.ViewController.sendEvent(ViewController.kt:10)
	at strongdmm.ui.dialog.available_maps.ViewController.doOpenSelectedMapAndDispose(ViewController.kt:19)
	at strongdmm.ui.dialog.available_maps.View.process(View.kt:54)
	at strongdmm.ui.dialog.available_maps.AvailableMapsDialogUi.process(AvailableMapsDialogUi.kt:17)
	at strongdmm.StrongDMM.appLoop(StrongDMM.kt:100)
	at strongdmm.window.AppWindow.loop(AppWindow.kt:274)
	at strongdmm.window.AppWindow.start(AppWindow.kt:71)
	at strongdmm.StrongDMM$Companion.main(StrongDMM.kt:115)
	at strongdmm.StrongDMM.main(StrongDMM.kt)

Turfs after the first one on a tile are ignored

image

image

DM supports having more than one /turf on a tile.
If I recall correctly, turfs after the first are added as images to the first one. Or it could be the other way around. I don't remember.
/vg/station uses this feature to make shuttle corners with space underneath them, but we're probably stupid.

Is this something you would want to support?

Incorrect encoding

Version used: v0.0.10
OS: Windows 8.1 9600 SL (ru)

Sample map file used to reproduce issue: https://github.com/frosty-dev/white-dream-main/blob/master/_maps/map_files/BoxStation/BoxStationWhite.dmm

Incorrect mapfile reader result:

  • Original: name = "O2 в Чистоту"
  • Saved: name = "O2 ?? ??????????????"
  • Incorrect name in StrongDMM rendered context menu: Sample

Probably dupe of #15.

I think the main issue is with the reader, causing reader read the map in non-UTF-8 (probably ASCII) and saving in non-UTF-8 format. Yes, 513 uses UTF-8.

Comprehensive List of Changes since last Save

Decoupled feature request from #20 by @CinderWC

Would it also be possible to add a new window that shows every change done to the map from the very last time that the map was saved. so i.e a window that chows all area,turf,obj,mob etc changes with the option to undo ANY of them regardless of when said change was made in the list?

Feature Request: Edit Instance similar to DM & Screenshot tool

Once I tried the new StrongDMM (it's awesome and saves a ton of time) I told Cinder that you can't actually delete instances, do you kind of have a big giant list. You can't edit instances either.
It'd be really awesome if we had the ability to edit instances (and delete them of course).

Would it also be possible to get something akin to mapdiffbot and render an image of the entire map and put it on your clipboard, or save it as a .png or something? It'd be helpful to be able to get high resolution images of large parts of the map.

Thank you for the programme in general as well, once mapmerge2 stopped working for some reason, I got through a bunch of PRs just using the old StrongDMM to convert the save format from BYOND to TGM. I like the UI being similar to DM and how I can quickly edit pixel_x and pixel_y, as well as having the object tree and instance menu be readily available. The UI in general feels awesome.

Edit: I somehow managed to post this twice so I've closed this one. Sorry!

Crashing when editing specific variables of specific types

StrongDMM version: 1.1.0
Java version: 1.8.0_251
OS: Windows 10

I keep crashing when I try to edit specific variables of specific types. It's really strange because editing some variables of some types works totally fine, but there are some combinations that will consistently cause crashes!

To reproduce (if you have Goon code):
Load an existing map
Spawn in an /obj/item/clothing/shoes/red
Use the variable editor and filter for name
Try to change the name to something like "Rube Potter's shoes"
Crash

I know that's a really obscure test case, but I swear it's not just me; I asked another coder to follow my steps, and they crashed as well. If it were just limited to this single thing /obj/item/clothing/shoes/red, it'd be fine, but it seems sorta random and extends to more things, and I don't know which ones will cause crashes until they do.

# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x60a0ab5a, pid=2040, tid=14644
#
# JRE version: OpenJDK Runtime Environment (11.0.6+10) (build 11.0.6+10)
# Java VM: OpenJDK Client VM (11.0.6+10, mixed mode, serial gc, windows-x86)
# Problematic frame:
# V  [jvm.dll+0xeab5a]

Happy to provide the full error logs if they're useful.

Any action resets the current selection to its default instance

More of a quality of life thing than a bug, but any action such as deletions, varedits, etc. resets the currently selected object to having the default instance selected. It's irritating to have to reclick whatever instance you previously had selected every time you delete something.

Feature Request: Allow Zoom Level Locking and Presets

Related to Feature Request: Permit Key rebinding/presets for parity with DMM #39
DMM has preset Zoom Levels

These levels, at least in my use-case and very likely many of those editing SS13 maps, is left at 100%.
Zooming in and out is done at a dramatically reduced rate; the 100% zoom level is sufficient.

Zooming in beyond 100% in StrongDMM causes a visual change in sprites/turfs/etc as scaling and low texture quality (ie 32 vs 64 etc) becomes more apparent.

My use case; StrongDMM is always kept at what is closest to 100% zoom level on Byond DMM.

The Field of View at this "100%" zoom level is sufficient.
Sprites retain a consistent look and scaling.
Permit the ability to lock at this 100%.

Feature Request: More Visible Confirmation of Save.

Byond DMM crashes. It does this enough that it becomes a habit of Ctrl+S to save.

There is only 1 indicator that your map did save on StrongDMM.

An Asterisk next to the Map Name, in the Top Right most Window goes away.

Some form of more visual Feedback would be nice.
A Mouse Wheel Icon change would be Byond DMM Parity, and would be amazing.

This is really minor but I figured you wouldn't mind if I put it up.
If you find this too minor, go ahead and close this.

Presets in layers filter

Add an ability to create layers filter presets, so user will be able to quickly switch between them.

Feature Request: Edit Instance similar to DM

Once I tried the new StrongDMM (it's awesome and saves a ton of time) I told Cinder that you can't actually delete instances, do you kind of have a big giant list. You can't edit instances either.
It'd be really awesome if we had the ability to edit instances (and delete them of course).

Would it also be possible to get something akin to mapdiffbot and render an image of the entire map and put it on your clipboard, or save it as a .png or something? It'd be helpful to be able to get high resolution images of large parts of the map.

All edited tiles are overwritten with a certain tile when saving

I have had this particular issue happen twice. After working on the map for hours, I close all the other maps I am using for reference and then hit save all. When I open StrongDMM again, all of the tiles that I put objects on are overwritten with one particular tile I had edited earlier (I am not certain what determines the tile). It acts as if it is copy/pasted. Posted is a relevant image.
image

Feature Request: Permit Key rebinding/presets for parity with DMM

While a wonderful tool, the change in control scheme from DMM and the small preset changes DMM permits are notably lacking here.

Notable;
The change from mouse wheel to pan Left and Right, control to pan Up and Down,
And Shift at a higher speed.

The default and modified Click Behavior, as shown here

The different Redo bind (Control+Shift+Z vs Control+Y)

Others that I likely haven't found yet.

Specific mention;
Zoom on Mouse wheel used at a dramatically reduced rate compared to Pan on Mouse wheel.
Will make another Feature Request related to this.

Request; permit Key Rebinding, or a present option to switch over to the Control Scheme DMM uses, including it's preset configurable options.

Feature Request: Variables Preview to allow Editing/Jump to displayed Variable on Double-Click.

Variables Preview Window does not allow editing, nor auto-opening, nor auto-opening + jumping from within it.

Feature Requests:
Allow editing from within Variables Preview.
(Clicking within Purple Box to edit directly in Variables Preview window)

Add the ability that double clicking the Variables Preview automatically opens the Edit Variables window.
(Double clicking within Purple Box to automatically open Edit Variables Window)

Add the Ability to Double Click Variable Name within Variables Preview to Open Edit Variables Window, and to jump to that Variable.
(Double Clicking Purple Box Opens, and Jumps to that Variable.)

Map Saves Corrupt

After saving the map for some reason,
the map file: Erased, Corrupted, Some parts of the map are missing!
My version : 0.0.10
I hope this problem will be solved!

Bug: Uknown type removal causes serious bug.

Upon loading a map with unknown types, they are then deleted.
However, at least in the case of turfs, it seems to be impossible to place new ones down in the same spots. Even after saving and reloading the map.

Request: Find and Replace in Selection

Dream Maker has an option in it's right click menus to search for things in a selected area and replace them with another object or delete them by leaving the replace box blank. This is immensely useful for deleting items of the same type on mass, even if it is achievable by Ctrl+Shift+Clicking them individually.

KUTiRe7tiU

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.