Picture

The NPC Identity Generator is a game system prototype for a realistic sandbox type of game such as Grand Theft Auto, Watch Dogs, Saints Row or Sleeping Dogs. It creates realistic identities for citizens of a virtual game world.

Usually these types of sandbox games are inspired by real cities because they strive to make the game world as real as possible. The illusion of a such a world is important down to the smallest details. Considering that these virtual worlds are inhabited by regular citizens (NPCs), one needs to create believable people that walk the streets, play in parks or just idle out in front of the gun shop.

Tech: HTML/CSS/JS

Live Demo: planet34.org

Source: github.com


Picture

Media

Examples of generated IDs

prj-npc-screen01.png prj-npc-screen02.png prj-npc-screen03.png prj-npc-screen04.png prj-npc-screen05.png prj-npc-screen06.png
Character Design by Alexandru Călin.

Picture

Research

The NPC generator is built upon real data from the city of Toronto. I have modeled my system using available statistical data regarding: population origin/ethnicity, age brackets, employment status, employment industries and local job nomenclature.

Names and surnames have been compiled from all over the web according to popularity in their areas of origin.

The data object used is stored in JSON format however you can view the research file (.xlsx) in the project repository.

Picture

Development

The system is built in JS and displayed in HTML.

The data has been skewed a bit to provide more interesting overall results so it's not scientific.

Whenever a request is being made, a data object with distinct properties is generated. This can be used just like that or passed further to some other system. Here is an example of such a data object:

sPrsOrigin = "Filipino";
sPrsGender = "Male";
sPrsFirstName = "Michael";
sPrsLastName = "De Asis";
sPrsFullName = "Michael De Asis";
iPrsAge = 31;
sPrsAgeBracket = "Professional";
sPrsJobCat = "Makeup Artist";
sPrsJobTitle = "Creative";

In the web example I built, I am passing the gender property to the portrait constructor to generate simple 2D portraits. In a game engine, these details could be passed to a function which chooses meshes and spawns the NPCs in the world.