Saturday, December 28, 2013

HBF, last 2013 update

Last update of the year, merry Xmas and happy new year!

Binaries and sources can be downloaded at the moment from SugarSync.


Latest changes:

BB)

  • Fixed a memory leak in TSpriteEngine.SpritesAt() when using spatial partitioning
  • New TGraphicDriver.Circle() primitive
  • Fixed a potential memory leak in TCollisionMatrix

HBF)

  • Hover now shows a different animation when colliding
  • Hover was looking for collisions in wrong rectangle
  • Mummy now shows a different animation when jumping
  • Mummy speed is twice as fast
  • Titan now kills non mechanical enemies when rolling over them
  • Bat collision improved
  • Fixed a weird move in jellyfish 
  • Blob always jumps to exit from traps
  • Droid laser also kills enemies 
  • Eye laser also kills enemies 
  • Fish now inherits from TBoundingEnemy
  • Flame now behaves like the spike (hides and shows)
  • New enemy Hooper 
  • New door bitmaps
  • New enemy hooper
  • New map Colors 
  • Spike bitmap shrink a bit
  • Spikes can now be reversed (top to bottom)
  • Sounds emitted outside hero's range are discarded
  • Explosions and blood die animations last longer
  • CorrectGravityOrientation() now properly adjusts the angle to the distance of the target tile
  • Now hero is in front of the ladders in the darkness level
  • Hero dies in a different way (BTW still not sure)
  • Minor map changes
  • ApplyGravity property removed, added Gravity.gNone
  • Platforms now use the bouncing properties (I'd lost that change in the hard disc failure and hadn't notice it)

New level Colors



Entering a new level


Sunday, December 15, 2013

Avoiding too much memory consumption

I realize that HBF was consuming too much memory so I tried the following approaches:

  • Avoiding in main classes the creation of internal classes until they are needed (the so called lazy initialization), since in most cases it's not mandatory to use them at all, for example one can freely assign any kind of value to sprites via GetVar/SetVar, but this is only used in a few classes. Another example is the use of distortions, currently they are only used with the grass element, so any other class doesn't need these distortions.
  • Create something that loads the bitmaps on demand (before all bitmaps were loaded), therefore TAnimationOptimizer was created, no code has to be changed with this approach, just wrap the assignation of animation via this class
Binaries and sources can be downloaded at the moment from SugarSync.

So what's new?





BB)
Avoiding early creation of aditional classes when creating sprites (vars, triggers and distortions)
More lazy creation approach on TCollision and TComponentEx (avoiding creation of internal classes when not used)
FillSurface() and DoColorKey() in D3D optimized a bit
Die event can be also assigned via closures (very handy)
New random methods based on KISS RNG
Some TLayer scan functions optimized a bit
New TSpriteEngine CountClasses() method (avoids the creation of a list like in Find() )
Laser beam didn't have assigned the camera so it was not shown
Fixed some overflow sound volume and panning issues

