Showing posts with label HBF. Show all posts
Showing posts with label HBF. Show all posts

Saturday, October 17, 2020

Summer is gone, pandemic still there

Weird summer, not crowded at all, but at least living on an island has some advantages...

This is a new release, main topics are:

  • New level includes the new concept Sectors
  • Better continuous collisions with sprites and tiles

Find binaries at download

HBF)
Changed (class as IInterface) with class.GetInterfaceEx(IInterface, intf)
New extra THook
New triggers ClosestHero(), ClearDialogs(), LockPlayers(), UnlockPlayers(), ActivateScript(), EnableTeleport()
New TActor properties, Counter, Phase, AutoFacing, QueueColor, NoCollisionTime, AutoContinuous
New mewthods TActor SnapTo(), TActor.InSight() 
Now NPC can be killed, can use vars in their text and can now ask questions
Added some silly NPC 
New method THero.Heal()
New property THero.MaxHealth
Class TElement removed
New abstract class TNonElement
Now MineBomb is self activated when hero is at certain distance if nothing is blocking
Now dialogs can include portraits
New method IGameServices.GetViewport()
Brachion improved so it does not get stuck in some situations (hopefully)
Now RotatingSpikes can be set horizontally from left or right
Now any actor can be solid, thus not passable
Now platforms can have a tape speed behavior
New level Sectoring
Now when keep pressed attack hero goes faster
Now platforms can be linked to other platforms as mutual exclusive, so visible is toggled among them
New TItems properties Consumption and MaxQuantity
Sounds from hero weapons also have HERO_SOUND tag so they can be hear from other actors
New property TArrow.NailBehaviuour
New game helper IMapSectors
Now when hero got the torch rather than see the whole screen, the light is twice the size
Continuous Tile Collision improved
New unit Enemy.pas, all base enemies are now located in this unit
New TSoundDispatcher .IsPlaying() and .PlayUnique()
Homing missiles target improved
Now TScepter uses segments from map 

BB)
New methods, TSurface SetText(), Box(), AreOpposite()
New properties TSprite IsTimeOut, Area
New method TAnimationSprite.AnimationTime()
New class TInterfaceCache
New method TMap.AsMinimap()
Now colors in TRGB record are no longer functions but consts, thanks to a record helper (nice trick)
New method TTimeHelper.AsTime()
New TCounters class to help the use of them in the game
New helper class TEquality<T>
New class TStackList, a list that resides in the stack rather than in the heap
Now TScreen.NewSurface returns TSurface rather than ISurface 
New methods TMath MultBy7(), Probability()
Method TSprite.CenterFrom() now takes into account CoordinateOrigin property
New rtti TValue record helper TValueHelper
TBufferHasher.Calculate() improved hash in order to avoid collisions
SpriteEngine.Find() changed to Engine.Find<T>()
New method TSpriteEngine.SpriteAt<T>(aX, aY: TFloat): T
Uses of ItemsLayer.GetItemAt() changed to TSpriteEngine.SpriteAt()
Uses of ItemsLayer.GetItemsAt<> changed to TSpriteEngine.SpritesAt<>
New property TScript.Active
New method TSound.Replay()
Now TCollision.IntersectionPoint() uses a faster approach
New method TFloatHelper.IsGreaterThanOne()
Starting to use Mormot for calculating hash values (does 4 bytes at a time)
Fixed a bug in TObject.DeleteObserver() where the double link was not properly removed (source of long time random AV errors)
Now TMap can have sectors 
New methods TMap AddSector() and RemoveSector()
New method TCells.Sort()
Now grouped scripts can be set to be executed in certain order

Map Editor)
Now it shows the configured sectors




Monday, October 21, 2019

Martina is coming! (and also a new version of HBF)

Oh well, is never too late to have another baby, so happy...

In the meantime I always find time to change little things here and there. Most important changes since last time:

  • New trigger link types rollback and many
  • New render when openning secret doors
  • New extras: Magic wand, blue ball
  • New enemies: mine bomb, wall bouncer, tri eye
  • New explosion types
  • New elements: alarm, candy machine, frame
  • New weapons: machine gun
  • New level Lifting
  • New tool Path Editor
  • New effects in surface like: displacement, connecting dots, 
  • More control over UV in sprite textures

Found binaries at OneDrive

New level:


New effects:



backlog:

