So I have finished the basic drag and drop to place various turrets in a level. This was easier than I thought it was going to be. But I'll give a rundown of what I did and how its set up. All I have to do is make it prettier. I'm going to make the default color very transparent and have some sort of color or material to make it look good. Then when the player drags a turret over a spot that can have a turret I will change the coloring and/or alpha to highlight which spot the turret will be at.
The basic overview of UE4's drag and drop functionality is to override the OnMouseDown, OnDragDetected, and OnDrop functions and create a UMG widget to represent the item being dragged. That's about all there is to it. So I will get into the fun stuff now. There is a more in depth tutorial I followed that made this a little easier to understand.
You want to override OnMouseButtonDown and OnDragDetected in the widget you want to drag. In my OnMouseButtonDown I first check to make sure the turret has been unlocked before dragging. This prevents the player from dragging a turret they have yet to unlock. Then we set an offset that will be used to offset the drag image from the mouse/finger. Then chose which input you want to listen to for dragging. I chose left mouse button as that is a normal drag and drop behavior and I also have my settings to map clicking to touching so this also works on mobile. As far as I know that setting is on by default. But if you want to make sure in Project Settings -> Input then find Use Mouse for Touch or just search for Use Mouse for Touch.
Also in the widget you want to drag I overrode OnDragDetected which handles what to do when the system detects a drag has started. Again I make sure the turret is unlocked before continuing. Then create an instance of the widget you want to use to represent the item being dragged. For me its just an image of the turret slightly larger and with a small alpha applied to make it look a little different. Then using the CreateDrag&Drop function we create an instance of a blueprint we have to create that extends DragAndDropOperation. The Default Drag Visual is what the system will use as the drag continues. And the Drag Widget is a hook to the widget you actually want to drag. And this is it for the drag part of the operation.
Now you must override the OnDrop function in whatever widget/HUD you want the item to be dropped in. I have a separate widget I'm using to handle the dropping. This allows me to place these where I want the player to be able to drop a turret and anywhere there isn't one, the player wont be able to drop it there. I set the locations in another place where I can manage each of the drop widgets in one place. So I spawn a PaperCharacter as the turrets will eventually need to spin/move and have an AI. Then I hide the drop widget so the player can no longer drop a turret there and return true to indicate the input was handled.
And that's it for the basics for drag and drop. You look at the tutorial I linked to above for more detailed information but this should be enough to spark some ideas on how to use it in your project. After I make some minor visual changes to the dragging and dropping I will then move onto creating the first enemy ship and a spawning capabilities so I can put together a first demo level for people to check out and play.
http://www.hunter-gaming.com/
https://www.facebook.com/indiehuntergaming/
https://twitter.com/HunterGamingInd

No this is not part of the Tower Defense Challenge. Its a separate game project I'm working on unrelated to that challenge. I haven't picked a name for the game yet so I'm just calling it Space Defender for now.

First of all I want to apologize for the extended delay between posts. There was a medical emergency in the family I had to attend to. But now that its almost taken care of I can get back into development a little more.
I now have a main menu mostly finished and I have created an in game GUI and started on building up the first level.
The base you must defend for this level will be in the lower left corner of the screen. I will also be adding areas where you can place turrets that will shoot down enemy ships. My current plan is to have the enemy ships start anywhere at the edge of the screen opposite of where the base is. So for the first level the enemy ships will be coming from the top and right edges of the screen and fly a straight line towards the base. If the base is in the middle of the screen enemy ships can com from all 4 edges. So far I only have one turret created.
My next steps will be to create a pause menu for when the player hits the pause button. The player will have the options to quit, resume, adjust sound and fx volume and restart. Then I will move on to creating an enemy ship, add the ability to drag and drop a turret into the level, then begin adding the game play and spawning enemy ships and get the level mostly working. Once I get to that point I'll be providing a demo to get some feedback on the game so far.
I wont be able to get as much done as I previously did for a while but I will be continuing development as I can.
http://www.hunter-gaming.com/
https://www.facebook.com/indiehuntergaming/
https://twitter.com/HunterGamingInd

