EVN Map Editor

EVN Cartographer-like

Hi guys,
I've got a alpha test version of a Cartographer replacement. I called it EVNMap, but it needs a better name.

This is the google project page :
http://code.google.com/p/evnmap/
It is hosting the source code and compiled binaries. Contact me if you'd like to contribute.

I also need some testers. Tell me what you like and don't like. Things will change as I keep adding features like syst name, hyperjump routes, etc.

instructs
to make a new syst: click on the map
to move an existing syst: click and drag the circle
to open a rez file: file>open

Downloads:
http://code.google.com/p/evnmap/downloads/list

0.4.2a DA remix 24 May
This is a branch from the trunk as per DA's post below, plus a little extra 🙂
Initial UI implementation

0.4.1a 23 May
Timer based updates. It's a real hyperspace party now!
Fixed resource name parsing

0.4a 23 May
Hyperspace connections are drawn on the map
Like my hyperspace effects?

0.3.1a DA/NC branch 22 May
Frame buffering for Windows - flicker is gone

0.3a 19 May
Rewritten Rez IO class
Frame buffering for Windows - hopefully flicker is gone

0.2.1a 14 May
System names appear below icon

0.2a 14 May
Scroll around the map

0.1a 13 May
Open a rez file
Load Syst data
Display Syst Locations
Add/Modify Syst Locations
Graphical additions to make placement easier

To be implemented:
Edit Syst values(name, x and y done)
Edit system connections
Save rez file
Clipboard

future ideas
double click on syst to edit spobs
edit and test modes
test mode will simulate basic parts of the nova engine
ie land on a planet, etc.

This post has been edited by Tycho : 26 May 2010 - 08:21 PM

Cool, what display library are you using?

QUOTE (EVWeb @ May 14 2010, 09:28 AM) <{POST_SNAPBACK}>

Cool, what display library are you using?

It's currently written in RealBasic. This is just a prototype of an idea. I'm just figuring out the logistics of the rez file format and such at the moment. The plan is to rewrite for whatever platforms that need it the most, as natively as possible. ie mac: obj-c&cocoa, win:c++&.net, lin: c&sdl

btw: star devastion is effing awesome!

This post has been edited by Tycho : 14 May 2010 - 04:05 AM

I just checked out the Windows version. I can place systems, but I can't seem to edit them in any way, create hyperlinks, or save the file.

I'm alive! Nice to see some graphical development; RezEditor looks like it'll be command-line only for a while.
A good idea for a feature: clipboard support.

For EVNEW's single-resource clipboard implementation, see:
int CEditor::EditCopy(void) in EVNEW.cpp
Note that the "type" is an index: boom = 0, char = 1 .. weap = 29.

I have clipboard working in RezEditor and am waiting for DA to give details of his clipboard format.

Edit: also, my (original) .rez file routines are likely to be more useful than EVNEW's, though I'm a bit ashamed about some of the implementation bits.

This post has been edited by Nonconventionally Creative : 14 May 2010 - 09:14 PM

Hey krugeruwsp,
Thanks for trying out the win build. it's the only one i haven't been able to try.
I list all the features currently implemented in the version log in the OP. So, yes, i don't mention saving or stuff like that, because it isn't implemented yet. Just like hyperspace routes as i mention in the OP as well.

Are you able to move a system around the map by clicking and dragging it?

And thanks nonconventional, I've been dissecting the rez file with a hex tool. it's a fairly easy format. The EVN bible helps too.
Also, can you describe how you would see the clipboard function interaction? Like, a lasso tool to select a bunch of systems, copy into system clipboard or custom 'working area' clipboard?
I think I like the idea of a custom clipboard. Where it's more like a work bench where the user could modify the copy easily, then paste back into the master map. I could also make multiple clipboard areas, instead of just one.
I also noticed you haven't added the syst resource offsets to ResourceDataOffsets.java. Did you need them?

I might have a new build up later.

This post has been edited by Tycho : 14 May 2010 - 10:25 PM

