
![]() |
---|
![]() |
![]() |
Sand
Made In: Unity; C#
Date: December 2015-Present
Sand is a first person roguelike which begain as a personal challenge project during the winter break of 2015. The goal was to create a game with an array of different systems that all work together to create a unique experience during each scession.
Level Generation
The first level generation technique involved generating and then smoothing a noise map to create natural looking caves. This technique made interesting environments, but the mesh generated by this method did not work with Unity's nav-mesh system and was not consistant in finding locations to spawn objects.
The second level generation technique instead generates a series of rooms and connects them by hallways. This chain of rooms can loop back onto itself and can generate a large virieity of levels. These levels could be a singular chain of rooms or two massive rooms interconnected by several halls. Each wall and floor segment is an individual prefab and can be populated with objcts in a very consistant manner.
![]() |
---|
![]() |
![]() |
![]() |
![]() |
![]() |
---|
![]() |
![]() |
![]() |
Room Population
With this room generation technique I am able to define each tile as a target to be spawned on or not, making level generation significantly easier. Clutter items such as ground placed debris, or more importaint items such as item containers or enemies, are all spawned on available tiles. The number of each type placed is dependent on the size of the room.
Debris and other clutter items are currently placed and rotated at random, however each tile knows what type of tile it is. Floor tiles in halls know they are hall tiles, ones in the middle of rooms know they have room around them, and with this knowledge a more advanced system of room decoration. There could be pillars on the outskirts of the room or broken ceiling tiles in the middle of the room, all of the handles are there.
Enemy Types
The enemies spawned in the level randomly select a type of enemy to be and an element. This element is level-wide and the enemy type falls on one of three types. Basic melee enemies patrol around the level and chase the player on sight. Ranged enemies remain stationary and look around while ideling until they spot a player. Lastly 'caster' enemies patrol the level, but flee when they see the player.
These types can all be changed at run time and function in a very modular method. Enemies can move between rooms by patroling or moving based on spotting the player, and on player sight are able to share this information between eachother. This allows a room full of enemies to be alerted to the player at once, making situations where enemies ignore their allies actions rare.
![]() |
---|
![]() |
---|
![]() |
---|
![]() |
Coming Up...
As this is a dynamic project that is still in production there is much more coming. Currently the framework of items, combat, and level progression are already to be started.
Items are managed as a multi-part item. The player can carry two of these items and components can be found in containers spawned in the level. The items will be set up with elements, a form of weaknesses/strengths as well as unique elemental quirks. These quirks extend to enemies and levels as stat changes (such as move speed) or as hazzards (such as frost based levels spawing clouds of hazardous cold).
The other major system to make the game is the combat manager. This manager will handle debuff, buffs, health, and more intercate state changes in enemies. The enemies have been built in such a way that they can be very easily changed at run time and thus this system will take time more than anything to create.