HBF)

  • New trigger action ClipEntity()
  • Now Machine gun can also shoot up
  • Now Basement can throw homing missiles
  • Teleport was not always handling correctly the collision with guests
  • Now when a hero is killed its seeking homing missile looks for other heroes if available
  • Robot can also now throw missiles 
  • New TPlayerHandler.OtherHero(hero)
  • Now missiles do some smoking trail 
  • Now TSpriteDispatcher has new properties: Tile, SpriteProperty and SpriteValue
  • New trigger ResetTriggerSelection()
  • Fixed some issues when entities were crushing
  • Fixed an issue when a fast platform was going up and hero was jumping
  • Fixed an issue with tapes not checkking both sides when facing was equal to none
  • Now Bouncing Laser is aware of hero's immunity
  • Bouncing laser now also bounces with solid items
  • Weird now also check for solid items
  • New method TKeysHelper.Peek()
  • New method TEnemy.CanBeExcited()
  • Fixed a bug with none gravity items that they were checking collisions against the world
  • Now only when shopping hero can sell items
  • Now Bat is able to hang upside in moving platforms
  • Now Missiles also destroy enemies 
  • Now Inertia is accumulated 
  • Now explosions also affects moving platforms 
  • New element Tube, it throws air up, pushing items, hero and enemies
  • Collisions with moving blocks improved
  • Collisions with platforms are more stable
  • When pushing items they also stop with solid items
  • Platforms now can follow a Path
  • Fixed a camera bug when teleports where on same X
  • Mine can follow a  path
  • Now hero checks if solid items are piled at restarting position when dying
  • New level Lifting
  • Path helper now can handle more than one attribute 
  • New TSoundDispatcher.Count() to count all concurrent playing sounds 
  • Now when GameServices is assigned all published properties are already set 
  • Sounds position are update on even frames 
  • Now when landing on moving platforms ssLanding is set
  • New set of minimaps
  • Sprites priority changed to plus rather than minus
  • Improved a bit some internal callbacks
  • Laser improved
  • Shoes counter mechanism improved
  • Now when an arrow hits a solid tile it will fall rather than dissapear
  • property SolidFromBottom renamed to OneWay
  • Now when a mine moves if bounces if a solid tile in on its way
  • Now camera when zooming out distinguish between horizontal and vertical distances
  • More Abs() replaced with TFloatHelper.Abs()
  • New TGameSprite.SolidItemAlignedOnTop()
  • TGameSpriteIsSolid() no longer returns a boolean 
  • New GameSprite interfaces Window and CameraHelper
  • TestWorldWollision() reordered to a more real approach
  • Now Tube force is done with Power property
  • More use of TFloatHelper.IsZero(), TFloatHelper.NotZero(), TFloatHelper.IsGreaterThanZero(), TFloatHelper.IsLessThanZero(), TFloatHelper.IsGreaterEqualThanZero()
  • Now in order to push a block you need some power
  • New Path styles horizontal and vertical
  • New item glove, so heavy blocks can be pushed
  • Fixed a potential AV error when a guest was in the teleport (2 seconds) and then set back to state ssMoving but it was already dead, now Teleport is no longer in charge of the timings but the guest
  • Now Trigger system can zoom in/out the camera 
  • Fixed an issue when updating the level on an extra the previous item was not released after purchasing it
  • Now Tube can be up side down
  • Fixed an issue with TBouncingLaser at certain angles 
  • Fixed some more Z issues
  • TBasement now inherits from TSpawner
  • Now THoming can follow a path from the new path editor
  • New TGamesprite.Velocity (replaces impulse and inertia)
  • Now when jumping oneway platforms hero won't stop 
  • Now using {$I HBF.inc} to includew common definitions
  • Now different scanlines can be loaded
  • Some inverse multiplications here and there
  • Platforms now also appear in minimap
  • New property TArrow.FallWhenHit
  • Now arrows can burn
  • Now when hero attacks with a weapon that can different power depending on how long you press a button then it shows a bar
  • New trigger SetCameraRotation()
  • TBendArrow can also Burn
  • Now players are mapped correctly (J1,K,J2,J3 = P1,P2,P3,P4)
  • New types for ColorTiles: custom, expanding, etc
  • Changes when bouncing platforms to avoid -0 in Horizontal or Vertical speed 
  • Now during the same game if fight is win on a certain level then runes won't appear again in that level
  • Head fire collision with items improved
  • IsSolid() improved
  • Now TGameSprite.Execute() method has a param (useful to send params from scripts)
  • Now "Severe Gravity" uses paths created with the editor for some parabola missiles
  • Now "The Labyrinth" uses the new trigger type Rollback
  • Now secret doors show something different when opened
  • Stalactites are break differently when broken
  • New TMagicWand extra
  • Item.IsRepeatable removed
  • Item.IsActive removed
  • property InventoryItem.IsActive renamed to IsSelected
  • Hero.CreateItemsFromInventory improved
  • New TGameSprite.GetEmitterPosition
  • Basement, new property TimeToWaitWhenMultiple
  • Missile, new property callback OnTargetGone
  • Now a Mine does some rotating and zooming
  • New TEnemy.SleepAndWakeUp()
  • Now coins are stored in inventory
  • Now already thrown bombs can be picked up
  • New extra Missile 
  • DestroyArea() is more accurate
  • Now shop shows the quantity left
  • New  TGameSprite.CircleExplosion()
  • New property TBasicPlatform.CanDie 
  • if platform is moving in a tape and an entity is on top, then take that speed
  • New element Alarm 
  • Now the chat shows who is sending the message
  • Now TTriggerDispatcher can notify any observer about public triggers 
  • Now Cone is used, why it was not used?
  • Door, teleport is got a new texture map for darkness
  • Camera can now be Freezed
  • TPlatformBall got a new surface
  • New extra BlueBall, use them and then attack!
  • New IGameServices.GetParticles: IParticles
  • Now rather than TryXXX() functions interactible entities implement IInteractive (post, door, wheel, teleport, terminal, NPC)
  • New element and achievement Candy Machine
  • property AutoCenter renamted to AttachTo 
  • New WallBouncer enemy
  • IGameSprite renamed to IActor 
  • New TGameSprite.Face()
  • New TGameSprite.Yell()
  • New Shop item properties Cooldown (before was delay) and IsRechargable
  • New TGameSprite.DelayedExplosion()
  • New Enemy properties Deaf and Visibility
  • New weapon TMachineGun
  • -New THeroBullet class
  • TEnemyKiller now is used as base class for enemy bullets
  • New property ShopItem.Input (normal,accumulated,continuously)
  • Now max_items = 999
  • property AttachTo renamed to AlignTo
  • Now when entering teleports new particles are used
  • Now bombs have some randomness
  • New enemy Mine Bomb
  • New enemy TriEye
  • Kurkani now is shown in darkness
  • New TGameSprite DieOnLand and DieOnWall properties
  • New element Frame 
  • Now Laser take into account solid items 
  • New global var TGame.GD