HBF)
Spike fixed (once for all?)
Avoiding early creation of lightmaps (darkness, etc)
New element princess (guess for what...)
There is a new animation optimizer so the system knows when to load animation bitmaps, just call TAnimationOptimizer.Instance.Get(), now the game does not load all graphics at the beginning
New element black hole (experimental)
Map folders renamed
New EnemyType property, removed IsMechanic and Indestructible properties (when Indestructible, hero's shield cannot kill the enemy)
Hero now has a limited amount of air under the water (in percentage), the water level has some escapes to get extra air
Memory leak in darkness fixed
Arrows now explode bubbles
Some entities no do longer generate shadows
Calls to Engine.Find() changed to Engine.SpritesAt() which uses the spational partitioning and therefore it is much faster
New map called "No name" based on bubbles
Enemies on top of Items won't try to move left and right all the time as if there was no tomorrow
New TGameSprite helper methods IsBall(item): bool and IsBubble(item): bool
New element door (it didn't need to be an item), Items should be very simple sprites that can interact with normal sprites
When Ball collides against a tile it stops (last level contains one)
New bubbles element
Keys, lives and princess created when needed
HandleSprings() refactored and renamed to GetJumpMultiplicator()
New class THud that does all the job related to displaying lives, key, etc
New enemy Tom
New images for Mummy
Bubbles were generating memory leak (what's wrong with me?!)
Bubbles now collide against solid tiles
Flame kills hero
Weird now tries to connect to the closer wall when instantiated
Trap door adds a delay for every instance, this way the doors are not synchronized therefore it looks nicer

Mummy and new bubbles


Air vents


Our new friend Tom, well I guess it should be bigger...


Friday, December 13, 2013

Observer and Observable

In BB framework what to do when there is a relationship between entities and one of them dies?

TDummySprite inherits from TComponentEx which implements the Observable/Observer pattern.

So for example bubbles are solid temporally so any enemy or hero itself can be on top of them, but since a  bubble can suddenly explode, the sprites needs to be informed in order to remove the reference, this is how I did it:

procedure TGameSprite.SetCarryTile(aTile: ISprite);
begin
  if FCarryTile = aTile then
    Exit;

  TriggerSpring(aTile);
  TriggerBalls(aTile);
  StopJumping;

  if aTile <> nil then
  begin
    //So for instance if a sprite is on top of a bubble and this bubble explodes (it dies), sprite is informed and can react
    (aTile as IObservable).AddObserver(self);

    Y := GetContactPlatformY(Gravity, aTile);
    if Gravity = gDown then
      Y := Y - Height;

    if State = ssFalling then
      State := ssWalking;
  end else
  begin
    HorizontalSpeed := 0;
    VerticalSpeed := 0;

    RestoreSpeeds;
  end;

  FCarryTile := aTile;
end;

And then override the method Update()
procedure TGameSprite.Update(aMessage: TMessage);
begin
  inherited;

  if aMessage.Sender = CarryTile as TObject then
    CarryTile := nil;
end;

And there you can update your pointer to nil.

Saturday, November 30, 2013

New darkness generator

Main improvements are new spatial partitioning, new darkness generator and the decoupling of the 2d camera.

Binaries and sources can be downloaded at the moment from SugarSync.

So what's new?

BB)
  • Buffer.Use() was used too early causing errors in 3d stuff
  • New class TCamera2D, it has been decoupled from TLayer.
  • TEnts new overloaded Load() method for streams
  • Layer and Sprites now can use the 2d camera
  • Polygons can now be set to the sortered buffer list
  • Removed any coordinate information from TLayer 
  • Sprites have a new property called ParallaxId, which can be set manually or automatically by the rendering layer 
  • Class TCollisionMatridx, implements spacial partitioning for easy retrieving of sprites at a certain position
  • Fixed rare memory errors in TSpriteEngine.Render() when killing entities
  • TLaser did not call Clear() before being freed (since is not a TSprite descendant) creating some memory leaks
  • Fixed a bug when a sprite had shadows and index was 0 (-0 = 0)
  • Tiles in maps can cast shadows
  • Engine 3d code cleaned a bit (long time...)
  • TLayer.ScanAttributes can be now set to a certain window (so not the whole map has to be scanned)
  • TSurface.Blit() heavily improved since it is the base for darkness
  • New TMem.Move32()

HBF)
  • Hero dies in a different way (not sure if I like it)
  • Fixed error in AdjustToLeftTile()
  • Stalactite now explodes when collisioning with shield (very realistic...)
  • Cannon is now set to mechanic
  • Fixed minor bug when pausing Spikeball
  • New backgrounds
  • Droid has a new sound 
  • Some 3d stuff is now shown in menus
  • All necessary changes for using new 2d camera were applied
  • VerticalVelocity renamed to Impulse
  • Explosion does not longer kill hero
  • Fixed bug with fishes that were facing none status
  • Fireballs in fire wheels are no longer TGameSprite but TNonGravityEnemy
  • Tiles now cast shadows
  • Fixed the spikes collisions (not working 100% yet)
  • Fixed a bug where game could not be continued more than once in the same level
  • Ending menu loads resources when needed
  • TBird was immortal...
  • Darkness is now generated in real time, showing also light emitted from different objects (candles, fire, etc)
  • New attribute ATTR_FIRE (serve as dying flag and light emitter for darkness)

Editor)
  • Updated with camera stuff

