Advice 1:
Experiential Density
This term comes from VALVE -- the guys behind Half-Life and Portal.
What it boils down to is "How much time has elapsed since the last interesting thing happened?"
You will want the player to "have an experience" every X seconds/minutes. Notice that it is measured in TIME, which is a bit tricky.
There are dungeon makers who count squares between events or encounters, but that's not really a good idea, because players do not progress at the same pace.
Of course, as the designer, you cannot measure Exp.Dens. yourself. You need a playtester, and observe them.
Advice 2:
Gradual hints
Especially with puzzles and secrets, you should think about the possibility that the player gets stuck. One thing you may do is attach counters to puzzle alcoves, and whenever something incorrect is placed into them, you'd decrement the value of such counter (which starts at eg. value 10). When the counter reaches 0, it means they've tried 10 incorrect things in the alcove, so they are clearly either stuck, or trying everything possible in panic. That's the moment you may want to give them a hint -- perhaps via a "dialogue"
Code: Select all
hudPrint(party:getChampion(3):getName()..": *Hm... Now that I think about it, the riddle talks about blood -- perhaps the answer is some weapon?*)
Advice 3:
Train them in what they will need
Before challenging the players with some really tough thing, they should be given "a training". So, if you intend to hide a lot of secret buttons at crazy locations, put them first into a very small room from which they cannot escape, and let them find one such hidden button. This will create "Aha! So in this dungeon, buttons are frequently hidden between bones on walls!" understanding, and then, later, when they see bones on walls, they will go and check them. You just have to keep your promise and frequently re-train them in the "skill" by hiding buttons into bones. Not everytime, but perhaps 30-40% time it should be there.
Advice 4:
Announce success
Have they opened a door that you meant to be the end of a puzzle? you can use playSound("level_up") to sound a nice jingle, or place a wall_text just behind it, saying something like "Your heart is pure, you may pass." -- this will inform the player that they have, indeed, succeeded. Nothing is worse than solving a puzzle but not realizing it and returning back in search of "the next part", which is not there.
Advice 5:
Combine monster types
No monster in the whole game, besides the Cube, is dangerous on its own. Every single one of them can be killed with a stupid dagger as long as you can do the "stab-sidestep-turn-rinse-and-repeat" sequence.
To make a fight challenging/more interesting, you will want to combine a ranged and a melee enemy. The ranged one will be attacking the player group from a side, while they are occupied with the melee attacker.
To make it more challenging, add a 2nd melee monster, so there's a risk of being overwhelmed/cornered.
Without this, the combat will not be fun at all. I'm not saying make every combat like that, but a good portion of them should be like that, otherwise you will hear SolitaryDrake keep saying "Well, that was anticlimactic..."