News: My 2-Year Anniversary of Game Programming and Project Updates

Hello everyone,

This summer I am excited to announce I have finally been working on building my very own Java 2.5D Raycaster game engine with my friend Steven Bajmakovich. I can’t believe it has been two years since I began my game development journey with Steven, where we developed our very first game called X-Squadron from the ground up using the Unity game engine. I’m also super thrilled to announce that we will be releasing the updated X-Squadron game at the end of this summer with a whole new mission mode filled with waves of enemies and bosses! There will also be an information log in game to learn about the enemies and the lore behind the x-squadron team! The art has recently been vastly updated and greatly improved! With these things in mind, I’d like to post two very engaging videos about building a 2.5D Raycaster game engine. Many of the games from the 1990s such as Wolfenstein 3D, Doom, Duke Nukem 3D, and Elder Scrolls Arena, have been created with a Raycaster game engine.

Check out these videos! I’ll keep you guys posted on more updates as I go along. Plus, I will be updating my blog with new projects I’ve worked on in the past recently. I’ve done a lot of neat programs within the past year and I’d be happy to share these with all of you in the upcoming weeks.

What Makes "Good" AI in Video Games?

Hello everyone!

I found some really fascinating video on what makes Artificial Intelligence “seem good” in video games. It discusses all sorts of aspects on how AI should let the players “cheat” in a way, how they should have memory, how they communicate with their physical interactions among you and others in the world, and much more. I’ve recently been interested in AI, so I will have more to discuss soon. I’m going to find and talk about an article soon to help you guys learn what I’m learning too!

The Different Ways an App can make Money

Hello everyone, 

Very quick post today,

Have you ever wondered how free media, such as videos or games, make money?

Well today I found an interesting article and a video about this process! Check it out!

It seems that there are 3 main ways that apps can make revenue:

  1. Paid Downloads\Pay to Play - These are the apps that you actually buy once and play forever, or those games with recurring subscription fees that are required in order to play the game.

  2. Free Apps - Games that are downloaded and completely free to play, but ones that can have different types of ads pop up on the screen at certain times. The types of ads that can pop up are listed below.

  3. In-App Purchases - The third way to make money with apps is to allow users to purchase extra content within the game. For example, maybe you provide an incentive for the player to buy more gold, more resources, or less waiting time to continue his/her building experience.

  • Banner Ads - These are ads that are placed either on the top/bottom/left/right of the screen in order to prevent disrupting the user experience. However, they are visible if the player scrolls on the screen and still might appear as a nuisance. Very common on game websites.

  • Interstitial Ads - These are ads that pop up in-between certain parts of a game. For example, if the game is based on how long one can survive, then once the player loses or dies, an ad pops up that the player must exit out of before he/she can try again. This is seen in lots of phone apps, such as Flappy Bird!

  • Prestitial Ads - ads that play once when an application starts or before a website homepage is loaded.

  • Reward Ads - optional ads that play if the user wants to receive some sort of bonus, such as skipping the time it takes for something to finish being built, to gain an extra life, etc. This is seen in Clash of Clans for example

 

http://www.indiumsoft.com/Blog/make-money-using-ads-mobile-games/

 

The Rise of Indie Game Developers

Hello everyone, 

I'll do a short post today, since I've discussed some really dense topics the past few days. Recently I've been continuing development of my first game, X-Squadron, and I've become more and more aware of the rising indie game development industry. I've found an article on how Microsoft is helping small indie game developers launch on their platforms, such as the Xbox One. 

It seems to be that the new trends in gaming are the rise of the indie game developers, VR, and next-gen consoles (at least within the last few years!)

But why are some developers choosing to go indie? I've done some thinking and some research, and I've found that a lot of triple-A game companies tend to want to deliver content quickly rather than creatively. In ways, this is a good thing and a bad thing. The good thing about delivering games faster is the fact that they can reel people into the action quicker, hype up the features, and make a lot of money at the same time with less content. In other words, they give a viable product for the user with a minimum time cost, which also means they can focus on making other games sooner! The bad thing about this approach is that these triple-A game companies sometimes are not able to pack a lot of creative genius into the story, gameplay, or environmental attributes of the game, given their time constraints and their need of money to pay the bills. I'm not saying that all triple-A companies neglect creative content, but some of them out there only want rapid content to stay in business. And that is perfectly fine!

