Retro Style Turn-based RPG (Dark gothic Diablo-feeling)

Hello Java Game Lovers!

I hope to be able to announce a new game very soon, called “Lord of the Dark Castle” that I created in Netbeans IDE with Java Swing. This YouTube link gives a short walk-through:

Only a few more weeks of iterations, mainly level graphics improvements and a couple of additions of skills/enchantments is left.

There is a Kickstarter page where you can pledge a little amount to receive your reward at Christmas Day, AND/OR you can just download a free full-featured 1000 turns limited version from there:

Below is a screenshot and some main game features.

http://imageshack.com/i/f0iSBPXIj

Features:
7 levels, all with their unique environments and graphics.
Randomized level builder. Randomization gives each new game a completely new gaming experience, including random monster, treasure and item spawns.
25 Unlockable Achievements: each achievement gives you bonus gold in new games
45 Unique Skills (E.g. First Strike, Charge, Pick Lock, Giant Health, etc)
18 Unique Monsters + Elite versions
15 Unique Weapon types
3 Full Sets of Armor: Cloth / Leather / Plate
2 Jewely Pieces: Ring and Amulet
7 Effects/Spells (Poison, Disease, Fire, Cold, Life Drain, Fear, Web)
6 Enchantments/Spells: Invisibilty, Regeneration, Speed, Freeze Time, Summon, Teleport
Enchanted items: weapons and armor can be enchanted with skills and spells.

Creator’s Visions & Goals with this game:
Casual, Fast & Easy to get started. Have 30 minutes on the bus/train? Give it a go and see how far you get. If you have a good round and play well, it is possible to beat the game within 1-2 hours.
This is STRATEGIC dungeon crawler - NOT a no-brain-dungeon-brawler! Casual does NOT mean easy! Normal mode is pretty difficult, and you may have to try many times before you win the game.
Big replay value! Every new game is a new experience. Level randomness, monster spawns and different skill choices makes up for lots of variety.
Flat Skill Tree where no skill is dependent on any other. Each skill provides an important strategic advantage on its own.
Every hit counts! It is not wise to make a move that ends next to a monster, because then, the monster may hit first!
All monsters have unique strengths. Not even the rats are “safe kills”.
The majority of monsters can wear EXACTLY what YOU can wear. If you drop something, they might pick it up and use it against you!

The main game forum page:
http://lordofthedarkcastle.freeforums.org/index.php

On this forum, you can read more about the game, view some screenshots, post bug reports and see the planned TODO feature list.

I hope you like the game, and I’m looking forward to some new downloaders and visitors!
If you want to discuss this game more, please message me either within the Kickstart project or within the Main Game forum.

Some developer hints that could make this thread more useful for developer perspective:

  • What engine and/or libraries did you use?
    I used Netbeans IDE and Java Swing framework to create this game.

  • What are some of the techniques you employed?
    I am using the MVC design pattern:

  • The Model classes contain all the creature and world information, such as labyrinth, monsters, hero, etc.
  • The View are the GUI Swing classes that shows everything on screen, e.g. buttons, windows, images, etc.
  • The Controller is the main game logic, I have that in a special Game.java class.
    I have also used agile development, doing weekly iterations of new functionality.
  • How were these techniques implemented? Providing code is recommended.
    Well, I started off by creating the Game.java, GUI.java and a couple of monster/hero classes. And from there, it has been iterative development, and now the game consists of 250+ classes. :slight_smile:
    An interesting note on this project is that I have used one single “requirements document”. It was a MyGameReqs.txt-file that I have edited in NotePad++.
    Why? I’m running this project in private, so I wanted minimal turnaround time and minimal start-up times when opening/editing document.
    Lightning fast, still accurate documentation. I hate the formatting crap that takes so much time in Excel/Word documents. >:(

  • What are things you’ve learned?
    I have learned that Java, in combination with a powerful GUI framework like Swing, is a great language to develop games that does not have high real-time performance requirements. I have previously only worked in C++ (and assembler, back in the 80s/90s) when I wrote games, but Java is really powerful and easy to develop games in. Of course, if I was writing a new fast high performance game engine (which I would never do, I would instead use existing, like Unity3D), I would use C++.

For source control tool, I am using SVN through CloudForge, which I really recommend!

Best Regards
/Christian Andersson, Craze Creative Studios

 The game looks amazing, great job!

I gave it only a short try, but i’ll play some more when i find the time. What i’ve noticed so far is that the controls are a bit clunky. It feels like as if you have implemented the keyboard movement based on key pressed events. For games, it’s usually better to use key down and up events and set some flags according to the keys’ states because these don’t depend on the configured key repeat rate of the system like key pressed events do.
I also noticed that movement slows down by a huge amount once an enemy comes into sight. Is that intentional?

Sorry for slow reponse, I accidentally had notify-on-replies turned off, and I was busy posting the game to the Steam GreenLight community, and here it is!
http://steamcommunity.com/sharedfiles/filedetails/?id=347817543

Anyway… 8)

MrPork: Thank you!

Egon Olseon: Thank you SO much for trying out the game. I am extremely thankful for that, and thank you for good feedback!

