[Slick2d] Retro-Pixel Castles > Now on Steam! <

Hmm. I wonder if you have AA enabled for java programs somewhere?

The next build, I flagged the game to forcefully disable AA, we’ll see if that helps your problem. :slight_smile:

Thanks :smiley:

Mouseovers:

  • Already on the fix list. :slight_smile:

Connecting tiles:

  • You hit the nail on the head, it would look really really nice but it would involve having a transition tile for every single tile in the game to every other tile in the game . . . and if I did it in the code with texture blending/etc it would just look cheap. :confused:

Night shadows:

  • Also on the fix list. I was going to make the shadows fade as the sun went down. :smiley:

Loading screens:
Yeah, I plan to eventually add a loading screen… even if it’s just a static imagine, just something to let the player know loading is happening.

Map image:
Same with the map image out, it needs some sort of indication it’s actually doing something. The map image out is very unoptimized at the moment.
(BTW: it drops the image in /screenShot/)

I forgot to ask this; is anyone on a Linux of Mac machine? If so, did it run at all or throwback an error?

On mac, a white fullscreen window pops up, then closes without displaying. Gives the NSAddLibrary failed/Java 7 incompatibility error.

That’s one pretty smooth map editor you got there. I can’t wait to see the whole game!

On start up, my mouse cursor disappears. I am using a custom cursor with CursorFX on windows though, so I don’t know if there’s much you can do about it. When I remove the custom cursor, it works fine.

A workaround could be to grab the mouse cursor, and then draw a mouse cursor image at the mouse position.

I plan to have custom cursors for full screen mode, but when you use custom cursors in windowed LWJGL likes to lock focus on window until you tab out, making it annoying to play the game in windowed mode unless you don’t hide the hardware cursor, and that would just look fugley rendering both the custom and hardware cursors at the same time. :confused:

Having trouble running this on my MacBook Pro 2013 with Retina.

$ java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
$ java -jar RPC-InDev-6-21-2014c.jar 
Mon Jun 23 05:08:03 IDT 2014 INFO:Slick Build #237
Mon Jun 23 05:08:03 IDT 2014 INFO:LWJGL Version: 2.8.5
Mon Jun 23 05:08:03 IDT 2014 INFO:OriginalDisplayMode: 1440 x 900 x 32 @0Hz
Mon Jun 23 05:08:03 IDT 2014 INFO:TargetDisplayMode: 1440 x 900 x 32 @0Hz
JavaVM WARNING: JAWT_GetAWT must be called after loading a JVM
JavaVM WARNING: JAWT_GetAWT must be called after loading a JVM
JavaVM WARNING: JAWT_GetAWT must be called after loading a JVM
Mon Jun 23 05:08:05 IDT 2014 ERROR:Could not get the JAWT interface
org.lwjgl.LWJGLException: Could not get the JAWT interface
	at org.lwjgl.opengl.AWTSurfaceLock.lockAndInitHandle(Native Method)
	at org.lwjgl.opengl.AWTSurfaceLock.access$100(AWTSurfaceLock.java:51)
	at org.lwjgl.opengl.AWTSurfaceLock$1.run(AWTSurfaceLock.java:94)
	at org.lwjgl.opengl.AWTSurfaceLock$1.run(AWTSurfaceLock.java:92)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.lwjgl.opengl.AWTSurfaceLock.privilegedLockAndInitHandle(AWTSurfaceLock.java:92)
	at org.lwjgl.opengl.AWTSurfaceLock.lockAndGetHandle(AWTSurfaceLock.java:66)
	at org.lwjgl.opengl.MacOSXCanvasPeerInfo.initHandle(MacOSXCanvasPeerInfo.java:57)
	at org.lwjgl.opengl.MacOSXDisplayPeerInfo.doLockAndInitHandle(MacOSXDisplayPeerInfo.java:56)
	at org.lwjgl.opengl.PeerInfo.lockAndGetHandle(PeerInfo.java:85)
	at org.lwjgl.opengl.MacOSXContextImplementation.create(MacOSXContextImplementation.java:47)
	at org.lwjgl.opengl.ContextGL.<init>(ContextGL.java:132)
	at org.lwjgl.opengl.Display.create(Display.java:847)
	at org.lwjgl.opengl.Display.create(Display.java:754)
	at org.newdawn.slick.AppGameContainer.tryCreateDisplay(AppGameContainer.java:302)
<snip>
org.newdawn.slick.SlickException: Failed to initialise the LWJGL display
	at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:378)
	at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
	at rpc.launcher.Game.launchGame(Game.java:53)
	at rpc.launcher.Launcher.main(Launcher.java:16)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)

