I hope you are all safe and well. Due to bloddy coronavirus thingy I had plenty of time to write code so here we go!
Found binaries at OneDrive, main changes:
Here is the full list changes:
HBF)
- New element TCable
- Weird corrects its angle when taking a new path
- IInteractive.Interact() implementation was crap, improved
- New element OldLamp
- THero.CanJump() improved
- New THero.TileOnBottom()
- Now Ropes use a better visibility test
- New TTriggerDispatcher GetResult(), ScriptCount() and SumVar(), Print(), ClearTileAt(), ClassCount(), CopyVar(), RemoveEntities(), SpawnClass(), AlphaLayer(), SetShake()
- TGameSprite.SetGameServices() is no longer virtual
- New enemy Brachion
- Now platform's angle is taking into account (not working 100%)
- New Kurkani bitmap
- Nnew Gatashi bitmap
- TGameSprite.SetGameServices() is no longer virtual
- New enemy Brachion
- Now platform's angle is taking into account (not working 100%)
- TGamesprite renamed to TActor
- Actor.Master is now Actor.Host
- New property TActor.AutoPriority
- Game was not cleaning the sound cache between levels
- New element PhoneBox
- Now Turrets show a think red laser when chasing players
- New property TCotton.MinDistance
- New property TLight.Animation
- New property TParticlesWrapper.MinDistance
- New property TBasicTurret.LaserColor
- New property TBrachion.LaserColor
- New property TSkeleton.MinDistance
- New property TNPC.MinDistance
- New property TPrincess.MinDistance
- New IBaseItem.IsCollectible()
- New THero.GetCollectible()
- Now shop items are sorted by name
- Now after entities are created, the cell attribute is cleared
- Now shadow Z is calculated dynamically
- TActor.CorrectGravityOrientation() improved
- Now achievements are stored in a file and no longer internally
- New TCable.Perturb()
- Runes are no longer keep in the profile, TRunesHelper now keeps all runes information for the current game
- New TTriggerDispatcher.Sleep() fixed
- New class TEntityTracker that helps any entity to find the shortest path to a target
- ExplosiveBarrel behaviour improved
- New Actor property Range
- Actor.DestroyArea() improved
- Hero can now go down from TwoWays (like clouds) platforms pressing down + jump
- New attribute GRAVITY_UP so a map can have a different gravity deom design
- New method TActor.GetPlatformFromCenter()
- New TActor.ContinuousSpriteCollision() that helps fast moving sprites collisions
- Now arrows adjust correctly their angles when gravity is up
- New TActor.AdjustPositionToTile()
- Now darkness can rotate lightmaps coming from entities
- TMachineGun many fixes
- Changed some Sin() and Cos() by SinCos()
- New element IceSpike
- New pickup TCollectible
- Now some enemies uses new shadow queues
- New properties TEnemy.PainChance and PainDelay
- All TStrings changed to TList<string> or TStrings<T>
- New TTriEye properties ContinueAfter, FireAfter, ShootingProbability
- TActor.ContinuousSpriteCollision() improved
- New element SuperBlob
- New property TActor.InitialEnergy
- New explosion with particles, I believe they are cooler
- When bomber is going to be alerted now also checks that there is nothing solid in between
- Now Arrows inherite from TBullet and fixed a bug where an arrow did not know that parent (ArrowSpawner) was Dead
- New weapon Amus
- Fixed a bug where an actor could die many times in the same frame
- New TSoundDispatcher.DelayedSound()
- Now dynamic priority takes into account liquids
- Now when jumping the speed from platforms is take into account giving more inertia
- Now sound system tries also to use the youngest sound when channel is full
- New achievements...
- New enemy Rotating Spike
- New TActor.GetEdgeFromVelocity()
- New property TActor.ExplosionTime
- Seems BASS64.dll is modifying MMX overflow flag while playing, so a workaround was created
- New effect to shake tiles
- New ITriggerDispatcher.
- Bat fixed
- Scepter won't stop on solid items
- Added lightness to levels
- Now some shields can reflect a laser
- New bridge elements
- Hidden doors are no longer shown in minimap
- Up spikes are now correctly aligned
- Poison was not recovering after 10 seconds
- Now fish when is out of water feels the gravity
- New Players.GetHeroes(TRect) that improves the performance
- New shop/inventory item LastExecution that helps with cadency
- New extra THomingMissile
- Hero extras handling improved
- Now hero uses a buffer jumping before falling
- New generic modifying cube system
BB)
- Now maps can have configured slopes
- New ISprite.GetLayer(), DistanceXBetween(), DistanceYBetween()
- TMem.Scan32() in the 64 bits version was flawed thus last 64 bits version of binary was broken
- New TSurface.Tween()
- Now triggers can have parameters
- New TParticleEmitter properties AlphaFrom/AlphaTo
- Many functions in TSprite are no longer virtual
- TSprite.OnChange does not update collisions if collisions has not been created yet
- New TSurface.Replace()
- THashEx.Generic() optimized when size is multiple of 4 (four bytes at a time)
- New TScreen.DrawSurface(surface, rect, z)
- New TMap.ScriptCount(group)
- New TScript property LinkedGroup
- New TMemVar.Sum()
- Many loop vars change from integer to NativeInt when used with pointers as offset so code generated is better
- New TMem.AreEqual<T: record>(A, B: pointer; aSize: cardinal): boolean
- New TSoundFactory.ToMono()
- Now TSurface.FlipX is much faster
- TD3DSurface.FillSurface() performance when no colorkey improved
- TKinematic improved
- New TSwap<T>.SwapContent(A, B: pointer)
- New TMath.CenterOfPolygon()
- New TMath.ThrowAngle()
- New class TCameraPrimitives, for primitives with camera
- New TParticleEmitter.IsStarted()
- A few optimizations in loops with field variables from object in many classes
- TLayer.GetCellNoCheck() used in some functions rather than GetCell()
- New TInterfaceHelper.Copy()
- Now individual layer tiles can be glowed
- New TLayer.GetDistance(), GetTileRect()
- New property TLightSprite.Blur
- New TRGB.Dolly(), Martinique()
- New TParticlesTextureCache class
- New ISprite.SetEngine()
- New TColony<T>.Exchange()
- New TCollision.CircleInRect(), TCollision.CircleInCircle(), TCollision.LineInRect(), TCollision.PointInTriangle(), TCollision.RectInCircle(), TCollision.TriangleInRect()
- Now once per second system checks for "aged" buffers in pool in order to discard them (10 seconds at the moment)
- TSpriteEngine.GetSurface() performance improved a little bit
- Now a TKinematicArm can have many TKinematicSegment
- New TClamp<T> helper functions
- New TObjectHelper.CopyObject<T>
- New TMath.Clamp(), DistanceManhatan(), NormalizeAngle180(), Atan2(), Log10(), Log2(), Sgn(), Ln2()
- TPathResolver finally works 100%
- New class TTickHelper
- New TDirectionHelper.Rotate180(), Rotate90(), Rotate270()
- New TMath.InverseNormalize()
- Particles now handle much better when alpha changes with textures (dictionary of pool)
- New TMath.NextPowerOfTwo()
- New BB.Helper it contains all BB classes and records helpers
- New TDummySprite.GetLayerPosition()
- New TSurface.Copy(), MirrorX(), MirrorY()
- Now Cadency in .ini, .extra are set as milliseconds
- New TSprite.GetDelta()
- Now the precise collision system supports FlipX and FlipX (besides zoom and angle)
- New IObject.GetClass()
- New TFloatHelper.Is1()
- TCollision.TestBB() improved
- TSurface.Rotate() improved
- Now in looped maps the offset can be set (does not have to be zero)
- New TParticleEmitter.Random
- New TParticleEmitter.RandomRate
- New TSprite.GetCenterF()
- New class TCPU
- New TRGB.Gradient()
- Now TSprite FlipX()/FlipY() also flips BoundingBox
- TSprite.GetBBF() improved
- Particles cache system does not longer need a group
- New property TParticleEmitter.RandomAngle
- New TMath.Normalize()
- Many exceptions changed to asserts
- sprites.CenterX/Y were not taking into account CoordinateOrigin...
- Better management of particles
- New unit BB.E3D.Types
- New Particle Emitter pool
- New motion tiles has color property in .ini file
- New TRGB.HasColors()
- Updated to last version of bass.dll
- New TCPU.LDMXCSR() and TCPU.STMXCSR()
- New FloatHelper.InBetween()
- Added moving slopes tiles in Maps
- Fixed slope sizes when no colorkey
- TStrings<T>.SetItem() was not working properly
- New TGraphicDriver.OnClear event
- TSpatialPartitioning.GetArea<T> improved when area occupies only one cell
- TSprite properteis Painted and Locked removed
- TSpriteEngine.Find<T>() casting improved
- TSpatialPartitioning.IterateSprites<T> casting improved
- Scripts rollback handling improved