Demos)
  • Code cleaned a bit

This is the new darkness generator



Wednesday, November 20, 2013

ChessKISS amateur division

Looks like ChessKISS did a good job this time, became third with same points than second and two points behind the winner.

Final Standings

34.0 - Waxman 2013

32.0 - ECE 12.01
32.0 - ChessKiss 1.7 64-bit
32.0 - Mediocre 0.5
30.5 - Absolute Zero 2.1.1.0
29.5 - Butcher 1.64 64-bit
28.5 - Bagatur 1.3a 64-bit
26.5 - Gibbon 2.57a 64-bit
25.0 - FireFly 2.6.0 64-bit
24.5 - Fischerle 0.9.30b
21.0 - MadChess 1.3 64-bit
20.5 - ProChess 1.02AD
17.5 - Carballo 0.8
10.5 - K2 0.35

http://kirill-kryukov.com/chess/discussion-board/viewtopic.php?t=7200

Binaries and sources can be downloaded at the moment from SugarSync.

Saturday, November 16, 2013

Time to profile

Main change is the ability to start from an already played level

Binaries and sources can be downloaded at the moment from SugarSync, from readme:

BB)

  • New pendulum.fix property
  • New TSurface.StarBurst()
  • System now decides when a buffer will need to be sorted (done via alpha, colorkey or 32 bits surface)
  • Shadows are now also cached (performance boost )
  • View in TLayer is now initialized on creation
  • Hash buffers optimized for 32 bits (before they were UINT64)
  • Fixed an rare bug with the D3D stage codes
  • The engine is able to load 32 bits image with different alpha and show them properly
  • New Layer RemoveItemsAt() and RemoveAnimationsAt() functions
  • BuffersToBeRemoved removed
  • Fixed minor issues with SeamlessX/SeamLessY 
  • Filenames in bigfile are now encrypted


HBF)

  • New method TGameSprite.Jump() (makes coding easier)
  • Mummy now jumps over dying attributes
  • Spike ball is able to stand fixed when in 90 degrees and some solid blocks 
  • New screen when entering levels (starburst effect )
  • Some stuff shown in special views is cleared per level and not keep it for the whole game (memory optimization)
  • New enemy droid
  • Eye laser can break walls when they are breakable
  • Rain and snow were adding double amount of items
  • Arrows were taking candidate enemies from the hero view, when they have to take enemies from their own view
  • Pickups, arrows, grass, spike and spotlight cast shadows
  • When a time pickup is taken, Spotlight is also paused 
  • Refactored coding for screens renders
  • FireWheel is shown with proper Z
  • New experimental wall element
  • Some images were 32 bits with no alpha, so they are reduced to 24 bits
  • Mechanic enemies throw explosion when die while normal enemies throw blood 
  • New hero sound when landing 
  • Added profiles, so the player can start from any already played level
  • Fixed some issues when dying and gravity is reversed
  • Levels can have clouds in parallax (level 6)
  • Fixed error in AdjustToLeftTile()


Editor)

  • Many errors fixed


New enemy droid


Levels can be continued

Parallax clouds


Rotating starburst shown when entering a new level

Saturday, November 2, 2013

The breaking walls and diving version

Trying to create some puzzles via cannon balls and/or spike balls since they can break walls.

Binaries and sources can be downloaded at the moment from SugarSync, from readme:

BB)

  • New class TPendulum in BB.Physics
  • FMUSIC_FreeSong() was not called every time a new song was loaded
  • New TBackground properties SeamlessX and SeamlessY
  • New TSurface.Fire (old skool fire...)
  • New property TSimpleSprite Radious 

