Upgrading the project to Unity 2019 and making the build 64Bit

Standard

Starting August 1, the apps on Google Play Store will need to support 64 bit. This meant we need to upgrade our project first. We were working on Unity 2017.1 and the 64 bit support came with 2018.2. We decided to upgrade the project to 2019.1 and see what happens.

The compiling was a bit “slow” while importing the project to 2019.1. After this, as expected, errors popped up. GameAnalytics and TouchConsolePro plugins were the culprit. GameAnalytics were much more worse, it even didn’t allow me to proceed to use Unity because it was stuck on compiling its own plugin files. TouchConsolePro just threw some errors. After deleting/re-upgrading them,including Universal Deeplinking plugin, some files in our scripts threw errors about not being able to use Sprite and Texture classes. Turns our they were refactored by Unity and in order to make new Sprite and Textures, you need arguments to create one.

After all of these hassles, I needed to delete / reimport UniWebView plugin too, but unfortunately the newer version didn’t work when our app tries to display Reddit Login page. The plugin is needed because our app sends the maps to the ProDnDMaps subreddit when the user wants to share their map. So I downgraded and fixed UniWebView in our project.

So we were ready to make a build for 64bit. In order to do that, we adjusted our Player Settings like this:

It was good and all but it takes forever to get a build in IL2CPP. Other than that, it’s a big issue that we simply couldn’t debug from an Android device. Visual Studio never sees the device when I try to attach it as a Unity instance. Sometimes it is visible via WiFi, but nonetheless, it simply won’t debug. We are investigating what could be done, and until then, we will be probably using Mono (old build system) to develop and find bugs.

Stay in Tune!

Advertisement

UPDATE: Metropolis Generator and Tooltips!

Standard

Hello folks! Today is the big day because we’ve released a BIG UPDATE! We added a new generator and tooltips!

First, let me introduce our new Generator: METROPOLIS!

In this generator you can create a map with lots of buildings. You can change its size, building size, building coverage etc. There are lots of parameters to play with!

Some examples from Metropolis:

The second update we have is… Tooltips! Now you can read the descriptions of parameters so you can understand fully what the parameters of the map does.

The update is out so check it out and play with the new generator Metropolis and read its tooltip descriptions!

Stay in tune.

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!

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!

Browsing Maps… In Reddit App!

Standard

Hello folks! This week we are currently working on some changes regarding browsing maps in the app. Players can browse maps in the app’s built-in browser, connect to your Reddit account and voila, you see the maps. But we wanted to change that. In the built-in browser, the images of the maps aren’t shown in the thumbnail, and we wanted the players to be able to see the preview before opening it in the app. It helps to enhance the user experience, users can browse the map section as a catalog.

Screenshot_20181019-121825.png

First, when you open the app, you see the Load menu button. When you tap on it, there comes a bunch of other sub-buttons such as Online Map. Tap on it, and the app automatically opens up the Reddit Official App, instead of the internal web browser.

Screenshot_20181019-121846 (1).png

Here, you can see our subreddit in the Reddit Official App. The reason we took this approach because the official Reddit app allows us to show the map’s screenshots as previews in the posts. Quite beautiful, isn’t it?

Screenshot_20181019-121913.png

When you open a map’s thread, it looks like this. You can see the map in the preview. Tap on OPEN IN APP(mobile only) and it will redirect you to the Gray Lake Studios’ website that allows you to download the map.

Screenshot_20181019-121926.png

Tap on Load Map and voila! You downloaded the map!

And also, if you don’t have the Reddit app, a message will be shown and then you’ll be directed to the Play Store page of Reddit app.

Screenshot_20181026-131324.png

Screenshot_20181026-142029.png

So, that’s a wrap! I hope you like this new feature!

Stay in tune!

 

An apology, a brief update…

Standard

Hello folks! Eylul here! I guess I owe an apology for deserting the blog for a long time ^^”. Well, I’m still here, working hard and make sure to deliver the best features for ProDnD! So, shall we have a look at the latest updates?

1. Seed Functionality & DeepLink!