Indie game developers (or even smaller game companies) tend to pack a lot of creative power into their games because they envision their products in different ways. They think about adding an interesting mechanic into their games, such as using a screwdriver in first-person perspective to escape a room. These developers tend to focus on how they would respond in a given scenario in their game. These types of developers try to do as much as they possibly can to make the game that much more interesting, and most of them have a lot of extra time to experiment with "never before seen" content. As I've learned from being an indie game developer, you can have a LOT of fun brainstorming creative, and sometimes even crazy, ideas with your fellow coworkers! But hey, sometimes even the craziest ideas change the gaming world for the better! New algorithms, creativity and new ways of thinking are rising with indie game developers. That's why I think more and more companies, like Microsoft and Sony, are pushing for more indie game developers.

Here is that article I was talking about too

https://business.financialpost.com/technology/rise-of-the-indie-developer-microsoft-puts-small-studios-closer-to-the-centre-of-its-gaming-future

The COG Language from Jedi Knight: Dark Forces II

Yesterday, I briefly discussed programming languages for game engines and the difference between a compiled language and a scripting language. Today, I am going to briefly cover some of the features of the COG programming language from the article written in 1997 by senior programmer Robert Huebner. Again, everything I present today belongs to LucasArts and the developers of Jedi Knight: Dark Forces II.  

The developers of Dark Forces II wanted to create language that was easy to use for non-programmers (such as artists and game designers) and one that was fast enough for real-time action. This is what inspired the COG language! Huebner mentions that COG was a custom compiled language that was based on the C programming language. The developers used the C programming language as a starting point and modeled COG off of its syntax, while removing a bunch of C's "obscure" keywords and some major parts of the language. Huebner states that the library of COG functions for the author to use is the most important part of the language rather than the actual syntax. For those of you who don't know what a 'function' is, think of it as "a step-by-step instruction guide for doing a particular task in code." These functions supposedly were useful in the game engine for manipulating the environment and other tasks such as information querying. Essentially, Huebner boils it down to the idea that the COG language functions were used to "control the game environment", while the language syntax provided were used for "branching and looping control" (i.e. if-else statements, while loops, for loops, return keyword, etc.)

Some sample COG library functions include:

  • StartAnim - starts an animation for a sprite, surface or material

  • CreateThing - creates a new "thing" in the game world, which is essentially an object.

  • GetCurSector - obtains a reference to the current sector (i.e. area/region) that a "thing" is in

  • SectorThrust - sets a thrust force for a given sector to create an apparent feeling of physics.

  • AISetTarget - sets the target of the AI. In other words, set the target of the AI as the object the AI is attacking.

The game engine for Jedi Knight: Dark Forces II was event-driven, meaning that the engine frequently checks for certain types of events to occur, such as user input, collision detection, or other "messages" passed along by other programs. Some sample COG event messages that could be passed along are:

  • Touched - an event called when an object touches another surface or object. Both objects that collided can be referenced.

  • Entered - an event called when an object, such as the player, enters a different sector, which is basically another region or room that has been defined.

  • Damaged - an event called when player took damage from bullets or explosives, where the references to the source of the damage and the type of damage can be found.

  • Arrived - an event called when the player arrives at a certain destination

  • Killed - an event called when either the player or the enemy are about to be removed from the game due to his/her death

Through these event-driven COG scripts, the game can be manipulated in whatever manner necessary to the event OR the game can choose to ignore the event entirely! This is very powerful! According to Huebner, there are additional messages that are also sent to the COG scripts directly, rather than the objects to which that script is linked. Such messages include level startup messages and even player respawn messages!

