• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.

Blogs

Our community blogs

  1. http://www.tinker-entertainment.com/sitavriend/psychology-and-games/the-stiking-difference-between-liking-and-wanting/

    There are two different kinds of pleasures we experience every day, we have anticipatory pleasure or ‘wanting’ and consummatory pleasure or ‘liking’. ‘Wanting’ is pleasure for looking forward to future events. On the other hand we have ‘liking’, this is pleasure for things in the moment. Think of it this way: when you play a game right now and enjoying it, you experience consummatory pleasure (liking). You might experience anticipatory pleasure when you are at your day job or school but can’t wait to be home this evening so you can play your favorite game. It might surprise you, it certainly surprised me, but these two pleasures are very different from each other and even have their own neural system in the brain. This means that according to your brain, liking and wanting aren’t the same thing. The wanting-type pleasure relies of the dopamine system. Dopamine is released each time you’re looking forwards to something you enjoy. The liking-type pleasure relies on your reward-driven system. When you do something you enjoy doing, opiates such as endorphins are released as a reward. These chemicals of the brain make you feel good. While wanting and liking are very different, it’s good to realize that you have to like or enjoy the thing at first before the wanting system for that same thing kicks in. However, you can have liking without wanting and wanting without liking. Think about a party you are dreading to go to. You really don’t ‘want’ to go but you know that you will ‘like’ being there once you get to the party. Addiction is probably the best example of wanting without liking. An addict will ‘want’ his drug but he doesn’t ‘like’ the effect of the drug anymore.

    dopamine-loops-the-hidden-psychology-of-why-were-addicted-to-our-phones-57-638

    So be careful with too much wanting though, this can create addiction (Berridge & Robinson, 1998). I realize it’s an ethical debate whether you as a designer are responsible for a player being addicted to your game. In most cases you simply want people to enjoy your game on a regular basis and a healthy player shouldn’t become seriously addicted (where gaming becomes a problem for their daily lives). While not everyone is equally susceptible for addiction it’s important never to design for it.

    The difference between ‘liking’ and ‘wanting’ doesn’t seem to be very logical and not much research has been done. It’s only logical that I couldn’t find many games that apply this theory. The closest application of the wanting-system to a game I could find was

    candy-crush-no-lives It takes forever before I can play again!

    Candy Crush. Candy Crush and other similar mobile games want their players to come back every day. The design of these games is driven by retention and that’s why they often have a lives-system and short levels. The short levels encourage the player to try another level. Once the player fails too many levels and runs out of lives, he or she has to wait before they are restored. Most games with such a lives-system have cycles of about 20 hours. This means that if a player runs out of lives, it takes about 20 hours for all lives to be fully restored.

    Both the wanting- and liking-systems  can be applied to all types of games. However, mobile games can probably benefit most from these different neural-systems. Chances are that you aim for high retention when you design a mobile game. The wanting system is important here, your players should look forward to play your game every day. And of course they should ‘like’ playing your game as well, especially the first time they play.

    my-country-on-facebook-4

    Games with micromanagement can also benefit from the wanting-system, especially if the player has to use a limited resource that replenished over time. Imagine that you have people as a resource and you can use them to build stuff. Of course building stuff isn’t instant, it takes time. There is nothing for the player left to do after a while because all people are building things. The player will than leave the game with the intention to come back when his people are finished building his stuff. The player won’t be annoyed or dislike the game because there is nothing left to do since it’s the nature of the game.

    Some design ideas for you
    When designing for retention, it’s good practice to ask yourself why the player should come back to play your game a second time. In my opinion your first answer should always be: “because they liked playing the game”.  There is no point in playing a game you didn’t like the first time. The other answers are up to you to think about. Designing your game to be ‘liked’ is much more difficult that designing your game to be ‘wanted’. whether you like something or not is very personal. Some people can’t get enough of shooters while others (like myself) aren’t a big fan. But there are a couple of things that can help the  player like your game. Completing or finishing something feels good. When your game is level-based, it helps to keep the first couple of levels short. You can increase the time spend in a level slowly as the player progresses. Finishing each level leaves the player wanting more: “just one more level, then I’ll stop”. Designing your game to be ‘wanted’ is a lot easier. Design your game in such a way that player has some unfinished business when he or she finished the first session. Think about a good cliff-hanger at the end of an episode: it leaves you wanting more. It’s the reason you and your friends are dying to see the new game of thrones season. You can design cliff-hangers for your game as well. The only difference is that you might have to “force” the player out of your game somehow. Add a resource-system to your game that is time-based but is depletes when you are playing. It can be a lives-system like in candy crush or a resource such as money or people in a micro-management game. There is no reason to stay in the game once the player runs out of the resource. Balance the resource in such a way that the player runs out of it when he or she is enjoying your game the most. It’s always important to make sure your player ends the game on a high note. It leaves them wanting more and have them looking forwards to the next session. If you want, you can send the player a reminder when the resource is replenished. But there is no need for daily rewards, this kills the player’s intrinsic motivation (I will talk more about intrinsic motivation the next time) and they won’t like to play your game anymore.

    References and further research

  2. Finals are coming up in my college, so obviously I wont be devoting major time to this for a week or so, but after that it's time to go ham!

    I've been reaching out a lot more recently since I've been using this site and working on this project, and I've got to say that it's been a great idea. I'm learning a lot about how to better take advantage of OOP concepts. I've gotten pretty decent at  how to use procedural languages, and that's kind of the mindset I've been stuck in. Obviously I understand the concepts of OOP, but I didn't really put effort into really using them and maximizing my efficiency until recently. So, this project will also be a great learning experience.

    I'm still working on basic player/enemy behaviors, and since I'm discovering how to maximize my efficiency, it's taking a little longer now that it usually would. But in the long run this will pay off with faster progress.

    Here's some concept art for potential characters in the game

    Stay tuned!

    medieval knight guy 1.jpg

  3. Hi all,

    In the last 2-3 weeks, I was working on the building sites of the game. This was a hard period honestly, and this is the first time that I had some real trouble around the game.

    Please don’t forget that still, you can register to my newsletter, so you can win a free copy of the game before release on steam. Also, I will look for testers using this email list. http://eepurl.com/cG63JD

    Also, I’ve just created a subreddit for my game, where I will constantly look for the feedback! https://www.reddit.com/r/ComputerTycoon/

    IndieDB: http://www.indiedb.com/games/computer-tycoon

    So, getting back to the topic, haha! It was a long time ago when I last created 3D games. The tools and the surrounded problems evolved a lot, and well, my knowledge faded away. I needed some time to get back!
    For some time I really wasn’t sure if I want 3D parts into Computer Tycoon or not. But I ended up to include it. Simply, I felt that people will like it. I think it’s always rewarding to actually “see your empire”, so I made it Computer Tycoon as well. I talked about this in earlier posts where I was talking about the country map of the game. I love strategy games where you can see your territory growing. But how about your company?
    When people think about companies, even more corporates, they think about offices, factories. Yeah, kinda “workplaces”, right? So the best way to make your company be a living thing is to show those buildings, I guess. The problem is that this makes the game even bigger, and also I’m a bit afraid that thinking about other tycoon games, people will assume that you can freely build stuff on a map just as you do it in transport tycoon or rollercoaster tycoon.
    But here, you won’t. This game isn’t about that kind of creativity. There is another line of tycoon games, where building/road/anystuff construction isn’t the main thing. Just remind to Game Dev Tycoon, where you create games, not roller coasters.
    In Computer Tycoon the “building site” is where you see the buildings of your company. You can upgrade specific parts to get more productivity or research/marketing capability, new marketing methods and so on. And I decided to give you a living 3D animation representation of it. Simply, you just can’t put the buildings where you would like to because they have predefined positions. Maybe in the sequel! 

    But what was the problem? Well, I made you a so big and so detailed representation, with so many models, that the engine had some trouble. Of course, on my strong dev PC that was totally okay, but what about older computers? Tycoon games tend to have a small system requirement because they don’t have usually an impressive graphics quality. These games aren’t really about graphics.
    So this was the dilemma… Should I keep this or not? Well, at this moment, I’m on the track to keep it. I made everything to optimize the graphics.

    Using a Radeon HD 6850 card, you can get 58-60 fps on Full-HD (watching the biggest, most crowded scene). And using a Geforce 920M you can also get 30 fps on 1388×768 resolution.
    The Radeon HD 6850 is a 5 years old video card, with a 2262 benchmark. The Geforce 920M is a mobile relatively new video card for laptops with a 711 benchmark. I hope that it’s enough. This is something that I will need to test out on more systems. Yes, I really count on you in that!  Getting to this point was hard, pretty hard with very long nights. I just really hope that this level of system requirement is still acceptable. Feel free to check your own hardware on the benchmark list and put it in the comments to me.

    Check out these screenshots of the building site. I guess that’s what is the most interesting for you out there. On the pictures, ambient occlusion is turned off. I’m still thinking if I want it or not.

    Please stay tuned, and recommend the game to your friends who like retro computers and tycoon/strategy games. I really need your help. Multiple friends of mine have flopped games recently, and telling the truth, I’m a bit afraid at this moment that I will end up the same way. I work _literally_ all day and night to make this happen. Thanks for reading! 

    http://www.computertycoon.com
    http://www.progorion.com

    ComputerTycoon__BS_Screenshot_03.thumb.jpg.e2ee7868b9e5f634878766a6e1f46593.jpgComputerTycoon__BS_Screenshot_02.thumb.jpg.b3579281a3807ea063a669949662f636.jpgComputerTycoon__BS_Screenshot_01.thumb.jpg.13bebbb67341bf12677fde9546fdf38d.jpgComputerTycoon__BS_Screenshot_07.thumb.jpg.3310e4950b29e474e8db84eb181338d2.jpgComputerTycoon__BS_Screenshot_06.thumb.jpg.9f9ba5e8d31e4a4434e86e63f1c36058.jpgComputerTycoon__BS_Screenshot_05.thumb.jpg.c51b875b671a9b2098ca065d994c281e.jpgComputerTycoon__BS_Screenshot_04.thumb.jpg.65ac28265a5234135ff68563e128affa.jpg

  4. Vungle, a Corona Labs video ad partner, has released a new plugin which integrates version 5.1 of their SDK. This updated plugin also brings some new features that you may find desirable, including:

    • Vungle now supports multiple ad placements. Instead of a single video asset type, you can now use multiple placements with either video or rewarded video types.
    • Dynamic Templates let you give more users even more ad templates.
    • Native Ads, or Vungle’s Flex-View technology, lets you add immersive video ad banners into your app’s user experience (you will need to contact your Vungle account manager to enable this feature).

    To use the new version of Vungle, edit your build.settings and replace

    ["CoronaProvider.ads.vungle"] =
    {
        publisherId = "com.vungle"
    },

    …with this:

    ["plugin.vungle"] =
    {
        publisherId = "com.vungle"
    }

    You will also need to use daily build 2017.3103 or later to access the new plugin.

    For more details, see the Vungle 5.1 documentation.


    View the full article

  5. For an introduction to my reasons for migrating from Windows to Linux, see my previous blog post. Here I will try to stick to my experience as a Linux beginner, and hopefully inspire other developers to try it out.

    Installing Linux

    The first stage of course in migrating to Linux is to either install it on your PC, or try a 'live' version off e.g. a usb stick (or even try it on a virtual machine?). I can't say too much here, because I got my new PC with Linux Mint pre-installed, and there should be plenty of guides on google. I went for Mint because I had briefly tried Ubuntu a few years ago, and I liked the look of Mint and fancied a change. I knew it was based on Debian like Ubuntu so there should be lots of software.

    597703fa73af9_Screenshotfrom2017-07-2419-30-11.png.3a8f6a14c645829617ce9939b1a83649.png

    My first stage after unplugging my windows machine was just to take baby steps to familiarize myself with it, without running away in fright. After plugging in my network cable, I was away with Firefox browser. But after a few minutes I decided to install Chrome, as I am a fan and used that on windows (going with familiar!! safe space!!). This entailed installing software.

    Installing Software

    On windows, the process of installing software usually involves downloading an installer package from the internet and running it, and hoping it likes your machine windows version / hardware / dependencies. You can do this on Linux too (particularly for cutting edge versions of software), but there is also a far easier way to do it, via a 'package manager'. The package manager is actually the pre-cursor to all the various 'app stores' that have become popular on Android and iOS, but the idea is simple, you have a searchable database of lots of software you can install, usually simply with a click. It also has the magic advantage that it has a very good system for automatically working out the dependencies required by any software, and installing those for you too in the background, or for finding conflicts (if these do occur, when I have rarely had conflicts it has been because I've been trying to do something nonsensical!).

    5977044b7c577_Screenshotfrom2017-07-2419-31-30.png.434a97d0b058cba70b3114e72acd7ca0.png

    I don't know whether it is my new machine, or linux, but the process of installation (and removal) is orders of magnitude faster than windows. It honestly only takes a couple of seconds for most of these installations. Anyway suffice to say I was very quickly running chrome, installing my favourite plugins, running my favourite websites.

    Accessing Windows Hard Disks

    The next stage was to get some of my data across from my old windows PC. This is where things get slightly interesting. Predictably enough, linux uses a different filesystem to windows, 'ext4' on my machine, whereas my windows external hard disk was formatted as NTFS. As is Microsoft's way (to discourage competitors, no doubt), NTFS is not public domain. The clever Linux devs have presumably reverse engineered much of NTFS, because you can mount and read from the NTFS disk. However, I am erring on the side of caution and not writing to NTFS for now, because from previous experience of exFAT on Android, it is possible that an incorrect write can bork the file system, and hence lose a LOT of work. My solution for now was to copy my working source code etc from the NTFS hard disk to my ext4 linux SSD. Longterm I intend to convert all my NTFS external hard drives to ext4. It would also presumably be useful if Windows could read from ext4 drives, but I don't know how easy this is as yet.

    Great! I had some data on my new machine. I tried some movies and they worked great in the in-built player, and VLC (which I installed). Image files loaded fine in the in-built viewer and in 'the gimp', which is sort of like the linux photoshop. I've used the gimp a little on windows, and am hoping it can do a lot of the photoshop duties.

    Blender

    For 3d models, I've been using blender on windows, and as luck would have it, this open source software is available and runs very nicely on linux. Was installed and loading my game models in no time.

    597704994b95f_Screenshotfrom2017-07-2416-16-52.png.82b51b382ecd7718a6e1565e459dff6f.png

    For development, this just left an IDE and compiler for c++ (my language of choice). Linux has a very handy standard compiler which is easy to install (g++ / gcc). This is where I might mention 'the terminal'.

    The Terminal

    Although the name windows has become synonymous with the windows GUI, it is important to realise that an operating system doesn't have to be irrevocably intertwined with a GUI system. In linux, the operating system can use several different GUIs, depending which flavour you prefer. Or none at all, if for example you are running a server. The way to talk to the operating system below the level of the GUI is a command line interface called 'the terminal'. There used to be one used commonly in windows too, the DOS prompt, but it is rarely used now. In contrast on Linux, the terminal is still very useful for a number of operations, unfortunately it can be a little scary for beginners but this is a little unjustified.

    To get the terminal up I just press Alt-T. You can list what is in your current directory by typing 'ls'. You can navigate up a directory with 'cd ..'. And you can navigate into a directory with 'cd MyFolder'. It will also auto-complete the folder / filename if you press tab.

    597704c459348_Screenshotfrom2017-07-2419-38-43.png.9d154bb848905db8a7ec9f8388a9a5a5.png

    From the terminal you can do a lot of stuff you would also do from the graphical file manager (the excellent 'nemo' is built in to linux mint), such as copying, deleting, moving files. You can also manually tell it to install packages just like it would install from the package manager, with the command 'apt-get'. To install software, you need admin privileges (this is handy as it prevents malware from doing anything naughty without you typing in the admin password). To get admin you type 'sudo' before the command:

    sudo apt-get install build-essential

    This tells it to run as admin (sudo) to run apt-get, and install (or remove) the package called 'build-essential'. This contains the compiler and other building tools.

    IDE

    Unless you fancy yourself as a hardcore compile from the terminal from the getgo type of guy, you will also probably want to use an IDE for development. As I use C++, there are several to choose from, such as Eclipse, Code::Blocks, KDevelop, Code Lite etc. I went for QT creator, as I have used it on windows (again, familiarity!! baby steps!!).

    Once QT creator was installed, it was fairly easy to tell it to create a hello world app and test it, it worked great! :)

    This is where things got slightly more interesting. My current project is an Android game. I had been maintaining both a PC build on windows, and the Android build, with the platform specific stuff isolated into things like creating a windows, setting up OpenGL, input, and low level sound.

    5977054bccc12_Screenshotfrom2017-07-2419-40-59.png.deff2b6bc1a1bb878b69b293af0f6d3d.png

    OpenGL ES

    Where things got slightly confusing is that because I am developing for Android, I was using OpenGL ES 2.0, rather than the desktop version of OpenGL. On windows I had been using the ARM Mali OpenGL ES Emulator, which emulates OpenGL ES by outputting a bunch of normal OpenGL calls for each ES call. I was anticipating having to use something similar on linux, so I attempted to install the Mali emulator in Linux, however I had little joy.

    I was getting conflicts with existing OpenGL libraries used in SDL (which I intended to use for platform specific stuff). Finally after investigation I realised that my assumptions were wrong, and Linux actually directly supports OpenGL ES AS WELL as desktop OpenGL, through the open source Mesa drivers. I eventually got a 'hello world' OpenGL ES program working, and was convinced I now had the necessary libraries to start work.

    64 Bit Conversion

    The next stumbling block was a biggie. For historical reasons, all my libraries and game code were 32 bit. I had been developing with the idea that a lot of Android devices were 32 bit, and I was hoping the 64 bit devices would run the 32 bit code (hadn't really tested this out lol). So I had been previously compiling a 32 bit windows version, and a 32 bit android version. And it soon became clear that my linux setup was compiling by default to 64 bit.

    No problem I thought, I should be able to cross compile. With some quick research I managed to get 32 versions of the libraries, however I had no joy with 32 bit version of OpenGL. It refused to install, and being a linux beginner I was stuck. I did some little research, but no simple path, and realised that maybe it was time to convert my code to 64 bit. Or rather, to have my code run in 32 bit and 64 bit.

    I had been (rather unjustifiably) dreading this, as I have a lot of library code written over quite a few years. As it happened, aside from some changes to my template library, the biggest problem was in the use of 'fixup' 32 pointers in flat binary files formats. I have been using this technique for a long time now as it greatly speeds file loading, and also helps prevent memory fragmentation.

    Fixup Pointers

    Essentially the idea with a 'fixup' pointer is you store into the file an 'offset' from a fixed point in the file to a resource, often the start, because there is no point in saving a real pointer to a file as it points to a (changeable) memory location. Then you can load the entire binary file as one big block, and on loading 'fixup' the offset pointer to a real pointer by adding e.g. the offset to the memory location of the start of the file in memory.

    This works great when the offsets are 32 bit and your pointers are 32 bit. But when you move to 64 bit, your offsets are fine (as long as the file is smaller than 4gb), but there is not enough room to store a 64 bit pointer. So you have a choice, you can either do some pointer arithmetic on the fly, or change your file formats to use 64 bit offsets / pointers.

    After a trial with the first method, I have eventually settled on going with 64 bit in the file, even if it uses a little more space. Of course the disadvantage is that it has meant I have needed to re-export all my assets. So at the same time as converting my libraries to 64 bit, the game code, I also needed to convert my exporters to 64 bit, and re-export all the assets (models, sprites, sound etc).

    This has been a frustrating big job, particularly because you are coding 'blind'. Normally when you program you will change a little bit, recompile, run and test. But with such a conversion, I had to convert *everything* before I could test any of it.

    Success!

    It has been demoralizing doing the conversion, I won't lie. But I have been so impressed with the operating system I was determined to make it work. And finally bit by bit I got the exporters working, re-exported, then the game, debugged. Got some crazy graphical errors, errors in the shaders that the OpenGL ES implementation didn't like (that's a whole other story!) but finally got it displaying the graphics, then did an SDL version of the sound this afternoon which is working great.

    5977056a52792_Screenshotfrom2017-07-2416-10-27.png.c456b4040cf6563b16189b020b0c64e3.png

    One thing I will say is I should have been using SDL before, it is really simple and makes a whole lot of sense of taking out the eccentricity of setup code on different platforms (windows in particular is very messy).

    So to summarize I now have (nearly) everything working, compiling and running on linux. I still have to install android studio and try debugging an android hardware device through usb but I'm very hopeful that will work. Even if it doesn't it's not a show stopper as I can always use a second PC. I am gradually becoming more familiar with linux every day and even feeling I might get tempted to learn QT so I can do some nice 'native' looking apps.

  6. UI: character menu & build mode panel Domen Koneski

    Continuing with the UI, I have decided to implement a brand new character menu that includes all the player stats, player model and item slots for your dressing needs (will be implemented in the future). You can rotate your player model with the script that is provided below.

    character_menu_ui_lowpoly_floatlands.png
    New character menu

    I have also changed the looks of the Build mode to make it as simple as possible.

    ui_buildmode_lowpoly_floatlands.png

    New build mode outlook

     

    Generic mouse swipe script Domen Koneski

    It is time to give away some code for those in need of a solution when you want to do something with the mouse gestures, in this case a mouse “swipe” gesture, e.g. you wish to rotate your character model in the character menu with your mouse. The script provided can be used in your projects, free of charge, and can handle multiple things:

    • Unity Event when moving the mouse in X direction only
    • Unity Event when moving the mouse in Y direction only
    • Unity Event when moving the mouse in XY direction
    • Knowing if the mouse is “down” on the selected raycastable panel

    To make things work create a UI panel, hide the image (do not disable the component), select the image as raycastable and add this script. What you have to do now is to populate your Unity events with your custom function calls. Do not forget when calling your function via this script the function getting called must take one (for X or Y only events) or two (XY event) arguments type of float. The last thing is to mark the event as dynamic, see image below.

    mouse_swipe_script_lowpoly_floatlands.pn
    mouse swipe script

    using UnityEngine;
     
    using UnityEngine.Events;
     
    using UnityEngine.EventSystems;
     
    namespace Floatlands.UI
    {
        public class MouseSwiper : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
        {
            public bool isHoldingDown;
            public Vector2 totalDeltaVector;
            public Vector2 deltaVector;
            private Vector2 prevVector;
     
           private Vector2 startPosition;
            private PointerEventData eventData;
     
           [SerializeField]
            public SwipeSingleEvent OnSwipeXEvent;
            [SerializeField]
            public SwipeSingleEvent OnSwipeYEvent;
            [SerializeField]
            public SwipeDoubleEvent OnSwipeXYEvent;
     
           public void OnPointerDown(PointerEventData eventData)
            {
                isHoldingDown = true;
                startPosition = eventData.pressPosition;
                prevVector = startPosition;
                this.eventData = eventData;
            }
     
           public void OnPointerUp(PointerEventData eventData)
            {
                isHoldingDown = false;
            }
     
           void Update()
            {
                if (isHoldingDown)
                {
                    Vector2 currentPosition = this.eventData.position;
                    totalDeltaVector = currentPosition - startPosition;
     
                   deltaVector = currentPosition - prevVector;
     
                   prevVector = currentPosition;
     
                   OnSwipe((int)deltaVector.x, (int)deltaVector.y);
                }
                else
                {
                    totalDeltaVector = Vector2.zero;
                }  
           }
     
           void OnSwipe(int deltaX, int deltaY)
            {
                if (OnSwipeXEvent != null)
                    OnSwipeXEvent.Invoke(deltaX);
                if (OnSwipeYEvent != null)
                    OnSwipeYEvent.Invoke(deltaY);
                if (OnSwipeXYEvent != null)
                    OnSwipeXYEvent.Invoke(deltaX, deltaY);
            }
        }
     
       [System.Serializable]
        public class SwipeSingleEvent : UnityEvent<int> { }
        [System.Serializable]
        public class SwipeDoubleEvent : UnityEvent<int, int> { }
    }

     

    Outfits and speakers Andrej Krebs

    Mito created some outfits concepts for “techies” that would distinguish them from the “farmers”. So this week I was occupied with modeling and weight painting the new outfits. They put more metal pieces on themselves as armour is made of junk pieces of sheet metal.

    techies_outfits_lowpoly_floatlands-1.png
    various “techies” outfits

    After that I modeled propaganda speakers, which will appear in the world. The speakers will emit propaganda messages and other sounds.

    propaganda_speakers_lowpoly_floatlands.p

    propaganda speakers

     

    Extra robot concepts Mito Horvat

    Currently there is only one type of enemy robots. Simple humanoid machines that wield various weapon types (from snipers to grenadiers etc), they roam around and attack anything in sight. In the near future we’ll add sturdy, hard to destroy robots that will challenge the player. In addition, we’ll also add small spider like robots that will be quick and unforgiving with their melee attacks. Those enemies will surely test your aim. You can see the first glimpse of concept sketches below.

    enemy_robots_concepts_lowpoly_floatlands
    a different kind of enemy robots

     

    Mining drone in action tadej vranesic floatlands

    This week I’ve been playing around with drones, particularly “mining” drone which Andrej beautifully modeled. Mining drone will represent a fine touch to resource collecting. Upon destruction its loot will be dropped and ready for collection, which allows the player to gather resources faster. Tweaking its avoidance system makes it fly smootly regardless of any obstacles on its path. Finishing touches were also made for the drill rotation. More nuts and bolts next week.

    mining_drone_active_lowpoly_floatlands.g
    mining drone in action

    NPC battles vili ikona

    Humans are already alive and fighting each other (Farmers vs. Techies). They have 3 different weapons for now: fists, single shot pistol and revolver. They can also melee attack with pistols!

    NPC_fighting_lowpoly_floatlands.png
    NPCs fighting

    I also just started working on ‘Hint nodes’, which will have different geometric shapes. Those hint nodes will provide information about the world – safe spots, danger spots, sniper spots and so on.

    basic_gizmos_lowpoly_floatlands.png
    basic gizmos


    More about Floatlands: website, facebook, twitter, instagram

  7. I bought this little fella (http://www.wacom.com/en-br/products/pen-tablets/one-wacom-m) a while ago but i never found time to play around with it. This weekend was very hot so i was mostly home and i’ve drawn a background for the game, hope you dig it. Took me a few hours.

    Background

    The post Backgrounds work appeared first on Fat Pug Studio.


    View the full article

  8. Hello hello!! It's me again with the week 8 development blog, this week we spent some time relocating our studio and discuss the future changes of the game.

    Firstly, we have tried unit-count system which may not be the best resource management for our game, as unit-count may hinder and difficult to balance during progressing character level. On the other hand, we tried a new method of resource management which is a traditional "Mana Crystal" which you gain over-time and killing monsters.

    This resource system will come with another feature "Light Source building", which players will only be able to build within the Light Source area. Our team thinks this system will increase the depth of gameplay and challenges player to solve it with their solution. These Light Source Building will also generate "mana crystal" and there will be mana crystal boosting upgrades.

    We are building a prototype for this system, and if it is fun, we will implement into our next patch!

  9. New video of this last week. Featuring progress on two games and also showing another one.

    The video is really cool ( i think ), i'm doing better the videos each week.

     

    Enjoy it :

     

     

    Comments about the video, games or anything will be appreciated.

     

    If you know some videos about weekly devlogs please tell me about, i know only about the indie called thinmatrix, his videos are great.

     

    Thanks for your time.

  10. title.thumb.png.a1370bd267540204d2bc4c8e16f72ab0.png

     

    I've finally hit a new milestone. Farkle Friends is finally ready for some closed alpha testing. I'm finally getting close enough to releasing this game I can now taste it. I haven't posted recently as I have been working feverishly over the last few weeks to get to this point.

    Alpha testing will start in the next day or 2. Unless there is a major issue I plan about 2 weeks of alpha testing to work the kinks out. I'll make sure its working good on all the platforms I plan to support. Android, Windows, Mac OS, and Linux. Once all the initial play testing is done, and I have worked out any bugs found, I will then be moving on to some open beta testing.

    For the beta testing I plan on using GamingBetas and/or AlphaBetaGamer. During the alpa testing I plan to investigate these two sites and will choose one or both to help out with some beta testing. I will have another blog later letting you know my choice and how, if possible, you can join to help with the testing. I'm planning another 2 weeks, baring any major issues, for this step. Then I will start preparing for release.

    So if all the testing goes well, and there are no major issues I'm planning to release in about 4 weeks. For sure I will be releasing to the Google Play store. I have a list of other sites to host the PC/Mac/Linux version of the app as well. Here is a list of release site I'm considering. If anyone has any experience with these I'd love to hear about it. I will be investigating them and deciding over the next few weeks. I plan on releasing to Google Play store plus 2-4 others.

    1. gamejolt.com
    2. itch.io
    3. indiegamestand.com
    4. Steam
    5. indiedb.com
    6. gog.com

    I'm really excited to be at this point and looking forward to releasing this to the world. I already have ideas for more games and for future updates to Farkle Friends.

    Happy Gaming

  11. Liza Shulyayeva
    Latest Entry

    A couple of weeks ago I had the genius idea to rewrite SnailLife in Go. I’ve already looked into doing this once before a couple of years ago, but wasn’t really feeling it and stuck with PHP (mostly for nostaligia reasons). Now though, SnailLife is this bloated PHP app. Most of the core functionality is in. After weeks of battling infrastructure issues, when everything was back up and running again, I took a step back and saw how big the app (or rather the 3 apps now) had become. At the same time I’d been reading in passing about Go and became curious, so I figured - why not look into learning Go by rewriting SnailLife? Not because I think Go itself will necessarily make anything better, but because a rewrite might.

    The features are mostly already designed, reimplementing them in another language would hopefully let me focus more on improving the overall project structure while learning the new language of choice. Of course, the “learning the new language of choice” part also increases the likelihood of my turning my messy PHP app into a messy Go app as I go, but…it’ll be fun, OK?

    Anyway, I’m not yet sure if I’ll stick with the Go port or if I’m just amusing myself for a while before going back to the already largely implemented PHP version. So far I haven’t coded anything snail-specific and have instead been focusing on setting up database-related packages. I’ve made the code public on GitLab for now, though not sure if that’ll change when I go into writing the more snail-specific functionality: https://gitlab.com/drakonka/gosnaillife

    When I started the PHP version of SnailLife, I started by building the website and the main functionality that lets users interact with their snails. As time went on this focus switched almost exclusively to the back-end, and to working on functionality that required no user interaction. I realized that this is what the core of the idea was - simulating the actual snails - the brain, organ function, etc - things that the user could eventually influence indirectly, but things that would tick away on their own even if no user was involved. So for the Go version I am not starting with a web front end but with a simple CLI, and focusing on implementing the core of the snail itself first. Eventually I can build whatever front-end I want, or even multiple front-ends if I feel like it. Heck, I could even expose some sort of API for others to make their own apps on top of the simulation (if anyone wanted to, in theory).

    Go notes to self

    • Open and close DB connections as little as possible - the driver handles connection pooling for you, you should only really need to do it once.
    • Best way of reusing constructors between tests might be to create some test utilities outside of _test files which are imported only by the tests. Example usage in my case is creating a test db and table to run my mysql and repo tests against, which are in different packages.
    • Every directory is a package. There is no way to structure code in subdirectories without each subdirectory being a separate package.
    • Make use of table driven tests. They allow you to run multiple test cases per test.
    • interface{} is an empty interface and can hold values of any type…avoid passing this around too much, better to learn to structure the code so you don’t have to.
    • Go code looks to be very easy to move around and restructure if needed, so it should be fine to experiment with different project structures as I go.

    Current tentative project structure

    drakonka/gosnaillife
    ├── cmd
    │   └── snaillifecli
    │       └── main.go
    ├── config
    │   ├── dev
    │   │   └── database.json
    │   └── env.conf
    ├── lib
    │   ├── domain
    │   │   ├── item
    │   │   └── snail
    │   │       ├── snail.go
    │   │       └── snailrepo.go
    │   ├── infrastructure
    │   │   ├── databases
    │   │   │   ├── database.go
    │   │   │   ├── mysql
    │   │   │   │   ├── delete.go
    │   │   │   │   ├── insert.go
    │   │   │   │   ├── mysql.go
    │   │   │   │   ├── retrieve.go
    │   │   │   │   ├── tests
    │   │   │   │   │   └── mysql_test.go
    │   │   │   │   └── update.go
    │   │   │   ├── repo
    │   │   │   │   ├── repo.go
    │   │   │   │   ├── repoutil.go
    │   │   │   │   └── tests
    │   │   │   │       ├── repo_test.go
    │   │   │   │       ├── testmodel_test.go
    │   │   │   │       └── testrepo_test.go
    │   │   │   └── tests
    │   │   │       └── testutil.go
    │   │   ├── env
    │   │   │   └── env.go
    │   │   ├── init.go
    │   │   ├── init_test.go
    │   │   └── util
    │   │       ├── collection.go
    │   │       └── err.go
    │   ├── interfaces
    │   └── usecases

     

  12. Hey everyone - long time no post. Sorry about that. :) I landed my dream job over a year ago and have been pretty busy since then. I'm working at Harebrained Schemes on the new turn-based Battletech game. The last one was over 20 years ago! :D Come check it out at:
    http://battletechgame.com/

    Today I'm going to talk a little bit about a metadata database (That's really fun to say btw) and how you might use it in your projects.

    Database_Schema.thumb.png.2a40803e78f0d626311f12467a77a6e4.png

    What is a metadata database?

    Let's start with a couple of definitions. Metadata is just data about other data. And a database is just a structured way of storing and accessing data. So... a metadata database is a structured way of storing and accessing data about other data... Is your mind blown yet?

    Why use a metadata database?

    I'm going to look at our units for this example. We have a bunch of units with lots of data stored in separate files. Our unit metadata contains things like the filename, the type of unit: mech, vehicle, turret - and tags that describe the kind of unit that it is: medium, sniper, jump_capable. Instead of hard coding our unit spawn points to a specific unit, we configure the spawn point to ask for a unit with the tags "mech" and "medium" to change things up a bit. Without a metadata database, we'd have to load up every single unitdef into memory, and then loop through all of the data to build a list of the units that match, then select a random entry. With a MDDB, we can write a query that returns the list of units that qualify without having to load every single file and load the unit that we need to spawn.

    Also, once you put this type of data in a database, you can start writing sql queries to easily get at information. How many maps implement a particular encounter? How many contracts are written for the Escort contract type. Are there any events that can't be triggered because they rely on tags that are never awarded.

    Some Library Options

    We're using C# and Unity for our project, and these are the main tools we're using for our SQL needs.

    Some TagSet Query Code

    Here's some C# I wrote that builds a dynamic bit of sql based on the number of required tags and excluded tags. It wasn't trivial so I figured I'd share it. One requirement I'm not completely happy with is that the tags you ask for have to be in the database. At the start of the function I insert the ones that weren't present. It made the sql a little bit cleaner to look at and get right.  For our needs it's not a big deal because we'll only be asking for tags that we care about, but if an end user is typing in random stuff you'll want a slightly different approach.

    Also I made one change to the Schema since after the graphic was made. I dropped the TagID and just use Name as the primary key. TagSetTag then drops its TagID column and gets a TagName column to point to Tag. I recommend that datamodel instead of the one shown, but our fans made the graphic for the data model and I didn't have a way of updating it easily. :) The code presented matches the old way.

    public static List<TagSet_MDD> GetTagSetWithRequiredTags(this MetadataDatabase mdd, TagSetType tagSetType, TagSet requiredTags, TagSet excludedTags)
    {
        // Get the tag rows for the specified tags so we can get their database ids.
        List<Tag_MDD> requiredTagRows = GetOrCreateTagsInTagSet(mdd, requiredTags);
        List<Tag_MDD> excludedTagRows = GetOrCreateTagsInTagSet(mdd, excludedTags);
    
        // Here's what the query will look like for 2 requried tags and 1 excluded tag
        /*
        select
            ts.*
        from TagSet as ts
            -- Required Tags
            inner join TagSetTag as tst0
                on ts.TagSetID = rtst0.TagSetID
            inner join TagSetTag as tst1
                on ts.TagSetID = rtst1.TagSetID
            -- Excluded tags
            left join TagSetTag as etst0
                on ts.TagSetID = etst0.TagSetID
                and etst0.TagID='tag id 3'
        where
            rtst0.TagID = 'tag id 1'
            and rtst1.TagID = 'tag id 2'
            and etst0.TagID is null
        */
    
        string queryText = "SELECT ts.* FROM TagSet ts ";
        string joinText = string.Empty;
        string whereClause = string.Format("WHERE ts.TagSetTypeId = {0} ", (int)tagSetType);
    
        // Join to one instance of TagSetTag for each required tag.
        for (int i = 0; i < requiredTagRows.Count; ++i)
        {
            joinText += string.Format(GTSWRT_RequiredInnerJoinFormat, i);
            whereClause += string.Format(GTSWRT_RequiredWhereClauseFormat, i, requiredTagRows[i].TagID);
        }
    
        // Join to one instance of TagSetTag for each excluded tag
        for (int i = 0; i < excludedTagRows.Count; ++i)
        {
            joinText += string.Format(GTSWRT_ExcludedLeftJoinFormat, i, excludedTagRows[i].TagID);
            whereClause += string.Format(GTSWRT_ExcludedWhereClauseFormat, i);
        }
    
        // Assemble the query text and return the results.
        queryText = queryText + joinText + whereClause;
    
        List<TagSet_MDD> tagSetList = mdd.Query<TagSet_MDD>(queryText).ToList();
    
        return tagSetList;
    }

     

  13. It's the weekend, so that means I get to share all I worked on last week in another edition of the Developer Diary Digest!

    EVENT & HOLIDAY SYSTEM

    It seems like I've been putting off a holiday / event system for at least the last 6 months. It's one of the systems I've been most anticipating, but it relied on too many other moving pieces to work on...well, until now!

    At the dawn of each day, the game now checks if there's an event scheduled, and if so it fires off any scripts related to it. It's pretty robust, and the scripts can do things like create holiday-specific visitors, add new music or decorations, change dialog, and a lot more.

    Imgur

    As I wrapped it up, I realized that I needed a way to inform the player about upcoming events and what they were all about. This naturally lead into the next thing I worked on...

    A POSTAL SERVICE

    You can now receive letters from villagers, visitors, and other friendly monsters in the game. The goal is to integrate the mail system into as many other parts of the game as I can. For example, you'll get a flyer the day before each holiday that explains it:

    Imgur

    Letters you receive from villagers will reflect their personalities as well as their disposition toward you. Most will be helpful or friendly, but others, like Taswell,

    Imgur

    probably won't be at first.

    As I said above, I want mail to be integrated into as many other systems as I can. As I was browsing my list of features I got to "The ability to submit feedback from in-game" when I suddenly had an idea...

    SENDING FEEDBACK VIA IN-GAME POSTAL SERVICE

    ...wouldn't it be cool if you could write letters to the developer from inside the game itself?

    Imgur

    Now obviously there's a lot of things to consider here - security, spam protection, etc. - but the idea is so cool to me that I'll do whatever it takes to make it work.

    It's hard enough to encourage users to submit feedback, so providing something in-game that's also contextualized via a system they're going to be using every day can only help!

    BIRD SONG

    Finally, I'll end this week sharing a new 'flavor' feature.

    If you've played any of the demos you've likely seen birds flying about every so often. But unlike real life, they've been totally silent.

    Well not anymore! Birds that fly overhead will now chirp and caw and sing. I obviously can't record sounds via gifs, so I tried my best to provide an alternative:

    Imgur

    Well that'll do it for this week. Enjoy your weekend, y'all!

  14. 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!

    Race Kings is the first racing game I have enjoyed playing in quite a while! It is a racing game based around drifting, in which you bet in-game cash to battle an opponent player (live), and whoever wins, gets the cash. 

    There's plenty of cars, the graphics are awesome, several events and fresh maps, and no stamina system. But! A part of whoever wins a battle depends on who has the most "Edge", which is a speed bonus added whenever you upgrade parts of your car. Edge resets every 30 minutes, meaning that you're forced to keep upgrading your car to keep winning. Upgrading your car, however, costs cash, which you conveniently can buy for real life money. 

    So where does the game land? In my opinion, the game is still worth checking out, as the gameplay is rather unique and had me sitting on the edge of my seat while playing. 
     

    My thoughts on Race Kings:


    Google Play: https://play.google.com/store/apps/details?id=com.hutchgames.racingnext&hl=en
    iOS: https://itunes.apple.com/nz/app/race-kings/id988762223?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

  15. ActDesigner.png.0ed775bbe93d10008521b20299c17602.png

    I made a lot of progress in the past week. Waypoints, acts, and Quests – three of the features I wasn’t sure how to implement into Project Peril, resulting in much procrastination. I finally took the time to sit down and think through how these systems will be implemented neatly while keeping it easy to create acts, quests, and waypoints via script or internal tools. I’m quite happy with the result, and it took me just a few minutes to whip up a an act with a few waypoints and a quest that requires new heroes to kill a monster standing at the gate before being granted access to the town of Act 1.

    I’m also rewriting how inventories are managed on the client.  The way the inventory system was previously coded made it really hard to display stashes, trade screens, and NPC screens because it was kinda hard-coded to support only the player’s inventory.  As soon as this feature is complete I will begin working on trading and NPCs who sell items.  Something to look forward to next week, I suppose.

     

    QuestLayout.png.19ed44eac26ec281e6438d691629ec2b.pngWaypointMap.thumb.png.2d03cfbee309f28cb9a5b452dcf0a19b.png

  16. We just started 3D modeling the #ColoredWoman from the book introduction to Game | Book Charly Men's BIZARRE.
    Simultaneously, we create the main-character in 3D, and we are also in the process of furnishing the first game location, Clearwaters appartment, in 3D as well. 

    The colored woman is going to dance in our next video that is planned to be published after summer.

    She is a vision of main-character of the game, Charly Clearwater, who will therefore start to write his novel Exzess. We recreate this book scene as a sequence in the game. 

    Common girl! Dance for me!

     

    ColoredWoman.gif

  17. We're approaching the time when reputation for all members will be re-indexed.

    As has previously been described, in our previous system reputation had a fuzzy definition. While a member could earn reputation through the usual up/downvotes, a member's activity could also generate reputation. For example, logging in on a daily basis would give you +1 reputation each login. Posting a blog, voting in the screenshot showdown, or posting an article would also generate reputation (at times +100!).

    But activity is not representative of how others in the community gauge your helpfulness, knowledge, or general contribution. In addition, the previous system does not match the new system where your reputation is only representative of your up/downvotes, which means the reputation still is not a representative value.

    To correct this, we will re-index the reputation for all members and remove all reputation points not earned through up/downvotes. Meaning, your reputation value will no longer include your site activity points, but it will include all of the up/downvotes you've received.

    A lot of members have a lot of reputation points, and in most cases the re-index will result in a severe drop in reputation value.

    So what about those reputation points based on activity? They have to be worth something, right?

    They are. All the activity reputation points will be converted into Pixels. We're finalizing how those points will be converted, but the current plan is for the conversion to align the activity with the Pixel awards in the new system. Site note: If you haven't figured it out yet, you earn Pixels through activity on the site. More activity through contributions to the community = more Pixels.

    We'll go into more about Pixels later. For now, I wanted to communicate this upcoming change and give the community an opportunity to provide feedback or ask questions.

  18. Hi everyone! :)

     

    Today, we'd like to share some wonderful news with you.

     

    We've recently applied to the Web Summit Alpha Programme, for startups like us to be present at the event. We can happily announce that we're officially going to be Web Summit 2017, in Lisbon, Portugal (our home country)! The event will take place from the 6th to the 9th of November, so we hope that if you'll be at the event too we can meet up!

     

    As you may already know, Web Summit is one of the biggest technology events worldwide. They're expecting more than 60.000 attendees this year! So it'll be a great opportunity for both FAXIME and our dear "Project SpaceVille".

     

    We'll have the opportunity to talk to investors and to show “Project SpaceVille” to the world in our booth. And that's just awesome! (laughs)

     

    Other Events

     

    We've already been to some small local game events, and we've always brought a prototype of "Project SpaceVille" with us. It's so gratifying to see people's faces enjoying our game. We've honestly been incredibly surprised by people's positive reaction to the game, especially considering that we've only showed a rough prototype so far (that's also why we haven't showed you much of the game here the blog).

     

    Just a side note: You can try this prototype (and others) out by applying the "Project SpaceVille" Insider Programme. Just send us an email to faximegames@gmail.com with the SPACEVILLE-IP access code. Thanks! :)

     

    Since we're on the matter of events, we've also applied for Indie Dome at Lisboa Games Week in September. And two days ago the PlayStation Awards Portugal programme was also released, so we will be also applying for that too! :)

    We're looking forward to seeing you in Web Summit!

     

    Until then,

    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/

    Web Summit 2017 - FAXIME.jpg

    Players Testing SpaceVille.jpg

  19. Hey guys and gals!

    It`s been an very busy week, and it will continue to be so for the next months. Alot of thing`s has been taken care of regarding animations, music, models and so forth and its very exciting to get things in order, so production can go smoothly and efficiently. Also, from now on the updates will come monthly (unless there is something extremely important to get out).

    So here is some screens for you to enjoy and dream about for about a month until the next update.

     

    Concept art of the cook, he has a pretty cool narrative story and it`s going to be cool to get your feedback on that in the full version of the game, he will not show up in the vertical slice.

     

    Cook Concept art

     

     

    Textured fiddel character in some variations. He is looking great, this is actually one of my favorite part for you to experience ingame.

     

    fiddler unity violin

    fiddler marmoset2fiddler marmoset4

    fiddler unity 3

     

    Game ready version of the whale, he is a lean mean killing machine. Old Grumpy. He has been hunted before but always managed to escape, he has years of experience. (Unity render)

     

     

    whale unity 1

    whale unity 2

    whale unity 3

     

     

    So this is it from the art side, can`t show you everything so will be little drops here and there. When we have a trailer ready it will show only in game gameplay. It`s going to be super cool, I can promise you that!

     

    See you again in august!

    http://www.indiedb.com/games/the-whaler-working-title

    https://twitter.com/trym_studios

  20.  

    Below is my preliminary draft design for the AI system within Spellbound. I'm slowly migrating away from scripted expert systems towards a more dynamic and fluid AI system based on machine learning and neural networks. I may be crazy to attempt this, but I find this topic fascinating. I ended up having a mild existential crisis as a result of this. Let me know what you think or if I'm missing something.

    Artificial Intelligence:

    Objectives:
    Spellbound is going to be a large open world with many different types of characters, each with different motives and behaviors. We want this open world to feel alive, as if the characters within the world are inhabitants. If we went with pre-scripted behavioral patterns, the characters would be unable to learn and adapt to changes in their environment. It would also be very labor intensive to write specific AI routines for each character. Ideally, we just give every character a self-adapting brain and let them loose to figure out the rest for themselves. 

    Core Premise: (very dense, take a minute to soak this in)
    Intelligence is not a fixed intrinsic property of creatures. Intelligence is an emergent property which results directly from the neural topology of a biological brain. True sentience can be created if the neural topology of an intelligent being is replicated with data structures and the correct intelligence model. If intelligence is an emergent property, and emergent properties are simple rule sets working together, then creating intelligence is a matter of discovering the simple rule sets.

    Design:
    Each character has its own individual Artificial Neural Network (ANN). This is a weighted graph which uses reinforcement learning. Throughout the character's lifespan, the graph will become more weighted towards rewarding actions and away from displeasurable ones. Any time an action causes a displeasure to go away or brings a pleasure, that neural pathway will be reinforced. If a neural pathway has not been used in a long time, we reduce its weight. Over time, the creature will learn.

    A SIMPLE ANN is just a single cluster of connected neurons. Each neuron is a “node” which is connected to nearby neurons. Each neuron receives inputs and generates outputs. The neural outputs always fire and activate a connected neuron. When a neuron receives enough inputs, it itself fires and activates downstream neurons. So, a SIMPLE ANN receives input and generates outputs which are a reaction to the inputs. At the end of neural cycle, we have to give response feedback to the ANN. If the neural response was positive, we strengthen the neural pathway by increasing the neural connection weights. If the response was negative, we decrease the weights of the pathway. With enough trial runs, we will find the neural pathway for the given inputs which creates the most positive outcome.

    The SIMPLE ANN can be considered a single cluster. It can be abstracted into a single node for the purposes of creating a higher layer of connected node networks. When we have multiple source inputs feeding into our neural network cluster and each node is running its most optimal neural pathway depending on the input, we get complex unscripted behavior. A brain is just a very large collection of layered neural nodes connected to each other. We’ll call this our “Artificial Brain” (AB)

    Motivation, motivators (rule sets):
    -All creatures have a “desired state” they want to achieve and maintain. Think about food. When you have eaten and are full, your state is at an optimally desired state. When time passes, you become increasingly hungry. Being just a teensy bit hungry may not be enough to compel you to change your current behavior, but as time goes on and your hunger increases, your motivation to eat increases until it supersedes the motives for all other actions. We can create a few very simple rules to create complex, emergent behavior.
        Rule 1: Every creature has a desired state they are trying to achieve and maintain. Some desired states may be unachievable (ie, infinite wealth)
        Rule 2: States are changed by performing actions. Actions may change one or more states at once (one to many relationship).
        Rule 3: “Motive” is created by a delta between current state (CS) and desired state (DS). The greater the delta between CS and DS, the more powerful the motive is. (Is this a linear graph or an exponential graph?)
        Rule 4: “relief” is the sum of all deltas between CS and DS provided by an action.
        Rule 5: A creature can have multiple competing motives. The creature will choose the action which provides the greatest amount of relief.
        Rule 6: Some actions are a means to an end and can be chained together (action chains). If you’re hungry and the food is 50 feet away from you, you can’t just start eating. You first must move to the food to get within interaction radius, then eat it.

    Q: How do we create an action chain?
    Q: How do we know that the action chain will result in relief?
    A: We generally know what desired result we want, so we work backwards. What action causes desired result (DR)? Action G does (learned from experience). How do we perform Action G? We have to perform Action D, which causes Action G. How do we cause Action D? We perform Action A, which causes Action D. Therefore, G<-D<-A; So we should do A->D->G->DR. Back propagation may be the contemporary approach to changing graph weights, but it's backwards.
    Q: How does long term planning work?
    Q: What is a conceptual idea? How can it be represented?
    A: A conceptual idea is a set of nodes which is abstracted to become a single node?


    Motivators: (Why we do the things we do)
        Hunger
        Body Temperature
        Wealth
        Knowledge
        Power
        Social Validation
        Sex
        Love/Compassion
        Anger/Hatred
        Pain Relief
        Fear
        Virtues, Vices & Ethics
    Notice that all of these motivators are actually psychological motivators. That means they happen in the head of the agent rather than being a physical motivator. You can be physically hungry, but psychologically, you can ignore the pains of hunger. The psychological thresholds would be different per agent. Therefore, all of these motivators belong in the “brain” of the character rather than all being attributes of an agents physical body. Hunger and body temperature would be physical attributes, but they would also be “psychological tolerances”.

    Psychological Tolerances:

    {motivator} => 0 [------------|-----------o----|----] 100
                     A            B           C    D    E

    A - This is the lowest possible bound for the motivator.
    B - This is the lower threshold point for the motivator. If the current state falls below this value, the desired state begins to affect actions.
    C - This is the current state of the motivator.
    D - This is the upper threshold point for the motivator. If the current state exceeds this value, the desired state begins to affect actions.
    E - This is the highest bounds for the motivator.

    The A & E bounds values are fixed and universal.
    The B and D threshold values vary by creature. Where you place them can make huge differences in behavior.

    Psychological Profiles:
    We can assign a class of creatures a list of psychological tolerances and assign their current state to some preset values. The behavioral decisions and subsequent actions will be driven by the psychological profile based upon the actions which create the sum of most psychological relief. The psychological profile will be the inputs into an artificial neural network, and the outputs will be the range of actions which can be performed by the agent. Ideally, the psychological profile state will drive the ANN, which drives actions, which changes the state of the psychological profile, which creates a feedback loop of reinforcement learning.

     

    Final Result:
    We do not program scripted behaviors, we assign psychological profiles and lists of actions. Characters will have psychological states which drive their behavioral patterns. Simply by tweaking the psychological desires of a creature, we can create emergent behavior resembling intelligence. A zombie would always be hungry, feasting on flesh would provide temporary relief. A goblin would have a strong compulsion for wealth, so they'd be very motivated to perform actions which ultimately result in gold. Rather than spending lots of time writing expert systems styled AI, we create a machine learning type of AI. 

    Challenges:
    I have never created a working artificial neural network type of AI. 
     

    Experimental research and development:

    The following notes are crazy talk which may or may not be feasible. They may need more investigation to measure their merit as viable approaches to AI.

    Learning by Observation:
    Our intelligent character doesn’t necessarily have to perform an action themselves to learn about its consequences (reward vs regret). If they watch another character perform an action and receive a reward, the intelligent character creates a connection between an action and consequence. 
        
    Exploration Learning:
    A very important component to getting an simple ANN to work most efficiently is to get the neurons to find and establish new connections with other neurons. If we have a neural connection topology which always results in a negative response, we’ll want to generate a new connection at random to a nearby neuron. 

    Exploration Scheduling:
    When all other paths are terrible, the new path becomes better and we “try it out” because there’s nothing better. If the new pathway happens to result in a positive outcome, suddenly it gets much stronger. This is how our simple ANN discovers new unscripted behaviors.

    The danger is that we will have a sub-optimal behavior pattern which generates some results, but they’re not the best results. We’d use the same neural pathway over and over again because it is a well travelled path.

    Exploration Rewards:
    In order to encourage exploring different untravelled paths, we gradually increase the “novelty” reward value for taking that pathway. If traveling this pathway results in a large reward, the pathway is highly rewarded and may become the most travelled path.


    Dynamic Deep Learning:
    On occasion, we’ll also want to create new neurons at random and connect them to at least one other nearby downstream neuron. If a neuron is not connected to any other neurons, it becomes an “island” and must die. When we follow a neural pathway, we are looking at two costs: The connection weight and the path weight. We always choose the shortest path with the least weight. Rarely used pathways will have their weight decrease over a long period of time. If a path weight reaches zero, we break the connection and our brain “forgets” the neural connection.
            
    Evolutionary & Inherited Learning:
    It takes a lot of effort for a neural pathway to become developed. We will want to speed up the development. If a child is born to two parents, those parents will rapidly increase the neural pathways of the child by sharing their own pathways. This is one way to "teach". Thus, children will think very much like their parents do. Other characters will also share their knowledge with other characters. In order for knowledge to spread, it must be interesting enough to be spread. So, a character will generally share the most interesting knowledge they have. 

    Network Training & Evolutionary Inheritance:
    An untrained ANN results in an uninteresting character. So, we have to have at least a trained base preset for a brain. This is consistent with biological brains because our brains have been pre-configured through evolutionary processes and come pre-wired with certain regions of the brain being universally responsible for processing certain input types. The training method will be rudimentary at first, to get something at least passable, and it can be done as a part of the development process.
    When we release the game to the public, the creatures are still going to be training. The creatures which had the most “success” will become a part of the next generation. These brain configurations can be stored on a central database somewhere in the cloud. When a player begins a new game, we download the most recent generation of brain configurations. Each newly instanced character may have a chance to have a random mutation. When the game completes, if there were any particular brains which were more successful than the current strain, we select it for “breeding” with other successful strains so that the next generation is an amalgamation of the most successful previous generations. We’ll probably begin to see some divergence and brain species over time?

    Predisposition towards Behavior Patterns via bias:        
    Characters will also have slight predispositions which are assigned at birth. 50% of their predisposition is innate to their creature class. 25% is genetically passed down by parents. 25% is randomly chosen. A predisposition causes some pleasures and displeasures to be more or less intense. This will skew the weightings of a developing ANN a bit more heavily to favor particular actions. This is what will create a variety in interests between characters, and will ultimately lead to a variety in personalities. We can create very different behavior patterns in our AB’s by tweaking the amount of pleasure and displeasure various outputs generate for our creature. The brain of a goblin could derive much more pleasure from getting gold, so it will have strong neural pathways which result in getting gold.

    AI will be able to interact with interactable objects. An interactable object has a list of ways it can be interacted with. Interactable objects can be used to interact with other interactable objects. Characters are considered to be interactable objects. The AI has a sense of ownership for various objects. When it loses an object, it is a displeasurable feeling. When they gain an object, it is a pleasurable feeling. Stealing from an AI will cause it to be unhappy and it will learn about theft and begin trying to avoid it. Giving a gift to an AI makes it very happy. Trading one object for another will transfer ownership of objects. There is no "intrinsic value" to an object. The value of an object is based on how much the AI wants it compared to how much it wants the other object in question.
            
    Learning through Socialization:
    AI's will socialize with each other. This is the primary mechanism for knowledge transfer. They will generally tell each other about recent events or interests, choosing to talk about the most interesting events first. If an AI doesn't find a conversation very interesting, they will stop the conversation and leave (terminating condition). If a threat is nearby, the AI will be very interested in it and will share with nearby AI. If a player has hurt or killed a townsfolk, all of the nearby townsfolk will be very upset and may attack the player on sight. If enough players attack the townsfolk, the townsfolk AI will start to associate all players with negative feelings and may attack a player on sight even if they didn't do anything to aggravate the townsfolk AI.
     

  21. Hero Toon Tower Defense It is a tower game, but it is not the typical tower defense, where buildings are built along a path.

    In this game you have to build a village first, then you have to add your system of defenses like walls, towers of arrows and towers of fire.

    And like any strategy game, you have to build barracks to recruit troops. These units serve to defend the town from the attacks of enemy hordes.

    The game has a level that develops inside the underworld in dungeons, where the mission is to rescue the princesses of the evil elves.

    The game was developed in Unity 5.4 and use purchased characters in unity asstes store.

    You can download the game from google store:

    https://play.google.com/store/apps/details?id=com.MuiscaGames.HeroToonTower

    Hero Toon Tower Defense 10.png

    Hero_Toon_Tower_Defense.PNG

    • 1
      entry
    • 0
      comments
    • 72
      views

    Recent Entries

    Before we start our development blogs, we want to share our insight about us and the game.

     

    What is Alchemica?

    Alchemica is a game being worked on by a development team consisting of two people for several years.

    It is a free RPG game for Android with some unique takes. Players take the role as Charlotte, a young alchemist striving to become a successful merchant.

    During the course of the game, she can use materials taken from the world to craft various potions and bombs. These items can then be used for battles. The main idea is that she doesn't use conventional weapons, instead relying on her own expertise in crafting items to defeat monsters and gain loots in the form of more materials from them, thus repeating the cycle.

    Charlotte also owns a store, the one she wants to build reputation on. She can directly sell loots taken from dungeons for gold, or use the time to craft better items as they are worth more. Visitors will come to her store, and she must haggle with them to win her hard-earned gold coins.

     

    What does Alchemica looks like?

    As a die-hard fans of classic JRPGs, Alchemica is entirely made with hand drawn pixel-art to emulate that retro look that we hold dear. Battles are drawn out in that classic turn-based style, while dungeons are randomly generated.

    Hare are some screenshots of the game for people who are curious.
    Screenshot_20170711-071317.jpg

    Screenshot_20170711-071337.jpg

    Screenshot_20170711-071437.jpg

    2016_06_12_21.39.18.png

    2016_06_13_12.40.56.png

     

    Where can I try Alchemica?

    If anyone here is interested to give it a try, here's the Google Play link: https://play.google.com/store/apps/details?id=com.gdi.crunchybit.alchemica

  22. Unlike some of the Hollywood flicks these days, where the mindless comedies are dwindling away at their attempts at getting famous, a mobile application does as good as less the user would have to use their mind on it. Introducing a lot of complexities in a mobile application might not be the best course of action to get your more users.

    Let’s take a look at some of the reasons, why you should work on keeping your application as simple as possible.

    Complex Technology Could Pose a Problem

    Making a mobile application is about creating an impeccable combination of technology and content that works beautifully. At least at the simplest level, a mobile application is just that. The perfect combination is what makes the business end of the deal possible. But when the balance in this combination gets disturbed, it creates problems. While technology makes the idea behind the application possible, it wouldn’t bode well with the end users if they have to deal with the complexity that comes with that technology. As a developer, you have to make your application simple enough for the users to not just understand, but really be interested in using the app. In order to make the app look less confusing, keep it simple.

    Simplicity Gains you More Time

    Or, you lose less time. Too many windows to open, too many tasks to get done - all in one app - it gets confusing, it seems like an eternity before the users see things actually getting done, and it looks messy too. And so, a clean interface always means an effective use of time and energy both, on the part of your end users. Simplicity is what brings efficiency to the whole experience of using any mobile application.
    When You Need to Keep Multiple People on the Same Page

    There are many applications out there which are usually used in groups of users - like the application Splitwise, which allows a group of friends to split money equally, telling each of them how much they owe every other friend, and how much everyone else owes them. These are classic examples of applications which need to be simple, because the chances of confusion here are abundant. The apps that are meant to bring about a level of organization into people’s lives - these are the kinds of apps that should never be complex. These are the apps that especially thrive on simplicity.

    To say that mobile applications have changed the way people operate today in their day-to-day lives, would be just about right. That makes it even more necessary for the developers to work harder on making simplicity on of the top features of every application that they design. Because not just the understanding, but the accessibility and more than a certain amount of usage too comes from how simple and clear the structure of the applications is. The road to success, undoubtedly starts with simplicity.

  23. Finalspace
    Latest Entry

    Well a lot had happened and it seems i have my confidence and motivation back for coding.

    So i decided to finish "unfinished" prototypes and games i have created in the past and then going from there.

    Right now i am working on a breakout prototype i made in UE4 with random generated maps, nice effects and other stuff.
    Looks like a project i may actually finish...

    That said i will focus on that for now only and not get distracted by other projects.

  24. JTippetts
    Latest Entry

    screen_2017_7_15_16_11_36.thumb.png.277f247aee4c8ecf132ad352d64af124.png

    screen_2017_7_15_16_50_15.thumb.png.44d77f3ca7de9052e10d8eba7d9245d3.png

     

    So, I ended up doing the "skirts" method I spoke of in the last post. And in conjunction with the default Urho3D water shader (with a few small tweaks, and more to come to eliminate artifacts on the corners of the water blocks) it actually looks pretty decent. The water animates a noise texture that ripples the ground beneath. It also uses a reflection texture (which I have set to black at the moment) if desired. I might tweak the water shader further, but for now I'm happy with it. I've also got all the small issues sorted out from the change to multi-level water. It wasn't a large change, but I was surprised at how many different parts of the code worked from the assumption that water was determined by elevation < 9. I thought I had contained it better than that, but I did get all the various spellcasting, pathfinding and object spawning oddities worked out.