BB)
  • Fixed a nasty bug that was slowning down the game when gravity for reversed, fast collision was not used because sprites were aligned at 180º
  • TSurface.AverageColor() is now a bit faster
  • New TParticleEmitter.Priority property
  • More info for screen pools
  • New IGraphicDrawer.Frame()
  • New TStrings<T>.AsText()
  • New TRect helper Clear()
  • New sprite property ZShadow 
  • Optimizing interface as TSurface with interface.AsObject
  • New ISelf.GetInterfaceEx() so [unsafe] references can be used, therefore Supports() is no longer used
  • Many minor performance improvements here and there
  • Direct3D Prepare() is now optimized for specific rendering methods
  • New Radix sorting
  • Fixed a silly bug in TBezier class that didn't generate the first step correctly (discovered after creating a path editor)
  • New TFloatHelper.Is270(), TFloatHelper.Is90() ,TFloatHelper.IsOne(), TFloatHelper.IsMinusOne() and TFloatHelper.Not1()
  • Aspect camera is not continuously recalculated but only when needed
  • Camera viewport() and CalculateProjectedTileCount() with some zooms were not correct 
  • New TFloatHelper.Max() and TFloatHelper.Min()
  • New path editor
  • New TAnimationSprite.RandomInitialFrame
  • Now using {$I BB.inc} for common properties
  • No longer use of TGraphicDriver.Instance in the code
  • New TLayer.CleanTilesWithAttribute()
  • New helper TRect.Put() and TRect.New()
  • New helper TPoint.Put() and TPoint.New()
  • New RGB.Put() and TRGB.New()
  • New TVectorEx.Put() and TVectorEx.New()
  • Inlined methods used within the same class must be implemented first
  • Important functions where IShape was used now use TSimplePolygon, performance boost
  • Now TSpatialPartitioning.GetArea() exists quickly if there are no sprites in the whole grid 
  • Now TInputEx.GetCurrentCounter()
  • TFloatHelepr.Abs() is slower than standard one
  • class TSimplePolygon28 renamed to TPolygonTexcureColor, size is now 32
  • Bass DLL updated to latest version
  • New LinkType for scripts ltRollback, for those scripts that work as long as target is colliding, otherwise a rollback script is executed
  • Fixed an issue when locking more than once the same surface within the same tick
  • New TSurface.ConnectDots()
  • Rollback triggers now can have a timeout
  • Particles decimal rate 1.5 or 0.5 now work properly
  • New TSurface.GetAddressNoCheck()
  • New Sprite.EmitterType etDiffuse 
  • New sprite.CalculateNormal()
  • New sprite.CalculateSpecular()
  • sprite.GetRectangle() and sprite.GetRectangleF() now takes into account CoordinatesOrigin
  • New TScript.LinkType ltMany, in order to connect many scripts, if all are activated then execute the related script 
  • New class TEasing
  • New IParticleEmitter and IParticles
  • TSurface.ExtractPoints() improved
  • Now TParticleEmitter.SetImage() has a color parameter
  • TSurface.ExtractPoints performance improved
  • TRGB.Clamp() fixed
  • Surface blit() can now use ColorKey
  • TSurface.Rotate() was not working properly
  • New TSound.GetDuration 
  • TGraphicDriver.DrawSurface(), FlipX and FlipY removed 
  • New TSprite.ScrollTexture()
  • New TSprite.TilingScale(), to scale the UV of the sprite 
  • New TSprite.SecondarySurface, so to special effects with another texture
  • New property TSprite.TextureAddress
  • New TSurface.GetType()
  • New TSurface.Displacement(), to apply texture displacements 
  • New TSurface.ScrollX() and ScrollY()
  • Now surfaces are check for colorkey (maybe they are set but in fact no colorkey exists)
  • TSpriteEngine.Capture() now move bytes with TMem.Move32()
  • Many TSurface operations improved, using GetAddressNoCheck(), not always calculating crc, proper casting of integer vs cardinal, PCardinalArray, for rather than while, 
  • TSurface.ScrollY() now uses TMove.Move128()
  • New TMem.Scan8/16/32/64()
  • New TSprite filter sfGaussian
  • New TGraphicDriver.ClipRectAndTexture()
  • New TSurface.ReduceColors()
  • Finally sprite quads can be clipped
  • New TRGB.RGB2HSL()
  • New TSurface.Resize()
  • New TSurface.ColorCount()
  • New class TFixedPoint, to facilitate the fixed point maths
  • New TSurface.SetPixelNoCheck()
  • Now Sprite BB is only calculated when refreshing sprites 
  • Now surface rectangle is only calculated when refreshing surface 

Saturday, March 9, 2019

Happy birthday daddy!

I'm still improving the engines just because is lots of fun.

Found binaries at OneDrive

HBF)

  • Many enemies can now follow a path 
  • New enemy BouncingLaser
  • Now boomerang does some curve
  • Turrets won't shot if there is a wall in between
  • Fixed TWeird when moving fast 
  • When an enemy is inside a bubble it won't kill hero
  • New SonicBomb item
  • Now any tile can be disintegrated
  • New achievement break a glass 
  • Collision top now also check for slopes
  • Ray was painting surface even if not visible
  • TPathHelper now also works in pixels
  • New property GameSprite.ItemsLayer since it is heavily used
  • Now TWeb disappear with alpha 
  • Some map changes
  • TGhost animation was not always correct
  • New TSegment enemy
  • Fixed a bug selling items
  • New TGameSprite.Coins property
  • New achievement "find all fruits"
  • New fruit items
  • New enemy TBasement that can launch missiles
  • Now TGmeSprite.Explotion() is more versatile
  • New TDoubleTurret
  • New test map so that new entities cab easily be tested
  • In debug mode one can create new entities on the fly 
  • New TBezierEnemy
  • Some services are preloaded as properties in TGameSprite
  • TGameSprite.GetCollisionData() does include himself as item
  • New THoming missiles 
  • New TRobot enemy
  • Edit window now shows a blinking cursor


BB)

  • Non cached surfaces are created in default pool
  • Surface hash is calculated when creating the texture so no lock is needed
  • Now when locking surfaces the read/write flags are used correspondingly
  • If collisions have no angle and no zoom, the fastest check is done
  • New TSimplePolygon, tailor made for direct3d buffers, now all sprites, primitives and particles are done using them
  • Now screen buffer management is more stable
  • Trying to avoid AddRef and Release methods for interfaces when possible
  • New TObjectEx.AsPointer()
  • Now TColony<T> deals with interfaces without AddRed/Release
  • New TColony<T>.Insert()
  • Maps iterates i, j rather that j, i (cache benefit)
  • New graphics buffer pool
  • TSprite.Timeout property removed, use AddTrigger() and Die() instead
  • Now maps pixel conversions are done with SHR/SHL rather than multiplying
  • Now spatial partitioning conversions are done with SHR/SHL rather than multiplying
  • Minor performance improvements in sprites 
  • SpriteLights are now also cached
  • New TRGB.NotEmpty()
  • New TVectorEx.NotEmpty()
  • Starting to use inline variables (Rio 10.3) as a performance optimizer (declaring managed variables after early exit or on certain conditions)
  • TOrthogonalCamera is back
  • Fixed some issues in the collision system
  • Fixed an issue when packing vars for hashing
  • New TAchievements.Behaviour property
  • Angle was not reversed when camera is available in collisions 
  • Now Screen.Fade() has a Z param




Tuesday, January 1, 2019

Happy new year!

This release was focused on improving the global performance, so now the game is about 20% faster. Aside from that now the game has shadows maps, light maps, a new enemy Turret and a generic Laser.

Found binaries at OneDrive, here is the what's new:

