Jump to content
  • Advertisement

Search the Community

Showing results for tags 'General'.

The search index is currently processing. Current results may not be complete.


More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

  • Audio
    • Music and Sound FX
  • Business
    • Business and Law
    • Career Development
    • Production and Management
  • Game Design
    • Game Design and Theory
    • Writing for Games
    • UX for Games
  • Industry
    • Interviews
    • Event Coverage
  • Programming
    • Artificial Intelligence
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Engines and Middleware
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
  • Archive

Categories

  • Audio
  • Visual Arts
  • Programming
  • Writing

Categories

  • Game Developers Conference
    • GDC 2017
    • GDC 2018
  • Power-Up Digital Games Conference
    • PDGC I: Words of Wisdom
    • PDGC II: The Devs Strike Back
    • PDGC III: Syntax Error

Forums

  • Audio
    • Music and Sound FX
  • Business
    • Games Career Development
    • Production and Management
    • Games Business and Law
  • Game Design
    • Game Design and Theory
    • Writing for Games
  • Programming
    • Artificial Intelligence
    • Engines and Middleware
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
    • 2D and 3D Art
    • Critique and Feedback
  • Community
    • GameDev Challenges
    • GDNet+ Member Forum
    • GDNet Lounge
    • GDNet Comments, Suggestions, and Ideas
    • Coding Horrors
    • Your Announcements
    • Hobby Project Classifieds
    • Indie Showcase
    • Article Writing
  • Affiliates
    • NeHe Productions
    • AngelCode
  • Topical
    • Virtual and Augmented Reality
    • News
  • Workshops
    • C# Workshop
    • CPP Workshop
    • Freehand Drawing Workshop
    • Hands-On Interactive Game Development
    • SICP Workshop
    • XNA 4.0 Workshop
  • Archive
    • Topical
    • Affiliates
    • Contests
    • Technical
  • GameDev Challenges's Topics
  • For Beginners's Forum

Calendars

  • Community Calendar
  • Games Industry Events
  • Game Jams
  • GameDev Challenges's Schedule

Blogs

There are no results to display.

There are no results to display.

Product Groups

  • GDNet+
  • Advertisements
  • GameDev Gear

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me


Website


Role


Twitter


Github


Twitch


Steam

