Refactoring and new features!

Standard

Hello folks! This week we implemented a couple of extra features to our prototype build of ProDnD v3.0 and I’m so eager to share them with you!

Last week, we talked about the UI implementation and the basics of the noises. This week we’ll going to talk about the improvement of map generation and newly added features.

The main screen now looks like this.

At the right side of the screen, we discarded Water, Dirt and Mountain sliders and replaced them with Below Water Line and Below Dirt Line. The reason is, the water overrides Dirt and Dirt overrides Mountain. Top of the height map is always filled with Mountain tiles as well as the most lowest points of height map is filled with Water, so we only need the sliders to adjust the dirt/mountain lines and dirt/water lines.

When you adjust Below Dirt Line, the mountain coverage changes as the slider moves. More the slider bigger, less the mountain coverage and vice versa

This is the same with the water slider, but the reverse.

To make user experience more intuitive and lessen the clutter for inexperienced users we added two new setting modes

  • Advanced Settings
  • Edge Roughness

In the Edge Roughness  instead of showing every setting, we predefined the map settings and make them selectable as a dropdown menu with the options Low, Medium and High. The settings of the map (Frequency, Lacunarity, Octave Count and Persistence) determines how the map is smooth, rough or detailed as we talked in the last week’s blog, and are accessible under the Advanced Settings.

You can see the difference between the Low, Medium and High Edge Roughness results:

At the left of the screen, we added a Seed input field. You can write a string or a number to produce different results. When you enter the same number or string, you can retrive the same result again.

But the implementation wasn’t that smooth, we encountered a huge problem where some places of the map looks empty, some patches that weren’t tiled. 

This happened because some values in the height map were greater than +1. Usually the noises produce values between -1 and +1 and we implemented the app according to this. But sometimes the values go greater than +1 and since the code doesn’t cover the values, code doesn’t put a tile on them. In the end result, they look like empty patches. To fix this we simply add a condition; if the value is bigger than the Below Dirt Line Slider, put a Mountain tile.

So that’s how the week’s been like. Hopefully we will implement many features and share this exciting project with you! Stay in tune!

Advertisements

ProDnD Prototyping

Standard

Hello folks! Today I’m going to talk about our prototyping sessions for the new ProDnD and what we did this week.

We wanted to explore and add new Unity features on this project and we thought new functionalities that are added to Unity in recent years could help us enormously.

So what we did exactly? Well, first of all, we implemented the UI using new and slick Unity UI. It’s so easy to use and adjust. (It gives me the similar joy that I had when I played Sims 2! I don’t know why, but making UI in Unity gives me the feeling of Build Mode in Sims :D)

Unity UI is love, just look at the panels and the sliders

Sliders on the right are parameters of the generated map. Map on the middle is generated using the sliders’ values (For example width and height.)

The dropdown menu on the left panel indicates the selected noise type. The noise type determines how the map will be generated randomly. The library we are using is LibNoise; it has a couple of noise type choose. 

Noise types from LibNoise library.

Here’s a little glossary for the sliders:

Width / Height = determines the map’s width and height

Frequency: the amount of detail

Octave Count: Addition of noises at different frequencies, this makes the map more authentic and more realistic. In each additional noise, the frequency increases.

Lacunarity: how quickly the frequency increases in each octave. Think of it as, how dramatic the map will get jaggier.

In this example, Octave doesn’t get very extremely jaggy.

On the other hand if we increase the Lacunarity slider to 3:

Look how it got jaggier.

Persistence: how quickly the amplitude decreases in each octave. This leads to more rougher noise.

Do you wonder how we actually generate this map? Textures? Sprites? 

Or… Tilemaps?

Tilemap is one of the Unity’s latest and hottest features.On a Grid, you can put tiles and create a 2D plane with ease.

unity tilemap ile ilgili görsel sonucu

You can find more information here 