I then adjusted the settings.properties:
fullscreenUseNative=false
fullScreen=false

$ java -jar RPC-InDev-6-21-2014c.jar 
Mon Jun 23 05:06:21 IDT 2014 INFO:Slick Build #237
Mon Jun 23 05:06:21 IDT 2014 INFO:LWJGL Version: 2.8.5
Mon Jun 23 05:06:21 IDT 2014 INFO:OriginalDisplayMode: 1440 x 900 x 32 @0Hz
Mon Jun 23 05:06:21 IDT 2014 INFO:TargetDisplayMode: 1280 x 720 x 0 @0Hz
JavaVM WARNING: JAWT_GetAWT must be called after loading a JVM
_NSJVMLoadLibrary: NSAddLibrary failed for /libjawt.dylib
JavaVM FATAL: lookup of function JAWT_GetAWT failed. Exit

I also tried copying over the 2.9.1 lwjgl natives but that gave me a linker mismatch:

$ java -jar RPC-InDev-6-21-2014c.jar 
Exception in thread "main" java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.LinkageError: Version mismatch: jar version is '23', native library version is '25'
	at org.lwjgl.Sys.<clinit>(Sys.java:118)
	at org.lwjgl.opengl.Display.<clinit>(Display.java:132)
	at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:39)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:36)
	at rpc.launcher.Game.launchGame(Game.java:42)
	at rpc.launcher.Launcher.main(Launcher.java:16)
	... 5 more

Let me know if you want me to try anything else.

Changelog (Almost all of it based on your guy’s input!)
6-22-2014

  • New “float” font, with solid black borders.
  • Button descriptions don’t leave the bounds of the gameplay window.
  • Main menu dropdown descriptions fixed.
  • Potential fix for Mac OSX users.

A majority of the work today won’t be visible to you guys in this build, it mostly involved getting object placement working correctly, but the new object placement tool was disabled in this build because it’s not even remotely complete.

>>Download the Map Editor TECH DEMO HERE<<
http://retropixelcastles.com/junk/rawbuilds/RPC-InDev-6-22-2014.zip
(Disclaimer: Don’t forget to provide constructive feedback!)

Explore all the old builds, if you dare!
http://retropixelcastles.com/junk/rawbuilds/

Try this latest build, let me know if it works for you (or if the error changed!) :wink:

@loom_weaver
You didn’t update the LWJGL jar.

I included the 2.9.1 jar in the last build. :slight_smile:

Well, it crashed, but a with a different error this time :wink: http://www.java-gaming.org/?action=pastebin&id=991

Making slow progress on object placement. Still a lot of work needs to be done though. But I’ve got basic collision detection working, it only allows you to place objects on valid map locations. I still have a ton of checks that need done, but it’s a start!

I really enjoyed playing with this. It is really great. I’m looking forward to seeing little peeps running around and trying to cope with the crazy map that I draw.

Some quick ideas to help you.

On the initial map creation screen, TAB should probably jump you from one field to another (minor). Also minor, the font is quite hard to read when you type in your map name. Fonts are hard though (I certainly struggle with them), so not one to labor over right now I expect.

When placing trees it would be nice if there was a round brush, or if the edges were always a little more organic.

If you select a tile from the right draw, it would be nice if one tile is selected by default (perhaps the last one you used). Otherwise you have to also click on the tile to select it. Even if there is only one tile.

The eraser erases everything. But drawing grass or earth respects the fact that trees exist and does not write over them. Would be nice if the eraser respected the layers.

You cant draw gravel up against “tiles” or walls without it erasing part of them and putting the base layer (like grass) in between. Even if the brush size is 1.

If you hold down both mouse buttons and draw with dirt with a thin brush, then the drawing does not keep up with the speed that you move at. It looks like you are drawing a nice road, but when you go back over it, there are gaps in it.

I can see that you can draw rock on top of rock, to make a mountainside, but its not initially clear how. I think that it is Accent Mode, is that right? This does not work for drawing walls on top of rock, which would be nice. It would also be nice if you could keep drawing layers to make a mountain. Of course then we would need gravity for rivers and bridges and all sorts of fun stuff. Snow on the top for example.

Need an undo button. I clicked several times by accident and found myself hitting ctrl-z automatically and then was disappointed when nothing happened…

Chris

Tiny font: Yeah, the tiny font is a problem. I’ve done a lot of work to clean it up, but it’s still hard to read sometimes. (Uppercase N for example, looks like an H) I may eventually give in and figure a way to make it ever-so-slightly larger, or modify the entire GUI to take the large font instead. :confused:

Tab in menus: adds to TODO list :slight_smile:

