• Register

The game is inspired by the good old titles like Dungeon Master, Stonekeep, Eye of the Beholder etc.

  • View media
  • View media
  • View media
  • View media
  • View media
  • View media
RSS Articles

Skullstone leveldesign main


Level design is one of the final steps of developing a game. It consists in creating maps/terrains and filling them with objects, NPCs, obstacles, enemies etc. Most of such elements is just decorative or are placed to be an easy challenge. They are merely graphical objects equipped with colliders or defined by a specific volume of a map.
However, the remaining ones require a bit more designer's attention (and effort). The opponents must be AI-driven, the NPCs have to have their dialogue lines configured and interactive objects must be properly scripted. We do not hard-code such things. Tinkering with them should be easier than writing the game code and possible for those who do not have access to the code.
Simple dialogue systems allow for organizing texts in tree-like structures with capability to add a predefined function in actual game code to launch. For example, it can unlock a certain feature, give the player a reward (item), grant experience or activate a subquest.

The AI usually concerns more or less complicated algorithms that analyze the situation on the map and decide what action to pursue next. It is often the case, when it is configurable with merely a few parameters such as aggresion level, assignment to a particular group or... ability to cheat (yep, AI often takes an easy route and do not follow the human player's rules). More advanced systems give the option to precisely adapt a particular behavior to a given situation and selecting the parameters of the game environment that influence the bot behavior. A perfect example of such an advanced solution is our Polish system called Grail.
The whole process of making a map and placing objects can be tackled in many ways. If we use Unity engine, then the simplest one is to use the built-in scene editor. It enables to place objects in the world space made from prefabs prepared earlier. Oftentimes, however, the programmers implement their own editor which can immensely boost designers work. This was our approach in Skullstone.

The underground scenes were possible to be created very fast thanks to their specific nature. The map is a grid in which we mark which cells are corridors. The walls, the floor and the roof are generated automatically. In addition, each cell may contain an object (whether it is interactive or not) on the floor and on each of its edges. We click on the cell to select one of the predefined elements from a list, e.g. lever, button, door, spider's web... The structure (representation) of such a map is simple as well. It contains identifiers of object types and their placement - which is - x,y and orientation. What you see on the screen is dynamically created based on such a representation.


During a game, the player may place an object on the floor and we took advantage of this fact when making levels for the game. There was no need to copy an already existing mechanics in the game, so one of the aspects of creating a level is flying over the map in the 'god mode' and placing objects which later can be found by the player. Placing enemies is even simpler - we only have to choose the enemy type from a list and click the respective button in the editor. The mob appears in the cell directly in front of the player character. We can select the mob on the list of all mobs in the current level and set its additional properties such as the group it belongs to or initial behavior (sleep, guard).

Okay, but what should I do to make everything feel "alive" - how to implement the game logic? How to connect the lock and the door? How to make the lever close the trapdoor? The most obvious answer seems to be - write the script for each such behavior. In Unity, we would create and add a dedicated component that will detect whether the switch is toggled on and perform the action on the scene object that is operated by it. Languages such as Lua or Python allow scripting object in a similar fashion. They require their respective interpreters to be loaded by the game engine and properly configured to work with it.

We have done it in much simpler way in Skullstone. Each object has two boolean states: open/closed, on/off, alive/dead etc. We deal with them as we dealt with a two-state machine. The most expected thing is then to transfer the state of an object to another one. As we mentioned earlier, each object is represented as class+x+y+direction, which allows addressing them easily. In order to control a trapdoor by a lever we only need to transfer a state from one object to the other. With this purpose in mind, we have designed our own language to represent this. The basic instruction consists of the adress of the object the action operates on, the type of action (state transfer, lock, timer and so on) as well as parameters. In the case of state transfer, one of the parameters is the adress of the destination object and the value that denotes whether it should be negated or not.


At one point, it became apparent that a script can also be used to set a particular property of an object and not only for operating on states. In this way, we attach texts to the signs on the wall and we configure altars (you will see what they are in the game).
What about if we wanted to define a more sophisticated behavior? What if we neeed to store some data and run a sequence of events? Memory cells are needed and we have them. Each of the two-state objects can be such a memory unit that can accept 0 or 1 value. We hide them in some inaccessible place so the player does not need to see them. Those strikethrough cells are such "memory objects". They have no special logic to them nor interaction, they cannot even be seen! They simply remember the state and can be addressed. A suitable sequence of state-transfer instructions that conditionally lock the state (change of the state is locked if a particular state occurs in another object) has given us the door, which we can open and close only a few times before they are lock for good. Nice trap, isn't it? Especially, if there is a pack of bloodthirsty creatures waiting behind the door.


Some time ago we recorded a video in which we presented our solutions. I think it will be a nice addition to the above article.


I really hope that you will like our unconventional solution and maybe it will inspire someone to create something interesting too. We are eager to read about it.

Frozenshade

Skullstone - Steam Greenlight

Skullstone - Steam Greenlight

News 1 comment

The time has come to launch Steam Greenlight campaign.

Latest additions

Latest additions

News

Summary of the recent additions: objects, sounds, food and more!

Darkness

Darkness

News

Lighting experiments and work on assets are continued!

Fleshing things out

Fleshing things out

News 8 comments

The core mechanisms are now working as intended. Time for our artists to show what they can!

Comments
Guest
Guest

Keep up the great work! Any further updates on development?

Reply Good karma Bad karma+2 votes
LunarShuriken
LunarShuriken

Love this game already!

Reply Good karma Bad karma+2 votes
ReezeTheVampire
ReezeTheVampire

Looking pretty good. Hope this is as fun to play as the Legend of Grimrock.

Reply Good karma Bad karma+2 votes
13branniy
13branniy

Nice looking one! Keep going guys!

Reply Good karma Bad karma+2 votes
druss66
druss66

when are we looking at getting a demo, looks great btw

Reply Good karma Bad karma+2 votes
FrozenShade666 Creator
FrozenShade666

This year we will release a demo. There are still many things to do.

Reply Good karma+2 votes
taintedpyro813
taintedpyro813

nice.looking forward to an article on the stage of development

Reply Good karma Bad karma+4 votes
Post a comment
Sign in or join with:

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.

Follow Profile
Icon
Skullstone
Platforms
Windows
Developer
Black Torch Games
Engine
jMonkeyEngine
Contact
Send Message
Release date
Game watch
Follow
Share
Style
Genre
Role Playing
Theme
Fantasy
Players
Single Player
Project
Indie
Boxart
Boxart
Twitter

Latest tweets from @skullstonegame

Stone Golem summoning his minions. Gameplay is unbalanced, we only want to show the feature.… T.co

Apr 21 2020

In this article, we describe some interesting solutions we've used to create levels in Skullstone.… T.co

Mar 18 2020

RT @Gamerwebpl: Growe lato i jesień nad Wisłą - na jakie polskie gry czekamy w drugiej połowie 2018 roku - Gamerweb.plT.co

Jun 30 2018

RT @SaltTehFries: Mój dobry kolega Bartek Filip Malinowski popełnił ostatnio vloga o najciekawszych polskich grach indie zaprezentowa… T.co

Jun 30 2018

#fail spend years at the magic university, just to meet a lizard creature which is a better spellcaster than you.… T.co

Oct 27 2017

Golem is casting "VOTE FOR SKULLSTONE" spell: Freegalaktus.pl #indiedev #screenshotsaturday T.co

Oct 27 2017

Our #trailer with reworked #audio It's much better now. #indiegames #gamedev Youtu.be

Oct 24 2017

Freegalaktus.pl Nasza gra, Skullstone bierze udział w compo dla gier indie. Jeśli się wam podoba to zagłosu… T.co

Oct 20 2017

Embed Buttons
Link to Skullstone by selecting a button and using the embed code provided more...
Skullstone
Statistics
Last Update
Watchers
37 members
Articles
11
You may also like
Elmarion: Dragon Time
Elmarion: Dragon Time Role Playing
Towards The Pantheon
Towards The Pantheon Role Playing
Vizaris
Vizaris Role Playing
Undertale Yellow
Undertale Yellow Role Playing
Pakuri
Pakuri Role Playing
MidKnight Story
MidKnight Story Role Playing