What is even more interesting is that COG scripts execute as "separate virtual machines, each with its own variables, stack, and execution pointer", as Huebner states. This means that these COG scripts are protected from each other. So if one COG script is broken, then it only affects itself and the objects to which that script is linked and nothing else! 

Again, here was just a brief introduction to the COG language written for Jedi Knight: Dark Forces II. The rest of the article gets very technical on compilers and parsing, and describes some other 'stack' data structure operations. I don't want to explain too much to the point where it gets confusing, so I will leave that as an exercise for you!

Hope that all seemed interesting! All rights belong to LucasArts.

Here are the links to this two-page article by Robert Huebner, and I've also attached a video to Jedi Knight: Dark Forces II gameplay!

https://www.gamasutra.com/view/feature/131641/adding_languages_to_game_engines.php

https://www.gamasutra.com/view/feature/131641/adding_languages_to_game_engines.php?page=2

Creating a Programming Language for your Game Engine

Something I've recently been considering is writing my own programming language for my own video game engine in the future. Now, I know creating a programming language is hard. And some people will probably say "why in the heck would you ever want to create your own programming language?", especially when many others exist. However, it is actually fairly common for many game companies to create their own game engine and their own programming language, especially companies that make Massively Multiplayer Online Role Playing Games (MMO for short). For example, the MMO Runescape has its own scripting language called RuneScript, which was written specifically for AI interaction among your character and non-player characters (NPCs) and for quest logic (such as having the required items before the next quest task).

When discussing programming languages, it is important to know the difference between a scripting language vs. a compiled language. A scripting language is one that is usually interpreted. Interpreted languages aren't translated from a programming language to a target program. An interpreted language takes the source code directly and any user input and runs it through an interpreter, which reads the code statement-by-statement and processes the input. If there are no errors, the interpreter produces corresponding output from the code and input provided. Scripting languages are also used for "gluing together" functionality of an already created piece of software. A compiled language is one that takes the source code of a program and runs it through a compiler, which is the "translator" of the following code into a target program as output. Usually the target program is an executable machine-language program, but the target program could be practically any language you specify. Another one of the compiler's jobs is to detect any errors and report them while translating. Compilers are typically considered to be way faster than interpreters because machine-language programs are faster at mapping inputs to outputs. However, interpreters are better for debugging purposes and error diagnostics since they run statement-by-statement.

This is just a brief introduction to the idea of compilers and isn't extremely specific in any way! If you are interested in this subject, pick up the Dragon Book, which is "Compilers: Principles, Techniques, and Tools" by Alfred v. Aho. I have yet to read the entire book, but I have read through chapter one.

As I was digging around about two months back for information on how to create my own programming language, I found this link to gamasutra.com, which has a TON of really interesting video gaming articles! The link below was written on October 3rd, 1997 by Robert Huebner, a programmer who worked on creating a compiled programming language called COG for the game Jedi Knight: Dark Forces II. Many of these articles are from the 1990's and early 2000's, and they're usually multiple pages filled with video game knowledge, old or new! I've learned a lot of really cool computer programming techniques from this website, and I highly recommend reading them if you're an avid gamer!

To prevent this post from getting super long, I will save information about the COG language in the article for tomorrow

Anyway, enough of my blabble! Here is the link!

https://www.gamasutra.com/view/feature/131641/adding_languages_to_game_engines.php

 

Jedi Knight: Dark Forces II gameplay screenshot.All rights belong to LucasArts.

Jedi Knight: Dark Forces II gameplay screenshot.

All rights belong to LucasArts.

Motion Capture and Animation Sequences in Games