Round brush: Already on the list, I was actually going to eventually have several brush types. But “Round” and “Square” were both going to be my bare minimum.

Select tile by default: It does select one by default? Was it not selecting one for you?

Erase by layer: Actually that’s how erase used to work, but it was really tedious having to select what layer to erase all the time. Although, that was also very old version of the editor and the lack of many other features is why is felt so clunky. Now I may be able to make a 4-state erase button. (Terrain, liquids, topography, or all) that you can cycle through. I’ll add it to my list of things to do down the road. :slight_smile:

Drawing tiles on top of each other: That’s by design, The base terrain has it’s own layer, but the terrain all drawn on top exists on the same layer, so there’s no logical way to allow them to overlap, so they get as close as possible but never intermingle. The only real way to allow them all to connect would be to draw transition variations for every terrain -> every other terrain, and even right now with only 19 terrains that would be around 200~ transition tilesets. :confused:

Holes in drawing: Sadly, the drawing is tied to the games update cycles and your mouse’s polling speed, right now really the only solution is to not move the mouse and map at the same time (or slower). Since the tiles are so tiny it’s really easy for a fast mouse to totally skip over one tile here and there. I have it on my list of things to fix, but I have no clue how yet. I’d like to see how programs like Photoshop do it.

Layers on other layers that don’t match up: Sadly, that could never work due to the limitations of the tile engine I created. The second layer of rocks/trees is actually an optical illusion, but the way the transition management part of the program works is each terrain is given 2 layers, a base layer and an accent layer. The accent layer must match the same tileset type below it, else the engine thinks it’s a glitch and removes it. It’s really more complicated than that, but I’m not sure how to simplify my answer without explaining how the entire tile engine works. :o So I guess the short answer is "the engine won’t let you without rewriting half of the map controller code)

Undo button: Already on the list. I do the same thing all the time, and it’s my program! :slight_smile:

Get mouse coordinates before update and after. Fill all tiles between :slight_smile:

Yeah I always implement a drawing tool like that as “draw line between current and last polled position.” Usually works out pretty smooth. If you want to be really fancy you could use splines or something too.

It does, but there was no way too see which (and so if) one was selected (at least in the build I tried). And that’s why he probably didn’t know about a default selection.

No offense, but in my eyes you are avoiding a lot of possibilities because “I have to rewrite half …”.
But really, that’s what programming is: write, rewrite and rewrite, serious, I am working for over two weeks on client/server which communicate via UDP, I have been actively working on it for around 20 hours, and do you want to know the difference in LOC? Zero. And its no fun either, no new tiles to get abused, no awesome blood-effects to show off, nor is there any NPC trading items with you.

Hey! That’s pretty much the idea I had in my head. I assumed from working with older versions of Photoshop and some other drawing programs that’s how they do it when the system is bogged down (because your smooth curvy lines turn into straight lines everywhere). I’ll give it a shot when I get back to working on brush tools.

It highlights what is selected by default in the side tab, short of a big flashing message in the middle of your screen I’m not exactly sure how else I would notify the user. :confused:

Also, rewriting my MapController to completely reconfigure it to use layers in the way that was requested is a fundamental redesign of the entire program, because the accent layers that chrisethompson is suggesting to change have completely different behavior than regular layers. It’s not a simple rewrite you fiddle with a few days to get right because you’re a dedicated awesome coded, it’s a fundamental change to the core of the game’s code and requires basically starting over. While cool feature/idea, it’s simply not worth scrapping half my code to add. You don’t want to get caught in the adding-features-endlessly trap, else your projects would never be completed.

chrisethompson suggestion is actually a great idea; it’s just not reasonably viable in this map engine without making the engine massively more complicated than I want it to be for the plans I have in the future for the rest of the gameplay. :wink:

Still working on objects, walls and a lot of behind the scenes stuff. Inching closer and closer every day to working on the play state!

Few notable changes:

  • Time of day adjustment moved to the center of the top GUI.
  • Walls are now “objects” (they used to be treated like terrain because objects didn’t exist yet).
  • Object placement is mostly done, assuming there’s no kinks all that’s really left is code cleanup.
  • Started adding some basic sound effects; button clicking, object placement, etc.
  • Grid mode updated, now is color coded so you can easily see whats passable by entities and what isn’t.
  • “Select” tool is now a “grab” tool, original plan was to have it select objects, but there’s no need for that in the map editor. So now it picks up objects so you can move them around.
  • Lots of refactoring/behind the scenes stuff.

Some shots with the new walls/object placement, and a shot with the new gridmode enabled.
(EDIT: Fixed screenshots, silly me linked the wrong ones)

This looks outstanding!!! :o