HBF)

  • New element explosive barrel
  • Rope now ends with a circle
  • Observer Update() takes into account type of message 
  • Now heroes are spawned first so that they are aware about all other sprite coordinates
  • Cardride was broken since some releases...
  • Cable sparks now excite any mechanic enemy
  • Now sprites can be wake up
  • New GameServices.WakeUp(area)
  • New Crane entity 
  • Replaced MOD with AND when possible
  • Bomb, Titan and Worm can now sleep 
  • New trigger WakeUpEntity()
  • New IEmitter interface 
  • Solid layer is calculated when assigned the GameServices as .Layer, so GameServices.GetLayer(SOLID_LAYER) is no longer needed
  • New Compass shop item
  • New class TGameService for classes that need GameServices interface
  • New property TGameSprite.DefaultHorizontalSpeed
  • Now menu key can be set in hbf.ini
  • Net keys data moved to TSession
  • All input (local, remote and impersonate) goes to new class TKeysHelper
  • Some Z definition changes
  • Files clean up
  • New enemy RollingBox 
  • New inventory item Dynamite 
  • Collision grid is now 128x128 rather than 64x64
  • When an entity dies all his loop sounds are stopped
  • Entity sound emission center is also updated continuously
  • Sound code improved
  • Sound 3d is calculated more accurately
  • THBF now inherits from TObservableObject
  • New hero can duck
  • New element Darkness, darkness maps are only applied to background layers
  • New element Fluorescence
  • Now Explosions emit light
  • Now Nuclear emits light
  • Elements with no gravity are not affected by platforms (like boomerang)
  • New sound effects to be used: timeout, pitch, attenuation
  • Now sound system reuses a sound if same key and distance is lower
  • Too far away sounds are discarded
  • Playing a bit with sound occlusion
  • Now sounds can sleep and fade 
  • Now there is a generic way to store already taken objects
  • New TAchievementsHelper, all achievements code went there
  • Gamma is stored in config 
  • When Gatashi gets stuck then too many task calls to Bezier are made and music is interrupted, improved
  • Now enemies roar from time to time (playing with 3d sounds...)
  • Now lights are supported in the background layer 
  • Some solid blocks were disappearing  a frame before before being converted into an item
  • New element generic laser
  • Now shadows casting into walls are more optimized
  • New achievement "kill a fly"
  • New enemy turret 
  • Minimap refactored
  • Shadow diameter can be now set in realtime
  • New decorators in front layer (glass)
  • New interface IMinimap 
  • When a NPC is on a platform it goes away jumping


BB)

  • TSprite.Blit() reordered to do less IF/THEN/ELSE
  • Faster Blur() method
  • New TDummySprite.Move(x,y)
  • New TDummySprite.CollisionAt() it simulates a collision at X/Y 
  • Script property values are written using rtti
  • New property TSound.IsStarted 
  • TSurface2Poly optimized 
  • Improving the code that calls _intfclear
  • Using last version of BASS
  • New TLayer.CleanAttributes() and TLayer.CleanTiles()
  • New TVectorEx.Avg()
  • TAnimationSprite.Tick() and TDummySprite.Draw() improved a bit
  • New TObservableObject
  • TDummySprite now inherits from TObservableObject
  • New TSuperSprite helps to composite sprites 
  • New TAnimation.FileName
  • New TSound.Flags
  • TBasicCamera.Rotate() performance improved
  • TCollision performance improved
  • TSpriteEngine.Render performance improved
  • All single comparisons changed to TSingle(x).AsInt
  • TCollision hash key is no longer composed by strings but integers
  • TCollision minor performance improvements
  • TSprite minor performance improvements
  • New TCamera.ProjectVertexW when 1/Z is already calculated
  • Now TSprite caches W=1/Z, big performance
  • Quad effects and filter are done in the setter
  • TGraphicDriver.InView() performance improved
  • TGraphicDriver.DrawQuad() performance improved
  • Now TSprite.Z is TSprite.Priority and TSprite.DirectZ is TSprite.Z, both are combined to create the final Z
  • Sprite rotation coordinates are cached 
  • Now a MMX version of Fill32() is used
  • New TGraphicDriver.SetGammaRamp() to apply gamma (only fullscreen)
  • New fast Utils.Percent75
  • New THashMap<K,V>
  • New hashes for generic, 8, 32 and 64 bits sizes
  • Maps can now have blur
  • Events can be now grouped
  • Many float divisions changed to inverse mutiplications
  • Particles, float divisions avoided when possible
  • TScreen.DrawShape() improved not using FCapacity dictionary
  • New Cast<T>.Cast() 
  • New THashEx.Pack_Four()
  • Better performance in the D3D handling of buffers
  • New TMath.SinCos(), used when possible
  • Now maps can load extras that share same properties as [from..to]
  • Layer XShadow and YShadow are now floats



Saturday, April 14, 2018

First 2018 update, it was about time...


I've been lazy lately, but that has to change, still from time to time I move my ass and code a little bit, this is the outcome:

HBF)
  • Now game is paused, Shop, Inventory and Fight screens are substates, now code is cleaner and shorter
  • Curtain code cleaned
  • Now Shunenbukaidesu brings rain
  • Now when pause screen is gray
  • New TDirector code improved
  • Now Boom does some random rotations
  • Now Lights do some random zooming
  • New property TTriggerDispatcher.Player so code knows who did execute the trigger
  • TBell behavior improved
  • Backgrounds now can be setup in back.ini per level 
  • Now TGameSprite.Magnetized property
  • Now when adding a sprite to an engine it will enter the collision grid so that it can be search since the very beginning
  • UFO laser fixed (since when it was wrong? :)
  • New methods TGame.GameServices FadeIn(), FadeOut(), LockEntity() and LockExcept()
  • Left and Right collisions with moving objects improved
  • Now Dialogs have a Edit type so game can interaction can be done
  • Now game allows to add text (useful for chat)
  • Now Ropes can have different textures
  • New triggers IfItemThenSet(), RemoveItem(), ExecuteActionTile() and ExecuteActionEntity()
  • Now enemies can also activate triggers
  • Some levels now have a fourth layer (pipes and others)
  • Now TTriggerDispatcher has a Target reference (who did execute the trigger)
  • New trigger Velocity()
  • Pushed by blocks code fixed
  • New trigger Sleep()
  • Fade code refactored a bit
  • Fixed a bug in dialog system with NPC 
  • Extra Wand execution simplified
  • Now hero balance when standing
  • Added a new layer to all maps to handle better the trigger interactions
  • All layer are now declared as constants
  • Now circles shrink when interacting
  • Stalactite now works with gravity 
  • Graphics unused removed
  • Now game does Continuous Collision
  • Now Post is static
  • Now left/right collision with slope items/tiles works properly
  • Some fonts are shown with shadow
  • Collisions improved
  • New layer in the labyrinth
  • Owner property renamed to Hero
  • CarryItem property renamed to Owner
  • TGameSprite.IsUnderneathOf() fixed when gravity is up
  • Now music can fade in/out
  • Music now fades with screen
  • Now in mapping.ini one can assign directly the default animation, so for simple sprites there is no need to create a class 
  • Some new fonts
  • Now some level has a countdown...
  • New Door graphic
  • New wind effect
  • Notifications are now easier to code
  • New princess bitmaps

