Движок cryengine

Commonly used default compression policies

Seen below is a table of the most commonly used compression policies included with the engine by default, as well as their bandwidth usage and limits. Keep in mind that the use of history delta (see Aspects below) may decrease bandwidth usage further.

Identifier Description Maximum Bandwidth Usage Limits
‘eid’ Used to automatically convert a local entity identifier to the remote equivalent. Adaptive N/A
‘wrld’ Represents a world coordinate. 72 bits 0 to 4096 for X and Y axes, 0 to 1023 for the Z axis
‘lwld’ Represents a world or local coordinate. 72 bits -20 to 4096 for X and Y axis, -20 to 1023 for the Z axis
‘wrl2’ Represents a world coordinate, adaptive by assuming a probable height of 1024. 72 bits 0 to 4096 for the X and Y axes, 0 to 2047 for the Z axis
‘wrl3’ Represents a world coordinate that can be outside of terrain bounds, adaptive by assuming a probable height of 1024. 88 bits -2045 to 6145 for the X and Y axes, -2095 to 6145 for the Z axis
‘frad’ Commonly used to represent radians as float. 12 bits -4 to 4
‘rpos’ Represents a relative position. 30 bits -10 to 10
‘smal’ Represents a small float. 8 bits 0 to 16
‘sone’ Represents a normalized float. 10 bits -1 to 1
‘tod’ Represents a time of day. 11 bits 0 to 24
‘i8’ Signed 8-bit number. 8 bits -128 to 127
‘i16’ Signed 16-bit number. 16 bits -32768 to 32767
‘i32’ Signed 32-bit number. 32 bits -2147483647 to 2147483647
‘ui2’ Unsigned 2-bit number. 2 bits 0 to 3
‘ui3’ Unsigned 3-bit number. 3 bits 0 to 7
‘ui4’ Unsigned 4-bit number. 4 bits 0 to 15
‘ui5’ Unsigned 5-bit number. 5 bits 0 to 31
‘ui6’ Unsigned 6-bit number. 6 bits 0 to 63
‘ui8’ Unsigned 8-bit number. 8 bits 0 to 255
‘ui9’ Unsigned 9-bit number. 9 bits 0 to 511
‘ui10’ Unsigned 11-bit number. 10 bits 0 to 1023
‘ui16’ Unsigned 16-bit number. 16 bits 0 to 65535
‘ui32’ Unsigned 32-bit number. 32 bits 0 to 4294967294
‘bool’ Boolean (true / false). 1 bit 0 to 1
‘ori1’ Normalized orientation / Quaternion. 8 bits -1 to 1
‘ori3’ Normalized orientation / Quaternion (higher precision than ‘ori1’). 12 bits -1 to 1
‘dir0’ Normalized vector / direction. 10 bits -1 to 1
‘dir1’ Normalized vector / direction (higher precision than ‘dir0’). 12 bits -1 to 1
‘dir2’ Normalized vector / direction (higher precision than ‘dir1’). 16 bits -1 to 1
‘dir3’ Normalized vector / direction (higher precision than ‘dir2’). 24 bits -1 to 1
‘mat’ Surface type identifier. 9 bits -1 to 255


In addition to compression policies, it is also possible to customize the scheduling priority of packets on a per-entity basis. For example, this allows us to prioritize players over other entities. An example of the default scheduler setup can be seen in Engine/Config/DefaultScripts/Scheduler.xml. 

Remote Method Invocations

Remote Method Invocations (RMIs) allow for executing functions remotely between a client and a server. Note that RMIs can not be used to communicate between multiple clients. They are represented in code by the SRmi structure. Each remote method can contain a set of parameters that need to be serialized with the same ISerialize interface and structure that is used for aspect serialization. 


Network Serialization and Aspects

Each networked entity is able to serialize data over the network whenever a specific aspect (see EEntityAspects) is changed. For example, assuming we had a boolean named m_bWalking, we could serialize this over the network to make sure that all clients and the server know the current synchronized state. Each entity can have up to 32 aspects which are independently serialized whenever it is marked «dirty» by game code.