HBF)

  • When hero collides with floor, an animation is shown
  • Arrows now can also kill enemies 
  • Collision from enemies to hero's shield are done via Radious 
  • Bat collision was broken for a few releases 
  • Error in gravity when one red light was not painted, the whole system was tagged as "not needed"
  • "Cluod" is able to Flip
  • Hero can now go diving
  • Hero releases bubbles when diving
  • New sea level 12 (previous 12 is now 14)
  • Birds don't appear in water levels (via new map property)
  • Collecting pickups was clearing the cell from the wrong layer
  • New enemy cannon 
  • Hover collides also with other hovers
  • New TGameSprite.ApplyEnvironment, if false no top/bottom collisions are performed
  • Cannon balls explode when hiting a wall
  • Cannon ball can also break walls if they are breakable
  • New property TGameSprite.DieWhenHit
  • New fish enemy called fishi
  • New enemy called froggy
  • New IEnemy.IsMechanic()
  • Arrows can only kill non mechanical enemies 
  • New spike ball that is hanging from ceiling (behaves as a pendulum)
  • Spike ball can break walls
  • Crepuscule is now integrated in the effect dispatcher
  • Scanlines are now integrated in the effect dispatcher
  • TFire is now TFireWheel 
  • New Flame prototype (old skool fire)
  • New dragon enemy (not used yet)
  • New music for level 13

Cannon balls can break some walls



New enemy froggy


New level totally under the water (also new enemy fishi)


New spike balls, beware!


Sunday, October 20, 2013

Playing with new levels and enemies

Keep evolving HBF, I hope one day I'm able to have a proper artist so I can mention this project with no shame.

Binaries and sources can be downloaded at the moment from SugarSync,  from readme:

BB)

  • When TSpriteEngine renders sprites it should had add the z not subtract it
  • New property for sprites UseEngineZ, by default is true, add z to engine z or just plain z
  • New property for sprites UseZForHash, by default is true, useful when sprites are moving around z and one does not want to create different buffers
  • When retrieving available resolutions we can now pass a ratio parameter, so resolutions with different ratio might be skipped (in HBF is 1.7)
HBF)
  • New level 13 (abusing of gravity)
  • Game checks for key and door when loading a map
  • Time and coins are now always shown in the top of the screen
  • TLaser was missing property Z
  • Many changes in sprites z.
  • Hero's tail, Fire, Grass, Spotlight and Eye were having wrong Z (forgot that non auto handled sprites do not have engine Z)
  • Arrow is no longer an enemy but an element
  • Door now has a z
  • Game collision refactored
  • New crush method so in the future we can do something different 
  • Boss1 falling too early fixed 
  • New enemy crab 

Cluod being angry (yes is not cloud :-)



Crabby


A "bit" of gravity


That's it for the week

Tuesday, October 15, 2013

Graviting in HBF

Some new interesting stuff has been added, like: grass, tails and gravity.

Binaries and sources can be downloaded at the moment from SugarSync,  from readme:

BB)
Fixed an issue with ClipLine() when parameters were equal to Width or Height
LineH() was not working properly
Line() was not working properly
TLayer, each possible different tile is now created on demand rather than only one continuously being modified
Sprites now support distortion (incline, etc)
New color blue sky
TFontEx can be read from BigFile
New interface ISurfaceDistortion
Fixed an issue that was freezing surfaces twice when they were created as cached (like shadows)
Added ZShadow (the depth that you want in relation to the main sprite)
Some shadow stuff was wrong
New property TSimpleSprite.Painted which tells after Render() whether the sprite was drawn or not
D3D can render to texture (preliminary)
Fixed overflow bug in TSurface2Poly, scan could excess the surface limits causing random AV

HBF)
Game now supports different gravities
Rays are generated in real time
Menu is more elegant
Menu screens refactored
Hover now bounces properly
New element grass (affected by wind)
Density can be defined in grass
New pickup Diamond that liberates coins when taken
Removed ApplyUpdate, duplicated property
New interface ISpawn
New class TGravityCoin
Spider does not try to enter energy ball when in immunity mode
Fixed memory leak in mirror
Trying to reduce the number of resources that are created in the game (switching to create on demand approach)
Hero and enemies now cast a shadow
Tuned once again the collision between hero and door
Fog is less foggy
TEnemy,RotatingDie property deleted
Bat refactored, some collision issues fixed
Hero can now have a colored tail
All tile comparisons are done via IsSolid() and IsEmpty()
Hero can't overstep bomb
Slowdown not affected when in immunity
New element Gravity
New interface IGravity
Coins can be affected by Gravity