BB)
  • TStateMachine<T> renamed to TStateDirector<T>
  • TStateDirector<T> now supports substates as Push(T) and Pop(T)
  • Surface blur performance improved
  • TSurface Lightmap() performance improved
  • Many internal lists changed to TColony<T>
  • In TCollisionMatrix.Enter() Occupation was updated inside loops, that makes no sense and affects the performance
  • New classes TObjectColony<T> and TFastObjectPool<T>
  • INI class moved to its own file 
  • INI now uses internally TDictionary<K,V>
  • New TSprite.GetOldRectangle()
  • TCollisionMatrix performance improved
  • Particles now have a better management of internal textures
  • Now triggers have an Input property 
  • New TInput.ReadChar() so that game can read commands from user
  • Now triggers can only by executed by specific entity with property Holder/
  • Now Triggers can have Cadency, so the trigger can be only be updated every N Frames
  • Now triggers might have a Hint
  • Now triggers are called scripts
  • Now surfaces can have slopes left and right
  • TCollisionMatrix now checks for top/left and bottom/right corners
  • Now shadows are TBoolean rather than boolean
  • Now some fields are now TNullable<T>
  • Now map layers can have alpha configuration
  • Overhead with rotated matrix when angle = 0 reduced
  • Using [unsafe] tag when possible since my interfaces behave as pure interfaces with no reference counter
  • Now TTimerEx no longer uses an event but a callback
  • Some [UNSAFE] fixed
  • Many GUID removed from interfaces
  • Many const added to interfaces when parameter
  • New Glow properties color and blur  
  • New class TCountdown

Found binaries at OneDrive

Saturday, April 29, 2017

HBF is not alone anymore, say hello to a new player.

Like a month ago I was thinking, why not add a second player?, but as usual new ideas bring new challenges.

Adding a second player to the game means many aspects of the game have to be modified, like who enters the Shop, how Items are split, some enemies need to decide the proper victim, how to handle when heroes are far away from each other, what do to when one die, change the behavior of the Door, who enters the Fight, rewrite most of the input system, etc.

That was as usual very funny. The most difficult part was to handle the Camera and order of sprites, so I decide so change the 2d engine to be more 3d (visually still the same), so now Camera can play with Z axis, then many Z issues appear..., so I had to revisit all game.

But anyway, the work is done after some tough weeks :-)



Found binaries at OneDrive
 
HBF)
  • Now two players can play the game, big improvement
  • Now when a coin is taken it executes a different particle
  • Now levels starts differently
  • Item cross code improved
  • Sprite.AttachedSprite code improved
  • New emerge particle
  • Now Focus element blinks
  • New FadeIn() styles
  • New HUD layout
  • Keys code is now handled directly in the inventory class
  • Now checkpoints are handled in the player class
  • Camera now needs to cover correctly all situations (when one hero dies and checkpoint cannot be covered by camera when in two players, etc)
  • Now doors still closed when taking the key and can only be opened by the owner of the key
  • When in two players, if one player looses of lives, then he releases all inventory so that the other player can take it
  • When in two players, if one player looses of lives and the other player has already entered the door, then the level finishes
  • Input reading code optimized
  • Now Fight, Shop and Inventory can only be used by the player that activate it
  • Shop/Inventory/Items code improved
  • Fight changed a bit
  • New heart item
  • New class TPlayers
  • New extra TPresent
  • New EntityType Magma
  • Scepter is no longer spawned in Lava
  • If hero looses the Rune Fight he also looses his coins
  • Now when finishing level, camera focus and zoom on Door
  • Now aspect ratio can be selected (4:3, 19:9, 16:10), so game should fit properly with all resolutions
  • Camera Lerp now also takes into account Z
  • Drawing air moved from hero to HUD
  • Now heroes are able to push many blocks in a row either vertical or horizontal
  • Some interfaces were not set to nil on destroy

BB)
  • Doing a render to target and losing the surfaces does not work, it raises an AV, why?!
  • Sleep properties in Particles now talk about milliseconds rather than steps
  • Lightmaps now also interpolate alpha channel
  • Some internal array improvements (aligned to next power of two)
  • Surface.Blur() quality improved
  • TArrayEx<T> improved
  • Now the 2d engine is completely dine in 3d, so that one can freely play with the camera
  • Fonts performance improved
  • New TCamera2D.Rotate()
  • Shadow silhouette improved (a bit of blur applied)
  • New TMenu.Find() in order to find menu items and optionally be able to modify them
  • New events for particles OnBefore/OnAfter Create/Tick
  • gamepad set to DISCL_NONEXCLUSIVE

New aspect ratio option)


 HBF now is accompanied by his partner ABB (say what?)


Camera zoom out to fit both players (until a certain point)

Saturday, March 11, 2017

HBF now in 64 bits!

I had a silly bug (typical one that works on WIN32 and does not in WIN64):

    FillChar(d3ddm, SizeOf(d3ddm), 0);  <-- this line didn't exists
    if Failed(FD3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, d3ddm)) then
      raise Exception.Create('Error retrieving display modes');

    FD3Dpp.BackBufferFormat := d3ddm.Format;

So now there is a 64 bits version, I guess only math is faster, but this would be only noticeable when lots of  particles are rendered, but let's see..

Found binaries at OneDrive

Anyway, I also was able to change the following:

HBF)
  • Now HBF also comes in 64 bits flavour
  • Now Diamond emits light
  • As usual some minor map changes...
  • Some new blurred backgrounds
  • ell/Boom/Chest/Fires/Lava/Mine/Planet are now glowed
  • Liquid splash is now done with particles
  • Enemies won't discover anything
  • New toxic particles
  • New excited particles
  • New particles when Hover is excited
  • Magnet also attracts Keys and Scepter
  • New sound failure.wav
  • Gatashi's laser when collides draw some particles
  • Now all mechanic enemies can be excited
  • Now when correcting gravities, moving platforms are take it into account
  • New worm, fits better in the game
  • New bell and shoes, more retro
  • Planet changed
  • Ice floor is now properly applied when gravity is up
  • Snowball now also stops fire
  • Static sprites do not longer correct gravity orientation
  • New warp based on particles
  • New spark based on particles
  • New Achievement "finish labyrinth blinded"
  • Main menu does some new effects
  • Ending now is a bit different (guess what!)

