Blogs

Our community blogs

  1. Today I was working with a real buggy bug that has been bugging me since pretty much the beginning of development.

    You see, I choose to use box2d c++ version for Posable Heroes. It's open source and pretty solid. And the best of all, it's deterministic. That is, there is no "random" on the simulated work. If you have a square and a triangle, in exaclty the same starting position, with exactly the same linear and rotation speed, then when you simulate the world, you are always going to get the same result.

    Which is good! Specially for me in a game where I have to go back in time all the time.

    BUT... (a big but!)... if you try to duplicate an existing world (already running), then the two worlds will not behave the same.

    Here's a picture for you to understand...

    If you copy from the beginning, everything works:

    mExImPu.png

     

    But if you copy once the world is already running:

    nyPOtNG.png

     

    This is for a very simple reason: Box2d classes do not expose everything in public. There are several values, arrays and optimizations that lie under the hood, inside the b2World and the b2Bodies. So when you grab an existing world, and try to duplicate all the elements from the value they have public, there are several things you are missing.

    I found a temporal solution that I will talk about next post and that might solve this problem for some users, but that wasn't a forever solution in my case either.

     

    If you want to know more about my game: Posable Heroes now has a steam store page.

  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!

    Cross-platform Multiplayer (online and lan) and Singleplayer shooter Flats, is the weirdest (and most lightweight) FPS I've ever played! 

    The game runs smoothly and I was glad to see that all guns are unlocked from the start for free. There's nothing to unlock, no energy system, and a single $2 IAP removes all ads.

    The game runs smoothly, the many play-modes were fun, but the controls felt a bit strange and the game is mostly abandoned (for now) by the devs.

    My thoughts on Flats:


    Google Play: https://play.google.com/store/apps/details?id=com.foliagegames.flats
    iOS: https://itunes.apple.com/us/app/flats/id833603987?mt=8

    Subscribe on YouTube for more commentaries: https://goo.gl/xKhGjh
    Or join me on Facebook: https://www.facebook.com/mobilegamefan/
    Or Instagram: https://www.instagram.com/nimblethoryt/
    Or Twitter: https://twitter.com/nimblethor

  3. FoolieryPaint has grown.   Immensely easier to choose your color.  new  Shortcuts also added.  Any color used can be quickly referenced by overlapping cursor over color and hitting the x key.

    new Blend color mode added.  Works great.  Something top paint apps I've seen do not have.  (Use the blend center for better shading)

    3 new brushes will be added with the next version.   One of which is a darkening/lighting tool,  a paint simulation brush and a splatter brush.

    Next version is projected for December 10-15.  so keep  a eye out.

    as always,  FoolieryGames would appreciate any feed back on this and all other FoolieryGames projects and apps

    FoolieryPaintV2.zip

  4. Now that Soul of Mask is released, I will focus on bug reports if any and I announce that I am already working 

    on the next game, I will make blog entry to show progressions. This time I 'll not wait to the end of project.

    • 1
      entry
    • 0
      comments
    • 56
      views

    Recent Entries

    Hi there Gamedevs. We did our first Free Android Ragdoll Physics game just now. If you can check it out it would be great! 

    Here is the Play Store link: https://play.google.com/store/apps/details?id=com.flaw.ragdollmonstershooter Free Ragdoll Monster Shooter at Google play. 

    Keep in touch.

    Our Social media links:

    Facebook: https://www.facebook.com/Flaw-Mobile-Games-478361965871672/

    Twitter: https://twitter.com/flawmobilegame1

    Youtube: https://www.youtube.com/channel/UCHsOj2-3L5QLNw6q8vV6tWQ?view_as=subscriber

    Thoughts about the game?


    #gamedev #ragdollphysics #freemobilegame

    screenshot realistic physics ssss.png

    screenshot zombie.png

  5. Welcome back to day 39!

    Yesterday we started to look at fixing problems that involved the limitation of Mobile VR (and a lot of raycasting), today we’re going to make some more changes. Specifically, the goal today is:

    1. Change our Event Trigger logic to deal with what happens if we’re holding down on the screen
    2. Fix a problem with our player being pushed around
    3. Fix why our Knight turns black
    4. Change our enemy to be slower to make the game easier

    Let’s get to it!

    Step 1: Changing Our Event Trigger Logic for Continuous Fire

    Right now, we’re trying to solve the problem where we only damage the enemies when we tap on them. If we were to hold on, then we would continue to shoot, but the enemies won’t take damage

    Yesterday we discovered that there was 2 ways we could have implemented our game.

    1. Use our existing code where we shoot a raycast and depending on what we hit, run some function.
    2. Use the Event Trigger system along with Google’s changes.

    I’ve played around quite a bit with the Event Trigger system and made a solution, but it’s not the best, in fact, I might have preferred just keeping what we have, but that’s okay, we’re just learning!

    There are 2 problems that we must solve:

    1. What happens when we’re holding down the screen on an enemy
    2. What happens when we’re holding down and then we move to point at another enemy.

    After playing around for a while, the PointerClick solution we have will no longer work.

    Instead, I’ve started playing with the PointerEnter and PointerExit events.

    I’m going to add the changes to EnemyHealth:

    using System;
    using UnityEngine;
    using Random = UnityEngine.Random;
    
    public class EnemyHealth : MonoBehaviour
    {
        public float Health = 100;
        public AudioClip[] HitSfxClips;
        public float HitSoundDelay = 0.1f;
    
        private SpawnManager _spawnManager;
        private Animator _animator;
        private AudioSource _audioSource;
        private float _hitTime;
        private Boolean _isEnter;
    
    
        void Start()
        {
            _spawnManager = GameObject.FindGameObjectWithTag("SpawnManager").GetComponent<SpawnManager>();
            _animator = GetComponent<Animator>();
            _hitTime = 0f;
            _isEnter = false;
            SetupSound();
        }
    
        void Update()
        {
            _hitTime += Time.deltaTime;
            if (Input.GetButton("Fire1") && _isEnter)
            {
                TakeDamage(1);
            }
        }
    	
        private void TakeDamage(float damage)
        {
            if (Health <= 0) { return; } if (_hitTime > HitSoundDelay)
            {
                Health -= damage;
                PlayRandomHit();
                _hitTime = 0;
            }
    
            if (Health <= 0)
            {
                Death();
            } 
        }
    
        private void SetupSound()
        {
            _audioSource = gameObject.AddComponent<AudioSource>();
            _audioSource.volume = 0.2f;
        }
    
        private void PlayRandomHit()
        {
            int index = Random.Range(0, HitSfxClips.Length);
            _audioSource.clip = HitSfxClips[index];
            _audioSource.Play();
        }
    
        private void Death()
        {
            _animator.SetTrigger("Death");
            _spawnManager.EnemyDefeated();
            foreach (Collider collider in GetComponentsInChildren<Collider>())
            {
                collider.enabled = false;
            }
        }
    
        public void HealthEnter()
        {
            _isEnter = true;
            print("enter");
        }
    
        public void HealthExit()
        {
            _isEnter = false;
            print("exit");
        }
    }

    Walking Through the Code

    In our EnemyHealth, we create 2 new functions:

    • HealthEnter()
    • HealthExit()

    These functions are going to be called from the PointerEnter and PointerExit from our Event Trigger that we set up.

    In these functions, we set new variable we introduced called _isEnter so we know when they’re being selected.

    1. Inside Update() we check to see if we’re currently hovering over the enemies and if we’re pressing down on the screen. If we are, we would call our already existing Shoot function.

    I’m not a fan of this method because it requires us to constantly call Update() in all of our enemy health scripts as opposed to just inside our PlayerShootingController script, but for just playing around, this is okay.

    1. I also changed the hit sound effect to be able to play every 0.1 seconds just like our shooting delay.

    Step 1.1: Updating our Event Trigger

    Now that we have our shooting script in, the next and final thing we need to do is to create the Event Triggers to use them.

    Get rid of the PointerClick event that we’ve previously set up. Instead, we’re going to create 2 new types of Event Triggers: PointerExit and PointerEnter.

    knight-enter-trigger.png

    Here’s what we’re going to do:

    1. Attach HealthEnter() to PointerEnter
    2. Attach HealthExit() to PointerExit

    Now we can play our game like we intended to do from the very beginning. Make sure to make these changes to the Bandit and Zombie too!

    Step 2: Preventing Our Player from Falling

    Currently, if we were to play the game, when an enemy gets closed to our player character, we would fall.

    We should have addressed this in the past when we set constraints inside our RigidBody component, but it appears that we have not.

    Let’s go back and fix this

    1. In the hierarchy, select Player
    2. Under the RigidBody component, we’re going to set our constraints. Specifically, we want to freeze our position and rotation so that the enemies won’t push our character around. Having the game move us could cause nausea for our players.

    rigidbody.png

    Step 3: Fixing our Knight’s Color

    If we were to play our game on our mobile device, we’ll notice one big problem. Our knights are all black.

    If we pay attention to our log, we’ll see this:

    shader-probles.png

    It seems that we have some problems with the shaders that the asset is using.

    Unfortunately, I don’t know enough about this problem to resolve this. We have 2 choices:

    1. Ignore the problem and just have all black knights
    2. Change the materials that use these to use the standard shader.

    In our case, we’re going to explore the 2nd option.

    1. In Assets/Knight/models/Materials we have 3 materials that we’re using: clothColor, knight1Color, weaponsColor, and all of them uses one of those 2 shaders above. Let’s select them and changed them to Standard.

    change-shaders.png

    Now if we were to play the game on Unity, here’s what the knights would look like:

    new-enemy-knight.png

    It lost the coloring we originally had for it, but at least we keep the details of the models.

    Step 4: Making the Game Easier

    Currently, in our game, we would be getting swarmed with enemies. That would have been fine if we can move around, unfortunately, we can’t do that anymore, thus as a result, we need to make some adjustments

    We’re going to do 2 things:

    1. Change the rate of how long it takes for an enemy to spawn
    2. Slow down the rate our enemies move

    Step 4.1: Changing Spawn Rate on the Spawn Manager

    Currently, we spawn the next enemy every 2 seconds. Let’s change that to 5.

    1. Select the SpawnManager game object (child of GameManager)
    2. Set Time Between Enemies to be from 2 to 5

    SpawnManager-time-between.png

    Step 4.2: Changing Enemy Walking Speed

    As we might recall, to control the enemy speed, we must look at the Nav Mesh Agent component in our enemy prefabs.

    In order of speed, our speed order is Bandit, Knight, Zombie, with the Bandit being the fastest and Zombie being the slowest.

    I’m going to change the speed a bit.

    1. Bandit to 2
    2. Knight to 1.5
    3. Zombie to 1

    Here’s an example:

    bandit-speed.png

    Conclusion

    Now we’re done! We have taken care of a lot of the technical problems that we encountered.

    Tomorrow, we’re going to continue to finish the rest of the game by figuring out how we would add UI into a virtual reality environment.

    Until then, I’ll see you all later in day 40!

    Day 38 | 100 Days of VR | Day 40

    Home

  6.  

    The first week of developing our new game Pleb's Sled. We are going to post development vlogs weekly so stay tuned!

  7. In this post, we explore a three-part blog series from Sara Casen, the co-founder at Midnight Hub, a five-person development team in Sweden. While many Corona developers are solo or small two-person shops, many others are working with even larger teams, but regardless of being solo or part of a team working smarter is always a good thing. While all of this might not apply to your situation, it’s certainly worth thinking about.

    Lake Ridden Screenshot

    Lake Ridden is a story-driven first person mystery filled with puzzles, developed by former Minecraft and Paradox devs, in Sweden.

    Part 1 – Avoid Brain Damage From Working With Games

    According to Casen, the average career span of a game developer in Norwegian countries is about four years after which they are burned out. Long work-weeks, stress, unrealistic deadlines and other pressures create more problems that have to be solved. In this series she addresses how working more manageable hours lead to more productive hours.

    Part 2 – Making Your Game With The ABC-Recipe

    In this part of the series, Casen talks about the ABC method for building your game up which has the net effect of defining deliverables in a more productive way. This is a unique way to look at managing your project from development to deliverable.

    Part 3 – Burning Money, Brain Power and Morale To Make Your Game

    In the final part of this three-part series, Casen discusses resource management and how to manage more than time and money to get your team to their maximum efficiency without burning through all of your resources regardless of it being financial or human.

    There is a lot of good information in these three posts that will be really helpful for any studio, building games or any other software product.

     


    View the full article

  8. large.5a1599678e287_Skee-Boulderart.png.

    Update 1.06 is finally out. It took a little longer than expected, but version 1.06 brings several improvements and tweaks, and most importantly it adds the new Skee-Boulder mode and War Rankings.

    large.434460_screenshots_20171122142752_

    About the two main additions:

    Skee-Boulder:
    Race head-to-head while destroying targets to earn points and be the first to reach the giant skee-ball ramp to multiply your score.

    large.434460_screenshots_20171122151507_

    Ranked War matches:
    War games now grant points to match winners. Players can climb the ranking ladder by defeating opponents in online games. Stronger opponents award more points. There's 5 ranks to achieve and a new Leaderboard that stores this info. Players that do not want to have their ranks displayed or compete for points can opt-out from the options menu. 

    large.434460_screenshots_20171122152903_

    Other changes:

    • There's a bunch of other improvements and stability fixes, listed here:
    • Fixed occasional crash when winning an Obstacle Course online match.
    • Fixed rare online crash when building units.
    • Fixed lower half of towers and walls not having correct collision on client sometimes.
    • Fixed high speed collisions with destructible debris throwing the boulder off course.
    • Adjusted gamma slider range.
    • Fixed Jack-o'- Lantern boulder explosion not affecting units.
    • Fixed explosive boulders having a shorter build time after hitting the gate.
    • Added an achievement for landing in the highest multiplier in the Skee-Boulder ramp.
    • Added achievements for climbing to every War rank. 
    • Ranking information is displayed at online War matches and general interface.

    large.434460_screenshots_20171122151254_

    Hope everyone enjoys this latest awesome update!

    large.434460_screenshots_20171122153131_

    ---

    What is Rock of Ages II: Bigger & Boulder?

    Rock of Ages II: Bigger & Boulder is a game that improves on all aspects of the original. Up to 4 players can battle in crazy boulder mayhem. New impressive art periods, more historical characters and the funniest story clips we've ever made. All rendered with highly improved destruction / physics and effects - powered by our first Unreal Engine 4 game.

    Follow ACE Team:

  9. All the enemies are now in the game!

    I have to add more weapons and do the usual game stuff: menu, options etc...

    dotalpha1.gif

  10. Hi everyone!

    Today we have something interesting to share with you.

     

    We have recently realized that Project SpaceVille can be much more than just a game. We’ve started to look at Project SpaceVille as a didactic way for people who have poor social skills to acquire and develop social skills.

    We’ve decided to work even harder on our Artificial Intelligence system so that we can actually recreate neighbors with very specific personalities to match the majority of people that you could have to deal with real life. The goal is for you to be friends of them and learn what you’d need to do to become friends of that person. Of course this is something very generic since everyone is different.

    We already have contacted some psychologists who became very interested in our idea. Especially since Project SpaceVille isn’t age restricted. And nowadays almost everyone has a smart phone so it’s very accessible.

    They say it could be used from introverted people to even the refuges and we’ve created the analogy of “going to another planet”.

    We've discussed this with many people during the Web Summit and they all thought it was a very interesting concept.

    What are your thoughts on this matter?

     

    On another topic, we’ve been sharing some content on our social media! Have you checked it out? The links are down below, leave us a 👍👍👍

    But meanwhile here's a peek on something we've been working on:
    731331_954a078cb673429981a8bde93f517987~

     

    See you soon,

     

    The FAXIME Team

     

    Follow us and keep updated at:

    Facebook: https://www.facebook.com/FaximeGames

    Instagram: https://www.instagram.com/faximegames

    Twitter: https://twitter.com/FaximeGames

    Pintrest: https://www.pinterest.pt/faximegames

    SoundCloud: https://soundcloud.com/faximegames

  11. Making editors is a pain. I have a list of thousands of items I'd rather do than this - yet I made myself a promise to drag at least one full featured editor tool over the finish line. There are few reasons for that:

    1. I believe I have quite useful engine, it was my pet project all these years, it went through many transformations and stages - and solid tool is something like a goal I'd like to do with it, to make it something better than "just a framework".
    2. I'm very patient person, and I believe also hard working one. Throughout the years my goal is to make a game on my own engine (note, I've made games with other engines and I've used my engine for multiple non-game projects so far -> it eventually branched to be a full-featured commercial project in past few years). I've made few attempts but mostly was stopped by lacking such tool - that would allow me to build scenes and levels, in an easy way.
    3. And the most important one ... I consider tools one of the hardest part in making any larger project, so it is something like a challenge for me.

    Anyways so much for motivation, the tool is progressing well - it can be used to assemble scene so far, various entities (like light or materials) can have their properties (components) modified, with full undo/redo system of course. And so the next big part was ahead of me - asset loading and dynamic reloading. So here are the results:

    screen01.thumb.jpg.eb01e06155622181e015b5958eaffbc7.jpg

    Engine editor and texture editor before my work on the texture.

    And then I worked on the texture:

    screen02.thumb.jpg.9c9c207ed626eb3a9ee031815c9b58da.jpg

    And after I used my highly professional programmer-art skills to modify the texture! All credits for GameDev.net logo go to its author!

    Yes, it's working. The whole system needs a bit of cleanup - but in short this is how it works:

    • All textures are managed by Manager<Texture> class instance, this one is defined in Editor class
    • There is a thread waiting for change on hard drive with ReadDirectoryChangesW 
    • Upon change in directory (or subdirectories), DirectoryTree class instance is notified. It updates view in bottom left (which is just a directory-file structure for watched directory and subdirectories), and also for modified/new files creates or reloads records in Manager<Texture> class instance (on Editor level)
    • The trick is, reloading the records can only be done while they're not in use (so some clever synchronization needs to be done)

    I might write out some interesting information or even short article on this. Implementing it was quite a pain, but it's finally done. Now short cleanup - and towards the next one on my editor todo list!

    Thanks for reading & see you around!

  12. I have a new game I am working on now called MineSeeker. The game play is similar to Minesweeper if you have ever played that game before. I will be having a single player experience with 9 worlds and 10 levels in each world for a total of 90 levels. There will also be a quick play option which will load a completely random level for you to play. In addition to that, I'm also planning on a multiplayer experience where you'll be able to play with your friends on Facebook to complete random levels together. This will be a fairly large undertaking for one developer so this will take me a little time to complete. However its already starting to come together pretty well.

    I started by putting the UI together. So far I have a loading screen, main menu, level select screen and a game play screen. So far you can click on single player and it will load the level select screen. I have one working level so far. I ha still working out kinks on it and as soon as I do I will be using that to create the other 9 levels in the first world. Its coming along quite nicely so far.

    I have already learned something new on this project, the flood fill algorithm. I put it into the game to search for adjacent tiles that meet specific requirements. Its a recursive algorithm so getting it to work without entering an endless loop was a bit of a chore. Overall its a perfect fit for what I needed to do and it works nicely.

    Here are a few screenshots of the game. I'm also updating the font in the UI so some the screens have a different font.

    loading.thumb.png.c0d1d2f660fcd5e64a4f84a0399ffe92.png

    menu.thumb.png.4818d8234ae6e00dff4bc0cc23776826.png

    levelselect.thumb.png.9deba3974fe61b324a4b139da81861b4.png

    level.thumb.png.d5b245d3e6ad3f1f50e39178ee175737.png

  13. In the next term(includes 4 posts), I'll deal with a clicker game on this blog planned in submissions bypass Steam Direct previously.

    Surely, There are useful famous DLLs to combine VB.net (or C#) and late DirectX, SlimDX and SharpDX existed.

    This time, I used SlimDX. but it's capable in the same thing with SharpDX.

    Now,  this article and a next one describe that how to code procedural gradient images in Direct2D with slimDX.

    The most important information is the issue tales, in VB.net values/objects/classes,

    Images shared on PC's main memory, and in Direct2D Brushes, Images shared on GPU's memory.

    So both images composed the procedural gradient background, must be lower than PC and GPU memory specs during running applications.

    Then I show samples up in source codes below.

    1.Values Declarations

    some exceptions exist, but most of Direct2D-.net combined objects are created from returning values with the function in another type of Direct2D objects, not from "new statements". 

        Public D2DF As Factory, Wrt As WindowRenderTarget, BasedTextFactory As DirectWrite.Factory
        Private Rtp As RenderTargetProperties, Wrtp As WindowRenderTargetProperties, Rgbp As RadialGradientBrushProperties = New RadialGradientBrushProperties 'Only G-Brush classes created from new statements.

        Public TF1, TF2, TF3, TF4 As SlimDX.DirectWrite.TextFormat
     

    2.Making initializer

    making it likely C++ programs

        Public Sub InitDx2D()
            Rtp.PixelFormat = New PixelFormat(SlimDX.DXGI.Format.B8G8R8A8_UNorm, AlphaMode.Premultiplied)
            D2DF = New Factory(FactoryType.Multithreaded) : Form1.Width = 1366 : Form1.Height = 736
            Wrtp.PixelSize = New System.Drawing.Size(Form1.Width - SystemInformation.Border3DSize.Width, Form1.Height - 30)
            Wrtp.Handle = Form1.Handle : Wrt = New WindowRenderTarget(D2DF, Rtp, Wrtp)
            TextsInit() : ImagesInit() : InitOthers()
        End Sub

    3.Making text-classes initializer

        Private Sub TextsInit()
            '"en-jp" In Windows JP Edition, I'd like readers to adjust those tags to be applied in your OS language.
            BasedTextFactory = New SlimDX.DirectWrite.Factory(SlimDX.DirectWrite.FactoryType.Isolated)
            TF1 = New SlimDX.DirectWrite.TextFormat(BasedTextFactory, "Verdana", SlimDX.DirectWrite.FontWeight.Light, SlimDX.DirectWrite.FontStyle.Oblique, SlimDX.DirectWrite.FontStretch.SemiCondensed, 14, "en-jp")
            TF2 = New SlimDX.DirectWrite.TextFormat(BasedTextFactory, "Times New Roman", SlimDX.DirectWrite.FontWeight.UltraLight, SlimDX.DirectWrite.FontStyle.Oblique, SlimDX.DirectWrite.FontStretch.SemiCondensed, 38, "en-jp")
            TF3 = New SlimDX.DirectWrite.TextFormat(BasedTextFactory, "Consolas", SlimDX.DirectWrite.FontWeight.Light, SlimDX.DirectWrite.FontStyle.Oblique, SlimDX.DirectWrite.FontStretch.SemiCondensed, 17, "en-jp")
            TF4 = New SlimDX.DirectWrite.TextFormat(BasedTextFactory, "Georgia", SlimDX.DirectWrite.FontWeight.Thin, SlimDX.DirectWrite.FontStyle.Normal, SlimDX.DirectWrite.FontStretch.SemiCondensed, 26, "en-jp")
        End Sub

    4.Making ImageLoader

    Honestly this function owns difficult logic relied on SlimDX-side peculiar system. Anyway, this function transforms .net image-resources into Direct2D data-format. 

        Public Function ImagesLoader(ByVal AnImageDotnetFormatted As Image) As SlimDX.Direct2D.Bitmap
            Dim b As New System.Drawing.Bitmap(AnImageDotnetFormatted), bmpD As System.Drawing.Imaging.BitmapData = b.LockBits(New Rectangle(0, 0, b.Width, b.Height), Imaging.ImageLockMode.ReadOnly, Imaging.PixelFormat.Format32bppArgb)
            Dim Stm As SlimDX.DataStream = New SlimDX.DataStream(bmpD.Scan0, bmpD.Stride * bmpD.Height, True, False), BPro As New SlimDX.Direct2D.BitmapProperties : BPro.PixelFormat = New PixelFormat(SlimDX.DXGI.Format.B8G8R8A8_UNorm, AlphaMode.Premultiplied)
            Dim Ret As SlimDX.Direct2D.Bitmap = New SlimDX.Direct2D.Bitmap(Wrt, b.Size, Stm, bmpD.Stride, BPro) : b.UnlockBits(bmpD) : Return Ret
        End Function
     

    5.Set basic params up

        Private DRRBrush As SlimDX.Direct2D.Brush
        Private Sub InitOthers()
            DRRBrush = New SlimDX.Direct2D.SolidColorBrush(Wrt, New Color4(0.24, 0.87, 0.72))
            GColors(0) = New Color4(0.65, 0.1, 0.3, 0.62) : GColors(1) = New Color4(0.75, 0, 0.25, 0.15) : GColors(2) = New Color4(0.75, 0.35, 0.15, 0.45) : GColors(3) = New Color4(0.85, 0.2, 0.2, 0.2) : GColors(4) = New Color4(1, 0, 0.03, 0.05)
            ColorsInStrs = New Color4(0.85, 0.8, 0.95, 0.9) : InitColors = New Color4(1, 0.45, 0.61, 0.12) : BeingGenerated = True : ColoredPens = New SolidColorBrush(Wrt, New SlimDX.Color4(1, 0.083, 0.13, 0.18))
            EXT1Colors(1) = New SlimDX.Color4(0.8, 0.3, 0.85, 0.3) : EXT1Colors(2) = New SlimDX.Color4(0.8, 0.3, 0.3, 0.85) : EXT1Colors(3) = New SlimDX.Color4(0.8, 0.85, 0.3, 0.3)
            EXT2Colors(2) = Form1.Width / 2 : EXT2Colors(6) = Form1.Width / 2 : EXT2Colors(3) = Form1.Height / 2 : EXT2Colors(7) = Form1.Height / 2
        End Sub

    6.1 - A Basic Format in Gradient Brushes  
        Private Sub BuildGradientParams(ByVal Pos As BasicPosInfo, ByVal GColors() As SlimDX.Color4, ByVal InflectionPoints() As Single)
            'Dim Rgbp As RadialGradientBrushProperties = New RadialGradientBrushProperties
            Dim GColorsB(GColors.Length) As GradientStop, CounterIndex As Integer
            For CounterIndex = 0 To GColors.Length - 1
                GColorsB(CounterIndex).Color = GColors(CounterIndex) : GColorsB(CounterIndex).Position = InflectionPoints(CounterIndex) : Next
            Dim Rgbp2 As GradientStopCollection = New GradientStopCollection(Wrt, GColorsB)
            Rgbp.CenterPoint = New PointF(Pos.XPos, Pos.YPos) : Rgbp.HorizontalRadius = Pos.Radius : Rgbp.VerticalRadius = Pos.Radius
            Dim GG_pen As SlimDX.Direct2D.RadialGradientBrush = New SlimDX.Direct2D.RadialGradientBrush(Wrt, Rgbp2, Rgbp)
        End Sub

    continues...

    thanks for reading

  14. With newer innovations coming to the fore every day, it is difficult to predict how many jobs will be taken by robots in the coming years and how many will be left out for humans. The disruptive technologies like Blockchain and Artificial Intelligence (AI) are the superpowers that will transform the traditional industries.

    Current Business scenario
    The present scenario of the business world shows that many enterprises are loaded with abundant data but are unaware the means to make it available to the world. On the other hand, many startups are equipped with the resources and technology to turn data into value using AI but have sparse data. Only very few companies (like Facebook, Google, etc.) have both datasets and the AI knowledge needed to turn this data into value. However, to make the best use of modern AI and computation, the access to this data needs to be equalized.

    The blockchain is a relatively new approach to manage/monitor financial and other transactions. It is a decentralized database that is different from the traditional big-data distributed databases. It helps in sharing datasets for higher-accuracy models and securing large-scale data management mechanisms for coordinating the information of several individuals. Thus, Blockchains provide a much greater scope of potential activity than its currently envisioned deployment opportunities in reinventing currency.

    It won’t be an exaggeration to say that AI is the greatest threat to the mankind now. However, retrieving its potential for the advancement and welfare of humanity also rests with mankind itself. AI with its subsets of machine learning and artificial general intelligence (AGI) is widely used to control systems. For example, how a simple thermostat adapts to a target temperature may be governed using AI. With the combination of hardware, software, infrastructure, and machine learning trained programs, AI can be used to facilitate planning, control, coordination, and decision making in an organized and iterative manner.

    5a127d4dd1f7b_ArtificialIntelligenceUsingBlockchains.jpg.740e686939961f8b00b180ee88897b88.jpg

    Integration of Blockchains and AI
    Blockchain technology in itself is a transformation, and its integration with AI paves the road to a surfeit of unimagined opportunities that can be explored by the business stakeholders. Blockchains and AI together constitute the two closed components digital business. While Blockchain enables the exchange of value embedded data without any friction, AI facilitates the tapping of this data to create value without much (almost nil) human effort.

    With the advent of new technology solutions such as Blockchains, human errors have been replaced by a technical failure. So, while Blockchains help in verifying, executing, and recording, AI aids assessment, understanding, recognition, and decision-making. Similarly, while AI aids in finding new opportunities and improves decision making, Blockchains automate the verification of the transactional parts of the process.

    Blockchain-enabled thinking can be compared to an input-processing-output computational system. You may consider Blockchain as a product containing small blocks of a brain in the form of dust. However, the innovation efforts of many publicly traded asset managers and banks are involved in this brain block dust quest. Thus, the brain’s sensation, action, interaction, perception, and cognition abilities are simulated by the computers.

    So, in order to guard an innovative database in a smart set-up, an inbuilt component of artificial intelligence is needed for joining blocks by giving the reference to the previous block.

    5a127d699b097_ArtificialIntelligenceUsingBlockchains.jpeg.840f60088f03a124e476fb91a2f13145.jpeg

    Blockchains can transform AI
    Blockchain can act as a global or planetary database for AI that enables unlocking opportunities with a modular managed approach with memory by providing for data sharing and better data model. AI-based mobile applications can widely benefit from the potential Blockchain technology holds. Blockchain-enabled thinking allows random generation of as many copies of any instance of memory, as many copies there can be of any digital file. An example of one such promising feature is the biometric authentication feature associated with mobile wallets. Certain advantages of Blockchain can open up new opportunities for AI practitioners. A few major ones are:

    Data sharing due to decentralized/shared control: The decentralized or shared control structure of Blockchains allows data sharing from silos, which in turn helps in forming better data models due to the availability of more data. Sometimes when data from silos are merged, the new dataset obtained is not only quantitatively better but is also a qualitatively new data that helps generate qualitatively new models. These qualitatively new models can provide an opportunity to garner new insights and have new business applications. Moreover, data sharing allows shared control of AI training data and models.

    Immutability/audit trail: In order to be reputed, data needs to be immutable. AI can maintain immutability in a Blockchain network. This improves the trustworthiness of the data and models as it leads to provenance on their training/testing. This can be used to create the most secure ecosystem for transactions and data exchange in the world.

    Native assets/exchanges/shared global registry: Traditionally, datasets have been scattered across the web with many lists here and there, pointing at the main datasets. Of these many datasets that have value are proprietary. Blockchains help create a global database and application of AI to Blockchains leads to training/testing data and models as intellectual property (IP) assets. This decentralizes data and model exchanges.

    Conclusion
    There are surely more ways that blockchains help transform AI or vice-versa. This makes the Blockchain and AI combination explosive! Some long-standing dreams of AI and data analysis work can be realised, and several opportunities can be opened with this alliance of Blockchain and AI. Thus, the world’s most consistent technology-enabled decision-making systems that are virtually secure and provide solid insights and decisions can be created using a combination of AI and Blockchain.

  15. 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.

    Bk_udNjNDSOpmS2FrS2uG0lks0PwcOqCtRjuvvXcB7kO7QyvNNzo8zE_EZXjfS4DmMggX2m40nBOJBOm8nextu3oQqT8BKRC01idKO5ZMQrS4iubXZx_rtBy9xHR0C8B0VDA2onIcNL8_3acQU5HIi9aiHvXnt20F-t2ys6i3kbEIuwuaK1s88SvsSXh4HhWmw20gqxE0Y2P5GKkLB-_VKhJHwza09_rYyxbGc_j61rQ2JTeLyjRX4DcfhbunGRuPNf4Ekut2yMoxjjcSOSg6pXHBW4iJ4vKDIPOYiTOzx1MlUgyi8_HaOluSeOfoig9j2khkq_Sh_v9Db2aDzYRdNwDYTYHfHpTS3a-pfBctNnCUgtganNVfVMi8RYBCEtnN0HpzDWLK9siUi4Ah4IZUJGYKXcgoRz7YXSJZaS2qsIRR5QwaCDO7Lc0f5T4u89Zwy8pNqrM5O6b7PCVhAdcorLMZRqLx4Zpr87RTELcPRRePsX9N9pefqlDW-_dWRgmH3oO0EIRt_rAZJezyYG2eVRLDTVfy0x7hd5lGMP0mYCuNstl0ZQGElthGGC9VJ6VyGYs3XZ-klxAsskZe4NxWzttvoC1UFOrij86jcuiBbL0qm8MyQmWn5vei9rweT8esfcAQzv0LaW6I-MU17PnTuhXikG_-_9DscLILSlS

  16. 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. https://github.com/JTippetts/ANLEditor

    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.

    sU7aQW1.png

    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?

  17. 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 :

     

  18. 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:

    1*j3E0fIivs8QK9hZJ2gkExg.png

    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
      entry
    • 0
      comments
    • 132
      views

    Recent Entries

    EvilCG
    Latest Entry

    Hi!

    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 (http://store.steampowered.com/app/610310/), then it was published on itch.io, g2a.com and gamersgate.com. Was a work experience with chrono.gg. Soon Star Story will be available on kinguin.net and greenmangaming.com 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.

    Trailer:

     

    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:

    FZGMK-9HVVZ-R6HY4
    6RYY4-VBX2Z-67X2B
    3VGHH-Q8YY9-LTW73
    J4CRJ-ZAZFT-X8FIV
    HG8RV-IQ8Y4-IEH8A

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

  19. 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.

  20. 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).

    https://api.trello.com/1/cards?key={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:

    https://trello.com/app-key

    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).

    https://trello.com/1/authorize?key={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):

    https://trello.com/1/members/me/boards?fields=name

    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.

    https://api.trello.com/1/boards/{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.

    https://api.trello.com/1/boards/{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"
    
    UCLASS()
    class ZEUS_API AZeusGameMode : public AGameMode
    {
    	GENERATED_BODY()
    	
    public:
    	AZeusGameMode();
    	
    	/** Used to report a bug */
    	UFUNCTION(BlueprintCallable, Category = "Trello")
    	void ReportBug(FString Name, FString Description);
    
    	UFUNCTION(BlueprintImplementableEvent, Category = "Trello")
    	void ReportBugComplete(bool bWasSuccessful);
    
    private:
    	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 = "https://api.trello.com/1/cards?";
    
    const FString Key = "1234567890abcdefghijklmnopqrstuv";
    const FString Token = "123456789abcdefghijklmnopqrstuvwxyz123456789abcdefghijklmnopqrst";
    const FString Label = "123456789abcdefghijklmno";
    const FString List = "123456789abcdefghijklmno";
    
    AZeusGameMode::AZeusGameMode()
    {
    	// Nothing extra needed in the constructor for this
    }
    
    void AZeusGameMode::ReportBug(FString Name, FString Description)
    {
    	TSharedRef Request = FHttpModule::Get().CreateRequest();
    	Request->SetVerb("POST");
    
    	//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
    	Request->SetURL(URL);
    	// Bind OnReportBugComplete() to be called once the request is complete
    	Request->OnProcessRequestComplete().BindUObject(this, &AZeusGameMode::OnReportBugComplete);
    	// Process the request
    	Request->ProcessRequest();
    }
    
    void AZeusGameMode::OnReportBugComplete(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
    {
    	// Calls up to a Blueprint implemented event
    	ReportBugComplete(bWasSuccessful);
    }
    
    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:

    Widget-Hierarchy.png

    Bug-Report-Screen.png

    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:

    Submit:

    Click-Submit-Button.png

    Cancel:

    Click-Cancel-Button.png

    Step 2: Input Mapping

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

    Action-Mapping.png

    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:

    InputAction-ReportBug.png

    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.

    Conclusion

    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

    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.

  21. 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.

    5a0bc2c5241da_MobileGameDevelopmentTrends2018.thumb.png.834806b5623425d0a04a3a86917bb2ba.png

    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.