ioan-chera / eureka-editor Goto Github PK
View Code? Open in Web Editor NEWEureka is a cross-platform map editor for the DOOM engine games.
Home Page: http://eureka-editor.sourceforge.net/
Eureka is a cross-platform map editor for the DOOM engine games.
Home Page: http://eureka-editor.sourceforge.net/
Eureka README ============= INTRODUCTION Eureka is a map editor for the classic DOOM games, and a few related games such as Heretic, Hexen and Strife. The supported operating systems are Linux (and other Unix-likes), Windows and macOS. WEB SITE http://eureka-editor.sourceforge.net/ FEATURES - Undo/Redo (multiple levels) - 3D view with good lighting emulation - Editable panels for things, linedefs, sectors (etc) - Browser for textures, flats, things (etc) - Key binding system - Built-in nodes builder SUPPORTED GAMES - DOOM - DOOM 2 - Final Doom - FreeDoom - HacX - Heretic - Hexen REQUIREMENTS - 128 MB of computer memory - 1024x720 or higher screen resolution - 3D accelerated graphics card - a keyboard and a two-button mouse - the data (iwad) file from a supported game COMPILATION See the INSTALL.txt document (in source code) RUNNING Command line: You can run Eureka from the command line, or it can be run from the desktop menu (on Linux: if your OS handles .desktop files as per the XDG specs). Eureka will need to be able to find an IWAD to run, if it cannot find any then the "Manage Wads" dialog will open up, allowing you to "Find" one (which is remembered for next time). You can open a PWAD file using the File/Open menu command, or start a new map with File/New command. You can also specify the PWAD to edit on the command line, either on its own or with the -file option: eureka -file masterpiece.wad If that PWAD contains multiple maps, you may need to specify which one to edit using the -warp option: eureka -file masterpiece.wad -warp 14 For a summary of useful command line options, type: eureka --help KEYBOARD AND MOUSE CONTROLS All Modes --------- LMB * select an object, drag to move the object(s) * click in empty area to clear the selection * click + drag in empty area to select a group of objects RMB * begin/continue line drawing (in vertex mode) * merge sectors (in sectors mode) * with CTRL pressed: bring up operation menu MMB * scroll the map around (by dragging) wheel : zoom in or out cursor keys : scroll the map F1 : operation menu TAB : toggle the 3D preview on or off ESC : cancel the current operation t : enter Thing mode l : enter Linedef mode s : enter Sector mode v : enter Vertex mode b : toggle the Browser on or off 1..9 : select the grid size (smallest to largest) CTRL-Z : undo (can be used multiple times) CTRL-Y : redo (i.e. undo the previous undo) CTRL-A : select all CTRL-I : invert the selection CTRL-U : unselect all ` (backquote) : unselect all HOME : zoom 2D viewport to show the whole map END : move 2D viewport to camera location ' (quote) : move 3D camera to position of mouse pointer f : toggle free mode vs grid snapping g : toggle grid on / off N : open next map in the current wad P : open previous map in the current wad j : jump to object (by its numeric id) J : toggle object number display o : copy and paste the selected objects c : copy properties from selected --> highlighted object C : copy properties from highlighted --> selected objects H : mirror objects horizontally V : mirror objects vertically R : rotate objects 90 degrees clockwise W : rotate objects 90 degrees anti-clockwise a : scroll map with the mouse r : scale selected objects with the mouse R : scale selected objects, allow stretching CTRL-R : rotate the selected objects (with the mouse) K : skew (shear) the selected objects \ : toggle the RECENT category in the Browser u : popup menu to set ratio lock z : popup menu to set current scale B : popup menu to set browser mode F8 : popup menu to set sector rendering mode ; : make the next key pressed META META-N : load next file in given list META-P : load previous file in given list META-F : apply a fresh tag to the current objects META-L : apply the last (highest) tag to the current objects Things Mode ----------- SPACE : add a new thing d : disconnect things at the same location m : move selected things to occupy the same location w : rotate things 45 degrees anti-clockwise x : rotate things 45 degrees clockwise Vertex Mode ----------- SPACE * begin/continue line drawing * with SHIFT key: always continue line drawing * with CTRL key: inhibit creation of sectors d : disconnect all linedefs at the selected vertices m : merge selected vertices into a single one u : unlock any current ratio lock I : reshape selected vertices into a line O : reshape selected vertices into a circle D : reshape selected vertices into a half-circle C : reshape selected vertices into a 120-degree arc Q : reshape selected vertices into a 240-degree arc Linedef Mode ------------ e : select a chain of linedefs E : select a chain of linedefs with same textures w : flip linedefs k : split linedefs in two A : auto-align offsets on all selected linedefs d : disconnect selected linedefs from the rest m : merge two one-sided linedefs into a two-sided linedef Sector Mode ----------- SPACE * add a new sector to area around the mouse pointer * if a sector is selected, copy that sector instead of using defaults d : disconnect sector(s) from their neighbors m : merge all selected sectors into a single one w : swap floor and ceiling textures i : increase light level I : decrease light level e : select sectors with same floor height E : select sectors with same floor texture D : select sectors with same ceiling texture , and < : lower floor heights . and > : raise floor heights [ and { : lower ceiling heights ] and } : raise ceiling heights 3D View ------- (cursor keys will move forward and back, turn left and right) (the WASD keys can also be used to move the camera) LMB : select walls, floors or ceilings MMB : turn or move the camera (by dragging the mouse) wheel : move camera forwards or backwards PGUP and PGDN : move camera up and down g : toggle gravity (i.e. as if the player was on the ground) e : popup menu to set edit mode o : toggle objects on or off META-v : drop to the ground META-l : toggle lighting on or off META-t : toggle texturing on or off F11 : increase brightness (gamma) r : adjust offsets on highlighted wall (with the mouse) c : clear offsets on highlighted wall x : align X offset with wall to the left y : align Y offset with wall to the left z : align both X + Y offsets X : align X offset with wall to the right Y : align Y offset with wall to the right Z : align both X + Y offsets COPYRIGHT and LICENSE Eureka DOOM Editor Copyright (C) 2014-2024 Ioan Chera Copyright (C) 2001-2020 Andrew Apted, et al Copyright (C) 1997-2003 Andre Majorel et al Eureka is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Eureka is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
I started a project in Doom format, made many maps in a single wad. Switched to Hexen format (hit a voodoo doll snag, solved with scripting). It only changed the format for that individual map. All other maps were still in Doom format. Manually iterated through each map, changed format, saved map. Would like a blanket option or rename "Manage project" to "Manage map".
Eureka should be able to read both DEHACKED lumps and .deh files loaded as project resources to get any new things for the level.
Stuff needed to do:
We need CMake if we want to easily integrate Google Test and make multiple small programs. Start with Linux.
Expected:
Going to File->Delete Map and pressing Cancel on the question should just bring me back to the map I was editing.
Actual:
Pressing File->Delete Map->Cancel deletes the map anyway. (deleted map no longer accessible from "Open Map", next one is opened)
Accidentally lost a whole map I was working because of this. (not a big deal as I can make it anew but not super convenient)
Tested it on Archlinux, Eureka built from b5f1b50
It seems to always require Hexen format and says that "adding SCRIPTS lump" is only available for it, which is nonsense if user opts for another lump.
Alternatively delete it if it's the job of SLADE.
I need a programmatic build system like CMake or others if I want to effectively create multiple unit test programs which don't link to the entire Eureka. This task is to see whether Meson makes a better option than CMake.
Built from b5f1b50, tested on Archlinux.
Expected:
Flats and textures shown in the editor sidebar as they would appear in the game/3d view/2d view (without lighting).
The name may not fit each button.
Apparently, under Linux, if global::install_dir
isn't set from the command-line, it will look in the following list of potential prefixes:
"/usr/local",
"/usr",
"/opt",
NULL
This suggests it may fail if Eureka was formally installed to another location. We need to test how it behaves and fix it if needed.
Here is the error when I try to build this on Linux:
~/Applications/eureka-editor> make
make: fltk-config: No such file or directory
g++ -O2 -g -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -std=c++17 -fno-strict-aliasing -fwrapv -o obj_linux/Document.o -c src/Document.cc
In file included from src/ui_window.h:27,
from src/e_checks.h:31,
from src/Document.h:23,
from src/Document.cc:19:
src/ui_canvas.h:25:10: fatal error: FL/Fl_Gl_Window.H: No such file or directory
25 | #include <FL/Fl_Gl_Window.H>
| ^~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:136: obj_linux/Document.o] Error 1
Expected:
Lines on the arrow indicating your position appear like lines - ie consecutive rows of pixels of same colour that create an illusion of looking at lines.
Actual:
It looks as if parts of the line were "erased".
Tested on Archlinux. Built at b5f1b50
There's far too much C string handling going on. Upgrading to a more robust OOP usage will improve stability and reduce the code.
Expected:
Going to File -> Fresh map should bring up a dialog box which should allow creating another map in the wad.
Actual:
A dialog does open but it only has one input box. Changing the text string in it and pressing enter doesn't do anything.
There's no "OK" button anywhere on the interface.
New-map-related options behave very similarly (dialog only has a text input box) so perhaps the other options are affected the same way:
Everything else in the editor seems to be working fine.
Using Eureka 1.27b
Tested it on Archlinux with the rapoison window manager.
A workaround I'm using is creating new map lumps in another program and then editing the new maps in the wad in Eureka (it works) but that's not very convenient.
It doesn't seem to output any errors to STDOUT or STDERR when this happens.
Possible solutions:
May be related to #28
Expected:
You make a modification. You press Ctrl+T. It asks you if you want to save changes before previewing the map in the game. You click "Save" .....and then the editor either just saves and that's it, or it saves and the game runs the saved wad/map with the modifications you just made.
Actual:
You make a modification. You press Ctrl+T. It asks you if you want to save changes before previewing the map in the game. You click "Save" ....nothing happens
You have to press Ctrl+S and press Ctrl+T and then it previews it as expected.
Tested on Archlinux b5f1b50
Users need to know what kinds of files they may load.
Right now it's just a hidden user command
Need continuous integration for rarely used platforms.
Why not use them?
To do:
It seems no logo is visible now in About. Instead it's just text.
First to change: fopen.
Steps to reproduce the crash:
l
for linedef (or e
w
)r
key and move the mouse, keep moving your mouse cursor outside the boundaries of the wall rectangle (no crash)r
and move around the mouse cursor again - as soon as you move the mouse cursor outside of the rectangle - Eureka will crashTested with 61a308b built on Archlinux
Expected:
Placing a new vertex should make the texture in 2d view adjust to the new shape of the sector.
Actual:
The texture seems to look as if nothing was changed.
Steps:
Create a new wad archive.
Press v for vertices.
Place a point inside the rectangle.
Tested on Archlinux, built from b5f1b50
Eureka is hard coded to highlight the sector tag in Doom Format, but in ZDoom in Hexen format, the action structure was shuffled to use 5 parameters. The Teleport Destination tag can be any one of the 5 parameters. It can also be a ThingID or lineID, depending on the action that triggered it. Eureka should know how to display the Destination for each particular action.
https://zdoom.org/wiki/Category:Teleport_specials
77:TeleportGroup (tid, source, destination, movesource, fog)
215:Teleport_Line (thisid, destid, flip)
71:Teleport_NoFog (tid, useangle, tag, keepheight)
154:Teleport_NoStop (tid, sectortag, nofog)
76:TeleportOther (tid, destination_tid, fog)
78:TeleportInSector (tag, source_tid, dest_tid, fog, group_tid)
39:Teleport_ZombieChanger (tid, tag)
May be needed for linedefs as well as sectors.
Also, just for macOS, give it the standard shortcut (cmd-,)
I cloned the git repo and after checking to make sure I had all the required packages I ran make
and got this error:
g++ -O2 -g -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -std=c++17 -fno-strict-aliasing -fwrapv -I/usr/include/freetype2 -fstack-clash-protection -D_FORTIFY_SOURCE=2 -mtune=generic -O2 -pipe -g -fvisibility-inlines-hidden -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -o obj_linux/Document.o -c src/Document.cc
In file included from src/e_basis.h:31,
from src/Document.h:22,
from src/Document.cc:19:
src/m_strings.h: In member function 'bool SString::noCaseStartsWith(const char*, int) const':
src/m_strings.h:95:58: error: 'strlen' was not declared in this scope
95 | return !y_strnicmp(data.c_str() + pos, c ? c : "", c ? strlen(c) : 0);
| ^~~~~~
src/m_strings.h:29:1: note: 'strlen' is defined in header ''; did you forget to '#include '?
28 | #include
+++ |+#include
29 |
src/m_strings.h: In member function 'bool SString::startsWith(const char*) const':
src/m_strings.h:109:49: error: 'strlen' was not declared in this scope
109 | return !strncmp(data.c_str(), c ? c : "", c ? strlen(c) : 0);
| ^~~~~~
src/m_strings.h:109:49: note: 'strlen' is defined in header ''; did you forget to '#include '?
src/m_strings.h:109:11: error: 'strncmp' was not declared in this scope
109 | return !strncmp(data.c_str(), c ? c : "", c ? strlen(c) : 0);
| ^~~~~~~
src/m_strings.h:109:11: note: 'strncmp' is defined in header ''; did you forget to '#include '?
make: *** [Makefile:137: obj_linux/Document.o] Error 1
Anyone know what's going on? I'm running void linux btw.
At least two cases identified so far:
Instead of suddenly terminating Eureka, they should calmly inform the user and (depending on user experience) either request correction or skip them and close the dialog anyway.
One last (and big) step.
Specifically, the enter/exit and hit ceiling/floor sector actors for Zdoom.
https://zdoom.org/wiki/Classes:SectorAction
The following thing actor flags map to these events:
AMBUSH → monsters can trigger the special.
DORMANT → projectiles can trigger the special.
FRIENDLY → players cannot trigger the special.
STANDSTILL → the special will be triggered only once.
Only the first 2 are listed in the UI.
Example:
arg1 (lo-tag): 0
arg2 (type): 1
arg3 (flag): 0
arg4 (opacity): 255
arg5 (hi-tag): 3
sector tag: 768 (3 (hi-tag)*256 + 0(lo-tag))
3D floor will not render.
If lo-tag = 1 and sector tag= 769, 3D floor renders.
Would like to see sector tags labelled in 2D view. Bonus if sector hover displays lines to associated linedefs.
Would like to see separate modes for invisible, mapped, and secret tagged linedefs. Useful for optimizing in-game map display.
Things to do:
In order to make development safe and also to catch any still-ongoing bugs or wrong behaviour, let's write tests for as much of Eureka as possible before continuing feature development.
Expected:
When I do git pull
and then make -C build
only the parts that changed get compiled (usually very quick with other projects I do this with)
Actual:
Everything seems to be rebuilt as a whole from scratch every time - even when the change is minor. It takes a good few minutes to compile everything.
Tested on Archlinux 95fae49
I may be doing something wrong. Do I need to pass some argument to only build parts that changed?
It looks unprofessional.
There's no need to keep file handles open and connection to the hard drive, because wads can generally fit in RAM
Expected:
When you press the t key and then click a thing, then try to place it - it places that thing you chose.
Actual:
The first thing placed is always a health bonus. It has to be then changed to the actual thing you meant to place in first place.
Not a big deal and one can get used to it but it's somewhat counter-intuitive. Tested on Archlinux, built from b5f1b50
If not even integrate the nodebuilder into the same executable, to simplify stuff and reduce interprocess point of failure.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.