BB)
  • Multiplication texture error fixed (not happy about it)
  • Sprite hash for buffers now takes into account shadows
  • New concept TBufferHelper, in order to handle the buffer easier and avoid some double links
  • Removed effects and filters from surfaces (makes no sense, sprites dictate the behaviour)
  • Added surface filter to Materials
  • Fixed massive bug in Move32() POP ESI rather than POP EDI
  • D3D buffer preparation improved (VertexType is now precalculated)
  • Now TFloat is double when in 64 bits
  • New Particle emitter Movement type
  • Stream buffer when decompressing changed from 16kb to 64kb
  • Finally DirectX works in 64 bits
  • New TSurface.ExtractPoints()
  • New TParticles First()/Last()
  • Now particles are able to do formations based on a bitmap

Thursday, February 16, 2017

When performance matters

First entry of the year, one month and half later... , found binaries at OneDrive

I've been focus this past two months on improving the performance, in some screens mixing many elements, enemies, particles, lasers, liquids and moving backgrounds was affecting the performance, so I did what I love, to dig into the code and start measuring and comparing, I'm quite happy with the results, now I can throw many particles here and there that performance is not affected.

I did focus on DirectX buffers: hash created only when needed, buffers only sorted when needed, tailor-made drawing triangle functions, RGB to int conversions.

Surfaces are now generated faster when they are in 32 bits.

Also the new TFastPool<T> used in particles it excels, and indexed array for fast access with a pool mechanism in the same structure (maybe I will explained in another post)

What's new:

BB)
Clear camera also clear perturbation values
New StartSize/EndSize particle properties, autoSize particle removed
Camera constructor does not longer sets the size in the constructor
All primitives now use InView() to check whether this primitive has to be rendered or not
Line with thickness is now done properly with perpendicular vectors
Now GlowLine() uses a line with thickness
Now particles have X and Y radius
Fixed some Z issues in primitives Line() and Triangle()
New TScreen.WaitBehaviour, buffers can be only resorted when creating new buffers
General improvement in the hash keys of the maps
New TLayer.FindProperty()
Glow rendering improved
Particles now can have a trail
New TMath.CircleInRectangle(): bool
TScreen.DrawSurface() fully improved
Particles.Gravity is now a vector
TScreen.Circles() now has a solid parameter
TRGB.Multiply() & Add() improved
New TRGB.ToInt32()
TScreen.TexCol_Triangle() improved
TVectorEx non operators improved
Particle Editor/Engine vastly improved
New TRGB.AsString()
New TPriorityQueue<T>
New TScreen.CircleGlow()
New TScreen.LineGlow()
New TVectorEx.AsString()
Particles can have Attractors
More triangle buffer optimizations
Added BigFile to Particles
New TFastPool<T>
New TParticleEmitter Sleep and SleepEvery properties
Now Particles uses TFastPool<TParticle2D>
Particles can be glowed
Alpha32 surface detection improved
Particles generated in Sphere fixed
All internal sin/cos calculations in particles are done in RAD so no conversion needed (extra multiplications)
Particle generator loop improved
Render buffer improved
Color performance in buffer improved for surfaces
Queue<T> improved
TPolygon.GetHash() improved
TScreen.FillSurface() improved
Surface cache improved
Sprites now maintain the hash of the buffers
Surface.AndMask() performance improved
Buffer hash generation had collisions (bad key)
Now particles work by time and not steps
Now TObjectEx implements IGroup
Added friction to particles
Some critical functions checks are executed only in debug mode
Particles now do some kind of occlusion via BB
New particles spread mode Expand
Now particles can take the form of shapes
Now Particles can have up to 8 different textures by default
An emitter can be inactive

HBF)
Cables throws more sparks
Camera size is update when resolution is changed
In menu the text scroller is left/right
New ColorTile element
Fixed an issue when a throwable weapon landed on a moving platform
Now reverse Disintegration works 100%
Now there is a global Gravity
Now color tiles got a tail
Lasergrid was not shown properly
New Path helper to create entities following map attributes
New enemy Rotator
Shover is shown properly when gravity is up
New Achievement "burn the block!"
Hero input code moved to Hero class
Added moving tapes to some levels
New element Wheel (HL2?)
Now all entities might target a tile (by name) and do something
Lava melting ice code fixed
Now demos can also track input from attack and action
New item Wand
Hero does no longer breathe in lava
Some elements now are glowed
TGameSprite.IsUnderneathOf() improved
Game can now load particles from map and/or triggers
Beetle and Titan show sparks when colliding
Flame was not working properly
Background are no longer mandatory in each level
Handling of entities on top of tapes improved
Arrows emit particles when collide
Now boomerang returns when collides with an item
All particles effect are now read froma file
New fireworks with forms
Hero's dust when landing is now done with particles
Air bubbles is now done with particles
In game menus, input is reset to not interfere with hero input
Hero now is got a candle on dark screens
Some backgrounds are now blurred






Thursday, December 22, 2016

Last entry of the year, glowing...

I've been playing a bit with glows and ropes, the result in this new version, merry xmas!!!

Found binaries at OneDrive 

What's new?