Every time I watch those videos of people in the Motion Capture suits (whether they're ready to film a scene for a movie or fight someone for a video game or whatever), I always am amazed at the direction technology is headed in!

For those who don't know, Motion Capture is defined as the process of recording the movements or actions of human actors for use in animating digital characters. Motion Capture is widely used in the fields of entertainment (video games, movies, animations), sports, health, and even research! 

The reason game developers sometimes use Motion Capture is because some animation sequences are extremely difficult to create; motion capture helps with complex character skeletal movement. Without Motion Capture, think about all the bones on the skeleton that the animators would have to move and time accordingly, depending on the type of animation used. It can be very overwhelming, especially since game development is challenging enough with the amount of programming, artwork, asset creation, music, and even testing! Lots of animators in video games use an animation process called "Keyframing",  which is the process of filling in the movement of a character animation over time. Essentially, Keyframing is almost like taking a picture at one point in the animation, and then another picture at a later point in the animation, and automatically filling in the animation transition between these two animation poses in time.  

Motion Capture involves a lot of acting. Physical actors have to put on suits that either optical or non-optical. Optical suits have tracking cameras that may or may not have markers on the suit, whereas Non-Optical suits have inertial or mechanical sensors (meaning detecting changes in motion). Optical systems with markers track the position markers on the actor's body (those ping-pong balls attached to the suits) and use the data that was tracked to try and approximate the actor's actual movements digitally on a virtual character. Markerless optical systems use algorithms to find certain types of features on the actor's body, such as his/her nose, mouth, or clothing. Once this data is captured, it is then mapped onto the virtual character's skeleton using software. Usually developers will use "Virtual Cinematography" on set, which allows them to see the animation footage previewed on their computer monitors before assuming it is good to use in the game; otherwise, you wouldn't know if the animation data transferred to the computer correctly until you replayed the footage hours later! 

Since Motion Capture typically requires having a studio, motion capture suits, props, and software,  it is very expensive to use. However, some companies have their own Motion Capture area, or they rent a place. Pricing has come way down within the last few years though, and you can buy markerless motion capture devices for around $300!

Here is the link of the article I used for reference:

https://www.engadget.com/2014/07/14/motion-capture-explainer/

Also, Here is a great video of the Motion Capture footage from Friday The 13th: The Game

Choosing a 3D Game Modeling Software

Quick post!

I often used to find myself wondering what the "best" kind of 3D modeling software would be for video games. 

Autodesk 3ds Max seems best for architecture and modeling realistic game environments, while Autodesk Maya seems best for character animations and visual game effects! Autodesk products also currently are the industry standard for major AAA game companies, because they have been around since the early 1990's. However, Blender tends to be more suited for beginners of 3D modeling and for indie game developers, since there are literally tons of tutorials for it. Not to mention it is constantly being updated, and it can even be used for movie editing, animation, physics simulations, and practically a little bit of everything!

There are positives and negatives to each software you use, and the video I just provided below talks about these ups-and-downs. I found it very informative, and then you can decide which software would be of practical use to you!

I personally have been using Blender because it is free, open-source, and pretty intuitive for beginners! Autodesk products are super expensive, (unless you are a student in which case it is free for personal use) but they are also super powerful. I found this video when I was thinking about the subject of 3D modeling software and the benefits of each one.  Blender Version 2.8 comes out in the Fall and it is going to be massive for 3D game developers! I also posted a video about Blender V2.8. 

Hope this seems interesting! 

The 3 Core Conditions of "Fun" Gameplay

Back in my Freshman year of high school, I read almost all of this one gigantic, 800-page book from 1996 called The Ultimate Game Developer's Sourcebook by Ben Sawyer. Even though people consider it "outdated", it certainly has some incredible game development considerations, and I highly recommend it. With gaming, nothing is ever outdated. I'm still amazed at concepts/papers that people wrote down and shared in the 1970's and 1980's! 

As I was rereading Sawyer's book a few months back, I started thinking about "what makes gameplay fun or exciting to the players of the game?" and other things like "what is considered a 'good' game to the eyes of a player?", especially because this is very subjective.

I brainstormed on the key aspects of gameplay before reading Sawyer's section on it, and after I read his section, I came up with 3 core features that I thought must exist to make gameplay supposedly feel "amazing":

1.) Interactivity -  This is the most important feature. This is the capability of the player to perform many actions in the world and manipulate the environment around him/her. Examples of interaction can include talking to artificially intelligent agents in the game, picking up items for your inventory, firing a weapon or projectile, punching someone, driving a vehicle, turning lights on/off, sitting down, eating/drinking, climbing or jumping, throwing objects, trading items/bargaining, and a VAST amount of other possibilities. Basically anything that the player can physically "do" in the game world is defined as interactivity. Without a lot of interactivity in a game, the less the player can "do", which usually makes the gaming experience get old or repetitive quickly. 