Clipboard is for transferring data between applications (though it is possible to create other "Clipboard"s, and at least in Java they are used to implement Drag-and-Drop - but, what you do internally is ). It's sad that EVNEW only supports one item on the clipboard at once, I guess I wasn't thinking enough. But MC's clipboard format (which I think supports multiple), and RezEditor's if I use a different one, would be useful.

One idea: I could have a script command to avoid creating a temporary file:

CODE

new ProcessBuilder("evnmap","--fromclipboard").start().waitFor();

... although, the clipboard is invalidated when process ends so I couldn't get it back.

In Java you can receive events when a new type of data is on the clipboard, but not when just new data is, so I can't keep updated that way... though I can also detect losing being the "clipboard owner", I guess. But even if I could, there's no saying there isn't lag such that the sending program exits before putting the stuff on the clipboard.

I guess --clipboard could have a contract, say, "write a byte to stdout when done editing stuff, then read a byte from stdin before exiting" since I expect you don't use those otherwise (stderr, of course, is not part of any contract). Or it could require special signatures if you need them otherwise. I guess your output could have a few op codes, CANCEL/UPDATE/EXIT
It's your call, worst case I can always create a temp file. You know, come to think of it, a temp file would be a much saner and simpler way to do things.

But, just having a clipboard to allow the user to manually "update from clipboard" / "send updates to clipboard".

We wouldn't have nearly as many points of discussion if you were writing in Java, since I could just load it into my VM.
But I know how much of a pain the Java GUI libraries are. Though, I was needing to dynamically generate things, or at least manually generate a lot, you could probably bear to get some basic buttons with listeners and then use Java2D to draw the map and a MouseListener and MouseMotionListener to do editing. (It still seems foreign to me to have an event pushing system instead of having to poll for them; you have to remember not to do anything expensive in the listeners so as not to freeze all of your other windows, which practically requires a good understanding of multithreaded programming)
But, again, your call. Whatever API you know, use. Though I don't recommend SDL for this type of thing; you probably will want something that can pop up new windows. Also, SDL without a C++ wrapper is a pain.

Also, that version of ResourceDataOffsets.java is out of date, though I haven't actually filled in the syst resource, but it's not hard now that I'm competent in C++ and passingly familiar with the EVNEW source, and besides, right now I really want resources in terms of streams instead of absolute offsets (I'm working on a script to do the conversion automatically, when that part is done the files will be easily editable so people can correct them); that file is meant to aid in creating GUIs manually, e.g.

CODE

//pseudocode
import static ResourceDataOffsets.bööm;
Window wnd = new Window(data);
wnd.addNamedShortField("Frame Advance", bööm.FRAMEADVANCE);
wnd.display();

Eh, I don't want to clutter your thread with these things. Write a program, and I should be ready to deal with it. If you want help understanding stuff or planning stuff that would be clutter to users, either PM me or ask me for my gmail to chat or, if applicable, post in my thread, which is plenty cluttered. One of these days I'll release something meaningful and declare RezEditor a beta, just so I can meaningfully make a new thread.

Actually, I can't seem to find any documentation with the file I downloaded, either, though I didn't look in the folder that said for Mac. Clicking on systems and dragging does not allow me to move them. However, I'm thrilled to keep testing things for you. I seem to be one of the resident Windows guys. I also have access to a PPC G5 Mac.

yep, there is no documentation.
basically it's:

to make a new syst: click on the map
to move an existing syst: click and drag the circle
to open a rez file: file>open

that's it for the moment. thanks for testing.

nonconventional:
i'd only write in java if i was targeting solaris.
SDL is written in C. most *nix users know C, not C++. Gtk or similar would be used for UI stuff.
i'm not really sure about the clipboard thing. give me a situation where someone would use the clipboard to get syst data to another app. there'd be no point in implementing it just for MC and RezEditor.

QUOTE (Tycho @ May 15 2010, 07:52 PM) <{POST_SNAPBACK}>