HBF)
  • Lava throws now go always outside the magma
  • Lava trail is made by particles 
  • Now hero can be idle but facing left or right
  • Equipment upgrades are now activated by default
  • New triggers AddItem() and Deposit() and Concatenate()
  • Item is removed from Inventory just after execution (if applies) and not when has finished
  • New Item Shovel 
  • Coin is no longer Static
  • Focus is now centered properly
  • Now shop is shown differently, also some items are no longer available...
  • Liquid was sounding even when height was zero
  • Extras search improved
  • Items can yield coins 
  • New achievement "Full Equipment"
  • New achievement "Find the Soul of Ginkgo"
  • New achievement "Blue Green Red"
  • New achievement "Destroy the Balls"
  • Some achievements removed 
  • Better achievement visuals
  • Nuclear explosion from Bomb fixed (it was also killing the own explosions)
  • Hover get excited with lava or electricity 
  • Items.pas split into different files
  • Hero refresh the equipment at the beginning of every level
  • Hero steps back when pushed with an arrow and is having a shield
  • Added in some levels a new layer in front of hero (just eye candy)
  • Game over state is not set immediately after dying but after fading is finished
  • Now all entities can do a monologue 
  • New Rope element 
  • New lamp style
  • Cables can excite hovers
  • Fixed small issues when contacting platforms
  • When Hero crushes is got a new sound 
  • When Hero is not facing then it cannot attack 
  • Inventory screen easier to understand
  • Sound system now uses a dictionary rather that an array, also direct access to sounds are avoided since the sound system might desired to free a non used sound, therefore creating an AV
  • Spotlight now can be killed
  • Scores were not inserted properly
  • Now property TGameSprite.IsSlow
  • Remove TileSetFromSolid stuff in sprite factory, it was redundant
  • Rays collision element adjusted
  • Menu font now does some transparency
  • Rope are no longer simulated with bezier curves but with newton's physics 
  • New Volcano element  (experimental)
  • Menu preparation logic moved from game to menu screen
  • Sky stars are now random per game 
  • Snowball now also freezes ceiling (when gravity is up)
  • Sprites can be glowed
  • New labyrinth aspect
  • Exit menu, shop and inventory screens got a sound when moving cursors

BB)
  • Buffer hash is also constructed with Alpha
  • Fixed an error with particles alpha when using primitives
  • Particles alpha handling improved as rgba
  • Negativing TVectorEx was totally wrong!
  • Camera zoom is now taken into account
  • New style Inverse in particles 
  • New TSurface.ExtractAlpha() and Glow()
  • Bezier curves do not longer creates a result class per calculation but rathern reuse a global list



Sunday, November 6, 2016

Itemising

Is quite funny to mentally visualize an item and then trying to find an use and a fit in the game

Found binaries at OneDrive

HBF)
  • Big enemies now have achievements
  • Joy reading improved a bit
  • Boomerang will not get stuck in a wall
  • Many new extras like: potion, bell, magnet, ancient
  • Many new achievements like: "do magic on a key"
  • Now menu shows % of achievements
  • Some graphics changed
  • Lava eruption do not longer splash in the bottom of lava
  • Highscores fixed
  • Now there is only one key with Key property to select the type of key
  • Screen code cleaned
  • GameSprite new properties, DieText, SpawnItem and SpawnClass
  • TSpawner new property WaitingTime
  • New class TItemResolver, it helps creating items and entities when breaking walls
  • New THero.WeaponInUse()
  • All checkpoints are now in layer 2
  • Now FadeIn()/FadeOut() can be used properly in triggers
  • New enemy Triangle
  • Beetle now jumps when close to an edge
  • Now game has scoring
  • Fixed memory leak with ingame screens
  • Weapons also kill chandeliers
  • New TBouncingEnemy
  • Fixed an issue were a player could take infinite flying coins exiting/entering the levels continuously
  • Fixed an issue were a player could avoid having one less live when dying if level was exited immediately
  • New candle
  • Terminal show different scripts
  • Kurkani fixed
  • Fixed an issue replaying previous music

BB)
  • New Sprite.Locked property
  • TPolygon.GetHash() performance boost
  • Now screen buffers and sorted buffers are mixed into one unique queue
  • New TSprite.ClearTimers()
  • Fixed an issue when rotating the screen quad
  • Buffer rendering improved for some fix situations (like sprites...)



Sunday, October 16, 2016

Inventorying...

 Every time I implement a new thing lots of ideas come to my mind, like with inventory, many new things were changed thanks to this new feature.

Found binaries at OneDrive

HBF)
  • New inventory screen that can be accessed via return key or Y gamepad
  • Equipment is set via RTTI
  • Equipment code improved
  • New unit Items
  • Now Hero can have extras, like torch, horn, map, etc...
  • Screen exiting code improved
  • Coins now have a quantity property (default is 1)
  • Hero can wear an armor
  • New options for Continuous jumping entities like force and decay
  • New TJumpingCoin entity
  • New extras: Map, Bomb, Clock, Parasol, Horn, etc
  • Now Minimap works in any level
  • New item Double Shoes...
  • Coin classes renamed
  • Crepuscule lights move a bit...
  • New NPC property Thanks, be kind...
  • New chest element
  • Hidden levels are shown in main menu (if reached)
  • New property Gamesprite.AutoCenter
  • Finally all classes are created based on names (via RTTI)
  • HUD shows Runes in a frame
  • New Tucan bird
  • New action button, so that hero can use weapons
  • Some new graphics ...
  • Extra life shows a different graphics
  • Inventory is rendered in the HUD
  • Now inventory can have more than one unit of an item
  • Some changes in the expirable items
  • Post can have codified messages
  • New element Sparks
  • Bird chances reduced
  • New music achievement
  • NPC now properly says "a" or "an"
  • Princess now will be in a cage
  • New weapons...
  • Slope collision fixed
  • Magic?!
  • Fixed some bugs with collisions and no gravity elements (since it was not used...)
  • New method IInventory.FindByClass()
  • New achievements
  • Highscores now shows reached level
  • More versatile inventory
  • Fixed memory leak in shop screen
  • GameSprite IsMoving() improved
  • Many code lines "A mod B" changed to "A and B" when possible
  • Cadency now always works in milliseconds
  • Weapons volume is adapted to the distance to hero
  • Since new Windows 10 anniversary update game didn't restore once the focus was lost, weird but fixed
  • Huge performance boost in the creation of the object by name, by simply creating the context once and not on every call
  • Now Shop open/closes door
  • Jumping coins when created in the air do not initially jump
  • Updated to latest BASS library
  • NPC can have monologues...
  • Timer was started on a wrong event
  • New Terminal element
  • New achievements...
  • Game shows a menu when pressing escape or joy start
  • Extras can also yield coins

BB)
  • New T2DParticles properties AutoAngle and Elasticity
  • When a surface is destroyed and then the buffer, the search is faster
  • New helpers in TInputKeys.IsButton()
  • FFont.Render() now returns a boolean indicating whether it was painted or not
  • Laser ending was drawing even when no segments were set
  • Added thickness in drawer.Box()

The inventory



Weapons and Shields...

Thursday, September 15, 2016

Hero goes shopping