Found 302 results

  1. Hi and thanks for reading, I have an issue with this reactive crosshair script, everything works fine until I start changing the offset. Give the script a go and you will see what I mean, when I do SetOffset(0f); it doesnt always set back to the origional state, if anyone can spot a fix I'd be super appreciative! using System.Collections; using System.Collections.Generic; using UnityEngine; public class ReactiveCrosshair : MonoBehaviour { [SerializeField] GameObject c_limb_prefab; private float center_offset = 0f; private float current_offset = 0f; private float max_offset = .5f; private int number_of_limbs = 4; private float limb_length = .05f; private float limb_width = .005f; private List<GameObject> c_limbs = new List<GameObject>(); public void SetupCrosshair(){ for (int i = 0; i < number_of_limbs; i++) { GameObject line_go = (GameObject)Instantiate (c_limb_prefab); line_go.transform.SetParent (this.transform); Vector3 limb_pos = new Vector3 (0f,0f,0f); //line_go.transform.position = limb_pos; line_go.transform.localPosition = limb_pos; LineRenderer line = line_go.GetComponent<LineRenderer>(); line.startWidth = limb_width; line.positionCount = 2; line.SetPosition (0, line_go.transform.localPosition + new Vector3(center_offset, 0f, 0f)); line.SetPosition (1, line_go.transform.localPosition + new Vector3(center_offset + limb_length, 0f, 0f)); line.useWorldSpace = false; c_limbs.Add(line_go.gameObject); } if (c_limbs != null) { OrientLimbs (); SetOffset (0f); } } public void OrientLimbs(){ for (int i = 0; i < c_limbs.Count; i++) { float rotation_step = 360f / (float)c_limbs.Count; c_limbs [i].transform.RotateAround (c_limbs[i].transform.position, c_limbs[i].transform.forward, 90f + (rotation_step * (float)i)); } } public void SetOffset(float _current_spread){ float offset = Mathf.Lerp (0f, max_offset, _current_spread); for (int i = 0; i < number_of_limbs; i++) { if (offset > current_offset) { Vector3 pos = c_limbs [i].transform.position + (c_limbs [i].transform.TransformDirection (Vector3.right) * offset); c_limbs [i].transform.position = pos; } if (offset < current_offset) { Vector3 pos = c_limbs [i].transform.position - (c_limbs [i].transform.TransformDirection (Vector3.right) * offset); c_limbs [i].transform.position = pos; } } Debug.Log ("SetOffset() offset: " + offset.ToString () + " _current_spread: " + _current_spread.ToString() + " localPos: " + c_limbs[1].transform.localPosition); current_offset = offset; } }
  2. After such an amazing E3, I feel reinvigorated. Gotta admit to feeling pretty jaded/apathetic about AAA gaming lately, but leave it to the Sony & Nintendo press conferences to remind me of why I love gaming in the first place. The hype I felt over the past couple days is the same feeling I want people to have for the things I'm working on someday. Unprecedented levels of polish, earnest interviews and announcements by hardworking developers, shocking surprises, gameplay to analyze, and jaw-dropping tournament moments... And at the heart of it all? Hours of fun promised by teams I know can deliver. I'm hype ya'll. Now I want to work hard to make sure starting next E3, I'll be there to show off something in person every year. See more thoughts on this at yotesgames.com
  3. Hi. I have pulled in five NuGet packages for my Visual Studio 2017 project, however when I build the project, VS spits out 10 .DLL and .XML files in the root of the binary folder, to do with the packages. Can't I shove them into a \packages folder so the user doesn't see these ugly resources next to the .exe file? I've Googled moving the packages but the only responses seem to be around moving the installation folder of the NuGet packages on the local machine, as opposed to where VS builds them to.
  4. worldzpoc

    ZPOC Blog #2

    BUILDING The building menu is now functional! Right now it only contains a couple of barricades that can be built, but we’ll get to adding more options to choose from soon. You can now place multiple proxies (ghosted-objects) at a time without having to constantly re-open the Build/Crafting menu. It even keeps them rotated to your desired rotation, because we care about your building experience. And we care about families. If you can’t place and build your barricades quickly, your family might get eaten. Vote for us. AI DISSIDENTS AND TASK MANAGEMENT As any parent of a teenager will tell you, sometimes when you nurture a person and they grow up to have a mind of their own, they can get a bit difficult to deal with. You tell them to do something so they do the opposite. Well, our Units may not yet have drivers licenses (another fun thing to look forward in the future!), but they sure are getting an attitude. Today after placing multiple barricades to be built, the units built a couple of them and then just wandered around in protest. It’s as if they’re tired of everyone (all of the other scripts) telling them what to do all the time.
  5. hello! so i had this idea of a game i wanted to make that i had in mind for years and i wanted to try to execute it (at least partiality). problem is, i don't really know what kind of game style this game can fall under and i don't really know where to start learning sources and design wise :/ . i want to create a management style game and all the controls the user has are through a menu of some sort similar to this (this particular example is from a game called '911 operator' by jutsu games): to find more information about how i can create such a game i really want to know what's the name of this style of game, mostly GUI controlled game. aside from that i'm looking for a bit of advice, which engine would be best for such a game? i'm fluent in C++,C# and python so any game engine you can throw at me is great! are there any good sources to learn from before jumping into this kind of game, tutorials of some sort perhaps? thanks so much to anyone who answers, this really means a lot to me!
  6. Getting REAL tired of this game not being close to finished. I admit to dying inside just a bit each passing week as I fall behind on the schedule I laid out just because the very first bullet point is the hardest pill to force down. Maybe I'm crazy and doing this wrong. Time to take a different route to the end. As for what exactly what that route is? You'll need to read the ending thoughts to this week's devlog to find out.
  7. Hey all I am available to do art projects for games. I will do them for FREE just for the experience. I have very simple requests/stipulations.,.1. I am not looking or wanting to be a full team member.2. You allow me to display my finished pieces in my ArtStation.com protfolio2. No pixel art, and no demons, dragons, or religion pieces.3. You are flexible in your time limits and art requirements.You can view samples of my painted art here >>> https://www.artstation.com/pdavidcunninghamYou can view my earliest scenery paintings here >>> https://circlestudios.deviantart.com/You can view samples of my coloring of others art here >>> https://davidcunningham.deviantart.com/If interested, email me at: davidcunningham@email.com
  8. Mae Garcia

    Text-Based RPG

    Hi, guys. I want to make an RPG text-based/interactive fiction game and I'm not that knowledgeable about this since I'm fairly new to making games. I haven't seen any thing like it yet either, so I wondered if making such a game is even possible. I've tinkered a bit with RPG Maker MV, but honestly I don't even know what engine I'm going to use. I already have a concept for my game, but I just need some advice on the matter. Hope for your help. Any input would be appreciated. Thanks!
  9. Not much was done in terms of progress this week since I took about 5 days off to basically see all my friends one last time at the local convention MegaCon before swearing to lock myself away until BGP's completion. In place of that there is tons of Pokemon news. A fan game was released and a bunch of new spinoffs were announced so there's lots of interesting things to reflect on and talk about on this week's blog.Read up on it here!
  10. Hello! I'm doing an A.I. course at my university, and searching on internet i learned about the GOAP A.I. system. I found it really interesting and I would like to learn more about others techniques. So I was wondering which A.I. system is used by the civilization saga (or at least in civilization IV/V/VI) but i'm not able to find anything about that. Does anyone know where i can find some infos or docs about A.I in Civ?
  11. Nexusrex

    Introduction!

    Hello and welcome to the first post in this blog! To introduce everything, I guess I'll be doing it in Q&A way: Who are you? D: I'm Nexusrex, a young Egyptian guy (15 years old), I was interested in game development since I was 9, started using GameMaker when I was around 10 I guess. Made a few little stuff then started NinjaCube. What is NinjaCube? 'NinjaCube: Finding Hatsune' is a simple action platformer. I did have some massive love for classics like Megaman (Especially the X, Zero, ZX series!), Castlevania, Ninja Gaiden and a lot others! I did choose the square art style because honestly I was (and still am) horrible at pixel art, so I found this style to be a bit interesting and yet, easy to animate! So, you just started this game? Nope! NinjaCube started almost two years ago, it started as a simple jump-n-shoot platformer without any level design or any good gameplay (That's what I think of ^^). After getting a youtuber to play it (Pistyization, many thanks to him!) and working a bit more on it, I realized that I had nothing to do. Yet people told me to change the camera (as it was too zoomed in) and to change the art due to the awful colour choices I had. So it took me a while to do that transition, I also had some tests and stuff so it stopped me totally from doing development. As you can see, the difference! So, are you working alone on this project? Well, I do the art, the programming/code, the level design and the gameplay stuff. But for the music, I couldn't do that so I worked with Caleb Cuzner, and he made a quite good work! You can get to listen through his youtube page What are your plans for finishing/expected time? Honestly I don't have a plan as I'm still in early stuff. But hopefully I wanna get the main set of levels done before September's start, so I could get something playable at a gamedev gathering that starts in that month. And that was all for today! I hope I can do some weekly posts, have fun and take care guys! : D
  12. Automated builds are a pretty important tool in a game developer's toolbox. If you're only testing your Unreal-based game in the editor (even in standalone mode), you're in for a rude awakening when new bugs pop up in a shipping build that you've never encountered before. You also don't want to manually package your game from the editor every time you want to test said shipping build, or to distribute it to your testers (or Steam for that matter). Unreal already provides a pretty robust build system, and it's very easy to use it in combination with build automation tools. My build system of choice is Gradle , since I use it pretty extensively in my backend Java and Scala work. It's pretty easy to learn, runs everywhere, and gives you a lot of powerful functionality right out of the gate. This won't be a Gradle tutorial necessarily, so you can familiarize yourself with how Gradle works via the documentation on their site. Primarily, I use Gradle to manage a version file in my game's Git repository, which is compiled into the game so that I have version information in Blueprint and C++ logic. I use that version to prevent out-of-date clients from connecting to newer servers, and having the version compiled in makes it a little more difficult for malicious clients to spoof that build number, as opposed to having it stored in one of the INI files. I also use Gradle to automate uploading my client build to Steam via the use of steamcmd. Unreal's command line build tool is known as the Unreal Automation Tool. Any time you package from the editor, or use the Unreal Frontend Tool, you're using UAT on the back end. Epic provides handy scripts in the Engine/Build/BatchFiles directory to make use of UAT from the command line, namely RunUAT.bat. Since it's just a batch file, I can call it from a Gradle build script very easily. Here's the Gradle task snippet I use to package and archive my client: task packageClientUAT(type: Exec) { workingDir = "[UnrealEngineDir]\\Engine\\Build\\BatchFiles" def projectDirSafe = project.projectDir.toString().replaceAll(/[\\]/) { m -> "\\\\" } def archiveDir = projectDirSafe + "\\\\Archive\\\\Client" def archiveDirFile = new File(archiveDir) if(!archiveDirFile.exists() && !archiveDirFile.mkdirs()) { throw new Exception("Could not create client archive directory.") } if(!new File(archiveDir + "\\\\WindowsClient").deleteDir()) { throw new Exception("Could not delete final client directory.") } commandLine "cmd", "/c", "RunUAT", "BuildCookRun", "-project=\"" + projectDirSafe + "\\\\[ProjectName].uproject\"", "-noP4", "-platform=Win64", "-clientconfig=Development", "-serverconfig=Development", "-cook", "-allmaps", "-build", "-stage", "-pak", "-archive", "-noeditor", "-archivedirectory=\"" + archiveDir + "\"" } My build.gradle file is in my project's directory, alongside the uproject file. This snippet will spit the packaged client out into [ProjectDir]\Archive\Client. For the versioning, I have two files that Gradle directly modifies. The first, a simple text file, just has a number in it. In my [ProjectName]\Source\[ProjectName] folder, I have a [ProjectName]Build.txt file with the current build number in it. Additionally, in that same folder, I have a C++ header file with the following in it: #pragma once #define [PROJECT]_MAJOR_VERSION 0 #define [PROJECT]_MINOR_VERSION 1 #define [PROJECT]_BUILD_NUMBER ### #define [PROJECT]_BUILD_STAGE "Pre-Alpha" Here's my Gradle task that increments the build number in that text file, and then replaces the value in the header file: task incrementVersion { doLast { def version = 0 def ProjectName = "[ProjectName]" def vfile = new File("Source\\" + ProjectName + "\\" + ProjectName + "Build.txt") if(vfile.exists()) { String versionContents = vfile.text version = Integer.parseInt(versionContents) } version += 1 vfile.text = version vfile = new File("Source\\" + ProjectName + "\\" + ProjectName + "Version.h") if(vfile.exists()) { String pname = ProjectName.toUpperCase() String versionContents = vfile.text versionContents = versionContents.replaceAll(/_BUILD_NUMBER ([0-9]+)/) { m -> "_BUILD_NUMBER " + version } vfile.text = versionContents } } } I manually edit the major and minor versions and the build stage as needed, since they don't need to update with every build. You can include that header into any C++ file that needs to know the build number, and I also have a few static methods in my game's Blueprint static library that wrap them so I can get the version numbers in Blueprint. I also have some tasks for automatically checking those files into the Git repository and committing them: task prepareVersion(type: Exec) { workingDir = project.projectDir.toString() commandLine "cmd", "/c", "git", "reset" } task stageVersion(type: Exec, dependsOn: prepareVersion) { workingDir = project.projectDir.toString() commandLine "cmd", "/c", "git", "add", project.projectDir.toString() + "\\Source\\[ProjectName]\\[ProjectName]Build.txt", project.projectDir.toString() + "\\Source\\[ProjectName]\\[ProjectName]Version.h" } task commitVersion(type: Exec, dependsOn: stageVersion) { workingDir = project.projectDir.toString() commandLine "cmd", "/c", "git", "commit", "-m", "\"Incrementing [ProjectName] version\"" } And here's the task I use to actually push it to Steam: task pushBuildSteam(type: Exec) { doFirst { println "Pushing build to Steam..." } workingDir = "[SteamworksDir]\\sdk\\tools\\ContentBuilder" commandLine "cmd", "/c", "builder\\steamcmd.exe", "+set_steam_guard_code", "[steam_guard_code]", "+login", "\"[username]\"", "\"[password]\"", "+run_app_build", "..\\scripts\\[CorrectVDFFile].vdf", "+quit" } You can also spit out a generated VDF file with the build number in the build's description so that it'll show up in SteamPipe. I have a single Gradle task I run that increments the build number, checks in those version files, packages both the client and server, and then uploads the packaged client to Steam. Another great thing about Gradle is that Jenkins has a solid plugin for it, so you can use Jenkins to set up a nice continuous integration pipeline for your game to push builds out regularly, which you absolutely should do if you're working with a team.
  13. We are proud to announce our upcoming cryptocurrency mining simulation game Blockchain Tycoon. We are working on to make it as realistic as possible. For example, by use of real life values and algorithms, you can earn same amount of coins as in real life. Also, the electricity and power calculations varies by warehouse location. We are also working on a simulated world economy for coin prices and world mining ecosystem which effects overall coin earnings. The game is designed to be played by absolute beginners and experts on the topics of blockchain and cryptocurrencies and aim to give you a better understanding of the cryptocurrency mining. Here is a detailed shot of the one of the warehouses: We are planning an Early Access release for June. (Steam: http://store.steampowered.com/app/824450/Blockchain_Tycoon/) Steam Trailer:
  14. Hi there. I'm looking for some quick opinions, advice or other comments on my custom engine architecture. For better or for worse, I have ended up with an ECS engine. I didn't intend to go this way, but countless searched through Google and the forum seem to confirm that this is the case. I have entities (mere Ids), components (pure data) and systems (holding raw resources and functionality) to operate on them. To be honest, I'm fairly happy with it. However, I have yet to implement any actual logic into my 'game', and have been looking around for details on the various ways of handling interactivity, specifically, interactively between entities and components. A topic that comes up a lot is events and event queues. I have not liked these. I don't want to add functionality to entities or components, and I don't like the idea of callbacks or event calling firing all over the place. So, I have been puzzling over this for the last two or so days. Eventually, I gave up on the musing and came to accept that some kind of event system is going to be needed. So, I had another look at the bitSquid blog (recommended on this forum), and something occurred to me. Isn't an event really just another form of entity? If it isn't, why isn't it? I also realised that I already have something pretty similar running in my engine now. Specifically, my (admitted quite naive) implementation works more or less like this. The scene hands a list of physicalComponents and their corresponding placementComponents, and the collisionDetection sub-system iterates through them, looking for collisions. If it finds one, it creates a collision, adds it to the list, and moves on to the next one. Once it is finished, the collisionResolution sub-system goes through the list, and handles the collisions - again, currently very naively, by bouncing the objects off of one another. So, I am wondering if I can just use this same approach to handle logical interactions. Entities with logical requirements have a collection of components related to interactivity (the range, the effect, and so on), and the various sub-systems iterate through potential candidates. If it notices an interaction, it creates an interactionEntity (with the necessary data) and the interactions are processed by the next sub-system. I guess I'm looking for some feedback on this idea before I start implementing it. The hope i for more granularity in the components, and the ability to add a logical scripting system which combines various components into potential interactions, and omits the need for any kind of event system. Or am I just repeating the general idea of events and event queues in a slightly more complicated way? Additionally, any comments or commentary on this approach (ECS, and so on), would be very gratefully received. I've pretty much run out of resources at this point. Regards, Simon
  15. After almost 2 years of 90+ hour work weeks, the exciting new game Towards The Pantheon is out now on Steam & Itch.io! Steam: Itch.io: https://connorort.itch.io/towardsthepantheon Towards The Pantheon is a turn based 2D RPG with unique twists on the classic formula. Gone are genre standards of elemental types, elixirs, elves, inns, and generic love stories. Instead players of Towards The Pantheon will ride hamsters, journey through a survival horror inspired mansion, collect dead memories, eat copious amounts of sushi, and partake in regular chats around the campfire. In Towards The Pantheon, a group known as The Sworn Light have been gaining power throughout the world through divide and conquer tactics. While the humans, felines, electropunks, and ghosts argue amongst themselves, The Sworn Light are taking advantage of each situation in order to take ultimate control. One day Keltoi village chief Wuotan summons his strongest warrior Freyja to embark on a long and dangerous journey. Her mission is to trek towards The Pantheon to defeat the source of The Sworn Light before the world falls into chaos. Along the way Freyja and her party will battle deadly enemies, make new friends, and encountered long forgotten horrors! Features include: Over 10 hours of gameplay including sidequests and myriads of secrets. Unlockable NewGame+ mode and cheat codes for additional replay value. Ability to switch between party members in the overworld to use their unique mechanics. An eclectic original soundtrack consisting of over 65 songs which incorporate elements from orchestral, noise, drone, breakbeat, and chiptune genres. A massive fully connected overworld with the ability to ride Speedsters to cut down on backtracking. Turn based combat system where each character has unique battle stats and mechanics. Collectible cards and combos found throughout the world that can be used during battle. More than 10 regions to explore including lush forests, cities full of kitties, electropunk metropolises, barren wastelands, and a dark mysterious mansion. Dialog and support systems that allow for further character development and stat boosts. A unique and complex overarching story line that ties together all subplots and backstories. Over 45 unique enemies and a dozen boss battles. We hope you enjoy the game! Towards The Pantheon on social media: Facebook, Twitter, Tumblr, Instagram, IndieDB, Twitch, Google+
  16. Are you considering developing a mobile game? If you want to be successful, you should avoid making the most common mistakes. Trying to build a game without figuring out the right approach is a recipe for disaster. There are experienced developers like MyIsaak from Sweden, an expert in C# and Unity game development who frequently livestreams his Diablo III Board game development process. The more you learn from professionals like him, who have gone through the processes, the faster you can avoid making the common game development mistakes. Here are the top 5 game developments mistakes to avoid. 1. Ignoring the target group Creating a game without properly studying your target group is a huge barrier that will keep it from being downloaded and played. Who are you building the game for? What are their main interests? What activities do they like participating in? Can the target group afford the gaming app? Does your target audience use iOS or Android operating system? Seeking answers to the above questions and others can assist in correctly identifying your target group. Consequently, you can design its functionalities around their preferences. Just like an ice cream vendor is likely to set up shop at the beach during summer, you should focus on consumers whose behaviors are likely to motivate them to play your game. For example, if you want to create a gun shooting game, you can target college-educated men in their 20s and 30s, while targeting other demographic groups secondarily. 2. Failure to study the competitors To create a successful game that will increase positive reviews and retention, you should analyze the strengths and weaknesses of your competitors. Studying your competition will allow you to understand your capabilities to match or surpass the consumer demand for your mobile or web-based game. If you fail to do it, you will miss the opportunity to fill the actual needs in the gaming industry and correct the mistakes made by the developers in your niche. You should ask questions like “What is their target audience?” “How many downloads do their gaming app receive per month?” “What resources do they have?”. Answering such questions will give you a good idea of the abilities of your competition, the feasibility of competing with them, and the kind of strategies to adopt to out-compete them. Importantly, instead of copying the strategies of your competitors, develop a game that is unique and provides an added value to users. 3. Design failure When building a mobile or a web-based game, it’s essential that you employ a unique art style and visually appealing design—without any unnecessary sophistication. People are attracted to games based on the user interface design and intuitiveness. So, instead of spending a lot of time trying to write elegant and complicated lines of code, take your time to provide a better design. No one will download a game because its code is beautiful. People download games to play them. And, the design of the game plays a critical part in assisting them to make the download decision. 4. Trying to do everything If you try to code, develop 3D models, create animations, do voice-overs—all by yourself—then you are likely to create an unsuccessful game. The secret to succeeding is to complete tasks that align with your core competencies and outsource the rest of the work. Learn how to divide your work to other experts and save yourself the headaches. You should also avoid trying to reinvent the wheel. Instead of trying to do everything by yourself, go for robust tools available out there that can make your life easier. Trying to build something that is already provided in the open source community will consume a lot of your development time and make you feel frustrated. Furthermore, do not be the beta tester of your own game. If you request someone else to do the beta testing, you’ll get useful outside perspective that will assist in discovering some hidden issues. 5. Having unrealistic expectations Unrealistic expectations are very dangerous because they set your game development career up for failure. Do not put your expectations so high such that you force somethings to work your way. For example, dreaming too big can make you include too many rewards in your game. As much as rewards are pivotal for improving engagement and keeping users motivated, gamers will not take you seriously if you incorporate rewards in every little achievement they make. Instead, you should select specific rewards for specific checkpoints; this way, the players will feel that they’ve made major milestones. Conclusion The mistakes discussed in this article have made several game developers to be unsuccessful in their careers. So, be cautious and keep your head high so that you don’t fall into the same trap. The best way to avoid making the common mistakes is through learning how to build games from the experts. Who knows? You could develop the next big game in the industry.
  17. If you are a software developer working in the video game industry and wondering what else you could do to improve the quality of your product or make the development process easier and you don't use static analysis – it's just the right time to start doing so. You doubt that? OK, I'll try to convince you. And if you are just looking to see what coding mistakes are common with video-game and game-engine developers, then you're, again, at the right place: I have picked the most interesting ones for you. Why you should use static analysis Although video-game development includes a lot of steps, coding remains one of the basic ones. Even if you don't write thousands of code lines, you have to use various tools whose quality determines how comfortable the process is and what the ultimate result will be. If you are a developer of such tools (such as game engines), this shouldn't sound new to you. Why is static analysis useful in software development in general? The main reasons are as follows: Bugs grow costlier and more difficult to fix over time. One of the principal advantages of static analysis is detecting bugs at early development stages (you can find an error when code writing). Therefore, by using static analysis, you could make the development process easier both for your coworkers and yourself, detecting and fixing lots of bugs before they become a headache. Static analysis tools can recognize a great variety of bug patterns (copy-paste, typos, incorrect use of functions, etc.). Static analysis is generally good at detecting those defects that defy dynamic analysis. However, the opposite is also true. Negative side effects of static analysis (such as false positives) are usually 'smoothed out' through means provided by the developers of powerful analyzers. These means include various mechanisms of warning suppression (individually, by pattern, and so on), switching off irrelevant diagnostics, and excluding files and folders from analysis. By properly tweaking the analyzer settings, you can reduce the amount of 'noise' greatly. As my colleague Andrey Karpov has shown in the article about the check of EFL Core Libraries, tweaking the settings helps cut down the number of false positives to 10-15% at most. But it's all theory, and you are probably interested in real-life examples. Well then, I've got some. Static analysis in Unreal Engine If you have read this far, I assume you don't need me telling you about Unreal Engine or the Epic Games company – and if you don't hold these guys in high regard, I wonder whom you do. The PVS-Studio team has cooperated with Epic Games a few times to help them adopt static analysis in their project (Unreal Engine) and fix bugs and false positives issued by the analyzer. I'm sure both parties found this experience interesting and rewarding. One of the effects of this cooperation was adding a special flag into Unreal Engine allowing the developers to conveniently integrate static analysis into the build system of Unreal Engine projects. The idea is simple: the guys do care about the quality of their code and adopt various techniques available to maintain it, static analysis being one of them. John Carmack on static analysis John Carmack, one of the most renowned video-game developers, once called the adoption of static analysis one of his most important accomplishments as a programmer: "The most important thing I have done as a programmer in recent years is to aggressively pursue static code analysis." The next time you hear someone say that static analysis is a tool for newbies, show them this quote. Carmack described his experience in this article, which I strongly recommend checking out – both for motivation and general knowledge. Bugs found in video games and game engines with static analysis One of the best ways to prove that static analysis is a useful method is probably through examples showing it in action. That's what the PVS-Studio team does while checking open-source projects. It's a practice that everyone benefits from: The project authors get a bug report and a chance to fix the defects. Ideally, it should be done in quite a different way, though: they should run the analyzer and check the warnings on their own rather than fix them relying on someone else's log or article. It matters, if only because the authors of articles might miss some important details or inadvertently focus on bugs that aren't much critical to the project. The analyzer developers can use the analysis results as the basis for improving the tool, as well as demonstrating its bug-detecting capabilities. The readers learn about bug patterns, gain experience, and get started with static analysis. So, isn't that proof of the effectiveness of this approach? Teams already using static analysis While some are pondering introducing static analysis into their development process, others have long been using and benefiting from it! These are, among others, Rocksteady, Epic Games, ZeniMax Media, Oculus, Codemasters, Wargaming (source). Top 10 software bugs in video-game industry I should point right off that this is not some ultimate top list, but simply bugs which were found by PVS-Studio in video games and game engines and which I found most interesting. As usual, I recommend trying to find the bug in each example on your own first and only then go on reading the warning and my comments. You'll enjoy the article more that way. Tenth place Source: Anomalies in X-Ray Engine The tenth place is given to the bug in X-Ray Engine employed by the S.T.A.L.K.E.R game series. If you played them, you surely remember many of funny (and not quite funny) bugs they had. This is especially true for S.T.A.L.K.E.R.: Clear Sky, which was impossible to play without patches (I still remember the bug that 'killed' all my saves). The analysis revealed there were many bugs indeed. Here's one of them. BOOL CActor::net_Spawn(CSE_Abstract* DC) { .... m_States.empty(); .... } PVS-Studio warning: V530 The return value of function 'empty' is required to be utilized. The problem is quite simple: the programmer is not using the logical value returned by the empty method describing whether the container is empty or not. Since the expression contains nothing but a method call, I assume the programmer intended to clear the container but called the empty method instead of clear by mistake. You may argue that this bug is too plain for a Top-10 list, but that's the nice thing about it! Even though it looks straightforward to someone not involved in writing this code, 'plain' bugs like that still appear (and get caught) in various projects. Ninth place Source: Long-Awaited Check of CryEngine V Going on with bugs in game engines. This time it's a code fragment from CryEngine V. The number of bugs I have encountered in games based on this engine was not as large as in games based on X-Ray Engine, but it turns out it has plenty of suspicious fragments too. void CCryDXGLDeviceContext:: OMGetBlendState(...., FLOAT BlendFactor[4], ....) { CCryDXGLBlendState::ToInterface(ppBlendState, m_spBlendState); if ((*ppBlendState) != NULL) (*ppBlendState)->AddRef(); BlendFactor[0] = m_auBlendFactor[0]; BlendFactor[1] = m_auBlendFactor[1]; BlendFactor[2] = m_auBlendFactor[2]; BlendFactor[2] = m_auBlendFactor[3]; *pSampleMask = m_uSampleMask; } PVS-Studio warning: V519 The 'BlendFactor[2]' variable is assigned values twice successively. Perhaps this is a mistake. As we mentioned many times in our articles, no one is safe from mistyping. Practice has also shown more than once that static analysis is very good at detecting copy-paste-related mistakes and typos. In the code above, the values of the m_auBlendFactor array are copied to the BlendFactor array, but the programmer made a mistake by writing BlendFactor[2] twice. As a result, the value at m_auBlendFactor[3] is written to BlendFactor[2], while the value at BlendFactor[3] remains unchanged. Eighth place Source: Unicorn in Space: Analyzing the Source Code of 'Space Engineers' Let's change course a bit and take a look at some C# code. What we've got here is an example from the Space Engineers project, a 'sandbox' game about building and maintaining various structures in space. I haven't played it myself, but one guy said in the comments, "I'm not much surprised at the results ". Well, we did manage to find some bugs worth mentioning, and here's two of them. public void Init(string cueName) { .... if (m_arcade.Hash == MyStringHash.NullOrEmpty && m_realistic.Hash == MyStringHash.NullOrEmpty) MySandboxGame.Log.WriteLine(string.Format( "Could not find any sound for '{0}'", cueName)); else { if (m_arcade.IsNull) string.Format( "Could not find arcade sound for '{0}'", cueName); if (m_realistic.IsNull) string.Format( "Could not find realistic sound for '{0}'", cueName); } } PVS-Studio warnings: V3010 The return value of function 'Format' is required to be utilized. V3010 The return value of function 'Format' is required to be utilized. As you can see, it's a common problem, both in C++-code and C#-code, where programmers ignore methods' return values. The String.Format method forms the resulting string based on the format string and objects to substitute and then returns it. In the code above, the else-branch contains two string.Format calls, but their return values are never used. It looks like the programmer intended to log these messages in the same way as they did in the then-branch of the if statement using the MySandboxGame.Log.WriteLine method. Seventh place Source: Analyzing the Quake III Arena GPL project Did I tell you already that static analysis is good at detecting typos? Well, here's one more example. void Terrain_AddMovePoint(....) { .... x = ( v[ 0 ] - p->origin[ 0 ] ) / p->scale_x; y = ( v[ 1 ] - p->origin[ 1 ] ) / p->scale_x; .... } PVS-Studio warning: V537 Consider reviewing the correctness of 'scale_x' item's usage. The variables x and y are assigned values, yet both expressions contain the p->scale_x subexpression, which doesn't look right. It seems the second subexpression should be p->scale_y instead. Sixth place Source: Checking the Unity C# Source Code Unity Technologies recently made the code of their proprietary game engine, Unity, available to the public, so we couldn't ignore the event. The check revealed a lot of interesting code fragments; here's one of them: public override bool IsValid() { .... return base.IsValid() && (pageSize >= 1 || pageSize <= 1000) && totalFilters <= 10; } PVS-Studio warning: V3063 A part of conditional expression is always true if it is evaluated: pageSize <= 1000. What we have here is an incorrect check of the range of pageSize. The programmer must have intended to check that the pageSize value was within the range [1; 1000] but made a sad mistake by typing the '||' operator instead of '&&'. The subexpression actually checks nothing. Fifth place Source: Discussing Errors in Unity3D's Open-Source Components This place was given to a nice bug found in Unity3D's components. The article mentioned above was written a year prior to revealing Unity's source code, but there already were interesting defects to find there at the time. public static CrawledMemorySnapshot Unpack(....) { .... var result = new CrawledMemorySnapshot { .... staticFields = packedSnapshot.typeDescriptions .Where(t => t.staticFieldBytes != null & t.staticFieldBytes.Length > 0) .Select(t => UnpackStaticFields(t)) .ToArray() .... }; .... } PVS-Studio warning: V3080 Possible null dereference. Consider inspecting 't.staticFieldBytes'. Note the lambda expression passed as an argument to the Where method. The code suggests that the typeDescriptions collection could contain elements whose staticFieldBytes member could be null – hence the check staticFieldBytes != null before accessing the Length property. However, the programmer mixed up the '&' and '&&' operators. It means that no matter the result of the left expression (true/false), the right one will also be evaluated, causing a NullReferenceException to be thrown when accessing the Length property if staticFieldBytes == null. Using the '&&' operator could help avoid this because the right expression won't be evaluated if staticFieldBytes == null. Although Unity was the only engine to hit this top list twice, it doesn't prevent enthusiasts from building wonderful games on it. Including one(s) about fighting bugs. Fourth place Source: Analysis of Godot Engine's Source Code Sometimes we come across interesting cases that have to do with missing keywords. For example, an exception object is created but never used because the programmer forgot to add the throw keyword. Such errors are found both in C# projects and C++ projects. There was one missing keyword in Godot Engine as well. Variant Variant::get(const Variant& p_index, bool *r_valid) const { .... if (ie.type == InputEvent::ACTION) { if (str =="action") { valid=true; return ie.action.action; } else if (str == "pressed") { valid=true; ie.action.pressed; } } .... } PVS-Studio warning: V607 Ownerless expression 'ie.action.pressed'. In the given code fragment it is obvious that a programmer wanted to return a certain value of the Variant type, depending on the values ie.type and str. Yet only one of the return statements – return ie.action.action; – is written properly, while the other is lacking the return operator, which prevents the needed value from returning and forces the method to keep executing. Third place Source: PVS-Studio: analyzing Doom 3 code Now we've reached the Top-3 section. The third place is awarded to a small code fragment of Doom 3's source code. As I already said, the fact that a bug may look straightforward to an outside observer and make you wonder how one could have made such a mistake at all shouldn't be confusing: there are actually all sorts of bugs to be found in the field... void Sys_GetCurrentMemoryStatus( sysMemoryStats_t &stats ) { .... memset( &statex, sizeof( statex ), 0 ); .... } PVS-Studio warning: V575 The 'memset' function processes '0' elements. Inspect the third argument. To figure this error out, we should recall the signature of the memset function: void* memset(void* dest, int ch, size_t count); If you compare it with the call above, you'll notice that the last two arguments are swapped; as a result, some memory block that was meant to be cleared will stay unchanged. Second place The second place is taken by a bug found in the code of the Xenko game engine written in C#. Source: Catching Errors in the Xenko Game Engine private static ImageDescription CreateDescription(TextureDimension dimension, int width, int height, int depth, ....) { .... } public static Image New3D(int width, int height, int depth, ....) { return new Image(CreateDescription(TextureDimension.Texture3D, width, width, depth, mipMapCount, format, 1), dataPointer, 0, null, false); } PVS-Studio warning: V3065 Parameter 'height' is not utilized inside method's body. The programmer made a mistake when passing the arguments to the CreateDescription method. If you look at its signature, you'll see that the second, third, and fourth parameters are named width, height, and depth, respectively. But the call passes the arguments width, width, and depth. Looks strange, doesn't it? The analyzer, too, found it strange enough to point it out. First place Source: A Long-Awaited Check of Unreal Engine 4 This Top-10 list is led by a bug from Unreal Engine. Just like it was with the leader of "Top 10 Bugs in the C++ Projects of 2017", I knew this bug should be given the first place the very moment I saw it. bool VertInfluencedByActiveBone( FParticleEmitterInstance* Owner, USkeletalMeshComponent* InSkelMeshComponent, int32 InVertexIndex, int32* OutBoneIndex = NULL); void UParticleModuleLocationSkelVertSurface::Spawn(....) { .... int32 BoneIndex1, BoneIndex2, BoneIndex3; BoneIndex1 = BoneIndex2 = BoneIndex3 = INDEX_NONE; if(!VertInfluencedByActiveBone( Owner, SourceComponent, VertIndex[0], &BoneIndex1) && !VertInfluencedByActiveBone( Owner, SourceComponent, VertIndex[1], &BoneIndex2) && !VertInfluencedByActiveBone( Owner, SourceComponent, VertIndex[2]) &BoneIndex3) { .... } PVS-Studio warning: V564 The '&' operator is applied to bool type value. You've probably forgotten to include parentheses or intended to use the '&&' operator. I wouldn't be surprised if you read the warning, looked at the code, and wondered, "Well, where's the '&' used instead of '&&'?" But if we simplify the conditional expression of the if statement, keeping in mind that the last parameter of the VertInfluencedByActiveBone function has a default value, this will clear it all up: if (!foo(....) && !foo(....) && !foo(....) & arg) Take a close look at the last subexpression: !VertInfluencedByActiveBone(Owner, SourceComponent, VertIndex[2]) &BoneIndex3 This parameter with the default value has messed things up: but for this value, the code would have never compiled at all. But since it's there, the code compiles successfully and the bug blends in as successfully. It's this suspicious fragment that the analyzer spotted – the infix operation '&' with the left operand of type bool and the right operand of type int32. Conclusion I hope I have convinced you that static analysis is a very useful tool when developing video games and game engines, and one more option to help you improve the quality of your code (and thus of the final product). If you are a video game industry developer, you ought to tell your coworkers about static analysis and refer them to this article. Wondering where to start? Start with PVS-Studio.
  18. RidiculousName

    Advice Simple Windows C++ IDE

    I'm near the end of a college course for C++. During class we focused exclusively on C++ programming in a linux environment. I've tried MS Visual Studio, but it seems like learning how to use something that complex is going to be more trouble than I want to deal with right now. Can someone recommend me a good and easy to learn/use C++ windows IDE? I use windows 10.
  19. Marc Manhart

    Alternative for Overlap2D

    It seems like the project is dead and is no longer maintained. Since I'm working on a project/game right now which imports the exported json from Overlap, I have to search for an alternative software. Do anybody know something like that?
  20. Can't believe I'm still working on recreating these dang #BattleGemPonies menus! I feel horrible for taking so much longer than I keep promising out loud, but I can feel in my bones that delaying is the right thing to do... Also, finally got a response from BronyCon on if the panel is happening or not.See more on GameDev Log #169: www.yotesgames.com (And with this, I'm officially caught up to present day blogs!)
  21. Ann, I made a video with subtitles about game developers who made successful projects and earned millions dollars. Than you are worse than them?
  22. I'm not sure if you guys can help me, but I figured an entity-component OOP design would be in your realm of experience. I want some feedback on it. Lets suppose that I have the following (it's mostly pseudo code): A header type of file: public: Button (textLabel, position); private: GuiComponent label; GuiSystem gui; A implementation type of file: // Event hookers / hooks the events to the corresponding functions: label.Clicked(onClickObj); // label is actually a pre-existing object that I can hook an event to. Now whenever user clicks, onClickObj. executes. function Button(text, position){ label.Text = text; label.Color = "Blue"; label.Position = position; } function onClickDo(){ gui.ChangeColor(label,"Red"); // Passes in our label obj. that we have in private and set its color to red! gui.ChangeText(label, "Button was clicked!"); pause(2); gui.ChangeText(label, "Button"); // Changes text back to "Button." } This is basically a button that whenever is clicked, turns red and displays "Button was clicked!" which then turns back to "Button." It's just a simple example. Label is a pre-existing object and I can already manipulate it. I just want to place a whole ECS system on it. GuiSystem is a container or class blueprint full of methods that can be used on the GuiComponent such as flash color a.k.a makes the label flash random colors, etc. Then whenever I make something really custom like a server menu and I need buttons, all I need to do is create a custom class blueprint and inherit the Button class above. Then I replace/overwrite some of the functions and bam, I have a server menu. I would add more GuiComponent labels if needed too. Is this generally how gui-design-architecture works? To show you the example in detail for instance, lets say I want a server menu. I create class blueprint detailing all member functions a server menu would do e.g: AddServer() which adds server buttons, ConnectServer() which calls something like ServerSystem.Connect(server) and connects you to the server, etc. I would then override the click function onClickDo() to do the ConnectServer() type of function. Right? ------------------------------------------------------------------------------------------------------------------------------------- I know guis usually don't use ECS but I already have a gui class blueprint premade with all the properties and such and abilities to connect events. I'm just adding ECS ontop of it and putting functions in the GuiSystem container and when/if that container becomes full or bloated, I can split it off like GuiSystem.Effects.CreateEffect(label, effect) and etc. Do I have the idea of ECS on right? Thanks for reading!
  23. Hey. I'm new on this forum. I and my friends create our first game. I'm drawing graphics and doing animation for our game. Well, I want to ask how much the artist or animator earns in the gaming industry. I plan to move to the US later this year. I want to try work in the gaming industry. I am from Russia.
  24. Blazing Pitchforks Recruiting: 2D Artist/UI Designer (If Skilled At Just One You May Be Accepted! Contact Us For More Info!) Payment Methods: Get Copy Of Game When Finished, Payment Will Be Determined By The Amount Of Work Put In And Can Either Be In The Form Of A One Time Payment Or A Rev Share This Will Be Paid When The Game Makes A Net Profit Open To Discussion Requirements: - Need To Have A Reasonable Skill With 2D Art & Be Willing To Learn (Experience With Low Poly Art Is A Plus) - Speak Fluent English - Work Well With A Team - Be Responsive Description: Blazing Pitchforks is a multiplayer game aimed at around online games of 4-8 people, there are two teams 'The Farmers' and 'The Animals', players will be constantly completing objectives and trying to outsmart the other team before the time runs out in order to win. The current project has been going on for over a year and we are really looking to get a reasonable demo working for a potential kickstarter campaign. We need a re-do of most of the UI as we look towards releasing in early access on steam we will also need promotional art and art for our website. Our current team consists of a Programmer, 3D Artist, 3D Animator, 2 Sound Effects Designers, Musician, Community Manager, Community Moderators and some Quality Assurance Testers. Location: You can join our project no matter where you are from our current team is from varying places mainly in Australia. More information will be given about the project upon acceptance or contact. Contact Me Via Direct Message Or Email Me At: jackdonaldson005@gmail.com Join Our Discord Server If You Wish To Talk More https://discord.gg/Axbwgwv This is a serious project and if you put in the work and help us you will be rewarded. This is not just a project that will die as a large amount of our team is heavily invested and we aim to complete this game and eventually sell it.
  25. I'm an indie game development from Serbia. And yes, I'm shamelessly promoting my own open source project... As stated in the title, it's a library of data structures for constant time insertion, erasure, lookup, and fastest possible iteration. These data structures I needed on many occasions while writing both engine and gameplay code. I couldn't find any open source implementation online, so I decided to implement them myself. You can look at the code here : https://github.com/im95able/Rea
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!