Coins falling:


Moving grass:



Those arrows invert the current gravity:

Hero's tail:


Wednesday, October 2, 2013

HBF, improving usability

Trying to improve the usability of the menu

Binaries and sources can be downloaded at the moment from SugarSync, from readme:

BB)
  • TSprite.Cached was accidentally removed, fixed
  • Resolution can be changed on the fly via TGraphicDriver.Instance.ChangeResolution()
HBF)
  • Hover, new enemy 
  • Blobs removed, silly ending
  • Spotlight colors are generated in real time
  • Spotlight now slow downs hero when touching
  • Demon lava splashes correctly
  • Coins issue fixed (rotated ones were not counted properly)
  • New interfaces IGameSprite, IHero and IShield 
  • Resolution can be changed in the menu 
  • Volume can be changed in the menu


Saturday, September 28, 2013

HBF, having fun with lights

Playing a bit with some textures effects, the result is quite nice.

Binaries and sources can be downloaded at the moment from SugarSync,  from readme:

BB)
  • TSimpleSprite.TestOutOfScreen now also works with Layers
  • Frames are not increment anymore when in Pause
  • Object Id are now used for sorting buffers (sprites in same Z do some flickering since after the quicksort you never know which one has to be render first) for consistent Z order
  • Removed some TCharacter warnings

HBF)
-New spotlight cameras
-TCollision, fixed an issue width the surface sizes
-Spotlight improved
-Hero factor speed 
-More spotlights colors
-TBackground now supports Layers
-New backgrounds
-New crepuscular effect over layer 0
-Many Z changes (priority issues)

Colored spotlights floating around you (they are meant to slow you down)



Light affecting background and layer 0



Gargoyle being nasty



Monday, September 23, 2013

HBF, small enhancements

Glad to find some time to play with my toy.

Binaries and sources can be downloaded at the moment from SugarSync, details from readme:

BB)
-TSimpleSprite, Counters renamed to Triggers
-TSpriteEngine.SpritesAt() now optionally accepts a class
-Alpha taken into account when getting a buffer (full or none)
-Clipping in surfaces done manually
-Buffers are now aged, so they are deleted after a timeout (10000 by default)
-TSpriteEngine Find() and SpritesAt() accepts an array of classes, not just only one
-TIni recognizes remarks
-TRandom improved
-New property TAnimationSprite.PauseAnimation that pauses the animation (handy sometimes)
-New TLayer.ItemZ
-TRandom tuned for random float ranges
-TSpriteEngine.ScanMethod smOne fully supported
-TSimpleSprite.Blink (bool) improved to BlinkRate (int)
-New TLayer.ReplaceTile() and TLayer.ReplaceAttribute()

HBF)
-Fish and Demon recoding finished
-Demon splashes when entering the lava
-Bomb improved
-Boss1 wasn't really dying when going out of screen
-Option menu reflects changes immediately
-New readme! (crappy)
-New mirror element that reflects laser bounding (also game sprites are mirrored)
-Shield code moved from game to hero 
-Immunity stuff moved totally to hero 
-Eye mirror collision improved
-Offsets improved when in high resolutions
-Touching bomb does no longer kill you
-New tool to create the big file (it was about time)
-Now HBF detects that HBF.big does not exists and complains accordingly 
-Light from candle is behind hero
-Blob collisions cleaned
-When testing platforms for enemies, those ones with no gravity are discarded
-Minor adjustment so sprites falling do not collide on top of already passed tiles
-All Z priorities multiplied by 10
-Snow respects pause 
-New ice tile
-Added gargoyle that spits gas
-Fixed an issue when pausing sounds
-Items are now behind transparent tiles (so lifts can be shown behind the water)
-Candle more realistic
-HitEngine removed
-File nbc removed, added arrows, fire, cloud and hit files
-Bird switched to Engine 2 (closer in Z)
-New powerup that speeds up hero
-New fire flame tile
-Immunity is shown with a transparent bubble
-Map changes to reflect new stuff