yep, there is no documentation.
basically it's:

to make a new syst: click on the map
to move an existing syst: click and drag the circle
to open a rez file: file>open

that's it for the moment. thanks for testing.

nonconventional:
i'd only write in java if i was targeting solaris.
SDL is written in C. most *nix users know C, not C++. Gtk or similar would be used for UI stuff.
i'm not really sure about the clipboard thing. give me a situation where someone would use the clipboard to get syst data to another app. there'd be no point in implementing it just for MC and RezEditor.

And let's face it: who ever uses Solaris? I'm only even aware of it by reputation; don't know anybody who uses it or ever has.

One of my friends is a professional computer programmer who operates a private consulting practice out of Chapel Hill, NC. He says that there are essentially two different types of programming languages: those written by engineers, and those written by teachers. Java is the latter; C, C++ and VisualBasic are the former. Using an engineering language is more difficult for the designer, but gives more options, and generally gives a superior result (in my experience).

i use solaris at work. it's quite popular as it handles specific things very well. much better that popular alternatives. ie windows/darwin

my point was that i am trying to develop as natively as possible for a particular platform. the most native platform for java would be solaris as there is no actual javaOS, just a VM. so, arguably, anything that runs the javaVM natively would therefor run java bytecode natively. ie macosx.
arguments aside though, i already am competent in java and wish to work on a project in something else.

QUOTE (StarSword @ May 15 2010, 10:23 PM) <{POST_SNAPBACK}>

He says that there are essentially two different types of programming languages: those written by engineers, and those written by teachers. Java is the latter; C, C++ and VisualBasic are the former. Using an engineering language is more difficult for the designer, but gives more options, and generally gives a superior result (in my experience).

I don't think I can agree with this precise distinction. Java, precisely because of its vague, 'forgiving' nature, is not really suited for teaching. (Nor is it really suited for any other purpose, but that's another story.) The languages invented by teachers tend to be obscure ones like Scheme, which are actually designed to be harder to use than the normal kind. The idea is to force the students to actually understand the theory behind what they're writing, and prevent them from becoming sloppily dependent on shortcuts.

For practical purposes, I'm really impressed by Objective-C/Cocoa, but I've stuck with REALbasic for MissionComputer. It has numerous features that range from annoying to infuriating, but that's offset by the unlikelihood of ever getting around to replicating the huge code base I already have in any other language, and the ease of cross-platform transitions (first to Mac OS X from the original Classic version, and now potentially to Windows).

QUOTE (David Arthur @ May 17 2010, 09:35 AM) <{POST_SNAPBACK}>

I don't think I can agree with this precise distinction. Java, precisely because of its vague, 'forgiving' nature, is not really suited for teaching. (Nor is it really suited for any other purpose, but that's another story.) The languages invented by teachers tend to be obscure ones like Scheme, which are actually designed to be harder to use than the normal kind. The idea is to force the students to actually understand the theory behind what they're writing, and prevent them from becoming sloppily dependent on shortcuts.

Well, I admit I could be misremembering what Ken said, at least as far as which languages are in which category. My point was that different languages can give different quality of results. Ken, my brother and I worked for a couple years redesigning and debugging a laboratory control application in VisualBasic (I have to say one thing in Microsoft's favor: they did an incredible job with Visual Studio). Now Ken and I are using LabView for much the same purpose, except we're working from the ground up this time.

I'm not saying Java is a bad language (if I'm not mistaken, the entirety of the MMO RuneScape is written in Java), but it has its limitations, as does everything short of the Lord God Almighty.

you all saw it. StarSword mentioned religion. game over man, game over.

i'm currently looking into rendering a pict resource. lots o fun.
any suggestions from anyone?

I also am working on rendering PICT.
The format is a series of QuickDraw commands, unfortunately there are some inconsistencies in the documentation.
So far, I've written a basic interpreter that just skips over the opcodes with the correct argument length (Haven't actually tested it on a PICT resource yet).