With this feature, players can share the maps they’ve created, without events or props. This feature shares the map’s parameters and the seed value that has been generated with. “Seed” is a random integer that the app uses to generate exactly the same map. Think of it as an ID, when you enter the seed, the app produces the same result. With this, sharing the map’s basic information made easier.

Sharing the map is also easy with Deeplink feature of mobile apps. Deeplinking allows the mobile apps to communicate with each other with a special link. When you click on the link, the targeted app opens and fetches the information that came along with the link. With this case, we share the seed value along with the parameters (width, height, noise amount etc.) and create a link out of these variables. You can use and share the links.

seed2.gif

In this gif, we are generating a map and copy/paste the generated map’s seed (including its parameters as well).

2. Scrollable & Extended Text Area for Events and Map Description 

When a user wants to write a description for an Event (or a map description) the text didn’t allow the user to write extensive and detailed text, the text area wasn’t scrollable and the character limit was pretty tight. But now, it has a 2000 character limit and, guess what, scrollable!

loremipsum.gif

 

 

 

3. New Props!

We released a good amount of new props to place on the map you created! Props are the best tools to add some spice to the game session, they make the map quite look good and makes the map filled with adventure!

Screenshot_1.png

4. Bug Hunting & Maintenance

Along with developing the new features, overall maintenance for the app is always a primary objective to us. We make sure to deliver the best experience, so we work on the app all the time!

So, here is the brief summary of the times that I didn’t write to the blog ^^” I want to make a promise for writing more regularly, starting with this week! (Hopefully)

Stay in tune!

 

Flash Update!

Standard

Hello folks! I’ve been kind of busy these days so I couldn’t update the blog. You can see my recent works here:

1. Rectangle and Circle Drag Brush

rectangle and circle.gif

With this tool, you can create rectangles and circle while you drag.

2. Props with Sorting!

props.gif

And here we have Props with two sorting functionality. You can sort by Catalogue Types and alphabet!

I’ll be back with more updates, so stay in tune!

New features, small fixes Part 2: Bucket Fill!

Standard

Hello folks! In this part, I’ll be talking about our second feature that I finished this week and it is… Bucket Fill! One of the most anticipated features for editing your maps! Now you can fill the areas you want!

fill bucket.gif

As you can see in the gif, you can select a type, tap on the area you want to fill, and here you go! Also, you can undo and redo the changes you’ve done.

For implementing this, the good ol’ Flood Fill algorithm helped me a lot. You can find detailed info from this link but TLDR:

We create an empty queue. Then in a while loop we enqueue the cells around the center cell , dequeue each one in an iteration and change their Type (color) till the area is empty.

It was an easy one to implement and had fun while I remembered the days I saw this algorithm from my university days.

In Part 3, I’ll be talking about Rectangle brush!

Stay in tune!

New features, small fixes Part 1 : PROPS

Standard

Hello folks, Eylul here! I have got lots of new features! (Features… and bugs never change…)

The first feature that I’ve implemented is… Yeah, you were waiting for this.

*drum rolls*

CATEGORIES FOR PROPS!

Now players can browse props by categories (alphabetically) and find what they seek within seconds!

props.gif

For implementing this, I had to change a few things. Props were defined by their names as their types, so I changed the types according to their general function.

For example, I have a bunch of doors as:

Open_Door

Closed_Door

Inn_Door etc.

I implemented their Type as Door. Now it’s easier to assign them.

Also, I created UI elements as Categories on the GUI and wrote a simple code to arrange all the props and assign them automatically. In my first attempt, I created the category elements at runtime. What I mean is, take the UI prefab, change its label text according to the Type and stick it to the GUI. It was working nonetheless, but it didn’t give the result that I wanted. UI was wonky, all the props were intercepting with each other when I try to open a Category tab. Then I found the problem: as a UI element, it needs a parent object to adjust the animation codes (our UI system is based on NGUI) and since I made the category element as a prefab, I couldn’t assign the parent object from the scene to the prefab’s serialized field. (Unity please fix this at once 😦 )

Then I made a solution and simply add the UI element to the scene, one by one and fill its needed serializable fields and voila! The result is there as I intended on the gif above.

In Part 2, I’ll be talking about the next feature, Fill Bucket!

Stay in tune!