Blogs

Our community blogs

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

    With a lovely retro art-style, "survive-as-long-as-you-can" single-room infinite runner INFINIROOM has some of the most unique yet simple gameplay I've seen in months. 

    Although you can play with the main character forever, monetization happens through a single $3 IAP without which you are limited in the amount of times you can play with the other characters unless you watch an ad, or survive for more than 30 seconds - both of which gives you extra "tickets" to play with any character.

    My thoughts on INFINIROOM:


    Google Play: https://play.google.com/store/apps/details?id=com.lonebot.infiniroom&hl=en
    iOS: https://itunes.apple.com/us/app/infiniroom/id1222895316?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

  2. I made some progress: more enemy types and scoring.

    Each enemy has a different score value depending on how much danger they represents.
    Each time you take a weapon orb you get a new weapon, good or bad.
    It increments the score multiplier and reset it's timer.
    When the multiplier timer reach its end, the multiplier is decremented. 

    dot5.png

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

    continues...

    thanks for reading

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

  5. This is the latest release of the Fooliery Framework make with pygame ( pygame.org ).Made for python 3.6 and higher.

    If you found the last release helpful, then this will blow your mind.  Here is everything you need to make a platformer.  Dozens of dozens of new 

    functions have been added for everything from exact game timing, text boxes, answer boxes, some functions to help you save you game status. and 

    much more.

    Would really appreciate any feed back on this.  Also looking to join a team or company so if yah here anything ;)

    Fooliery_Framework_v_4-master.zip

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

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

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

     

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

    Migrating Enterprise

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

    Pushing objects

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

    Looping or events?

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


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


    View the full article

  10. 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
    • 67
      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. 

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

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

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

    From a technical limitation:

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

    Some actual technical problems:

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

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

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

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

    Edit, Important Note:

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

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

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

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

    Step 1: Changing the Game to Fit our Mobile Limitations

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

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

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

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

    Anyways, back on topic.

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

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

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

    Step 2: Implementing Our New Designs

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

    Step 2.1: Placing the Character in the Middle

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

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

    center-location-1024x394.png

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

    Step 2.2: Making the Enemies Weaker

    Next up, let’s make the enemies weaker.

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

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

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

    Here’s how we change our health:

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

    change-zombie-health-to-4.png

    Do the same change with the other 2 prefabs.

    Step 2.3: Remove our ammo system

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

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

    Here are my changes:

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

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

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

    Looking through the Changes

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

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

    There were only 2 changes that were made:

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

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

    There are 2 things that will happen when we shoot:

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

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

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

    Step 2.4: Changing the ScreenManager script

    One more thing we need to do before we leave.

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

    Let’s just get rid of it:

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

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

    Conclusion

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

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

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

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

    Day 37 | 100 Days of VR | Day 39

    Home

    • 2
      entries
    • 3
      comments
    • 148
      views

    Recent Entries

    Hey,

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

    Looks like we will stick with Windows and Linux.

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

    Tutorial :

     

     

    Mask Presentation:

    Gameplay.

     

     

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

    hope you will like it.

    a.png

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

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

  14. Hi everyone!

     

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

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

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

     
    731331_98064c5e875b4311b6067153ecad7c42~

    Web Summit

     

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

     

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

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

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

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

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

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

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

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

    Kat-Logo-for-blog.jpg.98658dd085cb4bb995d658460c6540a3.jpg

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

    Kat-Icon-examples.thumb.jpg.60254fc1528162ecc3ac8ac20a1a397b.jpg

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

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

    Kat-UI-customization.thumb.jpg.a24c1e092566233eacd623dc62cc8040.jpg

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

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

    See more over at our web site: http://www.somethingatemyalien.com/

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

    1. Storage capacity

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

    2. Battery capacity

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

    3. Screen

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

    4. Radio

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

    5. Lossless audio files

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

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

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

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

    Without further adieu, these are some screenshots of act2!


     

    Hell Warders 11_14_2017 11_26_24 AM.png

    Hell Warders 11_14_2017 11_28_43 AM.png

    Hell Warders 11_14_2017 11_28_51 AM.png

    Hell Warders 11_14_2017 11_29_22 AM.png

    Hell Warders 11_14_2017 11_29_37 AM.png

    Hell Warders 11_14_2017 11_30_22 AM.png

    Hell Warders 11_14_2017 11_30_32 AM.png

  19. uZombie (1.0.8)

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

    Download uZombie on your android device here

     

    Whats new?

    New game mode

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

    More buildings!

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

    New environments

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

    55f3af.pngnew5.png.14254aabc670fafadd3caea9b3cef259.pngnew3.png.8dea060dae72b49c09b025aa32ca30ce.png

     

     

     

     

    new2.png

    new4.png

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

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

    Skills

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

    skills

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

    Health

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

    healthOld

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

    healthNew

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

    Renown

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

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

    renown

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

    Loot

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

    loot

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

    Scaffolding

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

    Some background.

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

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

    scaffolding

    Hauling

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

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

    end

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

    • 3
      entries
    • 1
      comment
    • 233
      views

    Recent Entries

    ZeroSkills
    Latest Entry

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

    Freakman is available on Google play; https://play.google.com/store/apps/details?id=com.zeroSkills.FreakmanScreenshot_20171111-120836.thumb.png.daab66371717cfdabfe090472d0e1deb.png

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

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

    Strong inspiration from great painters in art

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

    Temple of Skulls

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

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

    Cover.thumb.png.17e2ece907fe09e3020a9ed2702a174c.png

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

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

    And finally here is our steam trailer and steam page:

    http://store.steampowered.com/app/320330/Earthworms/