When handling serialized data we first have to pick a unique aspect that we want to transmit data with. For example, assuming that we want to serialize data from clients to the server and other clients, we could choose eEA_GameClientD. Any time the data we last sent over the network is changed, we’ll need to call IGameObject::ChangedNetworkState, effectively marking the aspect as dirty resulting in  being called to read the data.

◆ PhysicsEntityFlags

enum CryEngine.PhysicsEntityFlags

General flags for PhysicsEntity-parameters


No flags


Each entity part will be registered separately in the entity grid


Entity will not be simulated


Entity will not break or deform other objects


Entity undergoes dynamic breaking/deforming


Entity can be pushed by players


Entity is registered in the entity grid


Entity is registered in the entity grid


Entity is registered in the entity grid


Only entities with this flag are updated if ent_flagged_only is used in TimeStep()


Generate immediate events for simulation class changed (typically rigid bodies falling asleep)


Generate immediate events for collisions


Generate immediate events when something breaks nearby


Don’t generate events when moving through triggers


Will apply certain optimizations for invisible entities


Entity will ignore global water area


Entity will force its damping onto the entire group


Entity will generate immediate post step events


When deleted, entity will awake objects around it even if it’s not referenced (has refcount = 0)


Entity will ignore breakImpulseScale in PhysVars


Players can break the Entiy by bumping into it


Entity will never trigger ‘squashed’ state when colliding with players


Entity will ignore phys areas (gravity and water)


Entity will log simulation class change events


Entity will log collision events


Entity will log EventPhysEnvChange when something breaks nearby


Entity will log EventPhysPostStep events

◆ PhysicsParticleFlags

enum CryEngine.PhysicsParticleFlags

Physicalization flags specifically for Particle-entities.

In here all the enums from physinterface.h are wrapped and commented so they can be used in C#. For easier usage the enums are split up in multiple enums so the wrong enum can’t be used for the wrong parameter.


No flags


Full stop after first contact.


Forces constant orientation.


‘sliding’ mode; entity’s ‘normal’ vector axis will be alinged with the ground normal.


Unless set, entity’s y axis will be aligned along the movement trajectory.


Disables spinning while flying.


Disables collisions with other particles.


Particle will not add hit impulse (expecting that some other system will).

Что представляет собой CryEngine?

Движок CryEngine был разработан немецкой студией Crytek для шутера Far Cry, который вышел в 2004 году и оказал огромное влияние на развитие игр с открытым миром. Проект позволял перемещаться по огромной территории без подзагрузок, поощрял свободный подход к выполнению миссий, а также демонстрировал потрясающую графику.

Вскоре после выхода Far Cry все права на CryEngine были выкуплены компанией Ubisoft, которая использовала движок для нескольких аддонов к шутеру. Также он лег в основу движка Dunia Engine, на котором были разработаны все последующие части серии Far Cry, и был лицензирован компанией NCSoft для MMORPG Aion: The Tower of Eternity.

Crytek тем временем занялась созданием движка CryEngine 2, на котором и был разработан знаменитый Crysis (а также аддоны Crysis Warhead и Crysis Wars). Дальнейшие итерации – CryEngine 3 (сейчас принадлежит Amazon), CryEngine (4), CryEngine V – являются закономерным развитием CryEngine 2. Впрочем, начиная с 2013 года, присвоение версиям движка порядковых номеров считается условным, так как сама Crytek предпочитает именовать его CryEngine, без каких-либо цифр.

Игры на движке CryEngine разрабатываются не только студией, создавшей его. Изначально его могли лицензировать сторонние компании за фиксированную плату, а образовательные учреждения могли использовать его бесплатно, но на некоммерческой основе – только для обучения студентов. Но начиная с 2016 года движок и SDK (набор средств разработки) распространяются бесплатно для всех желающих, но с условием выплаты Crytek 5% прибыли при доходах, превышающих 5000 долларов/евро (начиная с версии 5.5, на более ранних версиях роялти не выплачивается).

◆ SystemEvents

