Renoria - Java MMORPG

Wow. I must ask; how did you learn to create such good art? It’s amazing! I can’t even draw 32x32 sprites. >:(

I don’t haha.

I’m just the programmer. I have hired a team of artists.

1 programmer, 10 artists = THIS!

UPDATE:

Me (Overpowered GM) vs our first boss!

AuSOoJq4Ef0

Tell me what you think! :slight_smile:

Nice, however the damage needs to show up for longer; maybe twice as long. You can’t read it otherwise.

Interesting. That shouldn’t have any effect, unless you’re doing something else to the images that is making them unmanaged.

@Troubleshoots

Thanks for your feedback. I’ve changed numbers so they show up for twice as long.

@nsigma:

ImageIO.read can load images in formats that aren’t optimized for the current GraphicsDevice. That code will optimize them to use the same colormodel as the current GraphicsDevice so no conversions are necessary when rendering.

So would running every image loaded for the game through the toCompatibleImage method improve the performance? Could you explain the method step-by-step if you have a chance?

Alright so, the method does this:

  1. Test if the ColorModel of the image is compatible with the current display. If so, just return it.
  2. If the ColorModel is not compatible with the current display, a conversion will need to be done every time the image is rendered to screen (slow). So instead, we do the conversion ourselves:
  3. Create a Buffered Image compatible with the current display.
  4. Create a graphics context and render the incompatible image onto the compatible image.
  5. Dispose the old image and return the new compatible image.

UPDATE:

New monster! Hill giants!

A bunch of new items added into the game, including:

Etc
King Frost Dragon Claw – Claw obtained from killing King Frost Dragon
Copper Ore – Ore obtained from a copper rock
Tin Ore – Ore obtained from a tin rock
Log – Log obtained from chopping trees
Wool - Obtained from killing sheep
Golem Rubble - Obtained from killing golems
Cloth - Obtained from killing wraiths
Giant Rat Tail - Obtained from killing giant rats
Green dragon scale - Obtained from killing Green dragons
Green dragon wing - Obtained from killing green dragons
Dragon Horn - Obtained from killing any dragon
Fox fur - Obtained from killing foxes
Zorb Eye - Obtained from killing zorbs
Bat wing - Obtained from killing bats
Cowhide - Obtained from killing cows
Feather - Obtained from killing chickens
Rags - Obtained from killing zombies
Apple – Food
Banana – Food
Pear – Food
Watermelon Slice – Food
Ice Cream Cone – Food
Vanilla Cone – Food
Chocolate Cone – Food
Strawberry Cone – Food
Lime Cone – Food
Cookies and Cream Cone – Food
Bread – Food
Red Potion – Health Potion
Light Blue Potion – Health Potion
Orange Potion – Health Potion tier 2
Dark Blue Potion – Mana potion tier 2
Red Elixr – Health Potion tier 3
Blue Elixir – Mana Potion tier 3

Yes, I understand what that does. I’m not sure you’re understanding managed images though? Any BufferedImage (including those read through ImageIO) can be managed, meaning it’s cached in VRAM, and no conversion would therefore be necessary when rendering. Theoretically seeing such a “considerable speed boost” between BufferedImage formats would suggest that something else is going on in how you draw or use the images that is stopping rendering from them being hardware accelerated (or alternatively it’s the OS you’re on, or just Java2D being Java2D! ;D )

Anyway, I wasn’t seeking to hijack your thread on that discussion - maybe start a new one if you want to discuss further?

Game looks great btw :wink:

Haha, who knows, probably Java2D being Java2D :~)
Either way, the Renoria Engine also has a LWJGL backend that is fully hardware accelerated and tries to load the game from LWJGL by default. Java2D is kind of a “fall-back” for systems that fail to load LWJGL :stuck_out_tongue:

You may have noticed that my render methods never use a Graphics2D object, instead always passing a RenderSpace object. This is the abstraction object used by the engine to plug in different rendering systems. RenderSpace may use a Graphics2D object behind the scenes, or may use a VAO from LWJGL.

And, haha thankyou :slight_smile:

Java2D first tries to use DirectX, then OpenGL, and then if all fails it doesn’t hardware accelerate. Unless you are doing something really fancy with shaders (and java2D should be fine for the kind of game you’re making) what you’ve done seems like a pretty pointless abstraction layer. If you have performance issues with Java2D you should trying playing around with the VM switches for java2d.

Anyway, nsigma and I argued about this for a while and it turns out I was referencing some pretty old material that was inaccurate for the time. Java2D does accelerate BufferedImages. A couple years ago, what you’re doing might’ve improved performance but it doesn’t any more.

I bench-marked my particle engine without (and with) creating compatible images and the difference in performance was (as far as I can see) zero.

edit Sorry, I’ve just hijacked the thread :X

Oh well, at least it helps accelerate the game on older versions of the JVM :stuck_out_tongue:

And it wasn’t completely pointless - The abstraction I’ve implemented has helped me accelerate the process of porting the engine to other platforms, such as iOS (Objective-C).

Not to mention my LWJGL implementation is a tad faster than the Java2D implementation, and it has better control over GPU memory, and does render a bit quicker.
The LWJGL implementation generates large 2048x2048 textures before the game loads, and uses these massive textures as texture-atlases to improve performance.

Haha everyone’s thread hijacking! :frowning:

Content Update: SKELETONS!

Technical updates:

  • LWJGL backend will now use BlackPawn Texture packing algorithm to generate texture-atlases on the fly.
  • Updated Texture management algorithm to more efficiently manage young-generation textures.

Update: New item: Super growth potion

Causes your character to grow to 3x his normal size!

You can also damage monsters by jumping on them in this state.

Also doubles the amount of damage you output.

Might be some visual problems with that large hitbox unless you’re using a polygon :stuck_out_tongue:

Haha sorry elaborate?

UPDATE:

New items added into the game, switched inventory tab switching and you can now drop multiple items at a time.

Are you planning to release this eventually, and if so, when do you hope (actual deadlines nearly always fail) to do so? So far it looks amazing. Also, get your 10 artists to hurry up with those tiles. The grass is getting boring. :stuck_out_tongue:

Already working on new tiles! :wink:

Just waiting on him to finish making the dirt sides, the rest of the 3-patches and so on and so forth…

Thank you, I really appreciate that, and of course I’m going to be releasing it eventually :wink:

Our planned release is Christmas this year, but the absolute latest deadline, Feb next year.