From 5e21b98d202d4dfb3fd346932322b1422a064b0b Mon Sep 17 00:00:00 2001 From: Ben Forge <74168521+BenCheung0422@users.noreply.github.com> Date: Sat, 28 Mar 2026 07:59:48 +0800 Subject: [PATCH 1/2] EFP: Create: Orryx Ferricia Physics Engine EFP 15: Orryx Ferricia Physics Engine --- efp/efp015/main.xml | 95 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 efp/efp015/main.xml diff --git a/efp/efp015/main.xml b/efp/efp015/main.xml new file mode 100644 index 0000000..1cb8baa --- /dev/null +++ b/efp/efp015/main.xml @@ -0,0 +1,95 @@ + + + + + + + + +
+ +

+ Physics is the most basic feature for an open-world game to run. "Physics" here only refers to the + interactions between and kinetics of physical objects in a World, without interference from other energy. + In Orryx, physics may be parameterized for Application Extensive Modules (AXMs) to extend and + customize physics behaviors for their own implementations of worlds. Most of the computations + related to physics shall be run in Ferricia, with certain parameters and attributes configurable + by the Kryon layer. Some of them may even be sometimes constant while variable the other times. +

+

+ While the entire physics engine is based on Open Dynamics Engine (ODE), most working details would + likely be explained in terms of it. However, several conceptual ideas may also be explained in mechanical + physics, likely with related theories, laws, algorithms and formulae. +

+
+
+
+ +

+ Since TerraModulus is tile-based, or block-based, in most of the time, Tiles should be stationary + and rigid with contact of other Tiles. However, Entities may act in any way, with various possible + motions and combinations, even potentially with joints and islands. +

+

+ Units and coordinate system in physics engine should one-to-one align with the ones seen in Kryon. + This means, the x-axis, y-axis, z-axis must comply exactly the same across those systems. + For basic units, meters and Newtons may also be used, as they are the units used in ODE. +

+

+ There would likely be special measures for moving Tiles. Since Tiles are expected to be aligned with + integral coordinates, moving instances that do not meet this criterion may be undefined. + Therefore, moving Tiles shall likely be implemented as special Entities with some effects being Tiles, + unless Tiles are instantly moved without any transition. +

+

+ Most likely all bodies shall have uniform mass, although implementations may still use ununiform + masses in certain bodies for special games. Most bodies likely do not rotate except for certain + bodies in certain Entities, so forces applied on should be uniform without causing torques. +

+

+ Certain geometry objects would be implemented with special meanings. World boundaries should be + planes, while others may be created in any way for Tiles and Entities. However, Tiles as non-placeable + may be as collision spaces containing several geometry objects including boxes. Some objects without + certain shapes may be made as meshes, but this should not be common. There is no plan to include + arbitrary Worlds, so heightfield and convex shall not be used. Other than these, no custom classes + shall be implemented. It is a question whether Tiles should be implemented as composite bodies. +

+
+
+
+ +

+ Although, there is likely no default complete physics implementation, certain common configurations + may still be possible to be made officially as simple implementations for ready-for-production + developments of other contents without having to implement their own ones by their own. +

+
+
+ +

+ As a simple interpretation of an open world with simple and common interactions in various games, + this implementation may be simple, though certain parameters may still be made. This may resemble + the physics as on Earth, but gravity may be configurable for authors with a default value. +

+

+ Most Tiles and Entities should be inelastic; world boundaries should also be completely inelastic. + However, certain Tiles and Entities may be elastic, from configurations by authors. + Without specific settings, those bodies should be inelastic, including collisions between Entities. +

+

+ There would likely be two modes for Tiles, where for one, all Tiles fall while the other only + certain selections of Tiles may fall. +

+
+
+
+
+ + +
  • Open Dynamics Engine (ODE) Community Wiki
  • +
    +
    +
    + +
    From d18beeddca204519ccab3ff88094a932d08708c2 Mon Sep 17 00:00:00 2001 From: Ben Forge <74168521+BenCheung0422@users.noreply.github.com> Date: Wed, 1 Apr 2026 02:13:59 +0800 Subject: [PATCH 2/2] EFP 15: Complement Physics impl details --- efp/efp015/main.xml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/efp/efp015/main.xml b/efp/efp015/main.xml index 1cb8baa..423c855 100644 --- a/efp/efp015/main.xml +++ b/efp/efp015/main.xml @@ -81,6 +81,35 @@ There would likely be two modes for Tiles, where for one, all Tiles fall while the other only certain selections of Tiles may fall.

    +

    + Physics Engine shall be initiated via PhyEnv when a World is being initiated + along with other World resources. Then, other World, Space, Body and Geom instances are + created as initialization of resources. With PhyWorld created under PhyEnv, + where PhyEnv handles OdeHandle; PhyWorld also handles + OdeWorld, TopLevelSpace and a list of PhyObj, where + OdeWorld is a representation of ODE World, and TopLevelSpace + is the top-most ODE Space, with each of them handling underlying OdeBody and + OdeGeom; PhyObj has two implementations, PhyBody and + PhyGeom, where PhyBody is the physics representation of a Body + which is either or both associated with an OdeBody, or having one or more + OdePlaceableGeom. Associations of ODE Geom and ODE Body are handled by + the abstraction of them, PhyBody; ODE Bodies are always created in OdeWorld + while ODE Geoms are always created in TopLevelSpace. +

    +

    + User-defined data should not be stored in ODE objects, but only on our side with those handling + the interactions with those ODE objects. Mostly, phy::ode module handles abstraction + of actions provided by ODE's interface, while other higher level operations should reside in + phy module directly. Seemingly, Kryon's internal would directly interact with + objects in phy, and indirectly with objects in phy::ode. +

    +

    + PhyEnv shall also handle collision activities observed by executing ODE's loop. + CollisionHandler from PhyEnv handles collisions by generating + OdeContactJoint from OdeContactGeom, while all parameters depend on + properties of objects in interaction. Those properties should be defined by properties of + Tiles and Entities, so they are fully up and subject to Kryon. +