enum CryEngine.SystemEvents : uint

Flags to define which events to receive on a RequestListener.


The default value of SystemEvents. This means no events will be received.


Receive events when the audio implementation is set.


Receive events when a trigger is executed.


Receive events when a trigger has finished.


Receive events when a file is played.


Receive events when a file has started playing.


Receive events when a file has stopped playing.


If the event flags for are set to All, all events generated by the given object will be received.


Комплект разработчика программного обеспечения (SDK) CryEngine , первоначально называвшийся Sandbox Editor, представляет собой текущую версию редактора уровней, используемого Crytek для создания уровней для CryEngine . В программном обеспечении также предусмотрены инструменты для облегчения написания сценариев , анимации и создания объектов. Он был включен в различные игры Crytek (включая, помимо прочего, Crysis и Far Cry ) и широко используется для моддинга . Стиль редактирования аналогичен концепции песочницы с упором на большие территории и свободный стиль программирования миссий. Редактор также может создавать внутренние настройки.

В отличие от таких редакторов, как UnrealEd , которые используют «субтрактивный» стиль редактирования, который удаляет области из заполненного мирового пространства, Sandbox имеет «аддитивный» стиль (например, Quake II ). Объекты добавляются к общему пустому пространству. Концентрация песочницы на потенциально огромной (теоретически, сотни квадратных километров) местности означает, что она использует алгоритмическую форму рисования текстур и объектов на ландшафте. При этом используются различные параметры для определения распределения текстур или типов растительности. Это предназначено для экономии времени и обеспечения возможности редактирования таких больших территорий при сохранении общего стиля свободного роуминга «песочницы» в «реальном мире». Это отличается от некоторых стилей редактирования, которые часто используют «поддельные фоны», чтобы создать иллюзию больших ландшафтов.

В моде, несколько сравнимой с 3D Renderer Blender , который можно использовать для игрового дизайна, редактор Sandbox имеет возможность одним нажатием клавиши перейти прямо к текущему дизайну (WYSIWYP, «What You See Is Во что вы играете »). Это упрощается без загрузки игры, поскольку игровой движок уже запущен в редакторе. Вид «игрока» отображается в трехмерной части редактора. Редактор также поддерживает все функции CryEngine, такие как автомобили и физика, сценарии, расширенное освещение (в том числе в реальном времени, движущиеся тени), технологию Polybump , шейдеры, 3D-звук, обратную кинематику персонажей и наложение анимации, динамическую музыку, систему мягких частиц в реальном времени. и интегрированный редактор эффектов, отложенное освещение, карты нормалей и параллакс-окклюзии, а также усовершенствованная модульная система искусственного интеллекта.


Audio General

  • New: Functionality to calculate the duration of a standalone audio file.
  • New: Remove inheritance in Audio Object.
  • Optimized: Small tweaks/fixes to the SDL impl.
  • Optimized: Optimized setting of FMOD Studio buses to be more efficient.
  • Fixed: Where FMOD Studio reverbs stopped decay procedure when the source event was stopped.
  • Fixed: Where sometimes environments were not properly set to FMOD Studio.
  • Fixed: Crash with overly busy audio debug drawing.
  • Fixed: CVar was unregistered with an outdated name.
  • Fixed: Parent ambiences not assuming reverbs of inner areas.
  • Fixed: Audio trigger names were not being serialized and shown in the UI of Mannequin.
  • Tweaked: Updated SDL_mixer to version 2.0.1 and enabled SDL_mixer implementation to play back Vorbis encoded mp3 files.
  • Tweaked: Updated FMOD Studio API to version 1.08.02.

ACE (Audio Controls Editor)

  • Fixed: Middleware icons missing when using the web launcher.
  • Fixed: Some placeholder wwise controls were being shown even though they were a placeholder.
  • Fixed: Crash when switching audio middlewares.
  • Fixed: Crash when connecting implementation controls that live inside folders directly to the ATL controls panel.
  • Fixed: Filtering buttons.