How exactly we use this feature since the map is generated procedurally? Well, first of all, we generate a height map in a 2D matrix  array. LibNoise produces a 2D float matrix array using the noise function we’ve chosen. We traverse the matrix array and each slot correspondences a location on the Grid. The slot contains a float value, and according to the value, either we put a tile or not. The decision whether put a tile or not determined by a coefficient. If the value is greater than the coefficient, put the tile on the map. Else, don’t

Tile by tile, the map is generated.

There are two colors ; the light grey tiles have higher values and the darker grey tiles have lesser values. We plan to add adjustable coefficients and tile types to add more variety such as mountain, dirt, tree, sea etc… With these features we’re sure the map will be more fun to play with.

See you in the next update! Stay in tune!

Standard

Hello folks! This week, after finishing the newest feature, we decided to talk about the future of ProDnD and some new ideas. We took some interest in worldbuilding, using procedural generation and a little bit of noise magic 🙂 While we discussed, we talked about and have drawn inspiration from RimWorld and Dwarf Fortress. In both of these games, you have an enormous procedurally generated world, where you can find mountains, rivers, lakes, deserts, arctics, trees etc… A living and breathing world, calculated with complex noise functions. Every part of the map has quirks of their own, for example, in RimWorld, Arctic parts of a map are inhabitable due to frigid temperatures meanwhile the Jungle part features lots of animals and trees etc…

Here you can see the RimWorld’s and Dwarf Fortress’ maps:

RimWorld:

Dwarf Fortress

Since our app ProDnD emulates this kind of setting with smaller parts (procedurally generating caverns, taverns, dungeons etc…) we asked ourselves why don’t we take things further and advance our worldbuilding methods? We revolved around these ideas and came up with a couple of ideas.

First of all, we thought of possible use cases. Take one DM, who wants to create a map for their game. A dungeon, goblins lurking in the shadows, and scary skeletons… A dreadful atmosphere…

At this moment, we thought of prompting some questions to the user. Instead of giving out maps as templates, we thought of going onto the user’s requests. What kind of map do you want? A dreadful dungeon, filled with treacherous creatures? A sunny and lively city square? A tavern, filled with beer lovers and eavesdropping sneaky rogues? Maybe a temple on a desert? Maybe a forgotten dwarven city, under the depths of the mountains? At this point, we aimed to be more “human readable” in order to enhance user experience. The user will fill out some prompts and then the app will generate according to the needs of the DM. For example, in the parameters of the maps, instead of using “Noise” to indicate the amount of the noise applied to the map, we will change the name to “Elevation”, “Water Level” or “Tree Density” to indicate the name of the element that’s applied, and they will have selections to choose from as well. E.g. Water Level: Dry, Puddle, Lake, Sea, Ocean. Elevation: Flat, Hills, Mountains, Impassable, and such…

Also, in addition to this kind of prompts, we thought of a literal world like in these games mentioned above. Areas such as Arctic, Savannah, Desert, Temperate Forest, Jungle, Island in the middle of the ocean…

And when this world is generated, the user will select an area on this world and will be able to see its features. Hot, cold, barren, flooded, jungle, dry… We are aiming for letting the users select a variety of options and come up with unique results. Instead of giving out crude templates with smaller chunks, why not offer the whole world as a playground instead of disjointed maps? We could even add seamless worlds that interconnect with each other.

A party, encountering a rocky mountain, decides to enter a smaller gap that leads to a cavern that is home to goblins. After they get out of this cavern only now adorned with battle scars, they see a forest, hiding ahead. The forest seems fine on the outside, but inside there are lots of swamps and annoying insectoid creatures along with a lake in the middle… A temple lies within the swamp-forest which needs going to, but the land is not forgiving nor the destination, there’s a dungeon that just looks like a maze, easy to lose your way and mayhaps lose what’s left of your mind too…

I just threw some ideas but you get the idea 🙂

So these are the results of our brainstorm. I hope that we can come up with crazy ideas to entertain our lovely DMs and blast fun and interesting tabletop RPG sessions 🙂

Stay in tune!