Some images:

Laser bounding in mirrors while hero is protected



Hero is reflected in mirror



Monday, September 9, 2013

Good news (I guess)

Hi invisible crowd

I'm glad to announce that HBF has been restored manually line per line. It took a good effort to do it, so I'm ready to offer it for downloading (at the moment at SugarSync)

Additionally I've added some stuff like:

HBF)
-Added new element candle
-New extra life pickup 
-Fixed gravity error in blob
-Keys can be now configured
-Boss1 fixed
-New eye enemy
-Fixed an issue when recovering looping samples
-Intersection between door and hero improved

BB)
-Fixed issue with layers save path
-TSpriteEngine,assigning files when cloning was creating memory leaks
-TAnimationSprite, cache sometimes freed twice
-TCollisions only created when really used
-TCollisions, changed from IShape to TPolygonEx 
-TBigFile improved
-Fixed some rounding issues in sprites coordinates
-TSound a bit more robust
-New TLaser sprite
-Fixed a serious issue when freeing list of interfaces (boddy intfclear)
-Editor zoom in synch
-Many more objects inherit from TObjectEx, thus making easier to find memory leaks
-SpriteEngine, cache is freed after the sprites
-TSound, fixed memory leak when reading wave (silly me)


I hope now I will be able to update the game more often.

Monday, May 27, 2013

HBF discontinued

I sadly have to announce to the invisible crowd that due to a nasty combination of events like hard disk failure, wrong source upload in the last deploy and a lazy backup system, I've lost some of HBF sources, not the core and framework, but at least a susteinable amount of work.

Of course the hard disk can be recovered, but I feel that paying 800€ for that is too expensive.


Rest in Peace.

The good news is that as soon as I get my motivation back I will start a new project, this time if nothing goes wrong it will be a shoot'em up, it is something I always wanted to do.

Monday, April 22, 2013

Delphi XE4, very first impressions

First try with XE4 and I'm not able to compile:

BB framework, out of memory!:


HBF in debug mode (but I can in release mode, weird...), very weird message regarding generic collections:



Not a good start

Thursday, April 11, 2013

New HBF and BB versions, the big file version.

I've finally managed to put all data in the release version of HBF into one single compressed file (HBF.big), since many classes now incorporate the BigFile property.

BB framework and HBF are ready to be downloaded in the download section.

Other important changes are atmospheric effects, scanlines in order to simulate crt monitors and a brand new menu. Let's enumerate all the changes:

BB)
  • TSurfaceInfo removed, useless.
  • Some classes now inherit from TObjectEx rather than TComponentEx.
  • TFontEx does not longer inherit from TSpriteEngine but from TObjectEx.
  • TD3DDriver now calls Clear when trying to recover from lost operation, this fixes the weird errors when restoring the surfaces.
  • TAnimationSprite does not longer use a Pool but a dictionary for storing animations.
  • TPolygon does not longer use Pools.
  • TMaterial uses weak references.
  • Pool removed from TSpriteEngine.
  • TSpritePool removed.
  • TFontEx now has its own cache.
  • New TSurface.Lightning.
  • New BB.Debug unit.
  • Priority on maps removed since Z does the work.
  • TSpriteEngine now can load from TBigFile via BigFile property.
  • TMap and TLayer now can load from TBigFile via BigFile property.
  • Many classes with LoadFile() now get the filenames as parameter rather than properties.
  • Some little improvements in the TBigFile to make it more handy.
  • Some warnings removed.
  • FMod library is able to load from BigFile.
  • New BB.Screen.Menu menu class.
HFB)
  • New EffectDispatcher unit that can emit night, rain, snow, fog and darkness effects.
  • Thunder is shown when lightning.
  • New enemy demon.
  • New enemy fish.
  • Hero is also created in the sprite factory.
  • Memory issue when creating rotating platforms fixed.
  • New element trap door.
  • Map changes to include trap door.
  • New sound trap.
  • Fixed an issue with the RotatingDie option in birds, now set to False.
  • Scanlines added, they can be turned on/off in the .ini file.
  • Door is not longer an interface but a class.
  • HBF release mode is now able to load all files from the big file.
  • Music unit refactored.
  • Fixed some minor stuff when pausing and effects were executed.
  • When game finishes all sounds are stopped.
  • Constants renamed to GameTypes.
  • New default menu.
  • New setting class and file, all ini options moved.