DRS (Dynamic Response System)

  • New: Added an Execution-limit condition (to enable execute-only-once again).
  • New: Added an «execute response» action to allow re-using of responses.
  • New: Added a «done» port for the send-signal Flowgraph node — which is triggered when the response linked to the signal has finished.
  • New: Added a listener interface for drs-signal-processing.
  • New: Added a TimeSinceResponse Condition.
  • Refactored: Removed the option to queue drs signals delayed (can be achieved with ‘wait’ actions).
  • Fixed: A bug when playing dialog lines without audio and without animation.
  • Fixed: Subtitle was not displayed for lines without audio trigger, but with talk-animation.
  • Tweaked: Only increment the execution-counter on responses when at least the base-condition was met.

CryEngine 3

27 марта 2009 года на GDC 2009 Crytek представила CryEngine 3 . CryEngine 3 работает вместе с ПК на консолях Xbox 360 и PlayStation 3 . Он также работает на Wii U , Xbox One и PlayStation 4 . Согласно Crytek, песочница движка позволяет работать на всех трех платформах одновременно. При достаточной вычислительной мощности возможен даже вывод 3D (по принципу смещения от центра) в формате цифрового кино 4K . Бесплатная версия CryEngine 3 доступна с 18 августа 2011 года. Для коммерческих проектов требуется дополнительная лицензия.

CryEngine 3 изначально поддерживал только DirectX 9.0c. Благодаря патчу, который был выпущен впоследствии, в настоящее время также поддерживается DirectX 11, что заметно влияет на качество вывода графики. На GDC 2014 Crytek объявила в сотрудничестве с AMD, что будет поддерживать их альтернативу Direct3D AMD Mantle . Помимо прочего, это должно значительно повысить качество рендеринга. Техническая демонстрация фигуры Ruby, созданная AMD, также будет опираться на CryEngine.

На Gamescom 18 августа 2011 года был выпущен бесплатный SDK , который должен быть разработан с использованием некоммерческих игр.

◆ EntitySlotFlags

enum CryEngine.EntitySlotFlags : uint

Flags the can be set on each of the entity object slots.


Draw this slot.


Draw this slot as nearest. .


Draw this slot using custom camera passed as a Public ShaderParameter to the entity.


This slot will ignore physics events sent to it.


Indicates this slot is part of an entity that has broken up.


Draw this slot after post processing.


In MP this is an entity that shouldn’t fade or participate in network breakage.


Draw shadows for this slot.


This slot ignores vis areas.


Bit one of the GI Mode.


Bit two of the GI Mode.


Bit three of the GI Mode.

3D Engine

  • Refactored: Terrain layer painting is modified to work with new 3D Engine side texture atlas and without using of any Custom Editor side textures. During painting textures look very close to how they will look after generation.
  • Optimized: Enabled bindless texturing for terrain base pass and for vegetation «use terrain color» feature, 
  • Fixed: (VR, Config) Re-enabled default stereo output.
  • Fixed: Static instancing crash.
  • Fixed: (VR) Re-enable Oculus support.
  • Fixed: Sky-dome initialization on level-reload.
  • Fixed: (VR, Sandbox) Culling when using Sandbox with attached and enabled HMD.
  • Fixed: Missing brushes on Editor start.
  • Fixed: Crash on materials editing.
  • Fixed: Sandbox might crash on start.
  • Fixed: Static Instancing crash.


Action General

  • Refactored: Remove direct #include reference to CryAction files from other modules and include CryAction for every module as include path instead.
  • Fixed: Camera not resetting when exiting game mode after calling SetViewCamera scriptbind.
  • Fixed: A memory management issue with a debug string instance being passed across a dll boundary. Removed the previous ad-hoc workaround for this issue to reduce complexity on the CryAction’s client side.
  • Fixed: Client crash when connecting to servers that did not have sv_pacifist CVar available.


  • New: Adds blend feature to the Entity:EntityFaceAt flownode. 
  • Fixed: Changing the param of a material on an entity would prevent from changing the entity’s material.

◆ InputModifierFlags

enum CryEngine.InputModifierFlags