This is the first real update for my latest game which I think I may just call Space Defender. However that may change. It will be a tower deference type of game however where you have to defend your space station from waves of enemy ships. This one will be a mobile game and will be available for sure on Android and hopefully iOS as well. I'm not very far into the development process yet but the main menu is almost complete. I just have to add a level selector screen. Then I can move on to creating the levels, enemies and turrets the player will use, then the levels. Lets move on to a few pics of what I have so far.
The main menu has 2 animated turrets that are hard to see in this image but they are circled in white here. The background does have faint stars that are also hard to see in this image. I'm planning on having the level selector animate into view somehow on top of the main menu once I have the level selector completed.
Not much to say about the next 3 images. The main menu buttons slide to the right off screen when either the options or quit dialog slides into the screen from the right. The options also shows the languages I plan to support when its released.
So this should give you a good overview of the direction I'm going with this game. More details to come as I get more completed.
other games: www.hunter-gaming.com
facebook: https://www.facebook.com/indiehuntergaming/
twitter: https://twitter.com/HunterGamingInd

This will be a short update just to announce a new game I will start working on now that Mine Seeker is complete. I'm going in a different direction with this one. Its going to be a mobile game. I'm planning on releasing it only for Android for now.
I don't have a name for it yet or any pics as I have just finished the planning phase and know what I want the game to be and what to put in it. Its going to be an AR tower defense kind of game based in space. The player will have a base to defend their base against waves of enemy ships that want to destroy it. I was just about to create a new UE4 project for it but I figured I'd make a quick blog about it before I started giving regular up[dates on it.
I am undecided on releasing it in the Amazon app store as well. Not sure if it will work as I plan on using Google Play achievements and Kindles have their own version of Android that doesn't have Google Play installed by default. So I'm going to try it and see it it works and it it does I'll release it in Amazon too. Has anyone release an app or game on the Amazon app store before? Let me know your experience with it.
www.hunter-gaming.com
www.facebook.com/indiehuntergaming
twitter.com/HunterGamingInd

Mine Seeker is a game of wits, speed and a little luck. A new puzzle game where your goal is to clear all the tiles, except the ones that have a mine. If a tile has a numbered space, that indicates how many mines are adjacent to that tile. This allows you to clear the tiles while trying to figure out where the mines are. However you are also timed and must be quick in figuring out where the mines are to avoid exposing one and making it explode.
With 180 fun and addicting levels with increasing difficulty, its sure to keep you guessing for a long time. A scoring system that keeps track of your scores and number of stars for each level. There is also a quick play for a more casual environment that lets you select a difficulty and is not timed. Don't forget about the 24 achievements you can earn.

Steam achievements for Mine Seeker are now complete. I will for sure be including these in all games going forward. Along with Cloud game saves and other services Steam offers now that I am more aware of what all they have to offer. Integrating with Steam was a particularly rewarding experience. I currently have 24 achievements players can earn. I had 30 but some were either not good or didn't fit the game well so in the end I actually removed some. Still a good number to keep people busy. So this screen shot says 9 of 30 achievements but its 24 now.
But now that the hard work is done I now will be putting together some marketing materials, not very good at this part but I do my best. I've also learned a few new things so I'm looking forward to applying them and see if it has an effect on my sales. I'll be making a video, a bunch of pics and descriptions, etc. Once I have this together I'll be uploading the game to Steam so I can more easily have people test the game. I didn't know this until a couple days ago but its a bit of a pain to get the game running without Steam's assistance installing dependencies. So once I get the game up on Steam, hopefully in a week or so, I'll be reaching out to testers, bloggers, YouTubers, etc to see if anyone has an interest in testing, reviewing, or talking about my game.
I also heard of a service I've never heard of before, keymailer. They help put game creators in touch with streamers so I signed up to check it out and see what it involves. So if anyone has any experience with them, good or bad. I would love to hear about it. Also I will be passing out Steam keys for the first time so if anyone has any tips or suggestions on that it would be greatly appreciated.

Since the last demo I have added another 4 worlds each with 20 more levels. Here are a couple pics of 2 of those worlds both medium difficulty. Three of them have more tiles and mines making it more difficult. So now there is a grand total of 6 worlds available. I have three more to add which will be even higher difficulty.
All I have left now before I can start doing some alpha testing is add the three higher difficulty worlds and add some Steam achievements. This will be the first time working with Steam achievements so I'm looking forward to it.
I also want to talk for a moment on Localization in UE4. It's simple but time consuming to do. Please remember UE4 localization only works with Text, not strings. There are some tutorials I found on the internet but they were for earlier versions of the engine so they were out date and weren't all correct. Here is the Localization Dashboard. I'll highlight the important areas to add localized text to a game. Its grayed out because my VCS marks files as read only until I check it out to edit. The important areas are Gather Text and Cultures.
You can choose 3 different ways to gather the text in your game. I'm using Gather From Packages so I can choose the directory in my game content that has the UI. It will search the folders you choose here. Just click the `+` for Include Path Wildcards to add a path you have text you want to localize in. You can also add paths to directories you want to exclude as well. Just a note, by default all 3 ways or gathering text are disabled, so if you don't check one if the 3 top level check boxes under Gather Text, it wont find anything.
The other important area is Cultures. Here is where you actually choose which languages/locales you want to support. You can be specific like en-US or en-GB or generic like en or es. I'm not targeting any specific locales in the languages I'm supporting. You cant see it in this image but under the list of languages, which is empty when you first start, is a button Add New Culture. Using that button you can select all the languages and locales you want to support. One language must be selected as the native culture, here I chose English and there is a mark next to English to show that its the chosen native culture. I believe this is telling the engine to use the native language if your game is being played in an area that doesn't use one of your chosen languages. When your ready just hit the big Gather Text button to search your game for text. It should then show you the number of words, haw many have been translated and the bar will represent a percentage of what is complete. Mine are all complete.
Then to edit the translations just click the little button immediately to the right of the orange bar, when you hover over it, it says Edit translations for this culture. My translation are all in the completed tab, but when you first start they will be in the Untranslated tab. The left shows the word in the chosen native language, and right shows the appropriate translation. Simply click the box on the right to add the localized version of that text. When the game runs in this language, these translations will be used in place of the native language. When your all done just hit the big Compile Text in the Cultures area. There is an issue currently where after doing this it doesn't update to show what has been completed, so to update hit Gather Text again and when that is finished it should show an updated overview of how much you have completed.

I have another Mine Seeker demo ready to try. There are a few new things I added since the last demo.
I updated the UI a little bit to allow me to translate the text in my game. Here is a photo of the new font I'm using.
And as mentioned above I also added localization's to the game. The game is fully translated into each language in the list. The player can change the language the game uses if they don't want to use the native language of their system.
I also added a new world called "Desert". It has a total of 20 new levels bringing the total now to 40 levels. Each level is dynamically created so its a different experience each time you play a level.
Again I'm asking people to play and let me know your thoughts on in. You can contact me through my website, or here in the comments or email me support@hunter-gaming.com.

I am finally ready to release the first demo for my next game Mine Seeker. I ran into a bunch of issues with gitlab, which I was using to host my code. They did an update and I lost the repo for this game. Thankfully it hasn't been released yet so I was able to create a new repo and migrated the code and issues to the new repo. Then I ran into issues pushing my code up to gitlab. I was unable to resolve that so I made the switch to Perforce. I've never worked with it before so there will be a bit of a learning curve as I go, but I have it set up so I can change files and submit them to the depot. I lost about a week maybe 2 because of this.
On to a brief overview. The game play is similar to Minesweeper. You have to click tiles and try to avoid clicking on a mine. The first area of 20 levels is available in the demo. I plan 8 more each with an increasing level of difficulty to make it harder as you play. If you click on Quick Play you will be able to choose your difficulty and a game screen will be show. The Quick Play is similar to the original Minesweeper except there is no time or scoring. Clicking on the Play button will load the single player adventure with (eventually) 9 areas of 20 levels each. So far I have 1 area with all 20 levels.
Choosing the Play button will load the level selector screen. Each area is divided into 2 sections. This shows the second section of the first area so these are levels 11 through 20. The next and previous buttons will take you to the next and previous worlds if available. Click on a blue level button and the game will load. If the button is grey the level has not been unlocked yet. You must complete a level before the next one is unlocked.
Here is a quick look at the game screen. The buttons I think are fairly self explanatory. The score of the game starts at 1000 and decreases over time plus you get 1 point for every tile uncovered. It tells you the number of mines remaining as well as how much time has passed since the game started.
So because of the git issues I currently only have the windows demo available. I will add the Mac version as soon as I figure out how to get my Mac to connect to my Perforce server to checkout the code. If you have any suggestions, ideas, comments or issues of any kind let me know. You can either comment on this post, email me at support@hunter-gaming.com or contact me through my website. See my next blog post for an updated demo.

So I ran into my first real performance issues now while working on Mine Seeker. I've played around with UE4's performance analyzing tool Session Frontend before while developing Farkle Friends to make sure I was running good. I never ran into problems that I had to investigate until now.
I am working on a level generator and it was coming along good. However I was seeing the UI lock up for 1 to maybe 4 seconds while the generator was running. I have a each, medium and hard quick play difficulty and there is no issue on easy, but there was about a 1 second delay on medium and maybe 3 to 4 second delay on hard. So I opened the Session Frontend and started to dig in. I was able to track down 2 performance issues with my code. One was an issue with the level generator and the other was a different issue causing a big cut in the FPS I was running at.
The first issue I just happened to find while investigating the level generator issue. And it was causing a big drop in FPS that I MIGHT not have been aware of otherwise. In the quick play screen I was running a quick piece of code in the tick function that is called every frame. I was updating the UI with information the user needs. What I found was this code was taking up quite a bit of time. I was calling a function that I previously created that will take a number and return a array of Slate Brushes which allows you to apply textures or sprites to an image and display it on screen. To figure out what number was passed in I convert the number to a string array. That conversion every tick was having a fairly big impact on FPS obviously. So I removed that from tick and now instead I just wait until the UI needs to be updated, usually when a user clicks. So first performance issue FIXED! I was feeling pretty good about myself at this point.
The next issue was a little more difficult. I ran the analyzer a few times and found out that the C++ portion of the generator was just fine. I didn't have any issues until after I passed the data to blueprints. What I found out to be the problem was when I loped though the data returned to blueprints from C++ and creating the game tiles was the drag. So I tried to move the game tile UI code to C++ but that came to an end after a few days of trying. I found out working with UI in C++ in UE4 is difficult, buggy and complex. So I moved all the UI back to blueprints. And after a few more days of thinking and bouncing ideas off other developers I cam up with an idea. Instead of creating all 900 tiles (30x30 grid for hard) at once, create just one row at a time. So I created a class in blueprints that will do just that. I create one row, pause, create another row, pause, etc. This actually fixed the problem and now the game doesn't freeze when creating the tiles. I can control how fast the pause is as well. And this has a good side effect of making the animation I play when showing a tile a little more elaborate. But still this brought about a new bug. Imagine that.
Blueprint delay nodes come in handy when you need to pause execution for a moment. I have used them in a few places before. When a delay node is hit, it will pause for the specified number of seconds before continuing. So for the hard level I place a delay node that will pause for 0.025 seconds before continuing with the next row of tiles. Which did work however I ran into a number of things being null after the first delay node was hit. I would call the function that shows the grid of tiles, it would show the first row and hit the first delay node. Then instead of continuing down the rest of the function showing the rest of the tiles, before the delay finished it went back to right after the function call to show the tiles and finished. So I was hitting code that relied on the tiles being there before they actually were. This is not the behavior I expected but after asking a question in their answer hub, I found out this is actually expected behavior. I was able to get around this problem by adding an event dispatcher I can call when the tiles are all created. I then moved the code that was crashing to be run when I call this event. And that fixed the issue. Now I have a fully functioning level generator and the ability to use it without a huge performance hit.
Now that I have this done I have to go back to single player mode and update that to use this generator as well. I'm getting pretty close to being able to have a little demo for people to try. I'll make sure to post here when I do.

Play against 3 other players in a game of farkle. The first person to 10,000 points ends the game and everyone gets one last turn to try and get the most points. If you farkle (none of the dice rolled are scoring) you lose your points for that turn and play moves to the next player. If you are lucky enough to get hot dice (all dice in a roll score) then you can choose to extend your turn and try to get more points. The in-game help system will help you with what dice combinations are scoring combinations. Your personal top 10 high scores are kept for future reference including your win/loss records. You can also submit your scores to an online leader board which will keep track of your highest score. Compete with your friends to see who can get higher on the online leader board. You must have a gamejolt.com account to submit scores to the high scores.