Fog effect:

New menu:

Rain:

Night:

Snow:

 

Thursday, March 21, 2013

March update, getting older soon...

HFB game experiment and BB framework updated:

  • BB
    • TSpriteEngine, fixed some minor Z issues
    • New TSpriteEngine.SpritesAt() that returns the list of all sprites inside a rectangle 
    • New ISurface.GetRectangle()
    • New ILayer.GetSurfaceAt()
    • TSpriteEngine.Render() improved (list removed)
    • TAnimationSprite now updates the current sprite before testing collision.
    • TAnimationSprite.AnimationName now accepts an empty string (meaning that no animation is set)
    • gsPause removed from TGame state, now it is a variable
    • Fixed some bugs in the collision system
    • New ISprite.SetOnDie()
    • TSoundFactory now stores as cache IBuffer (not TSound)
    • TQueue<T> improved
    • TPolygons removed (didn't make sense)
    • Remove all TSprite method related to pointers for surface access since all of them can be done via GetSurface
    • TSuperSprite removed (never used/tested)
    • TInterfacedObjectEx = TObjectEx
    • Surface cache is now searched per index rather than hash
    • Buffers are finally sorted properly and selected automatically via hash (property SortBuffers, False by default)
    • Surface cache in sprite engine improved
    • TPolygonEx.GetHash() improved
    • New TPolygonEx.HasAlpha() (used for polygon hash so now we only have 0 or 1, not 0..255)
    • Render buffers now clean better the D3D stages
    • Some primitives were not filling properly the Z render buffer
    • Many memory leaks removed!, TAnimation,,TSpriteEngine ,TSpritePool ,TLayer ,TDummySprite ,TCollision ,TSurface2Poly ,TSurface ,TPolygons ,TLogHandler ,TSingleton ,TRenderBuffer ,TSoundFactory ,TEvents , TObjectPool, TConcurrentDictionary, TEvents

  • HBF
    • All game sprites are inherited from TElement 
    • New platform that can rotate around an axis
    • THero slope code refactored
    • New sprite var SLOPE
    • TGameSprite.IsDieAttribute() that accepts a cell
    • New prizes "Time", "Kill Them All" and "Immunity" (bitmaps, units and classes)
    • TGameSprite CreateItemAt() renamed to ConvertTile2Item()
    • When hero dies on top of a moving ball, the ball stops
    • THero.IsCollisionBottom() code cleaned
    • New element Rainbow (a bit silly just testing)
    • New enemy Titan
    • Hero now frees the samples (memory leak)
    • Some new samples (New metal sound, Titan uses it)
    • Some new music 
    • Removed some unused units 
    • Improved TSoundDispatcher, now all sounds are played via this class
    • Pause now pauses all playing sounds
    • Lava and water are not longer treated as solid so some enemies can move inside, like Titan
    • New SpriteFactory (file and class) (all sprite creation move to TSpriteFactory)
    • Pixel shader used then pausing enemies via pickup 
    • Hero cannot pickup coins when dying
    • Background does not longer move 
    • Background is now freed (memory leak)
    • SpriteEngineLayer2 is now freed (memory leak)
    • TSpriteFactory is now freed (memory leak)
    • Fixed a double free class with rotating platforms
    • New classesTNonGravityElement and TNonGravityEnemy, some enemies and elements inherit from them.
    • New enemy Chandelier 
    • All sprites now behave like hero (they interact with the environment since many functions were moved from THero to TGameSprite)
    • Ray more realistic (...)
    • Blob side collisions improved
    • Bomb side collisions improved
    • Titan side collisions improved
    • All tiles can now be "moving tapes" (before they were sprites)
    • When starting and finishing a level a fading effect is used 







Summer is coming soon!