Package: inspirai-fps
Wilderness Scavenger: 3D Open-World FPS Game AI ChallengeThis is a platform for intelligent agent learning based on a 3D open-world FPS game developed by Inspir.AI.Competition OverviewWith a focus on learning intelligent agents in open-world games, this year we are hosting a new contest calledWilderness Scavenger. In this new game, which features a Battle Royale-style 3D open-world gameplay experience and a random PCG-based world generation, participants must learn agents that can perform subtasks common to FPS games, such as navigation, scouting, and skirmishing. To win the competition, agents must have strong perception of complex 3D environments and then learn to exploit various environmental structures (such as terrain, buildings, and plants) by developing flexible strategies to gain advantages over other competitors. Despite the difficulty of this goal, we hope that this new competition can serve as a cornerstone of research in AI-based gaming for open-world games.FeaturesA light-weight 3D open-world FPS game developed with Unity3D game engineRendering-off game acceleration for fast training and evaluationLarge open world environment providing high freedom of agent behaviorsHighly customizable game configuration with random supply distribution and dynamic refreshPCG-based map generation with randomly spawned buildings, plants and obstacles (100 training maps)Interactive replay tool for game record visualizationBasic StructuresWe developed this repository to provide a training and evaluation platform for the researchers interested in open-world FPS game AI. For getting started quickly, we summarize the basic structure of this repository as follows:.
├──examples# providing starter code examples and training baselines│├──envs/...
│├──basic.py
│├──basic_track1_navigation.py
│├──basic_track2_supply_gather.py
│├──basic_track3_supply_battle.py
│├──baseline_track1_navigation.py
│├──baseline_track2_supply_gather.py
│└──baseline_track3_supply_battle.py
├──inspirai_fps# the game play API source code│├──lib/...
│├──__init__.py
│├──gamecore.py
│├──raycast.py
│├──simple_command_pb2.py
│├──simple_command_pb2_grpc.py
│└──utils.py
└──unity3d# the engine backend (default Linux)├──UnityPlayer.so├──fps.x86_64├──fps_Data/...└──logs/...unity3d: the (default Linux) backend engine extracted from our game development project, containing all the game related assets, binaries and source codes.inspirai_fps: the python gameplay API for agent training and testing, providing the coreGameclass and other useful tool classes and functions.examples: we provide basic starter codes for each game mode targeting each track of the challenge, and we also give out our implementation of some baseline solutions based onray.rllibreinforcement learning framework.Supported PlatformsWe support the multiple platforms with different engine backends, including:Linux: download the enginehereWindows: will be supported soonMacOS: will be supported soonInstallation (from source)To use the game play API, you need to first install the packageinspirai_fpsby following the commands below:gitclonehttps://github.com/inspirai/wilderness-scavengercdwilderness-scavenger
pipinstall.We recommend installing this package with python 3.8 (which is our development environment), so you may first create a virtual env usingcondaand finish installation:$condacreate-nWildScavpython=3.8
$condaactivateWildScav(WildScav)$pipinstall.Installation (from PyPI)Note: this may not be maintained in time.Alternatively, you can install the package from PyPI directly. But note that this will only install the gameplay APIinspirai_fps, not the backend engine. So you still need to manually download the engine binaries and assets (unity3d) from our repository.pipinstallinspirai-fpsLoading Engine BackendTo successfully run the game, you need to make sure the game engine backend for your platform is downloaded and set theengine_dirparameter of theGameinit function correctly. For example, here is a code snippet in the scriptexample/basic.py:frominspirai_fpsimportGame,ActionVariable...parser.add_argument("--engine-dir",type=str,default="../unity3d")...game=Game(...,engine_dir=args.engine_dir,...)Loading Map DataTo get access to some features like realtime depth map computation or randomized player spawning, you need to load the map data and load them into theGame. After this, once you turn on the depth map rendering, the game server will automatically compute a depth map viewing from the player's first person perspective at each time step.Download map datahereand decompress the downloaded file to your preferred directory (e.g.,<WORKDIR>/map_data).Setmap_dirparameter of theGameinitializer accordinglySet themap_idas you likeTurn on the function of depth map computationTurn on random start location for agent spwaningRead the following code snippet in the scriptexamples/basic.pyas an example:frominspirai_fpsimportGame,ActionVariable...parser.add_argument("--map-id",type=int,default=1)parser.add_argument("--use-depth-map",action="store_true")parser.add_argument("--random-start-location",action="store_true")parser.add_argument("--map-dir",type=str,default="../data")...game=Game(map_dir=args.map_dir,...)game.set_map_id(args.map_id)# this will load the valid locations of the specified map...ifargs.use_depth_map:game.turn_on_depth_map()...ifargs.random_start_location:foragent_idinrange(args.num_agents):game.random_start_location(agent_id)# this will randomly spawn the player at a valid location...game.new_episode()# start a new episode, this will load the mesh of the specified mapGameplay VisualizationWe have also developed a replay visualization tool based on the Unity3D game engine. It is similar to the spectator mode common in multiplayer FPS games, which allows users to interactively follow the gameplay. Users can view an agent's action from different perspectives and also switch between multiple agents or different viewing modes (e.g., first person, third person, free) to see the entire game in a more immersive way. Participants can download the tool for their specific platforms here:Windows: download the replay toolhereMacOS: will be supported soonTo use this tool, follow the instruction below:Decompress the downloaded file to your preferred directory (e.g.<WORKDIR>/replay_tool).Turn on recording function withgame.turn_on_record(). One record file will be saved at the end of each episode.For Windows users:Copy the replay file (e.g.replay.bin) from"fps_Data/StreamingAssets/Replay"(in the engine directory) to"FPSGameUnity_Data/StreamingAssets/Replay"(e.g.,"<WORKDIR>/replay_tool")RunFPSGameUnity.exeto start the application.In the replay tool, you can:Select the record you want to watch from the drop-down menu and clickPLAYto start playing the record.During the replay, users can make the following operationsPressTab: pause or resumePressE: switch observation mode (between first person, third person, free)PressQ: switch between multiple agentsPressECS: stop replay and return to the main menu