I always love games that allow you to buy items, games like wonder boy in monster land or black tiger, so this is my little tribute...

  IShopItem = interface
    ['{D6EFA6AF-05C3-4A54-984E-37F6A4809FC0}']
    function GetCost: integer;
    function GetDescription: string;
    function GetId: string;
    function GetType: string;
    function GetLevel: integer;
    function GetProperties: IMemVar;
  end

  IShop = interface
    ['{93AD660B-79F0-4CED-A37C-EFE384228D51}']
    function Count: integer;
    function Exists(const aItem: string): boolean;
    function Enter(aInventory: IInventory): boolean;
    function Find(const aItem: string): IShopItem;
    function GetCategories: TList<string>;
    function GetItems(const aCategory: string): TList<string>;
    function Purchase(const aItem: string; aInventory: IInventory): boolean;
    procedure Remove(const aItem: string);
  end;

Found binaries at OneDrive

HBF)
  • New Enemy Octopus
  • NPC talk is more accurate
  • Doors now can be hidden
  • All entities can have a Hint
  • Adding a shop
  • New inventory class
  • Now taken coins are shown and not left coins
  • When in finish screen, last level is not shown
  • New music when shopping
  • New element cauldron
  • When hero got a shield it can stop arrows
  • Render screens code refactored
  • NPC can yield coins
  • Hero can attack if proper item is owned (sword, axe and knive)
  • Enemy energy is now used
  • Now shop offers boots! (faster walk, jumping, slippery...)
  • Screen Prepare() method more handy
  • Blocks can contain hidden coins
  • New element Idol
  • GameServices.GetHero returns now IHero
  • Hero's shield is affected by arrows depending on its level  (pushed backwards)
  • Enemies killed with a weapon spawns a coin
  • Shopping menu slowly improved
  • During the same game, already taken coins do not appear again when revisiting a level

BB)
  • New TMasterDetail<M, D> class
  • Some functions changed parameters of type TDummySprite to ISprite
  • TLevels simplified
  • New TObjectHelper.CreateByName(), it creates any kind of class by name, very handy for the inventory


Hero with his sword and shield after purchasing them in the futuristic shop :-)


Monday, August 8, 2016

Say hello to Non Player Characters

In summer is not easy to find the necessary inspiration to tackle this project, but at the end I found interesting to introduce the so called NPC in the game. They are implemented in an easy way:

  INPC = interface
    function GetItems: string;
    function GetNeeded: string;
    function GetAchievement: string;
    function GetDelay: cardinal;
    function IsDeal(aInventory: IMemVar): boolean;
    function Interact(aInventory: IMemVar): TNPCResult;
    procedure StopWalking;
    function Talk(out aText: string): boolean;
  end;


 Just chatting, expecting some items and give new items..., nothing fancy

Found binaries at OneDrive

HBF)
  • Minimap also prints teleport, enemies and doors
  • New class TDead for handling disintegrate effects
  • Blood has more colors in the same range
  • Door can take you to specific levels
  • Water can flow to already existing reservoir
  • New level Asphyxia!
  • Game now can have more than one door, so keys are related to door groups
  • Now doors can be upside-down
  • Better handling of door keys
  • Some pools are now based in lava
  • Liquid now have texture, Thrownrate, Sound and SplashCadency properties
  • class TSpawner improved
  • Lava can do ice heating
  • Quake is now done with camera
  • Birds spawning code improved
  • TDust now has orientation  (horizontal/vertical)
  • New TLiquid.IsResetable()
  • New bee (replacing bird...)
  • All Direction stuff removed, it was useless
  • Deadly liquid does not sound like water anymore
  • New class TFloater, barrel inherits from it
  • New element Boat, inherits from TFloater
  • Waterfalls streams work 100% now
  • New Achievement regarding waterfalls
  • Adding NPC
  • Now game shows inventory
  • New achievement related with NPC (talk to them...)
  • Menu option continue on removed, now when entering a level one can freely choose another level (if reached of course)
  • Optimizer now can load from multiple folders

BB)
  • Main engine render loop finally done in a proper way
  • Particles now have friction
  • New default buffer timeout is infinite
  • Triggers can be linked to other triggers, so until related trigger is not executed current one cannot be executed
  • Liquid might have textures (used for lava)
  • Fonts rendering improved
  • Fixed an error with buffer size increments
  • Liquid now has thickness
  • Liquid now is got some optimization when big areas
  • Particles now have emission type (continuous, once)
  • TLaser now inherits from TDummySprite
  • Trying to add some noise to the laser
  • Fixed some offset issues with some primitives
  • New TSpriteEngine.Find(name)
  • Now Triggers can target any entity that implement IExecutor
  • Liquid edges are shown properly
  • All sprites now can have texture offsets
  • Sprites can now also load from big File
  • Laser can now have a texture assigned
  • New utils.fmod (float modulo)


New secret and hidden level!


Old man giving me something...


Saturday, May 7, 2016

Fluids flowing

Time to post!, now that particles are used and abused, then I was playing a bit with liquids

Found binaries at OneDrive

What's new since the last update?

 HBF)
  • Dust and starfield are no longer split into render/tick, so looping twice is avoided
  • When hero dies in lava, particles are shown in a different color
  • Fireworks done with particles
  • Many Trunc() and Round() removed
  • Scepter does not appear in the same position as in the previous iteration
  • Replaced all possible TGraphicsDriver.Instance by new interfaces from IGameServices
  • Waterfalls are always fully developed since the very first frame
  • Ending changed a bit...
  • Runes class improved
  • Shunenbukaidesu improved
  • Since blood was everywhere now it got its own class
  • In final enemies energy is shown centered and with alpha
  • Kurkani also disintegrates and bleeds
  • Fireworks are now nicer (I guess...)
  • Platforms handling code moved from game to sprites
  • New elements AirBubble, Hit, LavaSplash  and Spark
  • New animation for scepter
  • New pickup Minimap
  • New explosion sprites sheet
  • When water finds a hole it flows
  • Barrel movement improved
  • Some name changes in levels
BB)
  • Sprites have now X & Y also as int
  • Particles now can have many emitters
  • Particles now have autozoom
  • New particle visible property
  • Now when screen buffer is overflow then it is skipped (avoiding AV)
  • Improved sleeping code
  • Surfaces can have gamma
  • TGraphicsDriver.Triangle() was not drawing properly...
  • Improved how sprites internally do Render() & Tick()
  • Internal list in SpriteEngine changed from TList<T> to TLinkedList<T>
  • Handled platforms in some cases were removed from list incorrectly
  • New animation property wait, used to change the cadency of the first frame (used in sceptor)
  • Camera2d adding zoom functionality... (WIP)