Our community blogs

  1. Colony 7 Production Blog
    Latest Entry

    Description; I am a designer currently working on the video game Colony 7. The purpose of the blog is to address the issues of the game's development and to address any solutions or alternative methods to better prepare for the arrival of inconveniences in the future or how to avoid them entirely. The blog also addresses my individual performance. The team is made up of two programmers and four level designers but all do not necessarily combine roles during development. The game is being developed in Unity (2017.1.1f1 onward) with a development time of 13 weeks for a college allocated task.

    It is week 10 of development time for Colony 7 and the game's build has had a profoundly obvious issue that has escaped all team members thus far. Scope. We have all suffered from our ambition to create a game with too many mechanics and small features that are not critical to the core of Colony 7's gameplay. Though despite our intended vision I can confirm that everyone had the same expectation and understanding of what the game is meant to be. As a designer I understood the risks and necessities of shortening the project and it's assets and narrative quality in order to respect the deadline in week 13. 

    The game's initial ideas and representation is still understood and the team is now preparing to secure on level of the game alongside a main HUB World. The intention was to have five completed levels with finalised aesthetics alongside the HUB World but our desirable goals now has us considering that two completed worlds with certain objectives would be satisfactory before the due date.

    This is our solution to the consequences of our scope. We have all decided on this new goal and are restricting our asset creation and secondary functions to our gameplay. Both designers and programmers are confident in out time management as we have all delivered our task's results on time and have contributed every week to the game's finalised build. Our intentions were not realistic in the time given for our project we have identified as the biggest issue thus far. Our game simply does not have time to feature a fully functioning set of mechanics due to having only two programmers in our studio team.

    As a designer I have experienced this issue twice during my education and have implemented my new strategies to Colony 7. I accept the consequences my team has faced and will improve  upon my initial and early planning with a team by studying what the idea needs establish as a project, what goals are realistic and small so that any further development is is additional and how reliant is the project on it's asset pieces and how is this work best split amongst team members.


    More unexpected halts in progression will be addressed with future blogs throughout Colony 7's development time and the next blog is expected to be the final for game Colony 7.. Thank you for your time and feedback is appreciated.

    Colony 7 Designer.


  2. In this daily blog (and video)-series I take a first impressions look at the best mobile games that I come by. Be sure to share your favorite mobile game with the rest of us in the comments below!

    I was planning on giving a glowing recommendation, until I found out that the game is actually an offline experience, concealed as an online .io game. 

    I felt a bit deceived when I found out, but to be fair, the developer never actually claimed the game to be online, and the game is surprisingly fun to play!

    The monetization ruins a bit of the experience, though, as the obtrusive ads are frequent unless played offline.

    My thoughts on

    Google Play:

    Subscribe on YouTube for more commentaries:
    Or join me on Facebook:
    Or Instagram:
    Or Twitter:

  3. Following along from the previous post about the node graphs, I have lately pulled the node graph stuff out and have started work also on a standalone editor for noise functions.

    The editor uses the node graph functionality, along with an output node that provides various functions, to allow one to create graphs of noise that can be used to create textures.


    The output node allows you to map either a Grayscale or RGBA image output (the Volume button currently does nothing, for now). It can analyze a connected grayscale function to give you a histogram graph of how the function output is distributed, and calculates a set of scale/add factors that could be used to remap the output of the function to the 0,1 range. It allows you to specify seamless mapping settings, and to export images to file. It's all still fairly rudimentary and I still haven't settled on a final save/load format, but all that is in progress.

    I have also started creating an editor of sorts for Goblinson Crusoe, using some of this editor functionality. It's still in its infancy, but eventually it will allow me to create areas and area pieces for use in randomly generating maps. 

    Lately, I've been doing some thinking about what I want to do with Goblinson Crusoe. It has become clear to me that it will probably never be a commercial release. It will probably never be on Steam or anything like that. I just don't have the time. I wasted a LOT of my early years spinning my wheels and going nowhere, and now I have so many other things that have to come first (family, full-time job, home-ownership, etc...) that I just don't think I'd ever realistically finish this thing. If I could work on it full-time, perhaps, but mortgage, bills, and the necessity of providing insurance and safety nets for my wife and kids means that isn't feasible.

    However, I do enjoy working on it, and don't want to just abandon it. Nor do I want it to never see some kind of release. And I would like to see some kind of return on my huge time investment over the years. So I've been thinking of making GC a free and open-source project, linked with a Patreon and/or PayPal for goodwill donations. At least that way, if I die or life gets in the way of further development, at the very least it wouldn't disappear completely. Plus, I might get at least a few dollars from appreciative people along the way.

    What do you all think? Any advice on how to structure such a thing? Good idea/bad idea?

  4. thecheeselover
    Latest Entry

    I have had difficulties recently with the Marching Cubes algorithm, mainly because the principal source of information on the subject was kinda vague and incomplete to me. I need a lot of precision to understand something complicated :) Anyhow, after a lot of struggles, I have been able to code in Java a less hardcoded program than the given source because who doesn't like the cuteness of Java compared to the mean looking C++?

    Oh and by hardcoding, I mean something like this : 

    cubeindex = 0;
    if (grid.val[0] < isolevel) cubeindex |= 1;
    if (grid.val[1] < isolevel) cubeindex |= 2;
    if (grid.val[2] < isolevel) cubeindex |= 4;
    if (grid.val[3] < isolevel) cubeindex |= 8;
    if (grid.val[4] < isolevel) cubeindex |= 16;
    if (grid.val[5] < isolevel) cubeindex |= 32;
    if (grid.val[6] < isolevel) cubeindex |= 64;
    if (grid.val[7] < isolevel) cubeindex |= 128;

    By no mean I am saying that my code is better or more performant. It's actually ugly. However, I absolutely loathe hardcoding.


    Here's the result with a scalar field generated using the coherent noise library joise :


  5. Welcome to this week’s From the Forum. In this post, we highlight a few Corona Community Forums posts that cover important topics.

    Migrating Enterprise

    Corona has been offering our native builds as part of the core for a while now. There has been considerable modernization of the App template that projects are based upon. Several Enterprise developers are wanting to move forward and this thread covers various ways to move from the legacy Enterprise template to the modern Native template.

    Pushing objects

    Trying to add linear impulse to objects should make them move straight, but you can also get your objects to move oddly too. This thread helps “straighten out” that movement.

    Looping or events?

    The original poster wanted to know the best way to move objects in a back-and-forth manner. Corona offers several ways to do this and our great development community stepped up in this thread to offer some suggestions.

    Do you have a particular forum thread that was helpful for you? Let us know about it! Email, put FTF: and the forum title in the subject, and include the URL in the email. We will consider adding it to an upcoming edition of From the Forum.

    View the full article

  6. Earth TotemOriginally posted on Medium

    The Totem Spirits game is in the market for a few weeks already and this day came inevitably — I received the first crash report. To be honest, there were 5 of them, but all from one device, so the error is the same.

    I was truly surprised by this! My game was tested by several people and already downloaded by 50+ more. There were no errors till November 7th when someone with Samsung Galaxy Trend Plus (768MB RAM, Android 4.2) got the game. If by any chance you are reading this article, please, know that I’m deeply sorry that you can’t play!

    Then, I checked the error (aka stack trace) and became even more surprised because this error… told me nothing. Of course I can find the exact place in the code where this problem occurred but there is literally nothing wrong with it! (It works for 50+ other devices, remember?). Moreover, it is not reproducible on any of my devices — I even ran the game without any issues on an old Acer Liquid MT (which BTW was released 7 years ago).

    Looks like a dead-end one might say, but I didn’t give up. There are several ways to ask for help in the developer’s world. In this case I decided to create a topic on libGDX (game engine) forum and ask them directly because the issue seems to be in the core library itself. In addition to this I also asked a question on StackOverflow (so unpredictable).


    Now it’s time to give a little insight into the error. The crash report in Google Play Console looks like this:


    Even if you are not familiar with libGDX, you may find some keywords like: xml, parser, fileHandle, rootElement from which you can guess that the error lies somewhere in xml file parsing. And this is totally correct! The application on this device failed to parse locally stored file needed for the game to behave properly. What was even stranger — look at the stack trace once again. Have you noticed that there are no custom messages in exceptions? But the developers of the game engine are quite smart guys so the messages are actually exist in the source code. Looks like magic to me…

    Although, there were some problems with the engine itself too, I fixed’em already with this PR .

    As sad as it sounds, so far there is no resolution, but I’m not going to give up on this. When you develop for hundreds different Android devices occasional errors are inevitable. It is just impossible to test a product on each and every smartphone out there. But I believe every problem should be fixed anyhow. After all, if there is no other way some devices may be marked as “Excluded” in Google Developer Console. No support — no problems, right? :)

    • 1
    • 0
    • 52

    Recent Entries

    Latest Entry


    We are Evil Corporation Games, an indie studio, which was founded in 2016. In April 2017 our first game project - Star Story: The Horizon Escape (a text turn-based adventure RPG with 24+ alternative endings) was released on Steam. We are currently working on our next game - TERRORHYTHM. That will be rhythm + beat'em up action in the style of cyberpunk.

    In this blog we will inform you about our game projects and the latest news about it.

    First post we would like to dedicate to our first project call "Star Story: The Horizon Escape".

    It was released on Steam 05.09.2017 (, then it was published on, and Was a work experience with Soon Star Story will be available on and also.

    It’s a text turn-based adventure game with elements of RPG. The plot is developing in accordance with the actions of the player; there are 24+ alternative endings of an exciting adventure.



    A spaceship of archeologist Van Click crashes, and he finds himself on the last unexplored planet in the whole galaxy called “Horizon”. As the Hero is trying to get out from this planet, he meets various inhabitants of unknown locations; he has to struggle for life encountering extremely aggressive species of Fauna and resolving various puzzles. The end of this eventful flee from the Horizon planet depends only on the player’ choice.

    In this game we have mixed the mechanics of dialogues, choices, turn-based battles, puzzles, crafting and technology researches.

    Work on this game lasted 1 year. And before an official release Star Story took the first prize in the nomination «Best PC game» according to Indie Cup 2017 and got the first place in the Deconstruction Workshop at the White Nights St. Petersburg 2017 conference.

    As it our first post, in honor of it we would like to share 5 STEAM keys to Star Story for our very first readers and friends here:


    Very soon we will post the early details of our new project making, that will be released Spring 2018. 

  7. Welcome to Day 38! Today, we’re going to talk about the limitations of mobile VR and make some changes in our game to fix things.

    We’ve already started to fix some things, specifically adding event triggers to our enemies, but there’s still many more things to solve!

    Here’s a quick list of things I want to tackle from what we encountered 2 days ago:

    From a technical limitation:

    1. We can’t move
    2. We only have one input which is clicking

    Some actual technical problems:

    1. The enemies are all black color
    2. We don’t have any of our UI’s anymore

    We’re going to address these problems over the next couple of days.

    Today, we’re going to focus on the technical limitations of Mobile VR, today’s priorities are:

    1. Discussing how to change our game design to accommodate our new limitations
    2. Implementing our new designs

    Edit, Important Note:

    After playing around with the Cardboard in Unity today and looking at this article about Google Cardboard’s inputs.

    It seems that we don’t have to use Google VR SDK. Unity already has most of the internal integration necessary to make a VR app

    Everything we had already works, the reason why there I initially thought there was a problem is, because of how we did raycasting.

    Specifically, our raycasting code targeted where our mouse/finger was touching, not the middle of the screen! More on this later.

    Step 1: Changing the Game to Fit our Mobile Limitations

    Like mentioned before, in the Google Cardboard, we have 3 limitations:

    1. We can’t move our characters position
    2. We only have tapping as an input to interact with the game
    3. Our cursor will always be in the middle of the screen

    Even for the Daydream Viewer, we will have the first 2 limitations.

    However, with the new Daydream Standalone device coming out, we’ll have World Space, finally allowing us to track the player’s movements without requiring external devices like what the Vive does!

    Anyways, back on topic.

    Considering these 3 limitations, here are my thoughts of what needs to be changed in our game:

    1. Because we can’t move, we should place our character in a more centered location for the enemies to reach us
    2. Because we can no longer run away, we should make the enemies weaker so that we don’t get swarmed
    3. Because we only have one input, we can shoot, but we can’t reload, we should get rid of the reload system

    Essentially, we’re going to create a shooter with our player in the center with enemies coming from all around us.

    Step 2: Implementing Our New Designs

    Now that we have everything we want to do planned, let’s get started in the actual implementation!

    Step 2.1: Placing the Character in the Middle

    Let’s place the character in the middle of where our spawn points are set.

    After playing around with it, I think the best spot would be at Position: (100, 1, 95)


    1. Select Player in our hierarchy.
    2. In the Transform component, set our Position to be X: 100, Y: 1, Z: 95

    Step 2.2: Making the Enemies Weaker

    Next up, let’s make the enemies weaker.

    In the Enemy Health script component attached to our Knight, Bandit, and Zombie prefab, let’s change their health value.

    In order of our health, the order of size from largest to smallest is: Zombie > Knight > Bandit. Let’s set the health to be:

    1. Zombie: 4 HP
    2. Knight: 2 HP
    3. Bandit: 1 HP

    Here’s how we change our health:

    1. In Assets > Prefabs select our prefabs, in this case, let’s choose Zombie.
    2. In the Inspector, select the Enemy Health (Script) component and change Health to be 4


    Do the same change with the other 2 prefabs.

    Step 2.3: Remove our ammo system

    Now it’s time to back to our Player Shooting Controller (Script) Component that we disabled yesterday.

    I want to keep the animation and sound effects that we had when shooting our gun, however, I’m going to get rid of the ammo and the need to reload.

    Here are my changes:

    using UnityEngine;
    using System.Collections;
    public class PlayerShootingController : MonoBehaviour
        public float Range = 100;
        public float ShootingDelay = 0.1f;
        public AudioClip ShotSfxClips;
        public Transform GunEndPoint;
        //public float MaxAmmo = 10f;
        private Camera _camera;
        private ParticleSystem _particle;
        private LayerMask _shootableMask;
        private float _timer;
        private AudioSource _audioSource;
        private Animator _animator;
        private bool _isShooting;
        //private bool _isReloading;
        //private LineRenderer _lineRenderer;
        //private float _currentAmmo;
        //private ScreenManager _screenManager;
        void Start () {
    		_camera = Camera.main;
    	    _particle = GetComponentInChildren<ParticleSystem>();
    	    Cursor.lockState = CursorLockMode.Locked;
    	    _shootableMask = LayerMask.GetMask("Shootable");
    	    _timer = 0;
            _animator = GetComponent<Animator>();
            _isShooting = false;
            //_isReloading = false;
            //_lineRenderer = GetComponent<LineRenderer>();
            //_currentAmmo = MaxAmmo + 10;
            //_screenManager = GameObject.FindWithTag("ScreenManager").GetComponent<ScreenManager>();
    	void Update ()
    	    _timer += Time.deltaTime;
    	    // Create a vector at the center of our camera's viewport
    	    //Vector3 lineOrigin = _camera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0.0f));
    	    // Draw a line in the Scene View  from the point lineOrigin in the direction of fpsCam.transform.forward * weaponRange, using the color green
    	    //Debug.DrawRay(lineOrigin, _camera.transform.forward * Range,;
            if (Input.GetButton("Fire1") && _timer >= ShootingDelay /*&& !_isReloading && _currentAmmo > 0*/)
    	        if (!_isShooting)
            else if (!Input.GetButton("Fire1") /*|| _currentAmmo <= 0*/)
    	        if (_isShooting)
    	    /*if (Input.GetKeyDown(KeyCode.R))
        private void StartReloading()
            _isShooting = false;
            //_isReloading = true;
        private void TriggerShootingAnimation()
            _isShooting = !_isShooting;
            //print("trigger shoot animation");
        private void StopShooting()
        public void Shoot()
            //print("shoot called");
            _timer = 0;
            Ray ray = _camera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));//_camera.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit = new RaycastHit();
            //_screenManager.UpdateAmmoText(_currentAmmo, MaxAmmo);
            //_lineRenderer.SetPosition(0, GunEndPoint.position);
            if (Physics.Raycast(ray, out hit, Range, _shootableMask))
                print("hit " + hit.collider.gameObject);
                //_lineRenderer.SetPosition(1, hit.point);
                //EnemyHealth health = hit.collider.GetComponent<EnemyHealth>();
                EnemyMovement enemyMovement = hit.collider.GetComponent<EnemyMovement>();
                if (enemyMovement != null)
                /*if (health != null)
                _lineRenderer.SetPosition(1, ray.GetPoint(Range));
        // called from the animation finished
        /*public void ReloadFinish()
            _isReloading = false;
            _currentAmmo = MaxAmmo;
            _screenManager.UpdateAmmoText(_currentAmmo, MaxAmmo);
        private void SetupSound()
            _audioSource = gameObject.AddComponent<AudioSource>();
            _audioSource.volume = 0.2f;
            _audioSource.clip = ShotSfxClips;
        public void GameOver()
            print("game over called");

    I’ve kept what I commented out, here’s the clean version of our script.

    using UnityEngine;
    using System.Collections;
    public class PlayerShootingController : MonoBehaviour
        public float Range = 100;
        public float ShootingDelay = 0.1f;
        public AudioClip ShotSfxClips;
        public Transform GunEndPoint;
        private Camera _camera;
        private ParticleSystem _particle;
        private LayerMask _shootableMask;
        private float _timer;
        private AudioSource _audioSource;
        private Animator _animator;
        private bool _isShooting;
        void Start () {
    		_camera = Camera.main;
    	    _particle = GetComponentInChildren<ParticleSystem>();
    	    Cursor.lockState = CursorLockMode.Locked;
    	    _shootableMask = LayerMask.GetMask("Shootable");
    	    _timer = 0;
            _animator = GetComponent<Animator>();
            _isShooting = false;
    	void Update ()
    	    _timer += Time.deltaTime;
            if (Input.GetButton("Fire1") && _timer >= ShootingDelay)
    	        if (!_isShooting)
            else if (!Input.GetButton("Fire1"))
    	        if (_isShooting)
        private void TriggerShootingAnimation()
            _isShooting = !_isShooting;
        private void StopShooting()
        public void Shoot()
            _timer = 0;
            Ray ray = _camera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
            RaycastHit hit = new RaycastHit();
            if (Physics.Raycast(ray, out hit, Range, _shootableMask))
                print("hit " + hit.collider.gameObject);
                EnemyMovement enemyMovement = hit.collider.GetComponent<EnemyMovement>();
                if (enemyMovement != null)
        private void SetupSound()
            _audioSource = gameObject.AddComponent<AudioSource>();
            _audioSource.volume = 0.2f;
            _audioSource.clip = ShotSfxClips;
        public void GameOver()
            print("game over called");

    Looking through the Changes

    We removed a lot of the code that was part of the reloading system.

    We basically removed any mentions of our ammo and reloading, however, I kept the changes involved with the shooting animation, shooting sound effects, and shooting rate.

    There were only 2 changes that were made:

    1. I changed the input we use to shoot from GetMouseButton to GetButton(“Fire1”), I believe this is the same thing, but I’m making the change anyways. Either option returns true when we’re touching the screen on our mobile device.
    2. I also changed our Ray from our raycasting system. Before casted a ray from where our mouse was located at, which before we fixed at the center. However, after we got rid of the code that fixed cursor to the middle, we needed a new way to target the middle. Instead of firing the raycast from our mouse, we now fire the raycast from the middle of our camera, which will fix our problem with our mobile device.

    Go ahead and play the game now. We should be able to have a playable game now.

    There are 2 things that will happen when we shoot:

    1. We’ll shoot a raycast and if it hits the enemy, they’ll be pushed back
    2. The enemies trigger event will detect that we clicked down on the enemy, so they’ll take some damage

    At this point, we have a problem: if we were to hold down the screen, we’ll push the enemy back, but they’ll only be hit once! That’s because we only have that deals with an OnClick event, but not if the user is currently selecting them.

    We’re going to fix this problem tomorrow, but I’ve done a lot of investigation work with raycasts now and want to take a break!

    Step 2.4: Changing the ScreenManager script

    One more thing we need to do before we leave.

    The Unity compiler would complain about a missing reference with our ScreenManager, specifically with the MaxAmmo variable that we got rid of.

    Let’s just get rid of it:

    using UnityEngine;
    using UnityEngine.UI;
    public class ScreenManager : MonoBehaviour
        public Text AmmoText;
        void Start()
                PlayerShootingController shootingController = Camera.main.GetComponentInChildren<PlayerShootingController>();
                //UpdateAmmoText(shootingController.MaxAmmo, shootingController.MaxAmmo);
        public void UpdateAmmoText(float currentAmmo, float maxAmmo)
            AmmoText.text = currentAmmo + "/" + maxAmmo;

    And we’re good to go! Technically speaking, we won’t be using this script anymore either.


    And another day’s worth of work has ended! There’s a lot of things I learned about VR, such as: we don’t need ANYTHING that the Google VR SDK provides!

    Unity as a game engine already provides us with everything we need to make a VR experience. Google’s SDK kit is more of a utility kit that help make implementation easier.

    The TLDR I learned today is that we don’t have to be fixed on using Unity’s Raycasting script, we don’t need it. We can continue to use what we already have. However, for the sake of learning, I’m going to continue down re-implementing our simple FPS with the Google Cardboard assets!

    We’ll continue tomorrow on Day 39! See you then!

    Day 37 | 100 Days of VR | Day 39


    • 2
    • 3
    • 135

    Recent Entries


    Me again, I got some problem with SDL2_mixer on macOs, actually I am thinking about cancelling MacOs version as I found no solution to  play sounds in this platform.

    Looks like we will stick with Windows and Linux.

    Good news, the development is about to be close now. and i provide 3 videos for Tutorial, Mask power presentation, and an easy level to show the gameplay.

    Tutorial :



    Mask Presentation:




    Before each level, the level takes something like 1 to 5 seconds to load depending on the computer, so I added loading screen that presents all the different characters in the game. here you have one.

    hope you will like it.


  8. Screenshot from 2017-11-17 19-06-42.png

    Hello GameDev,

    It's been awhile.  I decided to take some time away from screens and focus my time on camping, reading and getting outside.  As a result I've come back to this project with fresh ideas, renewed energy, and summer/fall was fantastic.

    Some big milestones for this project have been achieved:  
    - 10,000 AI can be simulated moving about a world without major performance issues in Chrome. 
    - Dynamic path-finding with decent performance, a few tweaks still need to be made.

    With those two accomplishments under the hood I am now starting to think about how this game is going to be played.  Thinking about how this game is going to be played has put this project into perspective for me.  It's taken me 4 years to program everything up to this point, and I don't have a game, just a program that does stuff.  There is no way this project could potentially supplement my income for a long long time and as such I've got to treat it like a hobby, but god it's an addictive one.

    When I first began thinking about how people would actually play this game I realised I had no idea.  I knew what I wanted to simulate, but when, where and how someone interacts with the game was beyond me.  So I began playing games again, especially Civ, Galactic Civilisation, addictive cellphone games like Deep Town and Egg, Inc. Along with a few puzzlers and many more.  I've been thinking a lot about what I like about these games, also why I no longer play many of the games I used to.  I realised that a successful game engages the players imagination and makes them want to devote their imagination to it.  Really it's the player that does all the heavy imaginary lifting, and you as the game creator just need to provide a few details to help them along their imaginary journey.   This insight is probably a no brainer for a lot of people, but it's helped me realise what my objective is.

    So I am going to literally rip-off elements of other games that capture my imagination and try to ram as many of them into this game as I can.  If I succeed it'll capture the players imagination and be addictive.

    The initial inspiration for this idea was cooked up years ago, and that was to play a game that better reflected the economic activity within any society.  I was obsessed with the idea of how money works and why there is so much esoteric babbling surrounding its utility.  What I learned isn't so esoteric but with some long thought experiments involving money I began to understand how and why we have inflation, deflation, market bubbles and so on.  And I want to incorporate all those things into a game, albeit simplified, but reflected none the less.  I want players to have to manage their own floating currencies, it might not be printed monies, but maybe sea shells, or maybe rare bird feathers.  I want to give the player a scenario where they can see the simple machinations of their local trading economies and expand on them to encourage things like individual debt and inflation to see how these things can benefit their end goal (global domination).  All the while engaging with other players in either alliances or rivalries, fighting elements and cultural expansion.

    My first goal is to have the AI acquire the resources they need to better their conditions.  When the game starts they will be hungry, thirsty, cold and in need of some social engagement.  They'll slowly improve their conditions by visiting the rivers, gathering wood, and earth.  They'll chat with each other about how to improve their respective abilities and reinforce traditions and tribal bonds.  They'll build huts for themselves and create tools to help with each of their actions.  They will also begin trading with one another, small at first.  Leaders will rise up and begin exerting influence over others either because of circumstance or innate ability.  The player will play as one of the AI.  

    Most of what I've described here has been dissected into small chunks that are programmable.  A nagging question I have is will the interactive simulation I create translate clearly to the player?  I'm excited to find out.

    [ ::UPDATE:: ] I'm attaching my very first Desktop Capture Video Example.ogv it's 30 seconds.  It quickly showcases what the world running in Chrome looks and feels like, This world is host to 1000 Simulin.  I also select a few of the Simulin to move.  When you log into the website and sign in you'll be able to join a server that is hosting a world like the one in the video.  Right now all you can do is click on Simulin and get them to move where you want them to.  Over the next couple weeks I'll be implementing the first role your Simulin can take.

    Thanks for reading.

  9. UE4-Trello.jpg

    This tutorial will give a step-by-step guide for creating Trello cards from inside a running Unreal Engine 4 project. While you can use this for just about anything you can think of, I personally use this as a way for my players to post bugs from inside the game. If you're not familiar with Trello, I highly suggest you check it out. It's a great tool for project management and organization. It should go without saying, but you're going to need an account on Trello in order to make any progress here.

    I also want to mention at this point that this will be a C++ tutorial. Without some form of additional plug-in or other engine modification, you can't make the needed HTTP Request calls. Also, setting this up will assuming you know how to add input mappings and have worked with Widgets a bit.

    Note: This was created UE4 4.17.

    This article was originally published Ding! Games.

    We're going to start simple, but I'll talk about a few ideas for adding in some variance toward the bottom.

    Part I: Trello

    We're going to start by going through some steps to authorize access to your Trello account and get the information we need in order to post new cards onto the board of your choice. In the end, we're looking to make an HTTP request to Trello that looks something like this (the italicized parts surrounded by {} are what you'll end up replacing with your own values).{Your+key}&token={yourtoken}&name={New+card+name}&desc={New+card+description}&idLavels={Label}&idList={list}

    Step 1: Key

    The first thing to do is generate a key with your Trello account. This will let you start to get the rest of the required items. While logged into Trello, go to the following link:

    Step 2: Token

    The next step is to authorize write access. Copy the below address, but replace {Your+Key} with the key you got from Step 1 (make sure you take out the {} as well).{Your+Key}&scope=read%2Cwrite&name=My+Application&expiration=never&response_type=token

    Step 3: Board Id

    Now you need to get the id of the actual board you want your cards to get posted to. Use the following link (no modifications needed):

    Exactly how this looks will depend on which Web Browser you're using. For example, Chrome will just spit out all of the text without organizing it at all, while Firefox will sort and color the data for you. Either one is fine, just look for the long string of alpha-numeric characters right after the name of the board you're specifically looking for.

    This id isn't actually needed in the HTTP request line, but you need it to get the next two ids...

    Step 4: List

    Next up, the list within the board you want the cards to post to. As before copy the below, but replace the board id with the id you got from Step 3.{board+id}/lists

    Again, how it breaks it out will be determined by what Web Browser you're using. This is where using something like Firefox will make it a lot easier to pick out the exact one you're looking for. This time, the id (not the pos) you need is before the name of the list you want to post to. Also, make sure you don't inadvertently copy the board id again.

    Just one more...

    Step 5: Label

    Last, but not least, is the label you want put on the card itself when it gets posted. This should be getting familiar, replace the board id in the address with your own.{board+id}/labels

    As with step 4, this can be a bit messy if your browser doesn't break it out for you, but you should be getting the hang of it by name. Grab the id (first entry per set) for the color you want your bards to post as.

    Okay, hopefully you copied all those ids down somewhere, because you're going to need them for the next part, actually writing out the code.

    Part II: C++ Code

    Now that we've got all of the various ids that we need, it's time to dive into doing some code.

    Step 1: HTTP Module

    First up, we need to make a small edit to the build file, and include the HTTP module.

    public class Zeus : ModuleRules
    	public Zeus(ReadOnlyTargetRules Target) : base(Target)
    		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HTTP" });
    		PrivateDependencyModuleNames.AddRange(new string[] {  });

    Step 2: Header Definition

    Now, on to the actual implementation. I added my logic in the Game Mode, but you can actually put it just about anywhere you want. I'm also going to show a very simplistic setup, although I'll give some ideas on how to expand upon it at the bottom.

    #pragma once
    #include "ZeusFunctionLibrary.h"
    #include "StandardPlayerController.h"
    #include "Http.h"
    #include "GameFramework/GameMode.h"
    #include "ZeusGameMode.generated.h"
    class ZEUS_API AZeusGameMode : public AGameMode
    	/** Used to report a bug */
    	UFUNCTION(BlueprintCallable, Category = "Trello")
    	void ReportBug(FString Name, FString Description);
    	UFUNCTION(BlueprintImplementableEvent, Category = "Trello")
    	void ReportBugComplete(bool bWasSuccessful);
    	void OnReportBugComplete(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);
    There are three functions defined in the above code:
    1. ReportBug: My goal is to have bugs reported from the game's GUI, so I wanted to be able to have the actual reporting of the bug called from blueprints. This function is passing the Name of the bug, and the full description (both entered by the player). You can modify this as you see fit.
    2. ReportBugComplete: This is implemented more for testing purposed. It's used to push the result of the bug submission back up to Blueprints to be handled. You can modify this as desired, or just remove it entirely.
    3. OnReportBugComplete: This is the function that gets automatically called after your HTTP request is processed. As such, it has to stay as is.

    Now to the best part, submitting the card!

    Step 3: Implementation

    Here's the code:

    #include "Zeus.h"
    #include "ZeusGameMode.h"
    const FString TrelloCards = "";
    const FString Key = "1234567890abcdefghijklmnopqrstuv";
    const FString Token = "123456789abcdefghijklmnopqrstuvwxyz123456789abcdefghijklmnopqrst";
    const FString Label = "123456789abcdefghijklmno";
    const FString List = "123456789abcdefghijklmno";
    	// Nothing extra needed in the constructor for this
    void AZeusGameMode::ReportBug(FString Name, FString Description)
    	TSharedRef Request = FHttpModule::Get().CreateRequest();
    	//Replace all the spaces with +
    	Name = Name.Replace(TEXT(" "), TEXT("+"));
    	Description = Description.Replace(TEXT(" "), TEXT("+"));
    	//Construct the HTTP url
    	FString URL = TrelloCards +
    		"key=" + Key +
    		"&token=" + Token +
    		"&name=" + Name +
    		"&desc=" + Description + "+(V:+" + UZeusFunctionLibrary::GetProjectVersion() + ")" +
    		"&idList=" + List +
    		"&idLabels=" + Label;
    	// Set the built URL
    	// Bind OnReportBugComplete() to be called once the request is complete
    	Request->OnProcessRequestComplete().BindUObject(this, &AZeusGameMode::OnReportBugComplete);
    	// Process the request
    void AZeusGameMode::OnReportBugComplete(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
    	// Calls up to a Blueprint implemented event
    All of the logic takes place in the ReportBug function, essentially going through the following steps:
    1. Create the request and set it to POST (This is an HTTP protocol thing)
    2. Change all of the spaces to + (Another HTTP protocol thing)
    3. Build out the full string to be reported, using the model I posted way up top. Note that I have a function in there that adds on the current project version to the description. This is very handy for tracking bugs, as you really want to know what version someone is playing, without having to worry about them typing it in themselves somwhere.
    4. Set the built URL against the Request, bind the OnReportBugComplete() function and then process the request.

    That's it for the code level. This alone gives you a good bit of freedom for what to do, but I'll show you a simple implementation at the Blueprint level next.

    Phase 3: Blueprints

    Step 1: Widget

    First, lets build out our Widget that the player will actually use to input their bug:



    I was looking for functional when I threw this together, not pretty. It's an extremely simplistic Widget, with some texts boxes for the user to input a title and description of the bug, and then either Submit, or Cancel.

    The buttons have the following attached to their respective OnClick() events:





    Step 2: Input Mapping

    Under project Settings->Input, we want to add an action mapping to start of this whole series of events:


    Step 3: Report Bug Event

    Last, but not least, we need to fill out the logic for when the user actually presses F12. I put this in the Blueprinted version of my Player Controller, but you can put this in anything that receives user input:


    A couple of things to note here is that I automatically take a screenshot and pause the game. Neither or required, but I find both to be handy.


    And there you have it! While running, you should now be able to press F12, create a bug report and submit it to Trello, where it should appear almost instantly.

    Now, as I mentioned earlier, this is a rather straightforward approach that has the potential for expansion. For example, as it stands, the Board, List and Labels are currently hard coded values, meaning that you always post to the same place with the same label marking it. You could expand upon that by putting in a drop-down for the play to choose how critical of a bug they found, passing that as a variable down to the ReportBug() method (such as in the form of an enum), which you could then use to select which label gets attached.

    You could also let the player submit recommendations or feedback in addition to bug reports, which could result in the cards being posted to a different list, or completely different board. The variations are endless, but ultimately, anything that lets the player quickly provide some form of feedback without having to leave the game or do something else is ideal.

    Hopefully you don't have any trouble getting any of the above implemented, but if you do, please feel free to post your questions, and I'll see what I can do.

    Best of luck!


    Shawn is the Designer/Developer at Ding! Games. They are currently working on a game code-named Zeus, a RPG Action/Puzzle game. For more great articles or to get the latest news bout game development, visit them at their site.

  10. Hi everyone!


    It’s been a while… How is everyone doing? :D

    We have a lot of news for you but today we are going to talk about Web Summit!

    As you might already know, last week was the Web Summit 2017 in Lisbon and we were there!


    Web Summit


    First of all WOW! Ahah I think I talk for everyone when I say Web Summit was an intense experience. In the first two days we only strolled around...met new people..  attended a few conferences and we even watched a few pitches from other companies.


    But then day 3 came! [Dramatic music] It was 7:30am when we got to Web Summit. It was soooo early all we wanted was sleep. Around 9am people started to show up and then it’s when things got real. We had to pitch over and over again Project SpaceVille. We must have pitched about 1 thousand times? Ahaha And no I’m not exaggerating.

    Imagine this: standing up for 10hrs straight and always repeating yourself. Ahah It was somewhat exhausting, I won’t lie, but in the end it was a wonderful experience! We met a large number of interesting people, a lot of interesting startups and even some investors!

    In the end of day three, our sponsor, Startup League, organized a closing Mixer which was a great way to relax after such a long day.

    We’d like to thank Startup League for helping us and making us goodies. 

    We launched a new version of the Insider Program. Unfortunately, some people have told us they have been having trouble with this new version. Screen shaking or a loading bug, might occur. If you're experiencing this, try restarting the game and don't touch anything until the game loads. If the problem sustains, let us know. We will try to solve this problem as soon as possible.
     Screenshot of André Soares
    See you soon,

    The FAXIME Team

    Follow us and keep updated at:






  11. Today there are millions of Android apps of all descriptions available in the market. The main concern is about choosing the right one and in the era of competition, survival is the key. We have all grown up with the technology, and we never settle without choosing the best of the apps. There is an excellent market for both leading mobile development platforms -iOS and Android apps available on the market. The mobile usage and time spent using mobile apps are continuously growing. Nowadays, a native mobile app is a part of the smartest mobile strategies.

    Once you have decided to build a native app, where do you start from? Which platform should you choose to build your first version on? Is it good to choose the Android platform first or the iOS or both? The choice would depend on factors which need to be taken into consideration while building a native mobile app.


        The target customers always play the key role in the market.

        The primary consideration is where are the targeted app adopters located.

        The customers and location play an impactful role in the app production and growth in the app.

    If the customers belong to Europe, U.S, or Australia, the possibility is that Android would have a strong priority but would lag behind iOS apps and their demand. In countries such as Asia, South America, Android sales prevail over iOS apps. Therefore, Android app developers consider targeting such locations for stable and better sales and revenue generation of their apps. 

    However, in terms of app revenue generation for developers, iOS continues to lead the way. It helps revenue generation in terms of both - app sales and in-app purchases. Apple and the iPhone or iPads are a premium brand. As a result, compared to the Android device owner, an average iPhone owner tends to spend more on apps.

    Also, app developers India consider the demographics of the targeted user. Younger generations choose Android over iPhones considering Android phones are cheaper and better. On the basis of these factors, android app developers can develop creative apps and target them to the relative customers.

    Open source and fragmentation


    The main disadvantage of Android’s environment is that it is open source. Android app developers also face the challenge of fragmentation. They ought to consider this at the device level, and the component level within those android devices. The other factor is that there is more significant fragmentation at the software level. Each Android release by Google is later customized and adapted by the different hardware producers. This makes the software fragmentation even more diverse.

    For Android app developers, it is important to test an Android app to remove bugs for avoiding future crashes. The process takes far longer than its equivalent iOS app. However, Android app developers can manage this issue by limiting the release of the apps to specific types of hardware and specific versions of Android OS. Thus, they must consider certain parameters such as the device size, screen resolutions, OS versions. Without these parameters, an Android app could take longer to develop than a similar iOS app.

    The review process

    Android is an open source platform and has many pros and cons in view of its review process. It might be a plus factor for the Android app developers when it comes to building the first product. But sometimes, it can be a trap too.

    Apple carefully reviews all the iOS apps before releasing it in the App Store. The iOS app developers generally need to wait for up to 10 days. If the app does not meet the Apple standards, developers have to make certain changes and resubmit it. Once, they get a green signal; the app is ready to go live. While on the other hand, Google Play Store does not have this kind of a barrier. Google provides a separate Google Play beta play store to its Android app developers for the test releases. This means the developers can iterate and deploy builds easier and faster for Android than iOS.

    The downside of Android apps is that they are also more susceptible to malware threats. There are more chances of the app being quickly copied, especially if they are popular and generate enough revenue. However, now with Google Play Protect, Android apps are getting more secure.

    Apple provides its own test environment; however, it can be tricky to use from the practical point of view as many beta testers encounter issues while installing the apps on their iPhones.



    For mobile app developers, it is important to think and decide upon such factors. Therefore, they should make sure that they spend time carefully on research and analyzing the market and trends. Before deciding whether your native app should be iOS or Android, weigh the pros and cons of developing apps for each of the leading platforms.



  12. For the past few years in a row, mobile games dominated the app stores regarding revenue, download number and engagement. No other app niche has shown such huge level of activities and soaring numbers as the mobile games. Naturally, mobile games also have been the most happening niche in respect of new technologies and innovations. From Augmented Reality and Virtual Reality games to wearable gaming, new technologies are continuing to shape gaming experience.

    Mobile game marketing has also come of age and now has become more mature than ever before. The era of so-called ‘freemium’ games, gated features and in-app monetisation tactics look common, and every game marketer is on the lookout for a new way to market and generate revenue.

    Considering all these evolving attributes, 2018 has really been a happening year for mobile games. Let us introduce here some of the key trends that will shape mobile game development in 2018.


    1. VR and AR Gaming

    When Pokémon GO was released and literally took the world by storm with its never-before gaming experience in 2016, many experts just didn't think twice to mark that year with the rise of VR and AR games. But that was just the beginning of the kind of mobile games which will continue to dominate the gaming scene for the mobile and wearable users in the years to come.

    The success of Pokemon Go actually became a motivating factor for game developers worldwide, and such reality defining games continued to come making the scene even more competitive. Though 2017 has not seen any new era defining AR or VR games like Pokemon Go, both the technologies have been consolidated and became mainstream as the gaming technologies of the future.

    2. Mobile games for the elderly

    Certainly, we no longer consider mobile games to be the child's plaything. It is equally for the elderly people, grownup youths, matured ladies and people of all ages. For the past several years we have seen hordes of game apps to come up targeted for elderly population or people outside of common game-playing demographics. In 2017, there have been hundreds of games for elderly, working men and women and all other age groups. With many games enjoying the favour of an addicted game playing audience, this trend is going to stay dormant in the time to come.

    3. Wearable gaming

    If we are not terribly wrong, wearable devices can easily be predicted as the next mass mobilising device platform after the smartphones. Naturally, mobile gaming is also supposed to shift its load to the wearable gaming apps. Even if the mobile games are to remain popular because of their large screen gaming experience, the quick to play gaming experience of the smartwatches will continue to remain popular. Moreover, offering an extended gaming experience from the mobile device to the smart wearables, they will help people stay engaged with a game irrespective of the device.

    4. Social gaming

    Social gaming is already a hot trend as most of the mobile games are keen to promote the gaming experience by allowing players to invite their players onboard for a gameplay. From a game of pool to most complex and strategy games, most games these days allow players inviting their friends on social media. Moreover, quick social registration for mobile games is already helping games garner access to more people through the social contacts of the player. By incentivising social gaming in many ways,  a game app can further push players to engage their friends on social media.

    5. Game consoles getting outdated

    Game consoles like the PlayStation and Xbox are still there, and it is not a coincidence that they are actually getting better with the rise of mobile gaming. In spite of getting better and richer to compete the mobile games, gaming consoles because of their expensive price tag and difficulty of handling will only attract less and less people like the game playing audience.

    Mobile gaming with high-end sophisticated experience and extreme ease of use will continue to hold the charm that no other gaming devices really can. With the unprecedented rise of mobile gaming in recent times, game consoles are only becoming less competitive options for the gaming audience.

    6. Custom game features

    We are already aware of the power of customisation for the engaging audience. Custom features make a player feel important, and it is something everyone likes almost invariably. It is no different when it comes to mobile games. Mobile games allowing players to choose features that they find enjoyable for their game playing experience, will obviously give them more reasons to stick to a particular game. The custom game features allowing players shaping their own gaming experience have been very popular with mobile games this year.

    7. Multichannel access

    Average smartphone users have access to several gaming devices simultaneously, and this is why allowing unperturbed game play across multiple devices and platforms became very important. Game developers also find it helpful to build a cross-platform game to boost the chances of getting discovered easily across app stores. While engaging game players continuously irrespective of the device in use is one of the most important considerations for the marketing success of a game, allowing unperturbed streaming of the game across devices is crucial.

    8. A renewed interest in retro games

    There has been a renewed interest in the old style mobile games, at least for their look and feel. Dubbed as retro games the new breed of games are introducing the look and feel of older mobile games. This new approach allowing young players having gaming experience of a different generation became quite popular throughout this year.

    In summation

    To conclude, in 2017 we have seen several definitive game trends to unfurl allowing new scopes for marketers and developers. Among these trends, the above-mentioned ones seem to have a far-reaching echo than the rest.

  13. A 2D digging, adventure puzzle game with some retro feel reminding us of the amazing first digger games such as BoulderDash that we knew when we were younger. That is the type of game me and my partner wanted to create as our very first joint project for our studio “RoKabium Games”. Both being avid gamers we hadn’t seen many games in that genre that focused more on the actual digging being the main element rather than being an action plat former or survival and crafting sandbox with the occasional digging part. So last year we started working and planning for our game “Something Ate My Alien”.

    We knew early on that for a 2-person team to pull of creating a whole video game we had to have a planning structure for a game that wasn’t too large or complicated. So early ideas of making a full blown 3D, interactive, huge sandbox with multiplayer alternatives was just not gonna be a good starting point. We scaled down the idea of a huge concept and decided to rely more on our existing skill set in the game industry. We decided to focus on a more manageable core of that we ourselves would like to play and what we believed other people would also enjoy to play. A finite game story of about 6-10 hours game play from start to finish, something fun and charming with just the right amount of action/digging/puzzles ratio.


    We also knew that our game would show quality and engaging graphics being hand painted by myself and it would all be done in a style that would ooze retro, hand painted, uniform and a beautiful game with easy to navigate and clear game mechanics and graphics. We wanted it to be a lighthearted but a addictive little gem suitable for a both younger and a more adult audience. Our game would be exactly how we envisioned it since it would be the labor of our own vision, not working for anybody else.


    As a digital artist with several years experience in working for game studios and painting game assets, backgrounds, icons, characters etc and being part a team of other game developers, I did have some much needed experience in understanding just how much art is needed for a complete game. Even the smallest game contains more art pieces than you might think. For example, for every animation you do in 2D graphics you have to paint a new image and each animation can have anything from a very basic 5 frames up to 30-40 frames. So for each enemy you draw for example you need to also draw that enemy having an idle position, a walking cycle, a running cycle, an attack cycle, a dying cycle, a jumping cycle etc. So for one single enemy in a game you might have to produce up to around 100 images. Add to that, our game would have at least 10 different enemies for each level and we have designed our game to have a total of 4 levels.

    Each game level or planet as it is represented in SAMA is built up with a set of ground tiles that has seamless tiling for a smooth and more realistic look. For each tile-set I’m designing 6 variants so the illusion of random and unique ground that looks like it is not repeating. Each world has 4 unique tile types to add variation for the digging mechanics and giving the player more varied game play. On top of normal ground tiles we have variants of 20 unique decals and edges created to blend different types of ground together better and adding even more realism. Inside the ground tiles you can as a player find all kinds of loot. So far I’ve designed 25 unique minerals, 9 different type of gemstones, 8 different kind of gases (each with animation cycles), 28 types of artefacts, 12 different types of complete fossilized animals which consists of 62 separate type of bones to find. There are teleporters, oxygen stations, health hearts, energy boosts, lamps to light up the dark caves, secret doors with puzzle areas to solve to get rare loot or upgrades. There are icons for every item and enemy you can find. All of these visual elements are hand painted by myself and still this is just the bare base of each planet level.


    When designing the UI for the game we both wanted it very neat and tidy look, using our main colour scheme of blue-green-warm yellow that I first came up with during the conceptual art at the beginning of the project. I also wanted some elements to have somewhat of a computer screen/electronic look with glowing outlines to emphasize that you as the player are the actual AI of the ship and the UI you see is the computer interior.

    While continuing painting and designing the artwork for SAMA we are getting closer to a first Alpha of the game and we are hoping that with the help of feedback from gamers around us and people interested in our game we can develop a game that is incredibly fun and beautiful to play.

    See more over at our web site:

  14. MP3 is still one of the most used audio file formats today. This is the reason why people are usually focused on MP3 players when they are looking for modern audio players. Even though the essence of MP3 players has not changed, the truth is that modern devices of this kind come with many different features and upgraded basic features. In addition, this is a very competitive market which means that you can find mediocre, good and great MP3 players. If you are looking for the best one, you should take a few things into account. The following is a short list of things that make a good MP3 player.

    1. Storage capacity

    First and foremost, you should take a closer look at the storage capacity of the device you are interested in. Most of them have their own hard disk drive, but this is not the most important thing about storage capacity. What you should be looking for is the flash drive slot. The best MP3 players today are letting users inset memory cards that have a capacity of 64 GB or even 128 GB. Some of the most popular ones like Xduoo X3 for example have two slots for SD Cards (128 GB each). In this way, you can store thousands of MP3 songs and listen to them on your device whenever you want.

    2. Battery capacity

    One of the best things about MP3 players is the fact that they are mobile devices. They are small and you can carry them almost anywhere you want without any problems. In order to play bad baby channel, these players are using batteries. The battery capacity is marked with mAh sign (milliamp hours). Generally speaking, the higher the number of mAh, the better. In any case, you should check the technical characteristics and learn more about battery life and the amount of time you’ll need to recharge the device.

    3. Screen

    Users agree that MP3 players with LED screens provide the best experience to watching learn colors with finger family songs. You should also check the brightness of the screen. There are some players that have touch screens, but this is not necessarily an advantage because some of these screens are too sensitive and prone to damage.

    4. Radio

    There are situations when people want to listen to the radio despite the fact that they have access to thousands of MP3 files on their device. It would be great if you can find a device that lets you connect to local FM radio stations.

    5. Lossless audio files

    Besides MP3 audio files, some MP3 players can also play lossless audio files. These files are larger, but they are capable of producing clear sounds. Once again, this feature is not crucial, but it can definitely be helpful.

    Now that you know what makes a good MP3 player, it’s time to start looking for the best place to buy one. Most people agree that using the Internet is the best option we have today because of the convenience and opportunities that online shopping provides.

  15. Welcome to Dev Blog Week 24, we are close to finishing Act 2!! We are balancing the monsters and towers, but this might take a week or two to finish it.

    There will be a total of 6 maps, including a miniboss in between, and an act boss at the end. The theme of Act 2 is the dungeon. Therefore you will see a bit different layout compare to previous maps.

    Without further adieu, these are some screenshots of act2!


    Hell Warders 11_14_2017 11_26_24 AM.png

    Hell Warders 11_14_2017 11_28_43 AM.png

    Hell Warders 11_14_2017 11_28_51 AM.png

    Hell Warders 11_14_2017 11_29_22 AM.png

    Hell Warders 11_14_2017 11_29_37 AM.png

    Hell Warders 11_14_2017 11_30_22 AM.png

    Hell Warders 11_14_2017 11_30_32 AM.png

  16. uZombie (1.0.8)

    I'm trying hard to push out new content and improve the game as often as I can, even with the small amount of free time that I have. There's a lot I have planned for this project and I'm very happy with this next update.

    Download uZombie on your android device here


    Whats new?

    New game mode

    I added a new game mode; "aftermath" which can be unlocked if you infect 500 or more people in the normal game. Play in the aftermath of the zombie apocalypse and clear out military quarantine zones filled with civilians. Finish the level and get rewarded!

    More buildings!

    I was feeling the cities got repetitive with no real variety after seeing the same buildings all the time. Now thanks to my girlfriend who recently started learning how to create vector graphics, I have more building models in the city.

    New environments

    There are new environments you can explore in the aftermath game mode. You'e no longer wondering endless cities and are now placed in the outskirts. Explore forests and quarantined military zones for evacuated civilians.








  17. Hi Everyone,

    Here is the first gif of a arena shmup I'm working on.
    The basic idea is to have increasing waves of enemies and to take orbs to get new weapons to increase the score multiplier.
    There are still many things to do: more enemy types, more weapons and more juice.


  18. The last Alpha release of Lord of Dwarves was very playable. Most of the game features are in, however there is still a lot of work to be done balancing the game and making sure the pacing feels fun and challenging.

    For the last two months I’ve been working on some of these balance & pacing issues. Below I will talk about a few specific gameplay aspects that were not working and how I’m changing them to make the game feel just right.


    Originally dwarves had 16 skills they could level up. This large number of skills encouraged the player specialize their dwarves in the wide variety of skills but then punished them when they wanted to focus many dwarves on a task that required only one of those skills.


    As a result I reduced the number of skills to 7: Hauling, Labor, Crafting, Cooking, Smithing, Needlesmithing, and Engineering. Now the player can have their dwarves focus on collecting wood one day, mining deep the next day, and building a castle on the third. These are all jobs that laborers excel at so they can switch between them while still benefiting from their labor skill value. As a bonus, 7 skills are much more approachable than 16.


    This is an issue I’m still wrestling with but I’ve come up with a system that I’m liking more and more. Previously I created a novel wound system where wounds would be applied to individual body parts in 3 severity levels: minor, severe, and grievous. There was nothing wrong with how this system worked it was just more detailed than it needed to be. From the players perspective they just needed to manage doctors and make sure they had enough bandages. The actual wounds were mostly irrelevant. The small benefit of flavor to know that Stouthammer got a leg wound from a goblin just didn’t fit the pacing of the rest of the game.


    So I decided to switch to a modified health points system. Now the player can focus on the supply chain for fixing wounds without having to worry about individual wounds. Although less novel a health points system is simple, immediately understandable, and frankly, fun.


    Additionally I also added “armor points” based on a dwarfs equipped armor. These armor points are lost first in combat and recover quickly after combat. This also has a rewarding side effect. Now when a player goes to all the effort of crafting a suit of armor they can immediately see the benefit of all the work as the dwarfs armor points increase.


    Previously if the player wanted more dwarves to join their kingdom they needed to craft beds to accommodate the extra population. Low tier beds could only increase population so much before the player had to collect rare materials for higher tier beds. This system was novel and granted a good progression feeling. However it allowed for no diversion in gameplay as it forced the player into making a ton of beds every single game.

    I have since replaced the bed system with a Renown system. The dwarven kingdom has a renown value based on the value of various things in the kingdom. The player can actively increase their renown in a number of ways. Crafting items (chairs, armor, statues, etc), building structures, and domesticating animals all increase renown, which in turn increases the population.


    Now the population will increase no matter where the player focuses their attention. Focusing on combat and building arms & armor will increase renown. Likewise avoiding combat and focusing on building structures will also increase renown. As long is your kingdom is growing in some way your population will too. Now the player can try a different play style every game and still progress.


    Monsters now drop loot! Well to be fair they dropped weapons & armor before, but now they also drop coins, meat, and the occasional rare item. Previously killing monsters didn’t have much of a benefit – except you know preventing civilians from being murdered.


    Now the coins gathered from monsters can be used to purchase items from markets. Or they can be kept in a vault underground for the boost to renown that they provide! Additionally the player may want to attract more monsters for a chance at rare loot.


    Building great structures is a very important part of the Lord of Dwarves feel. In addition to looking cool these structures are functional as they hinder and slow invaders from getting to the dwarves. But building them was always too slow.

    Some background.

    To build a tall wall dwarves need a boost to get up to the high blocks. This boost is provided by scaffolding that the dwarves can set up. But if the wall is 10 blocks tall by 10 blocks wide that’s 100 scaffolding that needs to be crafted and individually placed next to the wall. It took forever!

    I’ve recently improved scaffolding so that when a dwarf emplaces it, it creates scaffolding three blocks tall. Now only one third the scaffolding is needed. Additionally better quality scaffolding covers more blocks, up to 9 blocks tall. In this way the dwarves can quickly cover a wall in scaffolding allowing them to build a wall in a much more enjoyable time frame.



    In Lord of Dwarves the player harvests resources, collects them, and then uses them in their crafts. Collecting those resources could be very time consuming. If felling a forest generated 100 logs, each of those logs would need to be fetched by a dwarf and brought to a storage area. After about a year of gameplay the player would often have 2000 or more backlogged items waiting to be gathered.

    A elegant fix to this was to allow dwarves to carry multiple items at once. Now a single dwarf can go out to the forest, pick up three logs, and bring them back nearly tripling their efficiency. Additionally as dwarves get stronger they can carry more and more requiring fewer and fewer dwarves to do the same job. This change has greatly increased the players ability to maintain a clean kingdom and an efficient production chain.


    Those are some of the major systems I’ve been working the last few months. There are numerous minor systems I’ve also been improving like roads, storage priority, soldier uniform efficiency, and even multi threading the path-finding code. Lord of Dwarves is a big game and I’m trying to get the feel just right before I release it. Wish me luck!

  19. Surely, and C# (in Visual Studio express and other editions) Bitmaps were creatable from its GDI+ methods.(ex. Dim b as bitmap = new bitmap(image))

    But not supported programming-based procedural generated bitmaps, only bitmaps from bitmap-files or its (related) objects or classes supported.

    Now, this article describes about algorithm-based generated bitmaps in using both built-in GDI+ methods and external Windows APIs.

    so-called "binary" bitmaps created from the Createbitmap API. But its usage was not simple, pretty difficult.

    Then I show up samples in source codes below.

    1.form(an app-window) initialization (on this app, form.size fixed in 1600*900)

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
            bmp = New Bitmap(1601, 865, Imaging.PixelFormat.Format32bppRgb) 'screen resolutions in 1600*864

            Sm = "Scene 1" : At = 1 : g = Me.CreateGraphics: BmphDC = g.GetHdc : MainhDC = CreateCompatibleDC(BmphDC)
            Me.Top = 0 : Me.Left = 0 : SetTextColor(MainhDC, &H32A77400) : SetBkColor(MainhDC, 0) : SetBkMode(MainhDC, 1)

            Dim f As New Font(New FontFamily("Times New Roman"), 14, FontStyle.Regular, GraphicsUnit.Pixel, 1, False) : SelectObject(MainhDC, f.ToHfont)
        End Sub 

    mixed .net objects/methods and windows APIs up. those codes were working correctly as it is...

    Then cleanups.

        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)
            DeleteDC(MainhDC) : g.ReleaseHdc(BmphDC) : End
        End Sub

    2.binding binary values to bitmap

        Public Function LenB(ByVal stTarget As String) As Integer
            Return System.Text.Encoding.GetEncoding(932).GetByteCount(stTarget)
        End Function
        Private Sub RefreshScenes() 
            ' Create a new bitmap and Lock the bitmap's bits.
            Dim rect As New Rectangle(0, 0, bmp.Width, bmp.Height)
            Dim bmpData As System.Drawing.Imaging.BitmapData = bmp.LockBits(rect, Drawing.Imaging.ImageLockMode.WriteOnly, bmp.PixelFormat)
            Dim ptr As IntPtr = bmpData.Scan0 ' Get the address of the first line.
            ' Declare an array to hold the bytes of the bitmap.This code is specific to a bitmap with 32 bits per pixels.
            Dim bytes As Integer = Math.Abs(bmpData.Stride) * bmp.Height ':Dim rgbValues(bytes - 1) As Byte
            ' Copy the RGB values back to the bitmap
            System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes)        
            bmp.UnlockBits(bmpData) ' Unlock the bits. 
            bmpHandle = bmp.GetHbitmap : SelectObject(MainhDC, bmpHandle)
            'TextOut(MainhDC, 637, 10, "A Single Textout Line called like this", 19) 
            For Iu As Integer = 0 To 9
                If Not DispMsgShown(Iu) = "" Then
                    Dim RenCache As Integer = LenB(DispMsgShown(Iu))
                    TextOut(MainhDC, 27, 21 + (Iu * 22), DispMsgShown(Iu), RenCache)
                End If
            Next Iu : BitBlt(BmphDC, 0, 0, 1601, 865, MainhDC, 0, 0, SRCCOPY) : DeleteObject(bmpHandle)
        End Sub

    3.texts to be used in overlays 
        Private Sub StrLoader()
            Select Case At
                Case 1
                    DispMsgShown(0) = "textout sample..."
                    DispMsgShown(1) = "at the same time using bitblt and textout..."
                    DispMsgShown(2) = "likely this way to code."
                    DispMsgShown(3) = " "
                    DispMsgShown(4) = "coffee-drinking is relaxing us"
                    DispMsgShown(5) = ""
                    DispMsgShown(6) = ""
                    DispMsgShown(7) = "yoga included the same affects "
                    DispMsgShown(8) = ""
                Case 2
                    DispMsgShown(0) = "A"
                    DispMsgShown(1) = "B"
                    DispMsgShown(2) = "C"
                    DispMsgShown(3) = "D"
                    DispMsgShown(4) = "E"
                    DispMsgShown(5) = "F"
                    DispMsgShown(6) = "G"
                    DispMsgShown(7) = "H"
                    DispMsgShown(8) = "I"
                    DispMsgShown(9) = "JKLMNOPQRSTUVWXYZ...thanks!"

            End Select
        End Sub

    4. Procedual generation samples using above and a timer component

       Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Cur += 1 : Randomize()    
            Dim RRInt As Integer = Int(Math.Sqrt(Cur * 410)), Sr As New System.Random
            Dim X2, Y2 As Integer, Iu As Integer
            Select Case Sm
                Case "Scene 1"
                    Select Case At
                        Case 1 
                            For Iu2 As Integer = 0 To 13
                                For Iu = 0 To Math.Sqrt(Cur * 173) + 37
                                    X2 = -Int(RRInt * 1.5) + Sr.Next(RRInt * 3) : Y2 = -RRInt + Sr.Next(RRInt * 2)                                
                                    If Y2 < 0 And Y2 ^ 3 + X2 ^ 2 < RRInt * 40 Then GoTo Retry
                                    Pset1(800 + X2, 510 + Y2, Math.Min(255, Sr.Next(RRInt)), Math.Min(255, Sr.Next(RRInt)), Math.Min(255, Sr.Next(RRInt)))
                                Next Iu
                            Next Iu2 
                            Math.DivRem((Cur - 1) * 5, 460, SecCur)
                            For Iu2 As Integer = 0 To 4 
                                'If Cur < 460 Then
                                For Iu = 0 To Math.Sqrt(SecCur) + 14
                                    Pset3(1140 + SecCur + Iu2, 10 + Iu, 40, 60, 70, , , Math.Sqrt(SecCur * 7) + Iu * 2)
                                    Pset3(1140 + SecCur + Iu2, 44 + Iu, 40, 60, 70, , Math.Sqrt(SecCur * 7) + Iu * 2)
                                    Pset3(1140 - SecCur - Iu2, 74 - Iu, 40, 60, 70, Math.Sqrt(SecCur * 7) + Iu * 2)
                                    Pset3(1140 - SecCur - Iu2, 40 - Iu, 40, 60, 70, , Math.Sqrt(SecCur * 4) + Iu, Math.Sqrt(SecCur * 4) + Iu)
                                Next Iu    ':End If
                            Next Iu2
                        Case 2

                            Dim SecCur As Integer
                            If Cur < 2100 Then
                                For Iu2 As Integer = 0 To 780
                                    'Pset1(1600 - Cur, 120 + Int(Math.Sqrt(Cur)), 60, 240, 140)
                                    Pset1(1600 - Cur * 2 + Iu2 * 4, 120 + Int(Math.Sqrt(Cur * 3)) + Iu2, 60 - Int(Math.Sqrt(Iu2)), 240 - Int(Math.Sqrt(Iu2)) * 3, 140 + Int(Math.Sqrt(Iu2)) * 2)
                                    Pset1(1600 - Cur * 2 - 1 + Iu2 * 4, 120 + Int(Math.Sqrt(Cur * 3)) + Iu2, 60 - Int(Math.Sqrt(Iu2)), 240 - Int(Math.Sqrt(Iu2)) * 3, 140 + Int(Math.Sqrt(Iu2)) * 2)

                                Next Iu2
                                SecCur = Cur - 2100
                                For Iu2 As Integer = 0 To 780 
                                    'Pset1(1600 - Cur, 120 + Int(Math.Sqrt(Cur)), 60, 240, 140)
                                    Pset1(1600 - SecCur * 2 + Iu2 * 4, 120 + Int(Math.Sqrt(SecCur * 3)) + Iu2, 160, 240 - Int(Math.Sqrt(Iu2)), 160 + Int(Math.Sqrt(Iu2)))
                                    Pset1(1600 - SecCur * 2 - 1 + Iu2 * 4, 120 + Int(Math.Sqrt(SecCur * 3)) + Iu2, 160, 240 - Int(Math.Sqrt(Iu2)), 160 + Int(Math.Sqrt(Iu2)))

                                Next Iu2
                            End If

                    End Select
            End Select : StrLoader():RefreshScenes()
        End Sub

    If you hope to add more scenes, one solution is increasing "case" statement .

    Surely In a large project, external package files required I think. 

    5.Header declarations within Windows APIs and module-common values

        Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal hdc As IntPtr) As Long
        Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal hObject As IntPtr) As IntPtr
        Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As IntPtr) As Boolean
        Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As IntPtr) As IntPtr
        Private Declare Function GetWindowDC Lib "user32.dll" (ByVal hWnd As IntPtr) As IntPtr
        Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As IntPtr) As IntPtr
        Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hDC As IntPtr) As Boolean
        Private Declare Function SetTextColor Lib "gdi32.dll" (ByVal hDC As IntPtr, ByVal crColor As Integer) As Boolean
        Private Declare Function SetBkColor Lib "gdi32.dll" (ByVal hDC As IntPtr, ByVal crColor As Integer) As Boolean
        Private Declare Auto Function BitBlt Lib "gdi32.dll" (ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, _
             ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As System.Int32) As Boolean
        Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As IntPtr, ByVal x As Integer, ByVal y As Integer, ByVal lpString As String, ByVal nCount As Integer) As Boolean
        Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As IntPtr, ByVal iBkMode As Integer) As Boolean
        Private Const SRCCOPY As Integer = &HCC0020
        Private Sm As String, At As Integer, Cur As Integer, Bm As Bitmap, rgbValues(5539459) As Byte
        Private g As Graphics, Iu As Integer, SecCur As Integer, bmp As Bitmap, bmpHandle As IntPtr
        Private MainhDC, BmphDC As IntPtr, DispMsgShown(9) As String
        Private Stride_Value As Integer = 6404 'stride values related in bitmap's X-width

    6.methods in pixel painting (compatible only this application)

        Private Sub Pset1(ByVal XPos As Integer, ByVal YPos As Integer, ByVal RedValue As Byte, ByVal GreenValue As Byte, ByVal BlueValue As Byte)
            If YPos > 864 Then YPos = 864
            If YPos < 0 Then YPos = 0
            If XPos > 1600 Then XPos = 1600
            If XPos < 0 Then XPos = 0

            Dim AddressOfBinaryIndex As Integer = XPos * 4 + YPos * 6404
            rgbValues(AddressOfBinaryIndex) = Math.Max(rgbValues(AddressOfBinaryIndex), BlueValue)
            rgbValues(AddressOfBinaryIndex + 1) = Math.Max(rgbValues(AddressOfBinaryIndex + 1), GreenValue)
            rgbValues(AddressOfBinaryIndex + 2) = Math.Max(rgbValues(AddressOfBinaryIndex + 2), RedValue)
        End Sub
        Private Sub Pset3(ByVal XPos As Integer, ByVal YPos As Integer, ByVal RedValue As Byte, ByVal GreenValue As Byte, ByVal BlueValue As Byte, Optional ByVal AdditionalRedValue As Byte = 0, Optional ByVal AdditionalGreenValue As Byte = 0, Optional ByVal AdditionalBlueValue As Byte = 0)
            If YPos > 864 Then YPos = 864
            If YPos < 0 Then YPos = 0
            If XPos > 1600 Then XPos = 1600
            If XPos < 0 Then XPos = 0

            RedValue = Math.Min(255, AdditionalRedValue + RedValue) : GreenValue = Math.Min(255, AdditionalGreenValue + GreenValue) : BlueValue = Math.Min(255, AdditionalBlueValue + BlueValue)

            Dim AddressOfBinaryIndex As Integer = XPos * 4 + YPos * 6404 : rgbValues(AddressOfBinaryIndex) = Math.Min(255, BlueValue)
            rgbValues(AddressOfBinaryIndex + 1) = Math.Min(255, GreenValue) : rgbValues(AddressOfBinaryIndex + 2) = Math.Min(255, RedValue)
        End Sub

        Private Sub Pset2(ByVal XPos As Integer, ByVal YPos As Integer, ByVal RedValue As Byte, ByVal GreenValue As Byte, ByVal BlueValue As Byte, Optional ByVal AdditionalRedValue As Byte = 0, Optional ByVal AdditionalGreenValue As Byte = 0, Optional ByVal AdditionalBlueValue As Byte = 0)
            If YPos > 864 Then YPos = 864
            If YPos < 0 Then YPos = 0
            If XPos > 1600 Then XPos = 1600
            If XPos < 0 Then XPos = 0

            RedValue = Math.Min(255, AdditionalRedValue + RedValue) : GreenValue = Math.Min(255, AdditionalGreenValue + GreenValue) : BlueValue = Math.Min(255, AdditionalBlueValue + BlueValue)

            Dim AddressOfBinaryIndex As Integer = XPos * 4 + YPos * 6404
            rgbValues(AddressOfBinaryIndex) = Math.Max(rgbValues(AddressOfBinaryIndex), BlueValue)
            rgbValues(AddressOfBinaryIndex + 1) = Math.Max(rgbValues(AddressOfBinaryIndex + 1), GreenValue)
            rgbValues(AddressOfBinaryIndex + 2) = Math.Max(rgbValues(AddressOfBinaryIndex + 2), RedValue)
        End Sub

    7.Buttons on form to proceed scenes

        Private Sub ResetScreen()
            Dim Iu As Integer : For Iu = 0 To rgbValues.Length - 1 Step 4
                rgbValues(Iu) = 0 : rgbValues(Iu + 1) = 0 : rgbValues(Iu + 2) = 0
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If At = 1 Then
                ResetScreen() : At = 2 : Cur = 0
            End If
            If At = 2 Then
                MsgBox("sample application finished. thanks for downloading!")
            End If
        End Sub

    A VB2010 sample solution will be attached later. I'd like readers to download it!

    Of course it also enables binding DirectX interop APIs and above bitmaps in additional coding with slimdx or sharpdx, If you require GPU optimization.

    thanks for long reading

    • 3
    • 1
    • 226

    Recent Entries

    Latest Entry

    Winter is almost here, so we added new chapter in game with winter theme. There Will be new levels added on weekly bases.

    Freakman is available on Google play;

  20. Earthworms is an Art Point and click type of game. Our studio is developing it since may 2016. We are using Unity.

    At the begining game was ment to be 100% art/surreal, inspired by great masters of this kind of art (David Lynch, Jan Švankmajer, René Magritte).

    Strong inspiration from great painters in art

    Later on we decided to add more dark tones, typical for pop culture horrors, (movies like Blair Witch Project, and tv shows like X Files, Stranger Things).

    Temple of Skulls

    Story is something like pop or even pulp culture/conspiracy but with twist/unexpected events.

    I really love B class pop culture classics (They Live), and think it's sometimes more artistic than high budget stuff. Guess this fascination can be spotted in Earthworms logo:


    If I have to explain this project in one sentence it will be something like - "Earthworms is game that will take You for adventure of mystery, beauty, scare and bizzare."Location 13

    We hope this short article will make You interested in our project. We will try all our best so You will not be disappointed.

    And finally here is our steam trailer and steam page:

  21. Just a little progress video. As well as getting the scripting working a bit more, I've been placing villages and naming map areas. The area names are generated by putting together random chosen syllables.


    For variation with the natives they now use realtime bones like the player, and there is a morphing system so you can have fat / thin / muscular natives etc (I only have created fat and thin so far to test, but it works fine).


    UV Maps

    As well as the morphing variation, each native has a uv map so it can use different textures for different uv islands (parts of the body). This will allow e.g. wearing different clothing, different faces, jewellry etc. At the moment I've just just put some red green and blue and white over the different areas as placeholder until I create more textures.


    The conversations are all random from script just for a test .. choosing random animals and people to make random snippets of talk. I will probably make this more purposeful, giving each villager names and relations so they can further the plot.


    Next up I am putting in attachments so they can carry spears etc, and the player can carry sword. Also I may be able to have a canoe as an attachment off the root nodes so they can canoe on the lakes. I will also add female natives. I could do them as morphs, but I think it will be easier for texturing etc to have a different female model.