Generics.Collections, vacations

Posted on

Wizardry VII - Crusaders of the Dark Savant
Half Life 2: City 17
Half Life 2: We don't go to Revenholm
  1. I am going on vacation, so I will be (mostly) offline for 2 weeks 🙂 So, please have patience with any questions to Michalis — I will get back to you, but with some delay!

    I don’t have a new screenshot from the engine for this news. Instead, I wanted to share some screens from the games I like — the games that inspired me to make games (and, subsequently, an engine to make games 🙂 ).

  2. The GitHub code now contains a start of migration from FGL unit containers to Generics.Collections unit containers. The Generics.Collections contains a much richer (and Delphi-compatible) generic containers. I use generics a lot in the engine code, so this will be a larger change.

    The main classes from Generics.Collections are TList<T> and TObjectList<T>. TObjectList<T> is very similar to the TFPGObjectList<T> you know from FGL.

    Generics.Collections were implemented in FPC by fantastic Maciej Izak, who also put a lot of work to actually make them part of the FPC standard library in FPC 3.1.1. In older FPC versions, we currently use a local copy of them (in src/compatibility/generics.collections/src/ ). This “compatibility” path should be automatically added to your unit search path for all our supported compilation methods. If you use the build tool, be sure to recompile the build tool after getting the latest code from GitHub.

  3. The requirements on FPC version increase, in order to use Generics.Collections (unit names with dots). We now require now FPC >= 3.0.0. See also FPC versions supported docs.

  4. I’m also working on a new improved API for vectors / matrices, based on advanced records, somewhat cleaner and also Delphi-compatible. More news when I’ll get back from vacations 🙂

  5. Our Automatic Cloud Build server has now cool scripts to switch FPC versions, which allows me to automatically check that the engine compiles with various FPC versions, and on various platforms. I really enjoy continuous testing, time to set it up always “pays off” by doing a lot of things automatically for you, and Jenkins rocks!

Comments on the forum ➤

Castle Game Engine 6.2 release – iOS, CommonSurfaceShader…

Posted on

CommonSurfaceShader with steep parallax bump mapping and self-shadowing
Castle Game Engine sound/music player
Knocker in STL format, by Shira,
Robot woman in the STL format, by Shira, see

We’re proud to announce the release of Castle Game Engine 6.2!

Download it from our main page.

New features in this release:

  1. Trivially easy recompilation of your games for iOS (through an XCode project). You can now use our build tool to recompile the same game for all our platforms (desktops, Android, iOS, web plugin…). The iOS documentation was extended to describe everything necessary.

  2. CommonSurfaceShader is our new “material on steroids” that allows you to configure material by normalmaps, specular maps, shininess maps, ambient maps… We include an extensive documentation and examples of it (in new demo models).

  3. Improved Blender exporter. It’s now easier to install (it’s now a normal Blender add-on), and it can generate a CommonSurfaceShader node with all the goodies described above. The artist can now comfortably set normalmaps, specular maps and much more in Blender, and they “just work” in the engine.

    The CommonSurfaceShader and Blender exporter improvements were implemented thanks to the support on Patreon. If you like what we do, please consider supporting the engine development on Patreon. This really helps me spend more time on the engine, and develop cool features like this!

  4. Other build tool improvements, for all platforms:

  5. Other API and examples improvements:

    • TSound.Offset to get/set sound offset in time.
    • Sound/music player in examples/audio/audio_player_scrubber.
    • STL format support
    • Our ray-tracer now supports textures and smooth normals.
    • TCastleEdit (example in examples/2d_standard_ui/edit_box/ )
    • Application.ParseStandardParameters, Application.Version

Together with the new engine, we also release a new version of view3dscene 3.17.0, our viewer for X3D and other 3D formats. As a tool developed using the Castle Game Engine, it inherits all the enhancements 🙂 You will probably be most interested in new CommonSurfaceShader node and STL format support.

Comments on the forum ➤

Sound player/scrubber using Castle Game Engine

Posted on

Castle Game Engine sound/music player

I made a simple sound/music player using the Castle Game Engine 🙂 It is available in the engine sources in examples/audio/audio_player_scrubber .

It has all the features you would expect:

  • Volume,
  • Loop,
  • Sound offset (position in time) control,
  • Programmer-designed user-interface (ah, this brings back good memories:).
  • It can open wav and ogg files, and plays them using OpenAL.

It was coded to show that TSound.Offset works cool. It’s a new property added today (for Eugene Loza, see here), allows to get/set the sound offset (aka “position in time”).

You can view the code on GitHub.

Comments on the forum ➤

Design-time editing of 3D world (initial fun), many other improvements

Posted on

Editing SceneManager.Items at design-time
Editing SceneManager.Items at design-time
TCastleEdit control demo

First of all, I hope to finish and release Castle Game Engine 6.2.0 this weekend! So, watch this page closely.

The next release 6.4.0 will focus on Delphi compatibility, and start of visual editing (of 3D world and 2D controls) within Lazarus and Delphi. In all the pre-release excitement, I started playing around with it already today 🙂 I added a property RenderAtDesignTime to the Lazarus OpenGL control (patch here), and I made a simple design-time menu to add a sphere to the SceneManager at Lazarus design-time. See the screenshots!

In other news, there is a bunch of engine features done recently, not announced properly yet. Here they are (officially coming in 6.2.0 release this weekend):

  1. Rendering of normalmaps (through CommonSurfaceShader.normalTexture or Appearance.normalMap) was improved to work even when no diffuse texture is defined.
  2. TCastleEdit: a simple edit box. Demo in examples/2d_standard_ui/edit_box/game.pas . Not perfect, but already useful anyway 🙂
  3. New build tool command “generate-program”, to generate perfect starter program code and Lazarus lpi.
  4. Added easy Application.ParseStandardParameters method to the TCastleApplication in CastleWindow, may be useful for your standalone games.
  5. image_convert (in examples/images_videos/) has an additional command-line option –alpha-bleed, to perform “alpha bleeding” in batch mode.
  6. Added TDebug3DCustomTransform – a simple reusable utility to debug bounding boxes and spheres of T3DCustomTransform (like T3DTransform or T3DOrient). A generalized version of what you get for creatures (the ones from CastleCreatures unit) when you use RenderDebug3D.
  7. x3d-nodes-to-pascal is our new tool to parse X3D nodes and produce skeleton code to glue X3D with Object Pascal.
Comments on the forum ➤

Upgraded all rewards

Posted on

Support the engine development on Patreon ! We have just upgraded all the reward tiers, so now:

  • 1 USD gives you access to all private posts on Patreon,
  • 5 USD allows you to request new engine features each month,
  • 10 USD allows you to request new game each month,
  • 50 USD gives you access to the cloud build server ( !

Thank you!

P.S. Working hard on CGE 6.2.0, release very soon !:)

Comments on the forum ➤