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?

  • 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()

  • 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)

  • Updated with camera stuff

  • 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
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

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:


  • 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


  • 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()


  • 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:


  • 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 


  • 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!