usually procedural or object-oriented and implemented via compilers; for example, C, C++, and Java. However, developers may take into account domain-specific features, such as interfacing with the operating system, and resilience to reverse engineering for online video games. Many games are not written in one language exclusively, and may combine two or more languages; For example, Unity, a popular game engine, has different pieces written in C, C++, and C#. For consoles, the support of the target platform is usually the most considered factor. In the past, video games for consoles were written almost exclusively in assembly due to limited resources in terms of both storage and processing speed. However, as technology has advanced, so have the options for game development on consoles. Nintendo, Microsoft, and Sony all have differing SDKs for their Wii U, Nintendo Switch, Xbox One, and PlayStation 4 consoles, respectively. High-level scripting languages are increasingly being used as embedded extensions to the underlying game written in a compiled programming language, for the convenience of both the original developer and anyone who would wish to mod the game. Lua is a very popular choice, as its API is written in ANSI C and the language is designed to be embedded into other applications. Many developers have created custom languages altogether for their games, such as id Software's QuakeC and Epic Games' UnrealScript. APIs and libraries A key decision in game programming is which, if any, APIs and libraries to use. Today, there are numerous libraries available which take care of key tasks of game programming. Some libraries can handle sound processing, input, and graphics rendering. Some can even handle some AI tasks such as pathfinding. There are even entire game engines that handle most of the tasks of game programming and only require coding game logic. Which APIs and libraries one chooses depends largely on the target platform. For example, libraries for PlayStation 2 development may not be available for Microsoft Windows and vice versa. However, there are game frameworks available that allow or ease cross-platform development, so programmers can program a game in a single language and have the game run on several platforms, such as the Wii, PlayStation 3, Xbox 360, PSP and Microsoft Windows. Graphic APIs Today, graphics are a key defining feature of most games. While 2D graphics used to be the norm for games released through the mid-1990s, most AAA games now