2.) Immersion - The subjective feeling of the player to the point where he/she connects to the environment he/she is surrounded in. In other words, this is that feeling (whether conscious of it or not) where you feel as if you are a part of this artificial environment and connect with the world, its people, its story, and/or anything else that draws you in! This is that feeling of transcending from the physical world into this artificial game world, like when you can't put a book down because it is so intriguing. That may sound funny, but seriously... that happens! Having a highly interactive world assists immersion because the more the player can interact with, the more likely the player will bond with and feel a purpose to the world. However, this is not always the case. Immersion could be related to the level design or environment. For example, if you are playing a horror game that takes place in space, and you don't find the spaceship environment stimulating or interesting, then that takes away from immersion and ruins this experience; this may cause you to "not like" that game because the environment is "boring", even if there are a lot of items you can pick up.

3.) Creativity/Variability - This is really the feature about the "little" details in games. What stands out in this world that other games haven't considered? What makes this world unique and changing? Mad Max the game is a great example of these small details! Your car in that game has a certain amount of gas that needs to be filled regularly. It has realistic winch physics and tires that spin in the sand as you're dragging. You have to replenish Max's health with water fountains throughout the world, and the fighting is awesome! Very realistic in terms of survival. This is just one game, but all of those features are creative, different, and make the game that much more enjoyable. Without some creative power or varying mechanics among other games, the game can seem like a "copycat" or a bit bland, which would ruin immersion as well. 

Gameplay is very interesting, indeed. Stay tuned for more. I will definitely discuss more topics that are also in Ben Sawyer's book sometime soon.

Perhaps tomorrow... (wink, wink)

 

Ben Sawyer's book I mentioned. Don't be fooled by reviews on this book. It is definitely an interesting read, regardless of how old it may be.

Ben Sawyer's book I mentioned. Don't be fooled by reviews on this book. It is definitely an interesting read, regardless of how old it may be.

The Most Common Gamer Questions

Every time I tell someone I recently met that I love to play games, I always get the question "What kinds of games do you play?" and "What's your favorite game?"

I always respond "oh, that's a tough question! Tons. I play everything. I can't say which one is exactly my #1 favorite! I've played hundreds!"

Anyway, for people that have trouble knowing what "style" or "type" of games you play, here is a list of a few genres and their descriptions:

Platformer -  The goal of a platformer is to make your way through levels by jumping on "platforms" and avoiding dangerous obstacles or enemies. These games are usually 2D, but there are some 3D platformers too! The most prominent features of platformers are the jumping, climbing and sometimes frequent sidescrolling. Such examples include the arcade-classics Donkey Kong, Mario and the original Metroid, as well as Spelunky. Most classic arcade games are platformers!  

Real-Time Strategy (RTS) - A style of game where the players DON'T incrementally take turns. In other words, it is NOT a turn-based game. Instead, players are given the task of managing and planning strategic events in real-time, such as perhaps managing your army as they go into battle and acquiring new resources, like areas/bases/stronger units, etc. The usual goal of these games is to destroy the enemy's assets and grow your assets. It is up to the player to logically plan their units, their bases, their attacks, their resources, and fight against other players or a CPU. Examples include Starcraft, Age of Empires, StrongHold series, and Dune II. 

MMORPG - stands for Massively Multiplayer Online Role-Playing Games, where thousands of people can be playing on a server (or many servers) at one time. These games usually have endless hours of gameplay due to developers adding more and more to these worlds! Most involve Medieval-type environments, races, and classes/roles. Examples include Runescape, World of Warcraft, Ultima Online, Everquest, etc.