Flags to indicate if certain modifier keys are being pressed.


No key is pressed at the moment.


The left control key is pressed.


The left shift key is pressed.


The left alt key is pressed.


The left Windows key is pressed.


The right control key is pressed.


The right shift key is pressed.


The right alt key is pressed.


The right Windows key is pressed.


The Num Lock key is active.


The Caps Lock key is active.


The Scroll Lock key is active.


A control key is being pressed.


A shift key is being pressed.


An alt key is being pressed.


A Windows key is being pressed.


A modifier key is pressed (control, shift, alt or Windows keys).


A lock key is active (Caps Lock, Num Lock or Scroll Lock).


  • CryCreateClassInstance(const char*,  std::shared_ptr<T>&) — Has been removed, please use CryCreateClassInstance(const CryClassID& cid, std::shared_ptr<T>& p) or CryCreateClassInstanceForInterface(const CryInterfaceID& iid, std::shared_ptr<T>& p).
  • Loading of Engine assets in code now requires the «%ENGINE%» prefix, for example «%ENGINE%/EngineAssets/Textures/White.dds».
  • Flow node registration no longer requires extensive extra logic to be implemented for each game. Instead, call CryRegisterFlowNodes during initialization and CryUnregisterFlowNodes during shutdown.
  • CryMath/Random.h — Is no longer included by default in certain header files. This may result in projects having to include the files manually (#include <CryMath/Random.h>).
  • IConsole functions that were used to register console commands and CVars are no longer publicly accessible. You might have to update your code to use the already existing macros or the new ConsoleRegistrationHelper class (all of which are located in <CrySystem/ISystem.h>.

Installing CRYENGINE

  1. Double click on the CRYENGINE Launcher icon, then enter your log in credentials. NOTE: If a new CRYENGINE Launcher version is available a pop-up will appear. We recommend that the most up to date version of the CRYENGINE Launcher is always used. Below is the main Launcher dashboard. There are different ways in which an Engine version can be downloaded via the Launcher dashboard, however the fastest way is to click on the  button.
  2. Doing so opens the dashboard shown below. All the Engine versions that are available for download, and the Engines that you have previously installed (if any have been installed) are displayed. In the example below we will install CRYENGINE version 5.6.1. Under CRYENGINE 5.6.1 click on the  button. The Engine will then start to download — this process may take some time to complete (depending on your network connection speed).
  3. Once the Engine has download, you will be presented with a pop-up like the one shown below. Depending on what you intend to do with the Engine now determines what you need to do next. For example, if you do not intend to work with Game Code, a third party Audio middleware product, develop C++ plugins, use plugins and tools for supporting the export and content creation processes used with various DCC packages then you will not need to install any additional components and can therefore just click on the Skip button. The Engine installation process is then complete and you can proceed to Managing CRYENGINE Projects — Creating, Importing & Upgrading Projects.
  4. However, for those CRYENGINE users that do intend to to work with any of the elements mentioned above, then some further installation steps are required.Click on the Go button (from the pop-up), the Launcher dashboard shown below will open. There are 3 main sections; 1: IDE and Compiler, 2: SDKs and Dependencies, 3: Tools and Plugins. Sections 1: and 2: relate to third party applications while section 3: relates to CRYENGINE itself. It is worth you exploring what additional components are available (there is a scrolling function in sections 1: and 2:.For more details about installing the components available in section 3:, then see CRYENGINE Plugins and Tools. Completing the installation of the various dependencies is then a case of working through sections 1:, 2: and 3: and installing the components that you need for your intended use of the Engine. Finally, once you have installed the additional components that you require, then you can proceed to Managing CRYENGINE Projects — Creating, Importing & Upgrading Projects.  

Список программ, использующих CryEngine


заглавие публикация разработчик Издатель Платформа
Aion 25 ноя.2008 NCSOFT Gameforge 4D Окна
Большая разница 23 марта 2004 г. Crytek Ubisoft Окна

CryEngine 2

заглавие публикация разработчик Издатель Платформа
Голубой Марс 2 сен 2009 г. Аватар Реальность Аватар Реальность Windows , iOS
Crysis 13 нояб.2007 г. Crytek Electronic Arts Окна
Crysis Warhead 16 сен 2008 г. Crytek Budapest Electronic Arts Окна
Войны с наркотиками 17 марта 2009 г. Палео развлечения Палео развлечения Окна
Энтропия Вселенная 17 августа 2009 г. MindArk MindArk Окна

CryEngine 3

заглавие публикация разработчик Издатель Платформа
ArcheAge 15 янв.2013 г. XL Игры Трион Миры Окна
ASTA 2 марта 2016 г. Игры с полигонами Перемещение Игры Окна
Кабал 2 14 ноя.2012 ESTsoft ESTsoft Окна
Crysis 4 октября 2011 г. Crytek Electronic Arts PlayStation 3 , Xbox 360
Crysis 2 22 марта 2011 г. Crytek , Crytek UK Electronic Arts Windows , PlayStation 3 , Xbox 360
кризис 3 19 февраля 2013 г. Crytek , Crytek UK Electronic Arts Windows , PlayStation 3 , Xbox 360
Система обучения спешенного солдата 2012 г. Разумные решения
Фронт врага 10 июня 2014 г. CI игры CI игры Windows , PlayStation 3 , Xbox 360
Lichdom: Battlemage 26 августа 2014 г. Xaviant Xaviant (Windows) , Максимум игр (PlayStation 4, Xbox One) Windows , PlayStation 4 , Xbox One
MechWarrior Online 17 сен 2013 Игры Пиранья Игры Пиранья Окна
Nexuiz (2012) 3 мая 2012 г. IllFonic THQ Windows , Xbox 360
Панзар 12 апреля 2013 г. Панзар Студия Панзар Студия Окна
Демо Ruby tech 2013 AMD
Снайпер: Призрачный воин 2 12 марта 2013 г. Город Интерактивный Город Интерактивный Windows , PlayStation 3 , Xbox 360
Состояние распада 5 июня 2013 г. Лаборатория нежити Microsoft Studios Windows , Xbox 360 , Xbox One
Система городской жизни 2010 г. Enodo
Warface 21 октября 2013 г. Crytek Kiev , Crytek UK (Xbox 360) Crytek , Microsoft Studios (Xbox 360) Windows , Xbox 360 , PlayStation 4 , Xbox One

CryEngine (4-е поколение)

заглавие публикация разработчик Издатель Платформа
Арена судьбы Задавать Crytek Черное море Crytek Windows , PlayStation 4 , Xbox One
Бронированная война 8 октября 2015 г. Обсидиан Развлечения Обсидиан Развлечения Окна
Боевой клич Задавать Battlecry Studios Bethesda Softworks Окна
Все ушли в восторг 11 августа 2015 г. Китайская комната SCE Santa Monica Studio Sony Computer Entertainment Windows , PlayStation 4
Эволюционировать 10 февраля 2015 г. Turtle Rock Studios 2K Игры Windows , PlayStation 4 , Xbox One
Homefront: революция 17 мая 2016 Студии Deep Silver Dambuster Глубокое серебро Windows , PlayStation 4 , Xbox One , Linux
Kingdom Come: Deliverance 13 февраля 2018 г. Warhorse Studios Warhorse Studios Windows , PlayStation 4 , Xbox One
Восхождение сына Рима 22 нояб.2013 г. Crytek Франкфурт Microsoft Studios Windows , Xbox One
Добыча 5 мая 2017 Arcane Studios Bethesda Softworks Windows , PlayStation 4 , Xbox One
Снайпер Призрачный Воин 3 25 апреля 2017 CI игры CI игры Windows , PlayStation 4 , Xbox One
Коллекционные предметы 19 марта 2014 г. Crytek Франкфурт DeNA iOS , Android
Подъем 28 апреля 2016 г. Crytek Crytek Windows, Oculus Home

CryEngine V

заглавие публикация разработчик Издатель Платформа
Охота: вскрытие 22 февраля 2018 г. Crytek Crytek Windows , PlayStation 4 , Xbox One
Crysis Remastered 18 сентября 2020 г. Crytek Crytek Windows , PlayStation 4 , Xbox One

◆ PhysicsRopeFlags

enum CryEngine.PhysicsRopeFlags

Physicalization flags specifically for Rope-entities


No flags


Approximate velocity of the parent object as v = (pos1-pos0)/time_interval.


No velocity solver; will rely on stiffness (if set) and positional length enforcement.


No collisions with objects the rope is attached to.


Whether target vertices are set in the parent entity’s frame.


Whether target vertices are set in the parent entity’s frame.


Turns on ‘dynamic subdivision’ mode (only in this mode contacts in a strained state are handled correctly).


Rope will not tear when it reaches its force limit, but stretch.


Rope will collide with objects other than the terrain.


Rope will collide with the terrain.


Rope will collide with the objects it’s attached to even if the other collision flags are not set.


Rope will use stiffness 0 if it has contacts.


Refactoring of our network is in progress and will start with the public API. The goal is to remove network dependencies (in the legacy CryAction module) in order to simplify how games can utilize networking in code. This is also preparation for a future refactoring of our network internals.

Receiving Client Connection Callbacks

INetworkedClientListener and INetwork::AddNetworkedClientListener was added as an alternative for the legacy game rules system. This interface can be used to receive callbacks when clients connect over the network, making it possible to skip usage of game rules in projects. The templates have been updated to utilize this.

Remote Method Invocation (RMI) Support for New Entity Components

In the initial 5.3.0 Engine release, the new Entity Component system did not support RMI’s, this has now been corrected and allows new entity code to be networked. See example below.

#include <CryNetwork/Rmi.h>
class CNetworkedComponent final : public IEntityComponent
	virtual void Initialize() final
		SRmi<RMI_WRAP(&CNetworkedComponent::RemoteEntityMethod)>::Register(this, eRAT_NoAttach, false, eNRT_ReliableOrdered);
	// Parameters to serialize an entity id across the network
	struct SEntityParams
		EntityId entityId;
		void SerializeWith(TSerialize ser)
			// Called to serialize and deserialize the entity id, note the 'eid' policy
			// This policy is used to convert entity identifiers between machines as id's are not unique over the network.
			ser.Value("entityId", entityId, 'eid');
	bool RemoteEntityMethod(SEntityParams&& params, INetChannel* pNetChannel)
		if (IEntity* pEntity = gEnv->pEntitySystem->GetEntity(params.entityId))
			// Success!
		// Return true to indicate that RMI was valid, a value of false indicates that something went wrong - for example validation of input indicates cheating.
		return true;
	void InvokeRemoteEntityMethod(EntityId id)
		SRmi<RMI_WRAP(&CNetworkedComponent::RemoteEntityMethod)>::InvokeOnRemoteClients(this, SEntityParams{ id }, id);

Network Aspect Serialization for New Entity Components

In addition to RMI’s, 5.4 also introduces support for serializing chunks of data as aspects over the network. This can be useful, for example to synchronize player input of a player. We’ve attached an example below:

class CNetworkedAspectComponent final : public IEntityComponent
	virtual void Initialize() final
	virtual NetworkAspectType GetNetSerializeAspectMask() const final { return 1 << GetNetSerializationAspect(); }
	// Called when serializing and deserializing
	virtual bool NetSerialize(TSerialize ser, EEntityAspects aspect, uint8 profile, int flags) final
		if (aspect == GetNetSerializationAspect())
			// Serialize or deserialize our flags, note that the optional third parameter specifies the selected compression policy
			ser.Value("m_flags", m_flags);
	const EEntityAspects GetNetSerializationAspect() const { return eEA_GameClientD; }
	// Call when m_flags changes and we want to serialize the data to the other machines.
	void RequestNetSyncToOthers() { m_pEntity->GetNetEntity()->MarkAspectsDirty(GetNetSerializationAspect()); }
	uint32 m_flags;