I expect most (if not all) Nova images will use 0x009n codes.
Note that you can't parse regions with a size other than 10 (bounding rectangle only).
(At least for PICT, you get a meaningful result if you only interpret some of the opcodes, snd will be a real pain for me)

I'd appreciate it if you send back any changes, in whatever language. (I found Java a good first language to (i)learn(/ i), mainly for the GC, the organized package system, and the abundance of featuresome IDEs. C++ from Java is a bad idea without first learning C)

(Are you seriously saying you'd rewrite the same program in different languages AND toolkits, instead of just using a cross-platform one (e.g. wxWidgets maps to the native controls) in the first place?)

Attached File(s)

cheers, nonconventional. that's pretty much what i needed to know.

and yes, i will rewrite this as it is more of a basis for another game. one that requires a set of objects, joined in various ways. i'm thinking 3d space coordinates might be better for my purposes though.
secondly, realbasic is cross platform and i'll continue to post test builds with features i plan to incorporate into the main trunk.

0.3a release. link up top.
rewrote the way data from the rez file is handled in memory. should be easier now to add other resource types.
also tried fixing the flickering in windows. i haven't tested yet.

Flickering in Win version still exists, but isn't much more than mildly annoying. I can now place and move systems. Will there be a way to edit hyperlinks or name systems?

hey krugeruwsp, cheers again for testing.

QUOTE (krugeruwsp @ May 19 2010, 06:39 PM) <{POST_SNAPBACK}>

Will there be a way to edit hyperlinks or name systems?

< simpsons quote>is there a chance the track could bend?
not on your life, my hindu friend</>

Do you want to describe to me how you would like to edit syst names and links?
eg.
names
1. double click a syst to edit the name
2. floating inspector window
links
1. control+click/drag a syst to create a new link
2. right click syst1, left click syst2. right click cancels.

what do you think? this app is intended for you guys, so you may as well design it. i'll just build it.
see my other posts in the cartographer thread: http://www.ambrosiasw.com/forums/index.php...t&p=2041838

edit: a note on flickering.
flickering occurs on the windows build because that OS does not double buffer its display.
the realbasic canvas class i am using to draw the map has a property called doubleBuffer which I set to true if the target platform is win32. I'm assuming this will be ignored on win64.
i may end up having to implement my own offscreen buffer for the canvas if i can't resolve tidily.

This post has been edited by Tycho : 19 May 2010 - 10:35 PM

What about a docked window that would have the system editor information? The graphical window would function as normal, but also allow for manual entry of system placement. Double clicking on a system could switch to an internal system editor that allows placement of spobs, dudes, perses, editing system attributes like murkiness and interference, ect. Closing that would bring you back to a universe editor that allows placement of systs, creation of hyperlinks, and placement of nebulae. You could perhaps make these options as tools in a toolbar dock. I'm picturing buttons that when pressed, allow you to "create/edit systems," "create/edit nebulae," and "create/edit hyperlinks."

In universe mode, the docked window would show current selected system ID, system name, editable coordinates, the six? slots for hyperlinks, and a button to switch to internal system editing. It would also recognize if the selected object is a system or a nebula object, and if a nebula object is selected, would switch out these attributes for the simpler nebula attributes: PICT IDs, coordinates, explore bits, ect.

In system mode, the coordinate window would show the internal system, and the docked window would have system information not listed in universe mode. Tool buttons here would be fairly limited to placing spobs, truth be told, so perhaps just placing that down in the docked window and not a toolbar. This would have editor slots for dudes, perses, spob nav number and coordinates, interference, murkiness, government, or other internal system attributes. Finally, a button to return to Universe Mode.

This idea would also require image import/export, as the editor would need rleD support and perhaps even spin support for spobs (unless it just places symbols for spobs instead of an imported image resource,) and PICT support for nebulae. I don't know how difficult that would be to program. I'm including a rough MSPaint sketch of my basic layout idea.

Attached File(s)