RPG- stands for Role-Playing Game. These involve taking up the role of a character in a fictitious setting, usually one that is Medieval or with fantasy-related aspects. Very similar to MMOs except they are not multiplayer-heavy. Examples include Fable, Dark Souls, Bloodbourne, Elder Scrolls, Ultima Underworld, and Fallout 3/New Vegas. 

Action-Adventure -This is one of the most common game genres! These games combine both exploration and combat into one game. These games usually require that the player searches their nearby environment for keys or other important objects before being able to proceed through the game. For example, you may need to pick up a specific item before completing the mission, as with GTA and many Rockstar Games. However, these games also focus heavily on combat (action) and/or danger lurking. You must work your way through these environments (perhaps by doing quests/missions) while also fighting off enemies. Examples include Silent Hill, Resident Evil, Uncharted, Grand Theft Auto, Enslaved: Odyssey to the West, Devil May Cry, Dead Rising, The Legend of Zelda, Metroid, Castlevania, and a huge variety of others! 

Simulation - These games usually involve simulating (or being placed in) various kinds of experiences, whether that be career-related, life-related, or vehicle-related. It is up to the player to live these experiences and learn how to manage in these "real-world" scenarios. These games can actually teach the player some significant life skills! Examples of Simulation games include the Sims series, Spore, Farming Simulator, Nintendogs, Kerbal Space Program, FlightGear, etc.

Fighting - These include games where you are usually in an arena and your task is simply to beat up and defeat the opponent(s). Sometimes these games have story missions to play through and/or a "tower" type mode where you fight endlessly until you die. Usually the motive to keep playing the game is unlocking new characters or showing off your skills against your friends! Examples include Soulcalibur, Mortal Kombat, Tekken, and Street Fighter. 

I will certainly elaborate more on these topics later on. These were just a few genres/types of games.

 

devices.jpg

Can Video Games have "Infinite" Amounts of Content?

A topic that frequently comes to my mind when considering the future of video games is the idea of "infinite content" and how to make the gaming experience supposedly "last forever". With MMORPGs, such as Runescape, World of Warcraft, and EverQuest, it certainly seems possible to an extent, because developers are consistently adding and adding new items, quests, skills, enemies, areas/regions, and/or other such features; this is what keeps these types of games alive. These games don't necessarily have "infinite" amounts of content, but they have the appearance of infinite amounts of possibility due to continuous amounts of additions.

But what about other types of games? Most single-player games don't seem to have infinite content because most people play the game, live the experience, and move on to the next game right away. Perhaps they revisit the game in the future, but that doesn't necessarily mean it has "infinite content" to last forever. Not to mention that most games nowadays are focusing more and more on Multiplayer content rather than the Single-player, storytelling experience.

Now, what usually comes to mind when thinking of "infinite content" is the argument between Procedurally-Generated Content vs. Handcrafted Content. 

Procedural Generation is an algorithmic method to tell the computer specifically what type of content to generate in a way that makes logical sense in the game world, including quests, new levels, items, etc.

Handcrafted content is actual content that was created and designed by the actual developers and placed in the game manually

Procedurally-Generated Content seems to be a plausible approach to allowing "infinite" amounts of content in the future, yet it is NOT perfect; the major problem is repetitiveness. No matter how much content the developer adds for the algorithm to generate, eventually these amounts of content repeat themselves again and again. This includes things such as the same types of quests/missions, the same types of plotlines, the same types of places/items, etc. 

Handcrafted content is always limited and thus never "infinite." However, most of the time having handcrafted content is a good solution to making the game experience seem infinite. This is because players can play the game without worrying too much about randomness and repetitiveness, or possible algorithmic bugs in the generation that make the game unbearable!

To conclude today, games don't necessarily have infinite amounts of content; rather, it is the experience that these games provide for players that makes these worlds seem to have "infinite" content to last forever. This is what makes games so powerful. 

infinite.jpg