I agree that the controls are a bit clunky and I’d love to get proposals on how to improve things a bit. For me, the problem has been to show so much stats on so little space.
I have thought about bringing a semi-transpart panel on top of everything else to show item/character stats. But that would mean a big redesign of the GUI…
Another problem is to associate actions with certain objects, for example if one object shall interact with another, or if I want to use some of my items on another character’s inventory…

Keypressed: This is very interesting… because I have sometimes “felt” some delay that I couldn’t pinpoint and I cannot repeat it 100%.
I’m using KeyPressed. Reason: I could not see a typical use case where someone would like to keep a key pressed and where key-repeat comes into account. If it was a real-time game where frame-rate and fast movement comes into account, such as a break-out game, sure. But here, since this is turn based, I can’t see that it matter that much. For example, for movement, it would be pretty dangerous to keep the movement key pressed. Keeping the movement key pressed, it can be that all of a sudden, you may have a bad-a**-monster chopping you to death in 0.2 seconds if you keep a movement-key pressed. ;D
Did you experience some special use case where you think the key-down even would be better? … Because, as far as I know, both keyPressed and keyEvent is instant when pressing a key. It is only for key-repeat that a delay is introduced, right? … but MAYBE… if I press and release and press fast again, could that mean a delay? … for example if I repeatable press & release LEFT-ARROW really fast… could the KeyPressed be slower to react than KeyDown event?

“I also noticed that movement slows down by a huge amount once an enemy comes into sight. Is that intentional?”
Are you sure you don’t mean that since the enemies are animated, one has to wait for their moves to complete… Have you tried to set Movement Animation Frames to 0?
On my system, I cannot detect any change in game speed when enemies are visible when having Movment Animation Frames = 0. All moves are instant.
Usually, I play the game myself with Movement Animation Frames on 0 to get a really fast game pace. Maybe I should change that to default?

Please let me know if you still get slower moves when you have that set to 0 and also please let me know the use case when you thought keyPressed acted slowly.

Best Regards
/Christian

Even if the game is turn based, i don’t think that this means that you have to press the movement key once for each step. So i keep it pressed in areas where nothing particular interesting happens…and that’s where i noticed the delay between the first event and the following and that feels just wrong to me.
About the speed and the animations: I think you are right, it’s the animations that causes this. It also feels strange imho.
What i would do (not sure if it’s feasible), is to replace the key pressed events by up/down and some flags to get rid of the repeat delay and decouple the animation from the turns. Imho, this would given you a more fluent and consistent gameplay.

“So i keep it pressed in areas where nothing particular interesting happens”
Ok… it’s possible to click the viewport with the mouse as well to move over several squares.
Anyway, KeyPressed -> KeyDown with flags is an easy fix.

I’m not sure how I could decouple animations from turns, please clarify and suggest how that should work.
When movement animations are enabled, the monsters must finish their turns (and animations) before hero can move again. It would be weird if a monster hasn’t finished his animation before the hero suddenly does his next move. After all, it’s up to the player to select if movement should or should not be animated by using a setting (could make an easy short-cut key toggle for it as well).
I think one should be consequent and not try to mix modes here.

So unless someone gies a good and clear suggestion how it should work, I’ll leave that part as is. Setting movement animations to 0 gives a fluent game play, if that’s what you’re after.

Best/Christian

I would define a turn length that’s constant and make the animation play within the given time frame of one such turn. That way, movement will be consistant and animations would play fine. And you could still speed up the game by decreasing this time frame and playing the animation faster. The way it’s now, movement speed depends on the animations and that just doesn’t feel right to me. I understand that i can disable animations, but i actually want to see them. I just don’t want to make them define a turn’s length.

Ok, actually tried that already (play all queued animations in parallell at the same time if several monsters were moving), but it didn’t really work out. I don’t recall exactly why just now - it was about 6 montsh ago. I think that some enemy moves were hard to understand, because they were a result of a decision by a monster that had taken action on a previous monster action, but that was not visible when all monsters moved at the same time. The advantage with animations (when they appear in correct order) is that enemy choices and paths becomes more understandable. Then it was also a problem with the combination of knockback effect that in turn can cause hero/monster to be knockback animated. It gets too messy and complex in some situations.

The core of a turn based game is that each creature moves in turn, so it shouldn’t be controversial to actually display it as well. Having the monsters animated one by one shows exactly what happens. Having them move in parallell shows something that is not happening, and it sometimes appears that the AI is stupid, because one cannot see the order of events and possible constraints when creatures are blocking each other. Some turn-based games work order based: give all creatures orders, and then they move at the same time in parallell, like LaserSquad. In that case, it makes sense. But other games, you can really see each unit move separately, because it illustrates that every unit takes a decision based on actions by previous creatures/units, e.g. games like Warlords, Heroes of Might and Magic, etc. This game is in line with the later ones. The hero moves his turn. Then the enemies move their turns.

Anyway, I appreciate your feedback. It’s always good to get spontaneous feelings and thoughts from different people. If several other say exactly what you say, then I may have to dive into this again and see how it can be solved.

Best Regards
/Christian