tag:blogger.com,1999:blog-65005111283741342542024-03-28T00:53:17.478+01:00Me and my bitsThe aim of this blog is to share my bits and bytesAbel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.comBlogger272125tag:blogger.com,1999:blog-6500511128374134254.post-40033365666234939392022-03-06T11:58:00.004+01:002022-03-06T11:58:36.574+01:00ChessKISS 1.8d bug fix version<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'> <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div> <![endif]--><div>Computer chess is a fascinating area to introduced bugs that are so difficult to catch.</div><div><br /></div><div>In my mind it good a good idea to remove the king in order to improve the performance, but it turns out that in king confrontations it created a king mate...</div><div><br /></div><div><div><br /></div><div><span style="font-size: x-small;">function TChessboard.InCheck(aSide: TSide; out aPiece: TPiece): TCheck;</span></div><div><span style="font-size: x-small;">var</span></div><div><span style="font-size: x-small;"> king: TPiece;</span></div><div><span style="font-size: x-small;"><br /></span></div><div><span style="font-size: x-small;">begin</span></div><div><span style="font-size: x-small;"> king := GetKing(aSide);</span></div><div><span style="font-size: x-small;"> if king = NO_PIECE then</span></div><div><span style="font-size: x-small;"> Exit(checkUnknown);</span></div><div><span style="font-size: x-small;"><br /></span></div><div><span style="color: red; font-size: x-small;"> aPiece := GetPieceAbleToMoveToSquare(TUtils.Switch(aSide), TPieceHelper.GetIndex(king), actCapture, [ptPawn, ptKnight, ptBishop, ptRook, ptQueen]);</span></div><div><span style="font-size: x-small;"> if aPiece <> NO_PIECE then</span></div><div><span style="font-size: x-small;"> Exit(checkYes)</span></div><div><span style="font-size: x-small;"> else</span></div><div><span style="font-size: x-small;"> Exit(checkNo);</span></div><div><span style="font-size: x-small;">end;</span></div></div><div><br /></div><div>I think I'm done for the time being, I want to focus on other projects.</div><div><br /></div><div><br /></div><div><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">Find the new binaries at</span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"> </span><a href="https://onedrive.live.com/?id=3FBC9FCC4CDFACF8%21114&cid=3FBC9FCC4CDFACF8" style="background-color: white; color: #2288bb; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-decoration-line: none;">OneDrive</a></div>Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-70957306351611307762022-02-21T19:47:00.001+01:002022-02-21T19:47:09.875+01:00ChessKISS 1.8c 22/02/22<div><div>I've three big TODO's left in this project:</div><div><div><ul style="text-align: left;"><li>Use Gaviota endgame or similar.</li><li>Bitboards in x-ray (soma parts of the engine still not use bitboards) since this is the method that consume the mode CPU</li><li>Multi cpu, SMP?</li></ul></div></div><div>what's new:</div><ul style="text-align: left;"><li>Knight pair bonus was not taken into account</li><li>Move generator for slice pieces is now done with bitboards </li><li>New board.IsDiscoverCheck()</li><li>Now apertures are saved correctly</li><li>Now captures take info from friendly blockers</li><li>If evassion move is equal to hashmove then it is discarded</li><li>Added Reverse futility pruning</li><li>New pawn islands penalty</li><li>When a command is not recogniced then no exception is thrown</li></ul><div>Enjoy carnival!</div></div><div><br /></div><div><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222;">Find the new binaries at</span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"> </span><a href="https://onedrive.live.com/?id=3FBC9FCC4CDFACF8%21114&cid=3FBC9FCC4CDFACF8" style="background-color: white; color: #2288bb; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-decoration-line: none;">OneDrive</a></div><!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'> <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div> <![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-47331708352253104052022-01-01T19:57:00.003+01:002022-01-01T19:57:56.031+01:00ChessKISS 1.8b oh well, I could not resist itHappy new year unknown visitor!<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'> <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div> <![endif]--><div><br /></div><div>I found some more bugs (I'm sure there are more, but man they are so difficult to catch)</div><div><div><ul style="text-align: left;"><li>Now Board.CanTraverse() uses bitboards </li><li>Now bishops and rooks can pin pieces and get some bonus</li><li>Tropism values changed</li><li>Aspiration Window sizes are now vectorized</li><li>New TUtils.IsDiagonal()</li><li>Board.IsRepetition() improved to match the sides for current play </li><li>Fixed some issues with mobility and x-rays</li></ul></div></div><div><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">Find the new binaries at </span><a href="https://onedrive.live.com/?id=3FBC9FCC4CDFACF8%21114&cid=3FBC9FCC4CDFACF8" style="background-color: white; color: #2288bb; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-decoration-line: none;">OneDrive</a></div>Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com5tag:blogger.com,1999:blog-6500511128374134254.post-35268557698066900732021-12-21T18:13:00.005+01:002021-12-21T18:16:07.873+01:00ChessKISS 1.8a, final?Hi<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'> <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div> <![endif]--><div><br /></div><div>After some months of intensive debugging and tuning, I've ready the last version of the year 2021 (will see how long it takes for a new version, if any...)</div><div><br /></div><div>what's new:</div><div><br /></div><div><div><ul style="text-align: left;"><li>Draw Probability is scored as middle/ending Score</li><li>Pawn storm does not take into account pawns on 2 row</li><li>Fixed some negative arrays...</li><li>Rook or queen on seventh do not longer take into account if king is on second row</li><li>Minor fixes in piece pairs</li><li>A long lasting bug with pawn cache, shame on me...</li><li>Now cache history is increased while on iterative iteration</li><li>Pawn hash is only calculated when moving pawns</li><li>Lazy margin is now dynamic based on game phase</li><li>Bonus time increased when PV changes in root</li><li>Zobrist calculation performance improved a bit</li><li>Board.evaluate() improved performance</li><li>Now cache stores scores as tapered</li><li>Now queen has a penalty if can only do one movement</li><li>Don't timeout in root nodes</li><li>Some functions reordered in order to make inline work better</li><li>cache.AddScore() improved when cluster is full</li><li>New penalty when king cannot move</li><li>Piece index evaluation performance improved</li><li>IsRepetition() performance improved</li><li>Aspiration window is now dynamic</li></ul><div>Seems engine is stronger but who knows if that is true.</div></div></div><div><br /></div><div><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">Find the new binaries at </span><a href="https://onedrive.live.com/?id=3FBC9FCC4CDFACF8%21114&cid=3FBC9FCC4CDFACF8" style="background-color: white; color: #2288bb; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-decoration-line: none;">OneDrive</a></div><div><br /></div><div>Merry xmas!</div>Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com6tag:blogger.com,1999:blog-6500511128374134254.post-78052177549739694752021-11-14T13:25:00.000+01:002021-11-14T13:25:11.231+01:00Chesskiss 1.8 is out after 6 years...The last two months I found myself looking again into the code (don't ask me why...), after some time trying to understand it then I did some improvements that today I'm publising.<div><br /></div><div>From what's new:</div><div><div><ul style="text-align: left;"><li>Lazy eval improved</li><li>Fixed some issues in pawn evaluation</li><li>New now pawn penalty when ending</li><li>Some performance gains...</li><li>New recapture extension</li><li>Pawn cache improved</li><li>Evaluation performance improved a bit</li><li>New book</li><li>Seems book moves were not very random</li><li>Some bugs fixed here and there</li><li>Now rook and knight pairs are also evaluated</li><li>Now root nodes are evaluated differently</li><li>Time for move is calculated differently</li></ul><div>Don't expect a big ELO increase but at least now the code has been refactored and it would make a new release a bit easier to do.</div></div></div><div><br /></div><div>Find the new binaries at <a href="https://onedrive.live.com/?id=3FBC9FCC4CDFACF8%21114&cid=3FBC9FCC4CDFACF8">OneDrive</a></div>Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-52367962733158388122020-10-17T13:30:00.004+02:002020-10-17T13:31:26.903+02:00Summer is gone, pandemic still thereWeird summer, not crowded at all, but at least living on an island has some advantages...<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'> <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div> <![endif]--><div><br /></div><div>This is a new release, main topics are:</div><div><br /></div><div><ul style="text-align: left;"><li>New level includes the new concept Sectors</li><li>Better continuous collisions with sprites and tiles</li></ul><div><br /></div><div>Find binaries at <a href="https://onedrive.live.com/?id=3FBC9FCC4CDFACF8%21114&cid=3FBC9FCC4CDFACF8">download</a></div><div><br /></div><div><div>HBF)</div><div>Changed (class as IInterface) with class.GetInterfaceEx(IInterface, intf)</div><div>New extra THook</div><div>New triggers ClosestHero(), ClearDialogs(), LockPlayers(), UnlockPlayers(), ActivateScript(), EnableTeleport()</div><div>New TActor properties, Counter, Phase, AutoFacing, QueueColor, NoCollisionTime, AutoContinuous</div><div>New mewthods TActor SnapTo(), TActor.InSight() </div><div>Now NPC can be killed, can use vars in their text and can now ask questions</div><div>Added some silly NPC </div><div>New method THero.Heal()</div><div>New property THero.MaxHealth</div><div>Class TElement removed</div><div>New abstract class TNonElement</div><div>Now MineBomb is self activated when hero is at certain distance if nothing is blocking</div><div>Now dialogs can include portraits</div><div>New method IGameServices.GetViewport()</div><div>Brachion improved so it does not get stuck in some situations (hopefully)</div><div>Now RotatingSpikes can be set horizontally from left or right</div><div>Now any actor can be solid, thus not passable</div><div>Now platforms can have a tape speed behavior</div><div>New level Sectoring</div><div>Now when keep pressed attack hero goes faster</div><div>Now platforms can be linked to other platforms as mutual exclusive, so visible is toggled among them</div><div>New TItems properties Consumption and MaxQuantity</div><div>Sounds from hero weapons also have HERO_SOUND tag so they can be hear from other actors</div><div>New property TArrow.NailBehaviuour</div><div>New game helper IMapSectors</div><div>Now when hero got the torch rather than see the whole screen, the light is twice the size</div><div>Continuous Tile Collision improved</div><div>New unit Enemy.pas, all base enemies are now located in this unit</div><div>New TSoundDispatcher .IsPlaying() and .PlayUnique()</div><div>Homing missiles target improved</div><div>Now TScepter uses segments from map </div><div><br /></div><div>BB)</div><div>New methods, TSurface SetText(), Box(), AreOpposite()</div><div>New properties TSprite IsTimeOut, Area</div><div>New method TAnimationSprite.AnimationTime()</div><div>New class TInterfaceCache</div><div>New method TMap.AsMinimap()</div><div>Now colors in TRGB record are no longer functions but consts, thanks to a record helper (nice trick)</div><div>New method TTimeHelper.AsTime()</div><div>New TCounters class to help the use of them in the game</div><div>New helper class TEquality<T></div><div>New class TStackList, a list that resides in the stack rather than in the heap</div><div>Now TScreen.NewSurface returns TSurface rather than ISurface </div><div>New methods TMath MultBy7(), Probability()</div><div>Method TSprite.CenterFrom() now takes into account CoordinateOrigin property</div><div>New rtti TValue record helper TValueHelper</div><div>TBufferHasher.Calculate() improved hash in order to avoid collisions</div><div>SpriteEngine.Find() changed to Engine.Find<T>()</div><div>New method TSpriteEngine.SpriteAt<T>(aX, aY: TFloat): T</div><div>Uses of ItemsLayer.GetItemAt() changed to TSpriteEngine.SpriteAt()</div><div>Uses of ItemsLayer.GetItemsAt<> changed to TSpriteEngine.SpritesAt<></div><div>New property TScript.Active</div><div>New method TSound.Replay()</div><div>Now TCollision.IntersectionPoint() uses a faster approach</div><div>New method TFloatHelper.IsGreaterThanOne()</div><div>Starting to use Mormot for calculating hash values (does 4 bytes at a time)</div><div>Fixed a bug in TObject.DeleteObserver() where the double link was not properly removed (source of long time random AV errors)</div><div>Now TMap can have sectors </div><div>New methods TMap AddSector() and RemoveSector()</div><div>New method TCells.Sort()</div><div>Now grouped scripts can be set to be executed in certain order</div><div><br /></div><div>Map Editor)</div><div>Now it shows the configured sectors</div></div></div><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS7z9QcubcOKuGjf95Yb2e9z7A6Yss-u1R7bpuQzreDzELkgipiKQ7YAfd-zdNHRGUSEWEXCOPQOpXWapMdJXNbxOr73XKvwJyjazK3b_WOzmbmttcR8i5CyFXSuD26bGN7KUJ7_F2rdH5/s1280/Sectoring.bmp" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS7z9QcubcOKuGjf95Yb2e9z7A6Yss-u1R7bpuQzreDzELkgipiKQ7YAfd-zdNHRGUSEWEXCOPQOpXWapMdJXNbxOr73XKvwJyjazK3b_WOzmbmttcR8i5CyFXSuD26bGN7KUJ7_F2rdH5/w640-h360/Sectoring.bmp" width="640" /></a></div><br /><div><br /></div>Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-38677862934361574582020-07-30T15:27:00.005+02:002020-07-30T16:07:20.189+02:00Summer release<div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Dear invisible friend</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">This is a weird summer, the good thing is that the confinement made our island look quite different, that is, cleaner landscapes, animals here and there and crystal clean waters. The bad thing is that economy sinks and stinks..., b</span><span style="font-family: arial;">ut at least I keep coding whenever I have time.</span></div><div><span style="font-family: arial;"><span style="background-color: white; color: #222222;"><br /></span></span></div><div><span style="font-family: arial;"><span style="background-color: white; color: #222222;">Please find binaries at </span></span><span style="color: #2b00fe;"><span style="background-color: white; font-family: inherit; font-size: 13.2px;"> </span></span></div><div><span style="font-family: arial;"> </span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">HBF)</span></div><div><ul style="text-align: left;"><li><span style="font-family: arial;">Princess position fixed</span></li><li><span style="font-family: arial;">Many TDictionary changed to THashMap</span></li><li><span style="font-family: arial;">New TTriggerDispatcher FreezeCamera() and UnlockCamera()</span></li><li><span style="font-family: arial;">New level Scifi Movie!</span></li><li><span style="font-family: arial;">Now cables are also affected by gravity</span></li><li><span style="font-family: arial;">New element VerticalLight</span></li><li><span style="font-family: arial;">Now Darkness works with Camera (panning and zoom)</span></li><li><span style="font-family: arial;">New enemy FlyingEye </span></li><li><span style="font-family: arial;">Now Turret laser takes into account any possible actor and stops in in its path</span></li><li><span style="font-family: arial;">All laser enemies now inherit from common class TEnemyWithLaser</span></li><li><span style="font-family: arial;">Some minor optimizations in TColorTileHandler</span></li><li><span style="font-family: arial;">TLavaEruption behaves better</span></li><li><span style="font-family: arial;">Now if an enemy is sleeping and gets damaged it will wake up</span></li><li><span style="font-family: arial;">Fixed some Z issues with Cables and Ropes when zooming with camera </span></li><li><span style="font-family: arial;">Now when arrows fall some particles are shown and ther arrows dissapear with alpha </span></li><li><span style="font-family: arial;">Now selecting level has some flocking effects</span></li></ul></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">BB)</span></div><ul style="text-align: left;"><li><span style="font-family: arial;">Sprite quads massively improved </span></li><li><span style="font-family: arial;">THashEx.Generic() improved</span></li><li><span style="font-family: arial;">New TMem.Move192BytesAligned(), Move192BytesUnAligned(), TMem.Move16Bytes(), TMem.Move20Bytes(), TMem.Move32Bytes(), </span></li><li><span style="font-family: arial;">THashMap<K, V> improved</span></li><li><span style="font-family: arial;">2D camera improved</span></li><li><span style="font-family: arial;">New property TSprite.EmitterMask</span></li><li><span style="font-family: arial;">New TFlocking class</span></li><li><span style="font-family: arial;">New TVectorEx.Limit(), Magnitude() and Square(), TVectorEx.FastLength(), FastDistance()</span></li><li><span style="font-family: arial;">New TMath.CenterOfTriangle(), TriangleHeight()</span></li><li><span style="font-family: arial;">New TFloatHelper.IsGreaterThan(), IsLessThan()</span></li><li><span style="font-family: arial;">New TRectF.Sort() and Round()</span></li><li><span style="font-family: arial;">TPerspectiveCamera properties FOV, Distance and Limits seems accurate now</span></li><li><span style="font-family: arial;">New TCamera2D.Move()</span></li><li><span style="font-family: arial;">TMenuItem.Default now sets Option properly</span></li><li><span style="font-family: arial;">New TScreen.SetScissor(), GetScissor() and RemoveScissor()</span></li><li><span style="font-family: arial;">Sprites, Laser and Fluid drawing improved</span></li><li><span style="font-family: arial;">New TCamera2D.FitToAreaWidth()</span></li><li><span style="font-family: arial;">Little optimizations in loops here and there, making all vars local</span></li><li><span style="font-family: arial;">New TRGB.HasAlpha()</span></li><li><span style="font-family: arial;">Now TMessage.Data is a plain TObject rather than an interface</span></li><li><span style="font-family: arial;">New types T8,T16,T32,T64</span></li><li><span style="font-family: arial;">Now Cables and Ropes cast shadow </span></li><li><span style="font-family: arial;">Now Cables and Ropes occlusion against camera Z works better</span></li><li><span style="font-family: arial;">Spring behavior is now more precise</span></li><li><span style="font-family: arial;">Z occlusion test for particles improved</span></li><li><span style="font-family: arial;">New TD3DDriver.SetViewport()</span></li><li><span style="font-family: arial;">New TGraphicDriver.GetFullView()</span></li><li><span style="font-family: arial;">New TFloatHelper.IsGreaterEqualThan() and IsLessEqualThan()</span></li><li><span style="font-family: arial;">when drawing a layer, Glow applies only if not completely surrounded by tiles</span></li><li><span style="font-family: arial;">New TRGB.CopyFrom()</span></li><li><span style="font-family: arial;">New TVectorEx.CopyFrom()</span></li></ul><div><span style="font-family: arial;"><br /></span></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKiQ-Dj5RWUdDJpywbDTfJmJT1XIT25q2DqD_8v2G56LNvlHbCcAYoCvQINF5NwpkuyppGYgFrZar7H4hn6JWSEvDHFdPl_jF5h2JW2I-Vgu7SnA1-i-42pW49zRrnNSSdAlMqnWvaGccN/s1280/Scifi+Movie.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><span style="font-family: arial;"><img border="0" data-original-height="720" data-original-width="1280" height="351" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKiQ-Dj5RWUdDJpywbDTfJmJT1XIT25q2DqD_8v2G56LNvlHbCcAYoCvQINF5NwpkuyppGYgFrZar7H4hn6JWSEvDHFdPl_jF5h2JW2I-Vgu7SnA1-i-42pW49zRrnNSSdAlMqnWvaGccN/w625-h351/Scifi+Movie.png" width="625" /></span></a></div><!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'> <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div> <![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0Palma, Balearic Islands, Spain39.5696005 2.650160311.259366663821154 -32.5060897 67.879834336178845 37.8064103tag:blogger.com,1999:blog-6500511128374134254.post-26087782928003061392020-05-02T12:19:00.001+02:002020-05-02T12:21:33.562+02:00Confinement release, weird year this 2020<div>
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!</div>
<div>
<br /></div>
<div>
<span style="background-color: white; color: #222222; font-family: inherit;">Found binaries at </span><span style="background-color: white; color: #222222; font-family: "times" , "times new roman" , serif;"><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="color: #888888; line-height: 18.48px; text-decoration-line: none;">OneDrive</a>, m</span>ain changes:<br />
<div>
<ul>
<li>New level Fear!</li>
<li>New boss Brachion</li>
<li>New weapon Amus</li>
<li>New element Cable</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsYChq1hlPSikwU1Is1Ol_cP2LVTg7nn69or2wHo_DWiSgIRBiTcS95nvGz5bi1ZFQXfeKetNHcPBHHVVlmbPnMgQqvqdj_DwUuqDzPtqoP30UAPVPQ_uqw9ZNzR6ABUuTn4I9f9XBKP8B/s1600/Fear%2521.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsYChq1hlPSikwU1Is1Ol_cP2LVTg7nn69or2wHo_DWiSgIRBiTcS95nvGz5bi1ZFQXfeKetNHcPBHHVVlmbPnMgQqvqdj_DwUuqDzPtqoP30UAPVPQ_uqw9ZNzR6ABUuTn4I9f9XBKP8B/s400/Fear%2521.png" width="400" /></a></div>
<div>
<br /></div>
</div>
<div>
Here is the full list changes:</div>
<div>
<br /></div>
<div>
<div>
HBF)</div>
<div>
<ul>
<li>New element TCable</li>
<li>Weird corrects its angle when taking a new path</li>
<li>IInteractive.Interact() implementation was crap, improved</li>
<li>New element OldLamp</li>
<li>THero.CanJump() improved</li>
<li>New THero.TileOnBottom()</li>
<li>Now Ropes use a better visibility test </li>
<li>New TTriggerDispatcher GetResult(), ScriptCount() and SumVar(), Print(), ClearTileAt(), ClassCount(), CopyVar(), RemoveEntities(), SpawnClass(), AlphaLayer(), SetShake()</li>
<li>TGameSprite.SetGameServices() is no longer virtual</li>
<li>New enemy Brachion </li>
<li>Now platform's angle is taking into account (not working 100%)</li>
<li>New Kurkani bitmap</li>
<li>Nnew Gatashi bitmap</li>
<li>TGameSprite.SetGameServices() is no longer virtual</li>
<li>New enemy Brachion </li>
<li>Now platform's angle is taking into account (not working 100%)</li>
<li>TGamesprite renamed to TActor </li>
<li>Actor.Master is now Actor.Host</li>
<li>New property TActor.AutoPriority</li>
<li>Game was not cleaning the sound cache between levels</li>
<li>New element PhoneBox </li>
<li>Now Turrets show a think red laser when chasing players</li>
<li>New property TCotton.MinDistance</li>
<li>New property TLight.Animation</li>
<li>New property TParticlesWrapper.MinDistance</li>
<li>New property TBasicTurret.LaserColor </li>
<li>New property TBrachion.LaserColor </li>
<li>New property TSkeleton.MinDistance</li>
<li>New property TNPC.MinDistance</li>
<li>New property TPrincess.MinDistance</li>
<li>New IBaseItem.IsCollectible()</li>
<li>New THero.GetCollectible()</li>
<li>Now shop items are sorted by name</li>
<li>Now after entities are created, the cell attribute is cleared</li>
<li>Now shadow Z is calculated dynamically</li>
<li>TActor.CorrectGravityOrientation() improved</li>
<li>Now achievements are stored in a file and no longer internally</li>
<li>New TCable.Perturb()</li>
<li>Runes are no longer keep in the profile, TRunesHelper now keeps all runes information for the current game</li>
<li>New TTriggerDispatcher.Sleep() fixed</li>
<li>New class TEntityTracker that helps any entity to find the shortest path to a target</li>
<li>ExplosiveBarrel behaviour improved</li>
<li>New Actor property Range </li>
<li>Actor.DestroyArea() improved</li>
<li>Hero can now go down from TwoWays (like clouds) platforms pressing down + jump</li>
<li>New attribute GRAVITY_UP so a map can have a different gravity deom design</li>
<li>New method TActor.GetPlatformFromCenter()</li>
<li>New TActor.ContinuousSpriteCollision() that helps fast moving sprites collisions</li>
<li>Now arrows adjust correctly their angles when gravity is up</li>
<li>New TActor.AdjustPositionToTile()</li>
<li>Now darkness can rotate lightmaps coming from entities</li>
<li>TMachineGun many fixes</li>
<li>Changed some Sin() and Cos() by SinCos()</li>
<li>New element IceSpike</li>
<li>New pickup TCollectible</li>
<li>Now some enemies uses new shadow queues </li>
<li>New properties TEnemy.PainChance and PainDelay</li>
<li>All TStrings changed to TList<string> or TStrings<T></li>
<li>New TTriEye properties ContinueAfter, FireAfter, ShootingProbability</li>
<li>TActor.ContinuousSpriteCollision() improved</li>
<li>New element SuperBlob </li>
<li>New property TActor.InitialEnergy</li>
<li>New explosion with particles, I believe they are cooler</li>
<li>When bomber is going to be alerted now also checks that there is nothing solid in between</li>
<li>Now Arrows inherite from TBullet and fixed a bug where an arrow did not know that parent (ArrowSpawner) was Dead</li>
<li>New weapon Amus</li>
<li>Fixed a bug where an actor could die many times in the same frame </li>
<li>New TSoundDispatcher.DelayedSound()</li>
<li>Now dynamic priority takes into account liquids </li>
<li>Now when jumping the speed from platforms is take into account giving more inertia</li>
<li>Now sound system tries also to use the youngest sound when channel is full </li>
<li>New achievements...</li>
<li>New enemy Rotating Spike </li>
<li>New TActor.GetEdgeFromVelocity()</li>
<li>New property TActor.ExplosionTime</li>
<li>Seems BASS64.dll is modifying MMX overflow flag while playing, so a workaround was created</li>
<li>New effect to shake tiles</li>
<li>New ITriggerDispatcher.</li>
<li>Bat fixed</li>
<li>Scepter won't stop on solid items</li>
<li>Added lightness to levels</li>
<li>Now some shields can reflect a laser</li>
<li>New bridge elements </li>
<li>Hidden doors are no longer shown in minimap</li>
<li>Up spikes are now correctly aligned</li>
<li>Poison was not recovering after 10 seconds </li>
<li>Now fish when is out of water feels the gravity </li>
<li>New Players.GetHeroes(TRect) that improves the performance</li>
<li>New shop/inventory item LastExecution that helps with cadency</li>
<li>New extra THomingMissile</li>
<li>Hero extras handling improved</li>
<li>Now hero uses a buffer jumping before falling</li>
<li>New generic modifying cube system</li>
</ul>
</div>
<div>
BB)</div>
<div>
<ul>
<li>Now maps can have configured slopes</li>
<li>New ISprite.GetLayer(), DistanceXBetween(), DistanceYBetween()</li>
<li>TMem.Scan32() in the 64 bits version was flawed thus last 64 bits version of binary was broken</li>
<li>New TSurface.Tween()</li>
<li>Now triggers can have parameters</li>
<li>New TParticleEmitter properties AlphaFrom/AlphaTo </li>
<li>Many functions in TSprite are no longer virtual </li>
<li>TSprite.OnChange does not update collisions if collisions has not been created yet</li>
<li>New TSurface.Replace()</li>
<li>THashEx.Generic() optimized when size is multiple of 4 (four bytes at a time)</li>
<li>New TScreen.DrawSurface(surface, rect, z)</li>
<li>New TMap.ScriptCount(group)</li>
<li>New TScript property LinkedGroup</li>
<li>New TMemVar.Sum()</li>
<li>Many loop vars change from integer to NativeInt when used with pointers as offset so code generated is better</li>
<li>New TMem.AreEqual<T: record>(A, B: pointer; aSize: cardinal): boolean</li>
<li>New TSoundFactory.ToMono()</li>
<li>Now TSurface.FlipX is much faster</li>
<li>TD3DSurface.FillSurface() performance when no colorkey improved</li>
<li>TKinematic improved</li>
<li>New TSwap<T>.SwapContent(A, B: pointer)</li>
<li>New TMath.CenterOfPolygon()</li>
<li>New TMath.ThrowAngle()</li>
<li>New class TCameraPrimitives, for primitives with camera </li>
<li>New TParticleEmitter.IsStarted()</li>
<li>A few optimizations in loops with field variables from object in many classes</li>
<li>TLayer.GetCellNoCheck() used in some functions rather than GetCell()</li>
<li>New TInterfaceHelper.Copy()</li>
<li>Now individual layer tiles can be glowed</li>
<li>New TLayer.GetDistance(), GetTileRect()</li>
<li>New property TLightSprite.Blur</li>
<li>New TRGB.Dolly(), Martinique()</li>
<li>New TParticlesTextureCache class</li>
<li>New ISprite.SetEngine()</li>
<li>New TColony<T>.Exchange()</li>
<li>New TCollision.CircleInRect(), TCollision.CircleInCircle(), TCollision.LineInRect(), TCollision.PointInTriangle(), TCollision.RectInCircle(), TCollision.TriangleInRect()</li>
<li>Now once per second system checks for "aged" buffers in pool in order to discard them (10 seconds at the moment)</li>
<li>TSpriteEngine.GetSurface() performance improved a little bit</li>
<li>Now a TKinematicArm can have many TKinematicSegment</li>
<li>New TClamp<T> helper functions</li>
<li>New TObjectHelper.CopyObject<T></li>
<li>New TMath.Clamp(), DistanceManhatan(), NormalizeAngle180(), Atan2(), Log10(), Log2(), Sgn(), Ln2()</li>
<li>TPathResolver finally works 100%</li>
<li>New class TTickHelper</li>
<li>New TDirectionHelper.Rotate180(), Rotate90(), Rotate270()</li>
<li>New TMath.InverseNormalize()</li>
<li>Particles now handle much better when alpha changes with textures (dictionary of pool)</li>
<li>New TMath.NextPowerOfTwo()</li>
<li>New BB.Helper it contains all BB classes and records helpers</li>
<li>New TDummySprite.GetLayerPosition()</li>
<li>New TSurface.Copy(), MirrorX(), MirrorY()</li>
<li>Now Cadency in .ini, .extra are set as milliseconds</li>
<li>New TSprite.GetDelta()</li>
<li>Now the precise collision system supports FlipX and FlipX (besides zoom and angle)</li>
<li>New IObject.GetClass()</li>
<li>New TFloatHelper.Is1()</li>
<li>TCollision.TestBB() improved</li>
<li>TSurface.Rotate() improved</li>
<li>Now in looped maps the offset can be set (does not have to be zero)</li>
<li>New TParticleEmitter.Random</li>
<li>New TParticleEmitter.RandomRate </li>
<li>New TSprite.GetCenterF()</li>
<li>New class TCPU</li>
<li>New TRGB.Gradient()</li>
<li>Now TSprite FlipX()/FlipY() also flips BoundingBox</li>
<li>TSprite.GetBBF() improved</li>
<li>Particles cache system does not longer need a group</li>
<li>New property TParticleEmitter.RandomAngle</li>
<li>New TMath.Normalize()</li>
<li>Many exceptions changed to asserts</li>
<li>sprites.CenterX/Y were not taking into account CoordinateOrigin...</li>
<li>Better management of particles </li>
<li>New unit BB.E3D.Types</li>
<li>New Particle Emitter pool</li>
<li>New motion tiles has color property in .ini file</li>
<li>New TRGB.HasColors()</li>
<li>Updated to last version of bass.dll</li>
<li>New TCPU.LDMXCSR() and TCPU.STMXCSR()</li>
<li>New FloatHelper.InBetween()</li>
<li>Added moving slopes tiles in Maps</li>
<li>Fixed slope sizes when no colorkey</li>
<li>TStrings<T>.SetItem() was not working properly</li>
<li>New TGraphicDriver.OnClear event</li>
<li>TSpatialPartitioning.GetArea<T> improved when area occupies only one cell</li>
<li>TSprite properteis Painted and Locked removed</li>
<li>TSpriteEngine.Find<T>() casting improved</li>
<li>TSpatialPartitioning.IterateSprites<T> casting improved</li>
<li>Scripts rollback handling improved</li>
</ul>
</div>
</div>
</div>
Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com1tag:blogger.com,1999:blog-6500511128374134254.post-83252830905737356822019-10-21T19:52:00.000+02:002020-03-23T20:35:27.024+01:00Martina is coming! (and also a new version of HBF)Oh well, is never too late to have another baby, so happy...<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]--><br />
<div>
<br /></div>
<div>
In the meantime I always find time to change little things here and there. Most important changes since last time:</div>
<div>
<br /></div>
<div>
<ul>
<li>New trig<span style="font-family: "times" , "times new roman" , serif;">ger link types rollback and many</span></li>
<li>New render when openning secret doors</li>
<li>New extras: Magic wand, blue ball</li>
<li>New enemies: mine bomb, wall bouncer, tri eye</li>
<li>New explosion types</li>
<li>New elements: alarm, candy machine, frame</li>
<li>New weapons: machine gun</li>
<li>New level Lifting</li>
<li>New tool Path Editor</li>
<li>New effects in surface like: displacement, connecting dots, </li>
<li>More control over UV in sprite textures</li>
</ul>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">Found binaries at </span><span style="background-color: white; color: #222222; font-family: "times" , "times new roman" , serif; font-size: 13.2px;"><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="color: #888888; line-height: 18.48px; text-decoration-line: none;">OneDrive</a></span></div>
<div>
<br /></div>
<div>
New level:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGBNMs1DzH3WPa2rzMYb8Htvb1rCRT5QCsNCGApfO8LAJkZSip6lp2QRQ-5k_BEDTFoWMlmc11KJ07WEz2l6aYIiGhANuSox_79ae2Zo9ntheo3rgXQH0OTqyA7gaPsAYOv0kuCQSH2FRX/s1600/Lifting.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGBNMs1DzH3WPa2rzMYb8Htvb1rCRT5QCsNCGApfO8LAJkZSip6lp2QRQ-5k_BEDTFoWMlmc11KJ07WEz2l6aYIiGhANuSox_79ae2Zo9ntheo3rgXQH0OTqyA7gaPsAYOv0kuCQSH2FRX/s640/Lifting.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
</div>
<div>
New effects:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyTPiDA1ak7I6xBmnTfU_ImIsa3YeohlbIlBUYiiGC0Yaqss807pbwdopyvdpWUK_5mbF4s3guvXg7ZdVLiw13q17TiRg_fiOfpANbR8aF3QYzIt1RQGhKAspYBXmpwqDvmBU3xfwl5jna/s1600/The+Labyrinth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyTPiDA1ak7I6xBmnTfU_ImIsa3YeohlbIlBUYiiGC0Yaqss807pbwdopyvdpWUK_5mbF4s3guvXg7ZdVLiw13q17TiRg_fiOfpANbR8aF3QYzIt1RQGhKAspYBXmpwqDvmBU3xfwl5jna/s640/The+Labyrinth.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
backlog:</div>
<div>
<br /></div>
<div>
HBF)</div>
<div>
<br /></div>
<div>
<ul>
<li>New trigger action ClipEntity()</li>
<li>Now Machine gun can also shoot up</li>
<li>Now Basement can throw homing missiles</li>
<li>Teleport was not always handling correctly the collision with guests</li>
<li>Now when a hero is killed its seeking homing missile looks for other heroes if available</li>
<li>Robot can also now throw missiles </li>
<li>New TPlayerHandler.OtherHero(hero)</li>
<li>Now missiles do some smoking trail </li>
<li>Now TSpriteDispatcher has new properties: Tile, SpriteProperty and SpriteValue</li>
<li>New trigger ResetTriggerSelection()</li>
<li>Fixed some issues when entities were crushing</li>
<li>Fixed an issue when a fast platform was going up and hero was jumping</li>
<li>Fixed an issue with tapes not checkking both sides when facing was equal to none</li>
<li>Now Bouncing Laser is aware of hero's immunity</li>
<li>Bouncing laser now also bounces with solid items</li>
<li>Weird now also check for solid items</li>
<li>New method TKeysHelper.Peek()</li>
<li>New method TEnemy.CanBeExcited()</li>
<li>Fixed a bug with none gravity items that they were checking collisions against the world</li>
<li>Now only when shopping hero can sell items</li>
<li>Now Bat is able to hang upside in moving platforms</li>
<li>Now Missiles also destroy enemies </li>
<li>Now Inertia is accumulated </li>
<li>Now explosions also affects moving platforms </li>
<li>New element Tube, it throws air up, pushing items, hero and enemies</li>
<li>Collisions with moving blocks improved</li>
<li>Collisions with platforms are more stable</li>
<li>When pushing items they also stop with solid items</li>
<li>Platforms now can follow a Path</li>
<li>Fixed a camera bug when teleports where on same X</li>
<li>Mine can follow a path</li>
<li>Now hero checks if solid items are piled at restarting position when dying</li>
<li>New level Lifting</li>
<li>Path helper now can handle more than one attribute </li>
<li>New TSoundDispatcher.Count() to count all concurrent playing sounds </li>
<li>Now when GameServices is assigned all published properties are already set </li>
<li>Sounds position are update on even frames </li>
<li>Now when landing on moving platforms ssLanding is set</li>
<li>New set of minimaps</li>
<li>Sprites priority changed to plus rather than minus</li>
<li>Improved a bit some internal callbacks</li>
<li>Laser improved</li>
<li>Shoes counter mechanism improved</li>
<li>Now when an arrow hits a solid tile it will fall rather than dissapear</li>
<li>property SolidFromBottom renamed to OneWay</li>
<li>Now when a mine moves if bounces if a solid tile in on its way</li>
<li>Now camera when zooming out distinguish between horizontal and vertical distances</li>
<li>More Abs() replaced with TFloatHelper.Abs()</li>
<li>New TGameSprite.SolidItemAlignedOnTop()</li>
<li>TGameSpriteIsSolid() no longer returns a boolean </li>
<li>New GameSprite interfaces Window and CameraHelper</li>
<li>TestWorldWollision() reordered to a more real approach</li>
<li>Now Tube force is done with Power property</li>
<li>More use of TFloatHelper.IsZero(), TFloatHelper.NotZero(), TFloatHelper.IsGreaterThanZero(), TFloatHelper.IsLessThanZero(), TFloatHelper.IsGreaterEqualThanZero()</li>
<li>Now in order to push a block you need some power</li>
<li>New Path styles horizontal and vertical</li>
<li>New item glove, so heavy blocks can be pushed</li>
<li>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</li>
<li>Now Trigger system can zoom in/out the camera </li>
<li>Fixed an issue when updating the level on an extra the previous item was not released after purchasing it</li>
<li>Now Tube can be up side down</li>
<li>Fixed an issue with TBouncingLaser at certain angles </li>
<li>Fixed some more Z issues</li>
<li>TBasement now inherits from TSpawner</li>
<li>Now THoming can follow a path from the new path editor</li>
<li>New TGamesprite.Velocity (replaces impulse and inertia)</li>
<li>Now when jumping oneway platforms hero won't stop </li>
<li>Now using {$I HBF.inc} to includew common definitions</li>
<li>Now different scanlines can be loaded</li>
<li>Some inverse multiplications here and there</li>
<li>Platforms now also appear in minimap</li>
<li>New property TArrow.FallWhenHit</li>
<li>Now arrows can burn</li>
<li>Now when hero attacks with a weapon that can different power depending on how long you press a button then it shows a bar</li>
<li>New trigger SetCameraRotation()</li>
<li>TBendArrow can also Burn</li>
<li>Now players are mapped correctly (J1,K,J2,J3 = P1,P2,P3,P4)</li>
<li>New types for ColorTiles: custom, expanding, etc</li>
<li>Changes when bouncing platforms to avoid -0 in Horizontal or Vertical speed </li>
<li>Now during the same game if fight is win on a certain level then runes won't appear again in that level</li>
<li>Head fire collision with items improved</li>
<li>IsSolid() improved</li>
<li>Now TGameSprite.Execute() method has a param (useful to send params from scripts)</li>
<li>Now "Severe Gravity" uses paths created with the editor for some parabola missiles</li>
<li>Now "The Labyrinth" uses the new trigger type Rollback</li>
<li>Now secret doors show something different when opened</li>
<li>Stalactites are break differently when broken</li>
<li>New TMagicWand extra</li>
<li>Item.IsRepeatable removed</li>
<li>Item.IsActive removed</li>
<li>property InventoryItem.IsActive renamed to IsSelected</li>
<li>Hero.CreateItemsFromInventory improved</li>
<li>New TGameSprite.GetEmitterPosition</li>
<li>Basement, new property TimeToWaitWhenMultiple</li>
<li>Missile, new property callback OnTargetGone</li>
<li>Now a Mine does some rotating and zooming</li>
<li>New TEnemy.SleepAndWakeUp()</li>
<li>Now coins are stored in inventory</li>
<li>Now already thrown bombs can be picked up</li>
<li>New extra Missile </li>
<li>DestroyArea() is more accurate</li>
<li>Now shop shows the quantity left</li>
<li>New TGameSprite.CircleExplosion()</li>
<li>New property TBasicPlatform.CanDie </li>
<li>if platform is moving in a tape and an entity is on top, then take that speed</li>
<li>New element Alarm </li>
<li>Now the chat shows who is sending the message</li>
<li>Now TTriggerDispatcher can notify any observer about public triggers </li>
<li>Now Cone is used, why it was not used?</li>
<li>Door, teleport is got a new texture map for darkness</li>
<li>Camera can now be Freezed</li>
<li>TPlatformBall got a new surface</li>
<li>New extra BlueBall, use them and then attack!</li>
<li>New IGameServices.GetParticles: IParticles</li>
<li>Now rather than TryXXX() functions interactible entities implement IInteractive (post, door, wheel, teleport, terminal, NPC)</li>
<li>New element and achievement Candy Machine</li>
<li>property AutoCenter renamted to AttachTo </li>
<li>New WallBouncer enemy</li>
<li>IGameSprite renamed to IActor </li>
<li>New TGameSprite.Face()</li>
<li>New TGameSprite.Yell()</li>
<li>New Shop item properties Cooldown (before was delay) and IsRechargable</li>
<li>New TGameSprite.DelayedExplosion()</li>
<li>New Enemy properties Deaf and Visibility</li>
<li>New weapon TMachineGun</li>
<li>-New THeroBullet class</li>
<li>TEnemyKiller now is used as base class for enemy bullets</li>
<li>New property ShopItem.Input (normal,accumulated,continuously)</li>
<li>Now max_items = 999</li>
<li>property AttachTo renamed to AlignTo</li>
<li>Now when entering teleports new particles are used</li>
<li>Now bombs have some randomness</li>
<li>New enemy Mine Bomb</li>
<li>New enemy TriEye</li>
<li>Kurkani now is shown in darkness</li>
<li>New TGameSprite DieOnLand and DieOnWall properties</li>
<li>New element Frame </li>
<li>Now Laser take into account solid items </li>
<li>New global var TGame.GD</li>
</ul>
<br />
BB)<br />
<ul>
<li>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º</li>
<li>TSurface.AverageColor() is now a bit faster</li>
<li>New TParticleEmitter.Priority property</li>
<li>More info for screen pools</li>
<li>New IGraphicDrawer.Frame()</li>
<li>New TStrings<T>.AsText()</li>
<li>New TRect helper Clear()</li>
<li>New sprite property ZShadow </li>
<li>Optimizing interface as TSurface with interface.AsObject</li>
<li>New ISelf.GetInterfaceEx() so [unsafe] references can be used, therefore Supports() is no longer used</li>
<li>Many minor performance improvements here and there</li>
<li>Direct3D Prepare() is now optimized for specific rendering methods</li>
<li>New Radix sorting</li>
<li>Fixed a silly bug in TBezier class that didn't generate the first step correctly (discovered after creating a path editor)</li>
<li>New TFloatHelper.Is270(), TFloatHelper.Is90() ,TFloatHelper.IsOne(), TFloatHelper.IsMinusOne() and TFloatHelper.Not1()</li>
<li>Aspect camera is not continuously recalculated but only when needed</li>
<li>Camera viewport() and CalculateProjectedTileCount() with some zooms were not correct </li>
<li>New TFloatHelper.Max() and TFloatHelper.Min()</li>
<li>New path editor</li>
<li>New TAnimationSprite.RandomInitialFrame</li>
<li>Now using {$I BB.inc} for common properties</li>
<li>No longer use of TGraphicDriver.Instance in the code</li>
<li>New TLayer.CleanTilesWithAttribute()</li>
<li>New helper TRect.Put() and TRect.New()</li>
<li>New helper TPoint.Put() and TPoint.New()</li>
<li>New RGB.Put() and TRGB.New()</li>
<li>New TVectorEx.Put() and TVectorEx.New()</li>
<li>Inlined methods used within the same class must be implemented first</li>
<li>Important functions where IShape was used now use TSimplePolygon, performance boost</li>
<li>Now TSpatialPartitioning.GetArea() exists quickly if there are no sprites in the whole grid </li>
<li>Now TInputEx.GetCurrentCounter()</li>
<li>TFloatHelepr.Abs() is slower than standard one</li>
<li>class TSimplePolygon28 renamed to TPolygonTexcureColor, size is now 32</li>
<li>Bass DLL updated to latest version</li>
<li>New LinkType for scripts ltRollback, for those scripts that work as long as target is colliding, otherwise a rollback script is executed</li>
<li>Fixed an issue when locking more than once the same surface within the same tick</li>
<li>New TSurface.ConnectDots()</li>
<li>Rollback triggers now can have a timeout</li>
<li>Particles decimal rate 1.5 or 0.5 now work properly</li>
<li>New TSurface.GetAddressNoCheck()</li>
<li>New Sprite.EmitterType etDiffuse </li>
<li>New sprite.CalculateNormal()</li>
<li>New sprite.CalculateSpecular()</li>
<li>sprite.GetRectangle() and sprite.GetRectangleF() now takes into account CoordinatesOrigin</li>
<li>New TScript.LinkType ltMany, in order to connect many scripts, if all are activated then execute the related script </li>
<li>New class TEasing</li>
<li>New IParticleEmitter and IParticles</li>
<li>TSurface.ExtractPoints() improved</li>
<li>Now TParticleEmitter.SetImage() has a color parameter</li>
<li>TSurface.ExtractPoints performance improved</li>
<li>TRGB.Clamp() fixed</li>
<li>Surface blit() can now use ColorKey</li>
<li>TSurface.Rotate() was not working properly</li>
<li>New TSound.GetDuration </li>
<li>TGraphicDriver.DrawSurface(), FlipX and FlipY removed </li>
<li>New TSprite.ScrollTexture()</li>
<li>New TSprite.TilingScale(), to scale the UV of the sprite </li>
<li>New TSprite.SecondarySurface, so to special effects with another texture</li>
<li>New property TSprite.TextureAddress</li>
<li>New TSurface.GetType()</li>
<li>New TSurface.Displacement(), to apply texture displacements </li>
<li>New TSurface.ScrollX() and ScrollY()</li>
<li>Now surfaces are check for colorkey (maybe they are set but in fact no colorkey exists)</li>
<li>TSpriteEngine.Capture() now move bytes with TMem.Move32()</li>
<li>Many TSurface operations improved, using GetAddressNoCheck(), not always calculating crc, proper casting of integer vs cardinal, PCardinalArray, for rather than while, </li>
<li>TSurface.ScrollY() now uses TMove.Move128()</li>
<li>New TMem.Scan8/16/32/64()</li>
<li>New TSprite filter sfGaussian</li>
<li>New TGraphicDriver.ClipRectAndTexture()</li>
<li>New TSurface.ReduceColors()</li>
<li>Finally sprite quads can be clipped</li>
<li>New TRGB.RGB2HSL()</li>
<li>New TSurface.Resize()</li>
<li>New TSurface.ColorCount()</li>
<li>New class TFixedPoint, to facilitate the fixed point maths</li>
<li>New TSurface.SetPixelNoCheck()</li>
<li>Now Sprite BB is only calculated when refreshing sprites </li>
<li>Now surface rectangle is only calculated when refreshing surface </li>
</ul>
<div>
<br /></div>
</div>
Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0Palma, Islas Baleares, España39.5696005 2.650160300000038739.47168 2.4887988000000387 39.667521 2.8115218000000386tag:blogger.com,1999:blog-6500511128374134254.post-35598860819366074992019-03-09T20:50:00.000+01:002019-03-09T20:51:48.659+01:00Happy birthday daddy!<span style="font-family: "trebuchet ms" , sans-serif;">I'm still improving the engines just because is lots of fun.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: white; color: #222222; line-height: 18.48px;">Found binaries at </span><span style="background-color: white; color: #222222;"><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="color: #888888; line-height: 18.48px; text-decoration-line: none;">OneDrive</a></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">HBF)</span><br />
<br />
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Many enemies can now follow a path </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New enemy BouncingLaser</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now boomerang does some curve</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Turrets won't shot if there is a wall in between</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Fixed TWeird when moving fast </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">When an enemy is inside a bubble it won't kill hero</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New SonicBomb item</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now any tile can be disintegrated</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New achievement break a glass </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Collision top now also check for slopes</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Ray was painting surface even if not visible</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TPathHelper now also works in pixels</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New property GameSprite.ItemsLayer since it is heavily used</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now TWeb disappear with alpha </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Some map changes</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TGhost animation was not always correct</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TSegment enemy</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Fixed a bug selling items</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TGameSprite.Coins property</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New achievement "find all fruits"</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New fruit items</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New enemy TBasement that can launch missiles</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now TGmeSprite.Explotion() is more versatile</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TDoubleTurret</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New test map so that new entities cab easily be tested</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">In debug mode one can create new entities on the fly </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TBezierEnemy</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Some services are preloaded as properties in TGameSprite</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TGameSprite.GetCollisionData() does include himself as item</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New THoming missiles </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TRobot enemy</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Edit window now shows a blinking cursor</span></li>
</ul>
<br />
<br />
<span style="font-family: "trebuchet ms" , sans-serif;">BB)</span><br />
<br />
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Non cached surfaces are created in default pool</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Surface hash is calculated when creating the texture so no lock is needed</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now when locking surfaces the read/write flags are used correspondingly</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">If collisions have no angle and no zoom, the fastest check is done</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TSimplePolygon, tailor made for direct3d buffers, now all sprites, primitives and particles are done using them</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now screen buffer management is more stable</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Trying to avoid AddRef and Release methods for interfaces when possible</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TObjectEx.AsPointer()</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now TColony<T> deals with interfaces without AddRed/Release</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TColony<T>.Insert()</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Maps iterates i, j rather that j, i (cache benefit)</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New graphics buffer pool</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TSprite.Timeout property removed, use AddTrigger() and Die() instead</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now maps pixel conversions are done with SHR/SHL rather than multiplying</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now spatial partitioning conversions are done with SHR/SHL rather than multiplying</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Minor performance improvements in sprites </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">SpriteLights are now also cached</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TRGB.NotEmpty()</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TVectorEx.NotEmpty()</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Starting to use inline variables (Rio 10.3) as a performance optimizer (declaring managed variables after early exit or on certain conditions)</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TOrthogonalCamera is back</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Fixed some issues in the collision system</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Fixed an issue when packing vars for hashing</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TAchievements.Behaviour property</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Angle was not reversed when camera is available in collisions </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now Screen.Fade() has a Z param</span></li>
</ul>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4GoCNRaD4wMwRSuSgTZq3pujFHR8RRg3E6Gva0aZjTZd93Lq3VabQznA6Ja9yVhBojKSQcxWzrbe0d9j0xfeZfDITY7Ovg-vVpc2mlwrkyDwYFMaKeEUozlg9irZDXeRFdUPxXhkJUI4e/s1600/Level+X.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4GoCNRaD4wMwRSuSgTZq3pujFHR8RRg3E6Gva0aZjTZd93Lq3VabQznA6Ja9yVhBojKSQcxWzrbe0d9j0xfeZfDITY7Ovg-vVpc2mlwrkyDwYFMaKeEUozlg9irZDXeRFdUPxXhkJUI4e/s640/Level+X.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTzRHN71xeVCPcDIY-1AakJK9eDruey_uzc9wjthpO-MbGG8FUUCaE2DXonI52X2CNVfBDHymuZ2PCK98IkAkIMLi5FLnY7aY78t1g5mc-JcJFmWgk5y5pzB1JGl-aNwDSY8-ypAZh00Gw/s1600/The+Lights.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTzRHN71xeVCPcDIY-1AakJK9eDruey_uzc9wjthpO-MbGG8FUUCaE2DXonI52X2CNVfBDHymuZ2PCK98IkAkIMLi5FLnY7aY78t1g5mc-JcJFmWgk5y5pzB1JGl-aNwDSY8-ypAZh00Gw/s640/The+Lights.png" width="640" /></a></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<br />
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0Palma de Mallorca, Islas Baleares, España39.5696005 2.650160300000038739.47168 2.4887988000000387 39.667521 2.8115218000000386tag:blogger.com,1999:blog-6500511128374134254.post-22738359287905501572019-01-01T20:53:00.004+01:002019-01-01T20:54:52.789+01:00Happy new year!<span style="font-family: "trebuchet ms" , sans-serif;">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.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: white; color: #222222; line-height: 18.48px;">Found binaries at </span><span style="background-color: white; color: #222222;"><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="color: #888888; line-height: 18.48px; text-decoration-line: none;">OneDrive</a>, h</span><span style="background-color: white; color: #222222;">ere is the what's new:</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">HBF)</span><br />
<br />
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New element explosive barrel</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Rope now ends with a circle</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Observer Update() takes into account type of message </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now heroes are spawned first so that they are aware about all other sprite coordinates</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Cardride was broken since some releases...</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Cable sparks now excite any mechanic enemy</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now sprites can be wake up</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New GameServices.WakeUp(area)</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New Crane entity </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Replaced MOD with AND when possible</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Bomb, Titan and Worm can now sleep </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New trigger WakeUpEntity()</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New IEmitter interface </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Solid layer is calculated when assigned the GameServices as .Layer, so GameServices.GetLayer(SOLID_LAYER) is no longer needed</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New Compass shop item</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New class TGameService for classes that need GameServices interface</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New property TGameSprite.DefaultHorizontalSpeed</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now menu key can be set in hbf.ini</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Net keys data moved to TSession</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">All input (local, remote and impersonate) goes to new class TKeysHelper</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Some Z definition changes</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Files clean up</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New enemy RollingBox </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New inventory item Dynamite </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Collision grid is now 128x128 rather than 64x64</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">When an entity dies all his loop sounds are stopped</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Entity sound emission center is also updated continuously</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Sound code improved</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Sound 3d is calculated more accurately</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">THBF now inherits from TObservableObject</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New hero can duck</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New element Darkness, darkness maps are only applied to background layers</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New element Fluorescence</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now Explosions emit light</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now Nuclear emits light</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Elements with no gravity are not affected by platforms (like boomerang)</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New sound effects to be used: timeout, pitch, attenuation</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now sound system reuses a sound if same key and distance is lower</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Too far away sounds are discarded</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Playing a bit with sound occlusion</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now sounds can sleep and fade </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now there is a generic way to store already taken objects</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TAchievementsHelper, all achievements code went there</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Gamma is stored in config </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">When Gatashi gets stuck then too many task calls to Bezier are made and music is interrupted, improved</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now enemies roar from time to time (playing with 3d sounds...)</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now lights are supported in the background layer </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Some solid blocks were disappearing a frame before before being converted into an item</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New element generic laser</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now shadows casting into walls are more optimized</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New achievement "kill a fly"</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New enemy turret </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Minimap refactored</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Shadow diameter can be now set in realtime</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New decorators in front layer (glass)</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New interface IMinimap </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">When a NPC is on a platform it goes away jumping</span></li>
</ul>
<br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">BB)</span><br />
<br />
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TSprite.Blit() reordered to do less IF/THEN/ELSE</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Faster Blur() method</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TDummySprite.Move(x,y)</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TDummySprite.CollisionAt() it simulates a collision at X/Y </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Script property values are written using rtti</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New property TSound.IsStarted </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TSurface2Poly optimized </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Improving the code that calls _intfclear</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Using last version of BASS</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TLayer.CleanAttributes() and TLayer.CleanTiles()</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TVectorEx.Avg()</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TAnimationSprite.Tick() and TDummySprite.Draw() improved a bit</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TObservableObject</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TDummySprite now inherits from TObservableObject</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TSuperSprite helps to composite sprites </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TAnimation.FileName</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TSound.Flags</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TBasicCamera.Rotate() performance improved</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TCollision performance improved</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TSpriteEngine.Render performance improved</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">All single comparisons changed to TSingle(x).AsInt</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TCollision hash key is no longer composed by strings but integers</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TCollision minor performance improvements</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TSprite minor performance improvements</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TCamera.ProjectVertexW when 1/Z is already calculated</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now TSprite caches W=1/Z, big performance</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Quad effects and filter are done in the setter</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TGraphicDriver.InView() performance improved</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TGraphicDriver.DrawQuad() performance improved</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now TSprite.Z is TSprite.Priority and TSprite.DirectZ is TSprite.Z, both are combined to create the final Z</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Sprite rotation coordinates are cached </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now a MMX version of Fill32() is used</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TGraphicDriver.SetGammaRamp() to apply gamma (only fullscreen)</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New fast Utils.Percent75</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New THashMap<K,V></span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New hashes for generic, 8, 32 and 64 bits sizes</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Maps can now have blur</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Events can be now grouped</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Many float divisions changed to inverse mutiplications</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Particles, float divisions avoided when possible</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">TScreen.DrawShape() improved not using FCapacity dictionary</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New Cast<T>.Cast() </span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New THashEx.Pack_Four()</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Better performance in the D3D handling of buffers</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">New TMath.SinCos(), used when possible</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Now maps can load extras that share same properties as [from..to]</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Layer XShadow and YShadow are now floats</span></li>
</ul>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYoxPs3fJDg1gUPX3BY8fxOU7D3fRtY-wUgMJeI6bJdqvpLSC6kcbfivYFsHufnaKOy2WsEkrE0iCfG5t52QiGjFKmRS39LiGJ6c8CAyjSUgoAvhMuMtNC1Dvb5qYR-va4w560ZQGkzVrv/s1600/The+Labyrinth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="979" height="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYoxPs3fJDg1gUPX3BY8fxOU7D3fRtY-wUgMJeI6bJdqvpLSC6kcbfivYFsHufnaKOy2WsEkrE0iCfG5t52QiGjFKmRS39LiGJ6c8CAyjSUgoAvhMuMtNC1Dvb5qYR-va4w560ZQGkzVrv/s640/The+Labyrinth.png" width="640" /></a></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<br />
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0Mallorca, Islas Baleares, España39.6952629 3.017571200000020338.9124004 1.7266777000000204 40.4781254 4.3084647000000205tag:blogger.com,1999:blog-6500511128374134254.post-3086178834501058752018-10-07T10:57:00.000+02:002018-10-07T11:36:47.673+02:00HBF, experimental versionI've been playing for a while with the attribute [unsafe], the reason is that I use interfaces all over the code but I manage my own objects, so I don't need this COM overhead, I need basically interfaces behaving as clever pointers.<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]--><br />
<div>
<br /></div>
<div>
The game offers to all entities the following interface which returns many interfaces to handle any part of the game behaviour, like this nobody is aware of the implementations of the classes.</div>
<div>
<br /></div>
<div>
<span style="color: blue; font-family: inherit; font-size: x-small;"> IGameServices = interface<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetSession: ISession;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetEvents: IEvents;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetPlayers: IPlayers;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetCoins: ICoins;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetMap: IMap;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetDrawer: IGraphicDrawer;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetGraphicInfo: IGraphicInfo;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetLog: ILog;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetProfile: IProfile;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetFont: IFont;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetSmallFont: IFont;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetWindow: IWindow;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetLayer(aIndex: integer): ILayer;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetCameraHelper: ICameraHelper;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetHud: IHud;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetEffects: IEffects;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetSound: ISoundDispatcher;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetMusic: IMusic;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetFileSystem: IFileSystem;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetOptimizer: IOptimizer;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetFactory: ISpriteFactory;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetBack: IBackground;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetSettings: ISettings;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetHighscore: IHighscore;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetLevels: ILevels;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetVars: IMemVar;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetAchievements: IAchievements;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetRunes: IRunes;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetShop: IShopHandler;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetTimer: ICrono;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetInput: IInput;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetCurrentScreen: IScreen;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetTrigger: ITriggerDispatcher;<br /> {$IFDEF _UNSAFE_}[result: unsafe]{$ENDIF}function GetChat: IChat;<br /> end;</span><br />
<span style="font-family: inherit; font-size: x-small;"><br /></span>
<span style="font-family: inherit;">So a typical enemy would do GameServices.GetSound.Play() in order to play a sound.</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">GameSprite.pas.4293: begin</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6BA50 53 push ebx</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6BA51 56 push esi</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6BA52 8BF2 mov esi,edx</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6BA54 8BD8 mov ebx,eax</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">GameSprite.pas.4294: Exit(FGameServices);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6BA56 8BC6 mov eax,esi</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6BA58 8B93A4030000 mov edx,[ebx+$000003a4]</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><b>00A6BA5E E8D5739AFF call @IntfCopy</b></span><br />
<span style="font-family: "courier new" , "courier" , monospace;">GameSprite.pas.4295: end;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6BA63 5E pop esi</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6BA64 5B pop ebx</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6BA65 C3 ret</span><span style="font-family: inherit;"> </span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">The classic IntfCopy() is there and of course their counterparts InfClear(). When you have a system which continuously passes interfaces then is quite an overhead.</span><br />
<span style="font-family: inherit;"><br /></span>
In the experimental version we get:<br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">GameSprite.pas.2834: result := GameServices.GetSound.Play(aFileName, aLoop, True);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A63218 6A01 push $01</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6321A 8BC6 mov eax,esi</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A6321C E863390000 call TGameSprite.GetGameServices</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">GameSprite.pas.4293: begin</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A66B84 51 push ecx</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">GameSprite.pas.4294: Exit(FGameServices);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A66B85 8B80A4030000 mov eax,[eax+$000003a4]</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A66B8B 890424 mov [esp],eax</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">GameSprite.pas.4295: end;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A66B8E 8B0424 mov eax,[esp]</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A66B91 5A pop edx</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"></span><br />
<span style="font-family: "courier new" , "courier" , monospace;">00A66B92 C3 ret </span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: inherit;">Hooray!, all that overhead is gone. The problem is that the compliler very often makes a mess and the code explodes as an AV (I haven't found a pattern), so I change the way the calls are done and then it no longer crashes.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">For example this crashes (in some places of the code some others not):</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="color: blue; font-family: inherit;">GameServices.GetPlayers.Kill(pOne);</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">changing the code a bit as:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="color: blue; font-family: inherit;">players := GameServices.GetPlayers;</span><br />
<span style="color: blue; font-family: inherit;">players.Kill(pOne);</span><br />
<br />
Not a big deal but quite cumbersome to do all over the code, so I change it when it crashes.<br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Still not convinced?</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Performance test with classic interfaces:</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD5A4cnNlJCnxzxPP1O6NerG4Usj3A6vtFcCppYWnMY9a5ablGZWQgLZmQluNzVasdJ_Zlspwl8LqOv3KvYQ_t-TIVaE4WCdBeEuvJFU7UCJp0kbnaxkJVR-lzMk2Jun38IC9A5Vm2U3wn/s1600/slow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="579" data-original-width="1233" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD5A4cnNlJCnxzxPP1O6NerG4Usj3A6vtFcCppYWnMY9a5ablGZWQgLZmQluNzVasdJ_Zlspwl8LqOv3KvYQ_t-TIVaE4WCdBeEuvJFU7UCJp0kbnaxkJVR-lzMk2Jun38IC9A5Vm2U3wn/s640/slow.png" width="640" /></a></div>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">About 40 FPS for 50000 triangles.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Now with this UNSAFE stuff:</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDqozmxA91jmBlFzKj_a7i6n5Vd9J1T7xdfK04GHLfQjv9ZR4hfKFMdBOT9snhZlvECW1QHXGf-6lBIkgh6p2pvSyG3AmAQhi2F4guFfHwcD3PHIg5nG5XmjMwNfB98y5gyxHcR59MSDgX/s1600/fast.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="552" data-original-width="1174" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDqozmxA91jmBlFzKj_a7i6n5Vd9J1T7xdfK04GHLfQjv9ZR4hfKFMdBOT9snhZlvECW1QHXGf-6lBIkgh6p2pvSyG3AmAQhi2F4guFfHwcD3PHIg5nG5XmjMwNfB98y5gyxHcR59MSDgX/s640/fast.png" width="640" /></a></div>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Almost 48 FPS for 50000 triangles.</span><br />
<span style="font-family: inherit;"><br /></span>
I believe if worth the effort. It is important to note that interfaces should all be declared as const and never as inline.<br />
<br />
So once I'm happy with the results I will publish this version.<br />
<br />
Cheers.</div>
Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-33760985403324127482018-10-05T15:13:00.001+02:002018-10-07T09:54:18.574+02:00Summer is gone...Well, still not bad weather but summer "mode" is gone...<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]--><br />
<div>
<br /></div>
<div>
Anyway, as usual I always find time to improve the framework (which is the main idea behind all this) and the game itself.</div>
<div>
<br /></div>
<div>
Main changes are performance boost here and there, framework improvements, game stability and a new secret level.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPL2_51GxYTQLYH6mXqupLLskZMOwhjRod3f_8XvX10_JXdDCpkuRO6CzvCbpoftDSINnzgaoRGLlyY4z7V5tVpZNIT8r0Xl76dsQLIcuI5GWW-V4l4ZzRFVAfZpvyN1KkER1KLPw-1PjQ/s1600/Unknown.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPL2_51GxYTQLYH6mXqupLLskZMOwhjRod3f_8XvX10_JXdDCpkuRO6CzvCbpoftDSINnzgaoRGLlyY4z7V5tVpZNIT8r0Xl76dsQLIcuI5GWW-V4l4ZzRFVAfZpvyN1KkER1KLPw-1PjQ/s640/Unknown.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<span style="background-color: white; color: #222222; line-height: 18.48px;"><span style="font-family: inherit;">Found binaries at </span></span><span style="background-color: white; color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif; font-size: 13.2px;"><span style="font-family: inherit;"><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="color: #888888; line-height: 18.48px; text-decoration-line: none;">OneDrive</a>, h</span></span>ere is the what's new:<br />
<div>
<br /></div>
<div>
<div>
HBF)</div>
<div>
<ul>
<li>All sounds are now played in 3d mode, panning and volume are continuously recalculated from hero</li>
<li>New class TChat </li>
<li>Hero can sell items </li>
<li>New class TColorTileHandler</li>
<li>Some lasers throw sparks when collide with a block</li>
<li>New trigger functions: IsDoorOpen(), SkipIfTrue() and SkipIfFalse()</li>
<li>Inventory had a memory leak, fixing that memory leak lead to many issues...</li>
<li>Now when throwing a weapon another one can be choosen and the old one still visible</li>
<li>Inventory now internally uses TStrings<T></li>
<li>TShopHandler.Remove() is now faster </li>
<li>Gift stuff removed, now they are invisible</li>
<li>Items now can also be sell</li>
<li>Shop/Inventory items code cleaned a bit</li>
<li>Platforms graviting was detecting itself...</li>
<li>Now when handling collision with blocks over a tape, tape speed is taking into account</li>
<li>New Headshot property distance </li>
<li>New shop item Invisibility</li>
<li>All entities that could react to the presence of hero now take into account Invisibility</li>
<li>Teleport system rewrited, it was not handling properly the guests</li>
<li>Now boomerang distance is configurable</li>
<li>Shop shows information about items</li>
<li>New red boomerang (level 2)</li>
<li>Game now distinguish between vertical and horizontal slopes so everything is easier</li>
<li>Horizontal slopes take into account Facing property</li>
<li>Spider runs away when hero has immunity</li>
<li>New TSelf that reflects entities</li>
<li>New Mirror.Alignment property</li>
<li>Now arrow has a power = 1</li>
<li>Now stone has a power = 2</li>
<li>Now golden shield can stop lasers</li>
<li>Property Chest.Z changed</li>
<li>Left and Right collisions with slope tiles improved a bit</li>
<li>Now when shopping game shows the owned quantity of each item</li>
<li>A door can connect to other door from different level </li>
<li>When connecting doors selection screen is not shown anymore</li>
<li>When selecting the next level, a sound is played</li>
<li>Now TLiquid implements IExecutor</li>
<li>Now Rotator can have different colors with ColorMaskA/B</li>
<li>Now rotator uses two light colors</li>
<li>Rotator now has a counter property so start Angle can be controlled</li>
<li>Now laser properly bounds in Mirrors</li>
<li>New class TFlyingEnemy</li>
<li>Now weapons can have a quantity (so bow does not have infinite arrows for instance)</li>
<li>Now Shop offers Ammo, a new shop item</li>
<li>Now any enemy can have wings and fly </li>
<li>New aligments acBottomLeft and acBottomRight</li>
<li>Time shader off was not working</li>
<li>New Bomb bitmap</li>
<li>Now droid has a new laser color property </li>
<li>New trigger CallElevator()</li>
<li>Trigger ItemOffset() renamed to TileOffset()</li>
<li>New trigger method MotionItem()</li>
<li>Unknown level is finished</li>
<li>Now teleport connection is per name and not per group, so teleports can freely connect to any teleport</li>
<li>Now Teleports can be disabled </li>
<li>Now Teleports now can also handle enemies </li>
<li>Door now can be closed automatically after open it with property CloseAfter</li>
<li>Door now can be half open but not accessible</li>
<li>Platforms can be executed from scripts </li>
<li>Platforms bouncing adjusted at pixel level </li>
<li>Now triggers and their timings are script dependent internally</li>
<li>Now weapons are used in grid collision matrix </li>
<li>Improved code like "interface as TClass" with "TClass(interface.AsObject)" (seems to be faster)</li>
<li>Now when you get a coin you get a message with the number of coins </li>
<li>Certain coins now use a Distributed Random Number Generator</li>
<li>Slots and Sounds per Slot are now configurable within the SoundDispatcher class</li>
<li>Sword cannot longer break walls, use bombs (hint...)</li>
<li>Extras code improved</li>
<li>New item property IsContinuous</li>
<li>Now monologue is now shown when in shop or inventory screen </li>
<li>Graviting is done with walking animation</li>
<li>New inventory function ActivateOnlyOne()</li>
<li>Now inventory can be navigate it with up and down keys</li>
<li>Clear inventory was not working properly after the first game </li>
<li>Fixed an issue pushing items recursively</li>
<li>In game menu now will always start with index 0 no matter how many times you access it</li>
<li>Now menus can be locked </li>
<li>Now game fades properly when exiting game </li>
<li>TBell renamed to TBells to avoid collision with extra.TBell </li>
<li>Now triggers can have required items </li>
<li>Countdown now has a direction property</li>
<li>Lamp has new style</li>
<li>Now game can be paused when fading</li>
<li>Fixed lamp light priority</li>
<li>TInventory.ActivateFirst() is now faster</li>
<li>Fixed error in magnet, when trying to read non IGameSprite interfaces and then AV</li>
<li>Map light is now blue</li>
<li>Pushable stuff now does slippery properly</li>
<li>GameServices.EnterInventory() moved to GameServices.GetPlayers.GetInventory.Enter()</li>
<li>GameServices.EnterShop() moved to GameServices.GetShop.Enter()</li>
<li>New TGameSprite properties MinAngle/MaxAngle to adjust the bounds of the gravity orientation </li>
<li>TGameSprite.IsIce property removed (it was unused)</li>
<li>Countdown now uses Y for position</li>
<li>Spring weird movement fixed</li>
<li>Shield code moved to GameSprite </li>
<li>Jumping force now uses property Power, so jumping enemies can have different jumping power </li>
<li>TColumn can use now different sprite sets</li>
<li>Maximum camera zoom set to 1024</li>
<li>Fade step set to 4</li>
<li>Gravity orientation code refactored</li>
<li>Pushing objects use property Power </li>
<li>Under some circumstances PushedByBlocks() got hero stuck</li>
<li>Shield can now stop fire bullets</li>
<li>Music timers are now local</li>
<li>Crepuscule is not a bit yellow</li>
<li>Now Pause key can also be redefined</li>
<li>When hero dies he also releases its chest keys</li>
<li>New class TRay</li>
<li>TCustomScreen refactored</li>
<li>Platforms can rotate with certain cadency</li>
<li>Game.GetTarget()/SetTarget() moved to CameraHelper</li>
<li>New trigger Sleep() (more complex than it sounds)</li>
<li>Ice can be sloped</li>
<li>Now any sprites supports multiple fellows</li>
<li>Now arrows can be called from the trigger system since they implement IExecutor</li>
<li>Shield and armor now takes into account hero's balance</li>
<li>Some maps now have floor traps in tiles</li>
<li>Fixed a bug when on top of ladder and jumping</li>
<li>New Scepter bitmap</li>
<li>New Explosion bitmap</li>
<li>Nulling some interfaces when destroying some entities</li>
<li>New helper Coins</li>
<li>New property TPlatform.SleepAfterBounce</li>
<li>Now message key can be set in the config </li>
<li>Stalactite was not breaking when falling on top of a map item</li>
<li>Preparing screen code improved a bit</li>
<li>Gametrigger was not settting Script to nil when destroyed (AV)</li>
<li>Now there is a secret coins per map, jump to find it!</li>
<li>New TVanishPlatform</li>
<li>TRotatingPlatform fixed</li>
<li>Spring behavior improved</li>
<li>Top/bottom collisions are not checked when items are invisible</li>
<li>Left/Right collisions are done against rectangle and not BB</li>
<li>Liquid can now load any particle system</li>
<li>Now NEW_ATTRIBUTE is part of the non breakable attributes</li>
</ul>
</div>
<div>
BB)</div>
<div>
<ul>
<li>New TFloatHelper.Abs(), faster by just clearing bit 31</li>
<li>Collition Matrix system improved a bit</li>
<li>TSurface.Blit(add) is now MMX </li>
<li>New TRGB.Clamp() as MMX</li>
<li>Some buffer triangle functions writed as MMX</li>
<li>Now using TFloatHelper.Sqrt(), TFloatHelper.Trunc(), TFloatHelper.Round() which are MMMX optimized</li>
<li>Now TMatrixEx uses some MMX assembler optimizations</li>
<li>Now TVectorx uses MMX assembler optimizations</li>
<li>Removed inline from functions returning interfaces (Delphi makes a mess)</li>
<li>Removed inline when function result is string (bad optimization from compiler)</li>
<li>Cleaned functions that didn't need to be virtual</li>
<li>Sprite.Pause is no longer virtual (that was actually slowing down the game accoring to profiler)</li>
<li>New Sprite.CanPause property, useful when you want some sprites to never be paused</li>
<li>Improved sprite engine main loop by creating local vars of global vars and duplicating the loop with IF and not IF</li>
<li>New TObject.PopTag()</li>
<li>Now trigger calls must implement the Caller and script Name (this avoids some mess code)</li>
<li>New TLaser.CurrentSegments property </li>
<li>For specific triangle routines Buffer.Tag is used rather than Shape.Tag</li>
<li>Now particles store the filename making debugging easier</li>
<li>New collection helper to sort as Insertion algorythm (good for almost sorted collections)</li>
<li>New YTLayer.GetCells() that works with map coordinates</li>
<li>TLayer.Trace() now works with map coordinates rather than pixel coordinates </li>
<li>TSimpleSprite.CalculateQuad() reordered so that performance is improved</li>
<li>Fixed Z in Layer.AddItem()</li>
<li>TScript.RemoveWhenTaken removed, now use Counter = 1 (the default)</li>
<li>Now with RTTI system if enumerator does not exists an exception is raised</li>
<li>TEvents renamed to TEventEx</li>
<li>TEventEx loop forced to be forward (so calls order in scripts is respected, very important!)</li>
<li>TScript moved to its own unit</li>
<li>New LinkType property in triggers to allow more behaviors like mutual connexion</li>
<li>TStrings<T> is now used in TIni rather than TDictionary<K,V></li>
<li>Scripts improved with TicksBetweenExecutions, Executor and Counter new properties</li>
<li>Distortions were not free properly</li>
<li>New TObjectEx.Error(), so that one does not need to do raise exception</li>
<li>TStateDirector<T>() improved a bit</li>
<li>Fading system improved a bit</li>
<li>property TSprite.FreeSurface removed (was always the negative of Cached)</li>
<li>Fixed a AV in Glow and Shadow surfaces (double free)</li>
<li>Now when addings events if steps is zero then the CallBack is executed immediately</li>
<li>Fixed TMapInfo.HasTile(), my goodness...</li>
<li>Now script Input property can be any key</li>
<li>Fixed a silly typo error in collision library</li>
<li>New property TFont.Uppercase</li>
</ul>
</div>
</div>
Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-70896376394886771132018-04-14T14:50:00.000+02:002018-04-14T14:50:43.520+02:00First 2018 update, it was about time...<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]--><br />
<div>
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:</div>
<div>
<br /></div>
<div>
<div>
HBF)</div>
<div>
<ul>
<li>Now game is paused, Shop, Inventory and Fight screens are substates, now code is cleaner and shorter</li>
<li>Curtain code cleaned</li>
<li>Now Shunenbukaidesu brings rain</li>
<li>Now when pause screen is gray</li>
<li>New TDirector code improved</li>
<li>Now Boom does some random rotations</li>
<li>Now Lights do some random zooming</li>
<li>New property TTriggerDispatcher.Player so code knows who did execute the trigger</li>
<li>TBell behavior improved</li>
<li>Backgrounds now can be setup in back.ini per level </li>
<li>Now TGameSprite.Magnetized property</li>
<li>Now when adding a sprite to an engine it will enter the collision grid so that it can be search since the very beginning</li>
<li>UFO laser fixed (since when it was wrong? :)</li>
<li>New methods TGame.GameServices FadeIn(), FadeOut(), LockEntity() and LockExcept()</li>
<li>Left and Right collisions with moving objects improved</li>
<li>Now Dialogs have a Edit type so game can interaction can be done</li>
<li>Now game allows to add text (useful for chat)</li>
<li>Now Ropes can have different textures</li>
<li>New triggers IfItemThenSet(), RemoveItem(), ExecuteActionTile() and ExecuteActionEntity()</li>
<li>Now enemies can also activate triggers</li>
<li>Some levels now have a fourth layer (pipes and others)</li>
<li>Now TTriggerDispatcher has a Target reference (who did execute the trigger)</li>
<li>New trigger Velocity()</li>
<li>Pushed by blocks code fixed</li>
<li>New trigger Sleep()</li>
<li>Fade code refactored a bit</li>
<li>Fixed a bug in dialog system with NPC </li>
<li>Extra Wand execution simplified</li>
<li>Now hero balance when standing</li>
<li>Added a new layer to all maps to handle better the trigger interactions</li>
<li>All layer are now declared as constants</li>
<li>Now circles shrink when interacting</li>
<li>Stalactite now works with gravity </li>
<li>Graphics unused removed</li>
<li>Now game does Continuous Collision</li>
<li>Now Post is static</li>
<li>Now left/right collision with slope items/tiles works properly</li>
<li>Some fonts are shown with shadow</li>
<li>Collisions improved</li>
<li>New layer in the labyrinth</li>
<li>Owner property renamed to Hero</li>
<li>CarryItem property renamed to Owner</li>
<li>TGameSprite.IsUnderneathOf() fixed when gravity is up</li>
<li>Now music can fade in/out</li>
<li>Music now fades with screen</li>
<li>Now in mapping.ini one can assign directly the default animation, so for simple sprites there is no need to create a class </li>
<li>Some new fonts</li>
<li>Now some level has a countdown...</li>
<li>New Door graphic</li>
<li>New wind effect</li>
<li>Notifications are now easier to code</li>
<li>New princess bitmaps</li>
</ul>
</div>
<div>
<br /></div>
<div>
BB)</div>
<div>
<ul>
<li>TStateMachine<T> renamed to TStateDirector<T></li>
<li>TStateDirector<T> now supports substates as Push(T) and Pop(T)</li>
<li>Surface blur performance improved</li>
<li>TSurface Lightmap() performance improved</li>
<li>Many internal lists changed to TColony<T></li>
<li>In TCollisionMatrix.Enter() Occupation was updated inside loops, that makes no sense and affects the performance</li>
<li>New classes TObjectColony<T> and TFastObjectPool<T></li>
<li>INI class moved to its own file </li>
<li>INI now uses internally TDictionary<K,V></li>
<li>New TSprite.GetOldRectangle()</li>
<li>TCollisionMatrix performance improved</li>
<li>Particles now have a better management of internal textures</li>
<li>Now triggers have an Input property </li>
<li>New TInput.ReadChar() so that game can read commands from user</li>
<li>Now triggers can only by executed by specific entity with property Holder/</li>
<li>Now Triggers can have Cadency, so the trigger can be only be updated every N Frames</li>
<li>Now triggers might have a Hint</li>
<li>Now triggers are called scripts</li>
<li>Now surfaces can have slopes left and right</li>
<li>TCollisionMatrix now checks for top/left and bottom/right corners</li>
<li>Now shadows are TBoolean rather than boolean</li>
<li>Now some fields are now TNullable<T></li>
<li>Now map layers can have alpha configuration</li>
<li>Overhead with rotated matrix when angle = 0 reduced</li>
<li>Using [unsafe] tag when possible since my interfaces behave as pure interfaces with no reference counter</li>
<li>Now TTimerEx no longer uses an event but a callback</li>
<li>Some [UNSAFE] fixed</li>
<li>Many GUID removed from interfaces</li>
<li>Many const added to interfaces when parameter</li>
<li>New Glow properties color and blur </li>
<li>New class TCountdown</li>
</ul>
<div>
<br /></div>
</div>
</div>
<div>
<span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; line-height: 18.48px;">Found binaries at </span><span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-family: inherit;"><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="color: #888888; line-height: 18.48px; text-decoration-line: none;">OneDrive</a></span></span></div>
Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com2tag:blogger.com,1999:blog-6500511128374134254.post-48821221971252876782017-10-22T20:08:00.003+02:002017-10-22T20:18:29.904+02:00HBF can now be played on a LAN with up to four players!Not because there are no news it means I'm doing nothing, I was focus on net playing, not an easy topic, but as usual I love the concept "learning by doing", so this is the result of that process.<br />
<br />
What's new in the game?<br />
<br />
<ul>
<li>New unit Camera, all camera code moved from Game to new unit</li>
<li>New achievement "Finish the Labyrinth with a partner"</li>
<li>Now bat moves faster</li>
<li>TPlayerHandler.GetClosestHeroAt() fixed</li>
<li>When a platform is pushed, some particles are rendered</li>
<li>Stalactite has now some alpha </li>
<li>Fixed an issue with casting interfaces (suddenly it crashes...)</li>
<li>Mine now rotates a bit</li>
<li>Fixed offsets of lightmaps in darkness</li>
<li>Minimum resolution is 1024x768</li>
<li>All release inventory code moved from Game to Hero</li>
<li>Hero can have a partner on top of it</li>
<li>Monologues are now created on demand</li>
<li>Now when loosing a fight, owned runes are released, beware!</li>
<li>New Mine.Shake property </li>
<li>New trigger Follow()</li>
<li>New service GameService.GetEvents </li>
<li>When hero touches the ceil it liberates some Particles</li>
<li>Camera lerp enhancements to make the usage easier</li>
<li>Now Liquid might have a Tide</li>
<li>Rays colors changed in order to look better</li>
<li>Now Camera does all movements with interpolation, new method for lock/unlock </li>
<li>New Weapon properties Range and Quantity</li>
<li>Now Camera can focus any entity</li>
<li>New property TGameSprite.Triggers, so that any entity can execute any trigger/s</li>
<li>Doors can now be closed after being opened</li>
<li>Fixed an issue with the stalactite particles</li>
<li>New property Items.IsAutoso can be auto activated after they are taken</li>
<li>New triggers: AchievementDone(), ExecuteIfEqual(), ExecuteIfNotEqual(), KillAll() and Focus()</li>
<li>New Weapon.Maximum (as bullets)</li>
<li>New weapon Bow </li>
<li>Now extras can be automatic applied (like live)</li>
<li>Entities can execute triggers OnCreate, OnDestroy and OnTake</li>
<li>Monologues are delayed</li>
<li>Better Door states</li>
<li>Annoying bug changes have been fixed</li>
<li>Camera follows hero in a more stable manner</li>
<li>New inventory functions ActivateFirst() and Push()</li>
<li>New change action (to cycle weapons)</li>
<li>Snowball generates different particles than before</li>
<li>Items are not draw when exiting a level </li>
<li>Game can now be set to fullscreen/window at any time with Alt+Enter</li>
<li>Background also tries to adapt to camera Z</li>
<li>New Item.Detail property</li>
<li>Bell item sounds more continuous rather than per volume</li>
<li>New golden bow and golder arrow items</li>
<li>Arrow can have now an angle depending on how long the action button is pressed</li>
<li>Scores moved from inventory to players class</li>
<li>Map read cells event improved</li>
<li>When in shop background is rendered as sepia to make contrast</li>
<li>Entity.Excite() code refactored</li>
<li>HBF now can be played remotely (new menu option)</li>
<li>New host/port settings</li>
<li>New hero property Scope: local, remote</li>
<li>New dialog type Abort()</li>
<li>New level...</li>
<li>Better handling of network delayed games </li>
<li>TCPClient/TCPServer connected properties not used during game (seems they they corrupt network buffers)</li>
<li>Entities inside a thread/task using random functions will take a local Copy</li>
<li>Closing dialogs won't unlock the game if still locking pending messages</li>
<li>Better control of locked situations (visual messages VS waiting network)</li>
<li>New TNetBuffer PeakX() </li>
<li>New sound when hero is underwater </li>
<li>New item Water of Rhand</li>
<li>Menus now can show dialogs</li>
<li>Session id is send in every message, so client can refuse their own messages</li>
<li>Coins moved from inventory to TPlayerHandler class</li>
<li>TPlayerHandler refactored, now it is easier to follow the code</li>
<li>Dialogs, question can persist after callback </li>
<li>SessionId is send in all net messages so that clients can ignore messages at their own discretion</li>
<li>Terminal animation is different</li>
<li>Now input is in the form of K;J1;J2;J3</li>
<li>New screen Sync </li>
<li>Input read improved</li>
<li>New Hero.JoyId </li>
<li>Inventory moved to Players class</li>
<li>Stalactite now also also falls when top tile disappears</li>
<li>TCameraHelper.CoversAllPlayers() now does not take into account heroes that have already entered then door</li>
<li>New GameServices.GetImpersonateKeys()</li>
<li>Players iteration improved shorting edges (first/last)</li>
<li>Hero sessionId moved to Players class</li>
<li>New message to request the list of sessions</li>
<li>Now servers controls the maximum amount of players</li>
<li>Now game can be played with up to 4 players</li>
<li>Hero.Scope moved to Players class</li>
<li>New callback TPlayerHandler.GetPlayers()</li>
<li>New TPlayerHandler.MinPlayer() / TPlayerHandler.MaxPlayer() </li>
<li>Player removed from inventory</li>
<li>Added player Alias so when joining network games, players can be identified</li>
<li>New TPlayerHandler.FindPlayer(session)</li>
<li>New TNetBuffer Readstring & AddString, so now strings can me send in net protocol</li>
<li>if master leaves the game, then server finds a new master</li>
<li>New TPlayerHandler.GetSlots()</li>
<li>Game can now do multi-ping</li>
<li>NetworkPlayer concept removed (everything is in player and slots)</li>
<li>New TPlayerHandler.RemoveSlot()</li>
<li>More robust network control</li>
<li>Remote locks improved</li>
<li>New concept in network code channel (rq, all, target)</li>
<li>Max zoom improved</li>
<li>TPlayerHandler.GetDistance performance improved</li>
<li>Wand item now glows</li>
<li>Now when hitting enemies a white effect is done</li>
<li>Pushing moving blocks improved</li>
<li>When playing over net, camera focus on local player </li>
<li>Blind and Many players achievements are now configurable</li>
<li>New skin for player 2 (tough still ugly...)</li>
<li>Avoid Z players overlapping</li>
<li>Network locking simplified</li>
<li>Now HBF comes with a standalone server called GameServer.exe</li>
<li>Now dialogs are rendered correctly when title is short</li>
<li>Now network seed is taken from ticks and not from network, this makes the game more deterministic</li>
<li>Server now sends back the available slots</li>
<li>Network input is stored in a buffer so if we receive more than one packet all packages are processed in order</li>
<li>Reading joy process improved</li>
<li>Now game check if there is enough input devices</li>
<li>CheckPoint is back to Hero class</li>
<li>More control over disconnected sessions</li>
<li>Now TSpriteEngine uses TColony<T> as a main iterator class</li>
<li>Cannon had a AV when hero is dead</li>
<li>New THUd.Visible</li>
<li>New TPlayerHandler.RandomPlayer()</li>
<li>Now when entering Door a red flash is shown</li>
<li>When no lives and going to main menu, the in game menu will not be displayed</li>
<li>Falling controller is not always created by default</li>
<li>Some non used songs deleted</li>
</ul>
What's new in libraries?<br />
<ul>
<li>DirectZ removed from sprite properties</li>
<li>Map does not longer creates a default camera</li>
<li>In TSpriteEngine.SpritesAt() there was an overloaded version that didn't use the spatial grid, speed boost!</li>
<li>Particles adaptive view fixed</li>
<li>TArrayEx<T>.Delete fixed</li>
<li>Object names are no longer used in release mode</li>
<li>Now maps have infinite loops again</li>
<li>Now sprite quads have a default Tag</li>
<li>TSpriteEngine.Find(name) was not working at all!</li>
<li>Maps now use frustum to check boundaries</li>
<li>Improving frustum in 2d maps rendering</li>
<li>New Map.FindTrigger()</li>
<li>New Trigger Context, so that engine knows when to execute the trigger (create,destroy,taken)</li>
<li>New buffer default size</li>
<li>New TPerspectiveCamera and TBasicCamera</li>
<li>Sprite engine searches are faster</li>
<li>New particles property RandomDirection</li>
<li>TInput now can keep track of now many frames a certain button was pressed</li>
<li>TSprite.SetAngle() now does not apply matrix if camera is not set</li>
<li>New inline TRGB _R(), _G(), _B() _A() and _32()</li>
<li>New laser aspect</li>
<li>Horizontal and vertical gradiants now take into account alpha channel</li>
<li>Blur() performance improved</li>
<li>TLayer now have a Glow property so that tiles can be glowed</li>
<li>New TRandomHelper useful for threads, otherwise random generators are corrupted and net game is not deterministic</li>
<li>Particles use their own random generator</li>
<li>TSurface.AverageColor() fixed</li>
<li>Now when creating Direct3D, flag D3DCREATE_FPU_PRESERVE is used</li>
<li>Many raise moved to their own function (performance)</li>
<li>Fixed a Lock() issue in TSound </li>
<li>New TParticles.IsSystemDown()</li>
<li>New classes TRingBuffer<T>, TSet<T> and TColony<T></li>
<li>Now system can handle up to 4 gamepads</li>
<li>TInput improved</li>
<li>New TJoyData.JoyReleased()</li>
<li>Now levels are loaded with rtti</li>
<li>Triggers now can have a counter (executed when counter = 0)</li>
<li>Finally joy direction pressed are no longer simulated</li>
<li>Shadow and Glow helpers classes are not created by default</li>
<li>Queue particles are not created by default</li>
<li>Collection iterators improved </li>
</ul>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPhXoRxn7Kx_JaWXnwVKe52RLQsl9jomf32K7ll7SjjbJJvNe6dTLG8VFHI95gPLUEJAW09840YyAek3NuzZ5mivPL9dxrWORloc06WWRVkTHrFpVPhxqxdWEMB3mqsVDyU2GLiiMXgz-/s1600/sync.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="727" data-original-width="1292" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPhXoRxn7Kx_JaWXnwVKe52RLQsl9jomf32K7ll7SjjbJJvNe6dTLG8VFHI95gPLUEJAW09840YyAek3NuzZ5mivPL9dxrWORloc06WWRVkTHrFpVPhxqxdWEMB3mqsVDyU2GLiiMXgz-/s640/sync.png" width="640" /></a></div>
<br />
And that's all folks.<br />
<br />
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-47591322949300804362017-04-29T16:01:00.002+02:002017-04-29T16:06:04.414+02:00HBF 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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
But anyway, the work is done after some tough weeks :-)<br />
<br />
<br />
<br />
<span style="font-size: xx-small;"><span style="font-family: inherit;"><span style="background-color: white; color: #222222;"><span style="line-height: 18.48px;"> <span style="font-size: x-small;"><span style="font-family: inherit;">Found binaries at </span></span></span><span style="font-size: x-small;"><span style="font-family: inherit;"><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="color: #888888; line-height: 18.48px; text-decoration: none;">OneDrive</a></span></span></span></span></span><br />
<span style="font-size: xx-small;"><span style="font-family: inherit;"><span style="background-color: white; color: #222222;"><span style="font-size: x-small;"><span style="font-family: inherit;"> </span></span></span></span></span> <br />
HBF)<br />
<ul>
<li>Now two players can play the game, big improvement</li>
<li>Now when a coin is taken it executes a different particle </li>
<li>Now levels starts differently</li>
<li>Item cross code improved</li>
<li>Sprite.AttachedSprite code improved</li>
<li>New emerge particle </li>
<li>Now Focus element blinks</li>
<li>New FadeIn() styles</li>
<li>New HUD layout</li>
<li>Keys code is now handled directly in the inventory class</li>
<li>Now checkpoints are handled in the player class</li>
<li>Camera now needs to cover correctly all situations (when one hero dies and checkpoint cannot be covered by camera when in two players, etc)</li>
<li>Now doors still closed when taking the key and can only be opened by the owner of the key </li>
<li>When in two players, if one player looses of lives, then he releases all inventory so that the other player can take it</li>
<li>When in two players, if one player looses of lives and the other player has already entered the door, then the level finishes</li>
<li>Input reading code optimized</li>
<li>Now Fight, Shop and Inventory can only be used by the player that activate it</li>
<li>Shop/Inventory/Items code improved</li>
<li>Fight changed a bit</li>
<li>New heart item</li>
<li>New class TPlayers</li>
<li>New extra TPresent </li>
<li>New EntityType Magma</li>
<li>Scepter is no longer spawned in Lava </li>
<li>If hero looses the Rune Fight he also looses his coins </li>
<li>Now when finishing level, camera focus and zoom on Door</li>
<li>Now aspect ratio can be selected (4:3, 19:9, 16:10), so game should fit properly with all resolutions</li>
<li>Camera Lerp now also takes into account Z</li>
<li>Drawing air moved from hero to HUD </li>
<li>Now heroes are able to push many blocks in a row either vertical or horizontal</li>
<li>Some interfaces were not set to nil on destroy</li>
</ul>
<br />
BB)<br />
<ul>
<li>Doing a render to target and losing the surfaces does not work, it raises an AV, why?!</li>
<li>Sleep properties in Particles now talk about milliseconds rather than steps</li>
<li>Lightmaps now also interpolate alpha channel</li>
<li>Some internal array improvements (aligned to next power of two)</li>
<li>Surface.Blur() quality improved</li>
<li>TArrayEx<T> improved</li>
<li>Now the 2d engine is completely dine in 3d, so that one can freely play with the camera </li>
<li>Fonts performance improved</li>
<li>New TCamera2D.Rotate()</li>
<li>Shadow silhouette improved (a bit of blur applied)</li>
<li>New TMenu.Find() in order to find menu items and optionally be able to modify them</li>
<li>New events for particles OnBefore/OnAfter Create/Tick</li>
<li>gamepad set to DISCL_NONEXCLUSIVE</li>
</ul>
<br />
New aspect ratio option)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigwtcJcMwp1xiA2udsjFYi0Alv50z7Yv1ALLMv_QlqNicShJxNXmK6Er5xzgiwB7_0EO7gnVHbxFYcpOJwGzFKzUGaEUSNIt7qCCQkAqiYf9Fq0Q4183fLGuN8XWvoED9vU3GnTWuxwZyB/s1600/menu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigwtcJcMwp1xiA2udsjFYi0Alv50z7Yv1ALLMv_QlqNicShJxNXmK6Er5xzgiwB7_0EO7gnVHbxFYcpOJwGzFKzUGaEUSNIt7qCCQkAqiYf9Fq0Q4183fLGuN8XWvoED9vU3GnTWuxwZyB/s640/menu.png" width="640" /></a></div>
<br />
HBF now is accompanied by his partner ABB (say what?)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtpNaW-o0USKfyctdugZiQEcxiOOxtf8SGMkAvWUsH3M8LRlkSc1TgC7Xxf6FNVuB0WPBwP5MA1yViwwMaLPBL_jcFT_0QXGjiFHF2m0Wz1X9eJeXgOnmBWfIQcbacW6u8zc5JxooBZmf8/s1600/Climbing+Up.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtpNaW-o0USKfyctdugZiQEcxiOOxtf8SGMkAvWUsH3M8LRlkSc1TgC7Xxf6FNVuB0WPBwP5MA1yViwwMaLPBL_jcFT_0QXGjiFHF2m0Wz1X9eJeXgOnmBWfIQcbacW6u8zc5JxooBZmf8/s640/Climbing+Up.png" width="640" /></a></div>
<br />
Camera zoom out to fit both players (until a certain point) <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdmpYMW1peWa93Byg1wFXVTzot_g7xvJlTVvXYW_OPkrnKrRqMcAHtMpHmW6br85cH__cegkMs2wLs1Tg8XJXvTlOKEa2U4s-bDu4x0hxMKScgKDqihS9JwHOaGzGBUsY37bJHtBlqj02q/s1600/The+Labyrinth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdmpYMW1peWa93Byg1wFXVTzot_g7xvJlTVvXYW_OPkrnKrRqMcAHtMpHmW6br85cH__cegkMs2wLs1Tg8XJXvTlOKEa2U4s-bDu4x0hxMKScgKDqihS9JwHOaGzGBUsY37bJHtBlqj02q/s640/The+Labyrinth.png" width="640" /></a></div>
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-90619255767803434262017-03-11T18:48:00.004+01:002017-03-11T18:48:33.995+01:00HBF now in 64 bits!I had a silly bug (typical one that works on WIN32 and does not in WIN64):<br />
<br />
<span style="color: red;"> FillChar(d3ddm, SizeOf(d3ddm), 0); <-- this line didn't exists</span><br /> if Failed(FD3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, d3ddm)) then<br /> raise Exception.Create('Error retrieving display modes');<br /><br /> FD3Dpp.BackBufferFormat := d3ddm.Format;<br />
<br />
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..<br />
<br />
<span style="font-size: x-small;"><span style="font-family: inherit;"><span style="background-color: white; color: #222222;"><span style="line-height: 18.48px;"> <span style="font-size: small;"><span style="font-family: inherit;">Found binaries at </span></span></span><span style="font-size: small;"><span style="font-family: inherit;"><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="color: #888888; line-height: 18.48px; text-decoration: none;">OneDrive</a></span></span></span></span></span><br />
<br />
Anyway, I also was able to change the following:<br />
<br />
HBF)<br />
<ul>
<li>Now HBF also comes in 64 bits flavour</li>
<li>Now Diamond emits light</li>
<li>As usual some minor map changes...</li>
<li>Some new blurred backgrounds</li>
<li>ell/Boom/Chest/Fires/Lava/Mine/Planet are now glowed</li>
<li>Liquid splash is now done with particles</li>
<li>Enemies won't discover anything</li>
<li>New toxic particles</li>
<li>New excited particles </li>
<li>New particles when Hover is excited </li>
<li>Magnet also attracts Keys and Scepter</li>
<li>New sound failure.wav</li>
<li>Gatashi's laser when collides draw some particles </li>
<li>Now all mechanic enemies can be excited </li>
<li>Now when correcting gravities, moving platforms are take it into account </li>
<li>New worm, fits better in the game</li>
<li>New bell and shoes, more retro</li>
<li>Planet changed</li>
<li>Ice floor is now properly applied when gravity is up</li>
<li>Snowball now also stops fire</li>
<li>Static sprites do not longer correct gravity orientation</li>
<li>New warp based on particles </li>
<li>New spark based on particles </li>
<li>New Achievement "finish labyrinth blinded"</li>
<li>Main menu does some new effects</li>
<li>Ending now is a bit different (guess what!)</li>
</ul>
<br />BB)<br />
<ul>
<li>Multiplication texture error fixed (not happy about it)</li>
<li>Sprite hash for buffers now takes into account shadows </li>
<li>New concept TBufferHelper, in order to handle the buffer easier and avoid some double links</li>
<li>Removed effects and filters from surfaces (makes no sense, sprites dictate the behaviour)</li>
<li>Added surface filter to Materials</li>
<li>Fixed massive bug in Move32() POP ESI rather than POP EDI</li>
<li>D3D buffer preparation improved (VertexType is now precalculated)</li>
<li>Now TFloat is double when in 64 bits</li>
<li>New Particle emitter Movement type</li>
<li>Stream buffer when decompressing changed from 16kb to 64kb</li>
<li>Finally DirectX works in 64 bits</li>
<li>New TSurface.ExtractPoints()</li>
<li>New TParticles First()/Last() </li>
<li>Now particles are able to do formations based on a bitmap</li>
</ul>
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-67660508757632270992017-02-16T21:37:00.000+01:002017-04-09T15:26:33.767+02:00ChessKISS still aliveChessKISS won two minor leagues, I'm very proud of this little creature :-)<br />
<br />
Nothing spectacular, but hey..., I think soon I will try to create a new version, let's see<br />
<br />
Found binary at <a href="https://1drv.ms/u/s!Avis30zMn7w_gQEwdEavKKyBGG3I">OneDrive</a><br />
<br />
<span style="font-size: 150%; line-height: 116%;"><span style="font-weight: bold;"><span style="text-decoration: underline;">62ND AMATEUR SERIES</span></span></span><br />
<br />
<span style="font-weight: bold;"><span style="text-decoration: underline;">Final Standings</span></span><br />
<br />
<span style="color: blue;"><span style="font-weight: bold;">39.0 - <span class="posthilit">ChessKiss</span> 1.7c 64-bit</span></span><br />
<span style="color: #0080ff;"><span style="font-weight: bold;">36.0 - Dorpsgek Cosmopolitan 2 64-bit</span></span><br />
30.5 - Isa 1.9.51 64-bit<br />
29.0 - Obender 03.2016 64-bit<br />
25.5 - Blitzkrieg rev337 64-bit<br />
22.5 - Barbarossa 0.4.0 DJ 64-bit<br />
21.5 - Cinnamon 2.0 64-bit<br />
20.0 - BigLion 2.23x<br />
<br />
<span style="font-size: 150%; line-height: 116%;"><span style="font-weight: bold;"><span style="text-decoration: underline;">MARCH OF THE MINNOWS</span></span></span><br />
<br />
<span style="font-weight: bold;"><span style="text-decoration: underline;">Final Standings</span></span><br />
<br />
<span style="color: blue;"><span style="font-weight: bold;">19.0 - <span class="posthilit">ChessKiss</span> 1.7c 64-bit</span></span><br />
19.0 - Obender 03.2016 64-bit<br />
15.5 - Blitzkrieg rev337 64-bit<br />
15.0 - RamJet 0.13<br />
14.5 - NGplay 9.86 64-bit<br />
14.5 - Napoleon 1.6.0b 64-bit<br />
13.5 - Isa 1.9.51 64-bit<br />
13.5 - Soldat III 0.178 64-bit<br />
13.0 - Cinnamon 2.0 64-bit<br />
10.5 - BigLion 2.23x<br />
10.5 - Ecce 1.0 64-bit<br />
8.5 - Abbess 2016.11.12<br />
8.0 - Smash 1.0 3 64-bit <br />
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-62633200765246240382017-02-16T21:29:00.001+01:002017-02-16T21:31:18.797+01:00When performance mattersFirst entry of the year, one month and half later... <span style="font-size: small;"><span style="font-family: inherit;"><span style="background-color: white; color: #222222;"><span style="line-height: 18.48px;">, found binaries at </span><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="color: #888888; line-height: 18.48px; text-decoration: none;">OneDrive</a></span></span></span><span style="background-color: white; color: #222222; font-family: "trebuchet ms" , "trebuchet" , sans-serif; font-size: 13.2px;"><span style="font-size: small;"><span style="font-family: inherit;"> </span></span></span><br />
<br />
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.<br />
<br />
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.<br />
<br />
Surfaces are now generated faster when they are in 32 bits. <br />
<br />
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)<br />
<br />
What's new:<br />
<br />
BB)<br />
Clear camera also clear perturbation values<br />
New StartSize/EndSize particle properties, autoSize particle removed <br />
Camera constructor does not longer sets the size in the constructor<br />
All primitives now use InView() to check whether this primitive has to be rendered or not<br />
Line with thickness is now done properly with perpendicular vectors<br />
Now GlowLine() uses a line with thickness<br />
Now particles have X and Y radius<br />
Fixed some Z issues in primitives Line() and Triangle()<br />
New TScreen.WaitBehaviour, buffers can be only resorted when creating new buffers <br />
General improvement in the hash keys of the maps <br />
New TLayer.FindProperty()<br />
Glow rendering improved<br />
Particles now can have a trail<br />
New TMath.CircleInRectangle(): bool<br />
TScreen.DrawSurface() fully improved<br />
Particles.Gravity is now a vector<br />
TScreen.Circles() now has a solid parameter<br />
TRGB.Multiply() & Add() improved<br />
New TRGB.ToInt32()<br />
TScreen.TexCol_Triangle() improved<br />
TVectorEx non operators improved<br />
Particle Editor/Engine vastly improved<br />
New TRGB.AsString()<br />
New TPriorityQueue<T><br />
New TScreen.CircleGlow()<br />
New TScreen.LineGlow()<br />
New TVectorEx.AsString()<br />
Particles can have Attractors<br />
More triangle buffer optimizations<br />
Added BigFile to Particles <br />
New TFastPool<T><br />
New TParticleEmitter Sleep and SleepEvery properties<br />
Now Particles uses TFastPool<TParticle2D><br />
Particles can be glowed<br />
Alpha32 surface detection improved<br />
Particles generated in Sphere fixed <br />
All internal sin/cos calculations in particles are done in RAD so no conversion needed (extra multiplications)<br />
Particle generator loop improved<br />
Render buffer improved<br />
Color performance in buffer improved for surfaces <br />
Queue<T> improved<br />
TPolygon.GetHash() improved<br />
TScreen.FillSurface() improved<br />
Surface cache improved<br />
Sprites now maintain the hash of the buffers<br />
Surface.AndMask() performance improved<br />
Buffer hash generation had collisions (bad key)<br />
Now particles work by time and not steps<br />
Now TObjectEx implements IGroup <br />
Added friction to particles<br />
Some critical functions checks are executed only in debug mode<br />
Particles now do some kind of occlusion via BB<br />
New particles spread mode Expand<br />
Now particles can take the form of shapes<br />
Now Particles can have up to 8 different textures by default<br />
An emitter can be inactive<br />
<br />
HBF)<br />
Cables throws more sparks <br />
Camera size is update when resolution is changed<br />
In menu the text scroller is left/right<br />
New ColorTile element<br />
Fixed an issue when a throwable weapon landed on a moving platform<br />
Now reverse Disintegration works 100%<br />
Now there is a global Gravity<br />
Now color tiles got a tail<br />
Lasergrid was not shown properly<br />
New Path helper to create entities following map attributes<br />
New enemy Rotator <br />
Shover is shown properly when gravity is up<br />
New Achievement "burn the block!"<br />
Hero input code moved to Hero class<br />
Added moving tapes to some levels <br />
New element Wheel (HL2?)<br />
Now all entities might target a tile (by name) and do something<br />
Lava melting ice code fixed<br />
Now demos can also track input from attack and action <br />
New item Wand <br />
Hero does no longer breathe in lava<br />
Some elements now are glowed<br />
TGameSprite.IsUnderneathOf() improved<br />
Game can now load particles from map and/or triggers<br />
Beetle and Titan show sparks when colliding<br />
Flame was not working properly<br />
Background are no longer mandatory in each level<br />
Handling of entities on top of tapes improved<br />
Arrows emit particles when collide<br />
Now boomerang returns when collides with an item<br />
All particles effect are now read froma file<br />
New fireworks with forms <br />
Hero's dust when landing is now done with particles<br />
Air bubbles is now done with particles <br />
In game menus, input is reset to not interfere with hero input<br />
Hero now is got a candle on dark screens<br />
Some backgrounds are now blurred<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvXGhkoKKlM_itxZKtvzAPRovTg1YjzffbIsOCe7tv0Za4qHO2exxTgmBB3vtIpKg4rBdF0QgzolVz4G2s5je41-ghZDF40-KMk27ZGJFk2_SvHH5wEYmBNgKJOoQNdE4ZId28kIXsgt3D/s1600/Into+The+Darkness.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvXGhkoKKlM_itxZKtvzAPRovTg1YjzffbIsOCe7tv0Za4qHO2exxTgmBB3vtIpKg4rBdF0QgzolVz4G2s5je41-ghZDF40-KMk27ZGJFk2_SvHH5wEYmBNgKJOoQNdE4ZId28kIXsgt3D/s640/Into+The+Darkness.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBtH0z6KjW5COFtLDma2tFd1wmZLqqDuqxRsggH1WEpI9Dmn8nK_sxhhAO8ZVmwgqlPo1JHB226BXenFOWymntirWVZEFBDTntllp_kzIkO1aF6j7SOvV1bGGXPJT_Bk186Ml6ehE0kb53/s1600/Do+Not+Name+It.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBtH0z6KjW5COFtLDma2tFd1wmZLqqDuqxRsggH1WEpI9Dmn8nK_sxhhAO8ZVmwgqlPo1JHB226BXenFOWymntirWVZEFBDTntllp_kzIkO1aF6j7SOvV1bGGXPJT_Bk186Ml6ehE0kb53/s640/Do+Not+Name+It.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjXN4eB4pLr-98IAMKeVU0R0XhAizE4USyb4TjSwJRkdjsxlGNt4F6nu0IPP9Q4Gp-43mUm7oou9RDP8Jg5IAExAN9NBjlu_HSpcu6eCPASellmkk62TiGtRe5KksN0nTXpWrKlLRsdmYW/s1600/Gravity+Issues.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjXN4eB4pLr-98IAMKeVU0R0XhAizE4USyb4TjSwJRkdjsxlGNt4F6nu0IPP9Q4Gp-43mUm7oou9RDP8Jg5IAExAN9NBjlu_HSpcu6eCPASellmkk62TiGtRe5KksN0nTXpWrKlLRsdmYW/s640/Gravity+Issues.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2-VCgnusMkvgEWCm1ny3MRl9sG9et-LezsnJecTpnYDdMHik2B86VXx5qDtYGSxhrws_hdHIlAWwsDVJRyg3XGXVNQu292H4vTz22iel8RYyYPgkjspw4sIxqm1FqfD2ptV3xX6oGCxHu/s1600/Last+Secrets.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2-VCgnusMkvgEWCm1ny3MRl9sG9et-LezsnJecTpnYDdMHik2B86VXx5qDtYGSxhrws_hdHIlAWwsDVJRyg3XGXVNQu292H4vTz22iel8RYyYPgkjspw4sIxqm1FqfD2ptV3xX6oGCxHu/s640/Last+Secrets.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8jNhv-46N4mfas7yV5LhPu89laj-4JMRSRV4ZriH4pfjwKNU4UhDQBiAxOkgoNwFgzvBbI0Giipl_PfA-80ttYcFygZIaQGoe13WaLM_pMYqOKAfLA80c_N-qvDwHadQjo2Ew5lIYzJBI/s1600/Lava+Love.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8jNhv-46N4mfas7yV5LhPu89laj-4JMRSRV4ZriH4pfjwKNU4UhDQBiAxOkgoNwFgzvBbI0Giipl_PfA-80ttYcFygZIaQGoe13WaLM_pMYqOKAfLA80c_N-qvDwHadQjo2Ew5lIYzJBI/s640/Lava+Love.png" width="640" /></a></div>
<br />
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-69081800344186455682016-12-22T14:26:00.000+01:002016-12-31T18:28:51.000+01:00Last entry of the year, glowing...I've been playing a bit with glows and ropes, the result in this new version, merry xmas!!!<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]--><br />
<div>
<br /></div>
<div>
<span style="background-color: white; color: #222222; font-family: "trebuchet ms" , "trebuchet" , sans-serif; font-size: x-small;"><span style="font-family: inherit;"><span style="line-height: 18.48px;">Found binaries at </span><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="color: #888888; line-height: 18.48px; text-decoration: none;">OneDrive</a></span></span><span style="background-color: white; color: #222222; font-family: "trebuchet ms" , "trebuchet" , sans-serif; font-size: 13.2px;"> </span></div>
<div>
<br /></div>
<div>
What's new?</div>
<div>
<br /></div>
<div>
<div>
HBF)</div>
<div>
<ul>
<li>Lava throws now go always outside the magma</li>
<li>Lava trail is made by particles </li>
<li>Now hero can be idle but facing left or right</li>
<li>Equipment upgrades are now activated by default</li>
<li>New triggers AddItem() and Deposit() and Concatenate()</li>
<li>Item is removed from Inventory just after execution (if applies) and not when has finished</li>
<li>New Item Shovel </li>
<li>Coin is no longer Static</li>
<li>Focus is now centered properly</li>
<li>Now shop is shown differently, also some items are no longer available...</li>
<li>Liquid was sounding even when height was zero</li>
<li>Extras search improved</li>
<li>Items can yield coins </li>
<li>New achievement "Full Equipment"</li>
<li>New achievement "Find the Soul of Ginkgo"</li>
<li>New achievement "Blue Green Red"</li>
<li>New achievement "Destroy the Balls"</li>
<li>Some achievements removed </li>
<li>Better achievement visuals</li>
<li>Nuclear explosion from Bomb fixed (it was also killing the own explosions)</li>
<li>Hover get excited with lava or electricity </li>
<li>Items.pas split into different files</li>
<li>Hero refresh the equipment at the beginning of every level</li>
<li>Hero steps back when pushed with an arrow and is having a shield</li>
<li>Added in some levels a new layer in front of hero (just eye candy)</li>
<li>Game over state is not set immediately after dying but after fading is finished</li>
<li>Now all entities can do a monologue </li>
<li>New Rope element </li>
<li>New lamp style</li>
<li>Cables can excite hovers</li>
<li>Fixed small issues when contacting platforms</li>
<li>When Hero crushes is got a new sound </li>
<li>When Hero is not facing then it cannot attack </li>
<li>Inventory screen easier to understand</li>
<li>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</li>
<li>Spotlight now can be killed</li>
<li>Scores were not inserted properly</li>
<li>Now property TGameSprite.IsSlow</li>
<li>Remove TileSetFromSolid stuff in sprite factory, it was redundant</li>
<li>Rays collision element adjusted</li>
<li>Menu font now does some transparency</li>
<li>Rope are no longer simulated with bezier curves but with newton's physics </li>
<li>New Volcano element (experimental)</li>
<li>Menu preparation logic moved from game to menu screen</li>
<li>Sky stars are now random per game </li>
<li>Snowball now also freezes ceiling (when gravity is up)</li>
<li>Sprites can be glowed</li>
<li>New labyrinth aspect</li>
<li>Exit menu, shop and inventory screens got a sound when moving cursors</li>
</ul>
</div>
<div>
<br /></div>
<div>
BB)</div>
<div>
<ul>
<li>Buffer hash is also constructed with Alpha</li>
<li>Fixed an error with particles alpha when using primitives</li>
<li>Particles alpha handling improved as rgba</li>
<li>Negativing TVectorEx was totally wrong!</li>
<li>Camera zoom is now taken into account</li>
<li>New style Inverse in particles </li>
<li>New TSurface.ExtractAlpha() and Glow()</li>
<li>Bezier curves do not longer creates a result class per calculation but rathern reuse a global list</li>
</ul>
<div>
<br /></div>
</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3o7eNo6v6F08f77-i2rWl-KoEGJLzcgtt9jiGf771OgbyBOVu8Pj5H9VfdFt4kL7i3fqPZ7yRv7soMlbaaCgVpfhqP4ukgjsDlrF6Q8IwcJnHLCA4QIyPLSyg6Svzo56odEtkj_UYOJmA/s1600/Asphyxia.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3o7eNo6v6F08f77-i2rWl-KoEGJLzcgtt9jiGf771OgbyBOVu8Pj5H9VfdFt4kL7i3fqPZ7yRv7soMlbaaCgVpfhqP4ukgjsDlrF6Q8IwcJnHLCA4QIyPLSyg6Svzo56odEtkj_UYOJmA/s640/Asphyxia.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYi2eYTZg5VzIFVfFa6FUu1uKFIBV_9eTfb6FCaxU8PvPTqODqICMwKi2NUjtgp2hny_XcRtDvIPVJHBdFlzVuXJxC349kV9TpdCiGx25sZkCFpqAgRVptSqYCrJEfGxaGcHKp9ZZV20rA/s1600/The+Labyrinth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYi2eYTZg5VzIFVfFa6FUu1uKFIBV_9eTfb6FCaxU8PvPTqODqICMwKi2NUjtgp2hny_XcRtDvIPVJHBdFlzVuXJxC349kV9TpdCiGx25sZkCFpqAgRVptSqYCrJEfGxaGcHKp9ZZV20rA/s640/The+Labyrinth.png" width="640" /></a></div>
<div>
<br /></div>
Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-20896123409742465092016-11-06T22:06:00.001+01:002016-11-07T19:05:37.720+01:00ItemisingIs quite funny to mentally visualize an item and then trying to find an use and a fit in the game<br />
<br />
<span style="font-size: small;"><span style="font-family: inherit;"><span style="background-color: white; color: #222222; line-height: 18.48px;">Found binaries at </span><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="background-color: white; color: #888888; line-height: 18.48px; text-decoration: none;">OneDrive</a></span></span> <br />
<br />
HBF)<br />
<ul>
<li>Big enemies now have achievements </li>
<li>Joy reading improved a bit</li>
<li>Boomerang will not get stuck in a wall </li>
<li>Many new extras like: potion, bell, magnet, ancient</li>
<li>Many new achievements like: "do magic on a key"</li>
<li>Now menu shows % of achievements </li>
<li>Some graphics changed </li>
<li>Lava eruption do not longer splash in the bottom of lava</li>
<li>Highscores fixed</li>
<li>Now there is only one key with Key property to select the type of key </li>
<li>Screen code cleaned</li>
<li>GameSprite new properties, DieText, SpawnItem and SpawnClass </li>
<li>TSpawner new property WaitingTime </li>
<li>New class TItemResolver, it helps creating items and entities when breaking walls</li>
<li>New THero.WeaponInUse() </li>
<li>All checkpoints are now in layer 2</li>
<li>Now FadeIn()/FadeOut() can be used properly in triggers</li>
<li>New enemy Triangle</li>
<li>Beetle now jumps when close to an edge</li>
<li>Now game has scoring</li>
<li>Fixed memory leak with ingame screens </li>
<li>Weapons also kill chandeliers</li>
<li>New TBouncingEnemy </li>
<li>Fixed an issue were a player could take infinite flying coins exiting/entering the levels continuously</li>
<li>Fixed an issue were a player could avoid having one less live when dying if level was exited immediately</li>
<li>New candle </li>
<li>Terminal show different scripts</li>
<li>Kurkani fixed</li>
<li>Fixed an issue replaying previous music </li>
</ul>
<br />
BB)<br />
<ul>
<li>New Sprite.Locked property</li>
<li>TPolygon.GetHash() performance boost</li>
<li>Now screen buffers and sorted buffers are mixed into one unique queue</li>
<li>New TSprite.ClearTimers()</li>
<li>Fixed an issue when rotating the screen quad</li>
<li>Buffer rendering improved for some fix situations (like sprites...)</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRzRmmJAhrroq8_xuiOvqW4rU_tpThs62_Odc6k7p5RDi4VDT3hgPMnYFtEFqKqRHx29DLmmjR0u06ZlinjvzAG1oi58LntzM5lmHi2uT353iNRG6vPJtCajk2zg1xxyaVDbVCL88-qCZM/s1600/Level+X.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRzRmmJAhrroq8_xuiOvqW4rU_tpThs62_Odc6k7p5RDi4VDT3hgPMnYFtEFqKqRHx29DLmmjR0u06ZlinjvzAG1oi58LntzM5lmHi2uT353iNRG6vPJtCajk2zg1xxyaVDbVCL88-qCZM/s640/Level+X.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzhM3Z49K5zSBPGh6Wp_chRqseg68DYiq0sKwEdXvMBLjsicXdwvHb67_HLsi984Plqw6SIUCXtg5lvia7rx4C_JVutDIThFcev8JZG6ojWHoxDCjHMx6_XcBHeUCu6fl3ZxrjKLZwElFa/s1600/Items.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzhM3Z49K5zSBPGh6Wp_chRqseg68DYiq0sKwEdXvMBLjsicXdwvHb67_HLsi984Plqw6SIUCXtg5lvia7rx4C_JVutDIThFcev8JZG6ojWHoxDCjHMx6_XcBHeUCu6fl3ZxrjKLZwElFa/s640/Items.png" width="640" /></a></div>
<br />
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-17641706326945688372016-10-16T16:51:00.000+02:002016-11-06T21:47:27.596+01:00Inventorying...<div class="separator" style="clear: both; text-align: center;">
</div>
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.<br />
<br />
<span style="font-size: small;"><span style="font-family: inherit;"><span style="background-color: white; color: #222222; line-height: 18.48px;">Found binaries at </span><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="background-color: white; color: #888888; line-height: 18.48px; text-decoration: none;">OneDrive</a></span></span> <br />
<br />
HBF)<br />
<ul>
<li>New inventory screen that can be accessed via return key or Y gamepad</li>
<li>Equipment is set via RTTI</li>
<li>Equipment code improved</li>
<li>New unit Items</li>
<li>Now Hero can have extras, like torch, horn, map, etc...</li>
<li>Screen exiting code improved</li>
<li>Coins now have a quantity property (default is 1)</li>
<li>Hero can wear an armor </li>
<li>New options for Continuous jumping entities like force and decay</li>
<li>New TJumpingCoin entity </li>
<li>New extras: Map, Bomb, Clock, Parasol, Horn, etc</li>
<li>Now Minimap works in any level </li>
<li>New item Double Shoes...</li>
<li>Coin classes renamed</li>
<li>Crepuscule lights move a bit...</li>
<li>New NPC property Thanks, be kind...</li>
<li>New chest element </li>
<li>Hidden levels are shown in main menu (if reached)</li>
<li>New property Gamesprite.AutoCenter</li>
<li>Finally all classes are created based on names (via RTTI)</li>
<li>HUD shows Runes in a frame </li>
<li>New Tucan bird </li>
<li>New action button, so that hero can use weapons</li>
<li>Some new graphics ...</li>
<li>Extra life shows a different graphics </li>
<li>Inventory is rendered in the HUD </li>
<li>Now inventory can have more than one unit of an item</li>
<li>Some changes in the expirable items</li>
<li>Post can have codified messages </li>
<li>New element Sparks </li>
<li>Bird chances reduced</li>
<li>New music achievement </li>
<li>NPC now properly says "a" or "an"</li>
<li>Princess now will be in a cage </li>
<li>New weapons...</li>
<li>Slope collision fixed</li>
<li>Magic?!</li>
<li>Fixed some bugs with collisions and no gravity elements (since it was not used...)</li>
<li>New method IInventory.FindByClass()</li>
<li>New achievements </li>
<li>Highscores now shows reached level </li>
<li>More versatile inventory</li>
<li>Fixed memory leak in shop screen </li>
<li>GameSprite IsMoving() improved</li>
<li>Many code lines "A mod B" changed to "A and B" when possible</li>
<li>Cadency now always works in milliseconds</li>
<li>Weapons volume is adapted to the distance to hero</li>
<li>Since new Windows 10 anniversary update game didn't restore once the focus was lost, weird but fixed</li>
<li>Huge performance boost in the creation of the object by name, by simply creating the context once and not on every call</li>
<li>Now Shop open/closes door</li>
<li>Jumping coins when created in the air do not initially jump </li>
<li>Updated to latest BASS library</li>
<li>NPC can have monologues...</li>
<li>Timer was started on a wrong event</li>
<li>New Terminal element</li>
<li>New achievements...</li>
<li>Game shows a menu when pressing escape or joy start</li>
<li>Extras can also yield coins </li>
</ul>
<br />
BB)<br />
<ul>
<li>New T2DParticles properties AutoAngle and Elasticity </li>
<li>When a surface is destroyed and then the buffer, the search is faster</li>
<li>New helpers in TInputKeys.IsButton()</li>
<li>FFont.Render() now returns a boolean indicating whether it was painted or not</li>
<li>Laser ending was drawing even when no segments were set </li>
<li>Added thickness in drawer.Box()</li>
</ul>
<br />
The inventory<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVsA-BTsIn4xLTF0-lGInmpHv-BfkkZHDwE9EF7sdvrbqj8CsMsy0m9jgswLnxY4TzKhdxHaMxQ8NgZaV7GVCGbSDVWURKFpRoE6L6h6oKzQ-rlE4wj85frRb_Gl9tY6DqJ7AhDfRv9j8h/s1600/The+Labyrinth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVsA-BTsIn4xLTF0-lGInmpHv-BfkkZHDwE9EF7sdvrbqj8CsMsy0m9jgswLnxY4TzKhdxHaMxQ8NgZaV7GVCGbSDVWURKFpRoE6L6h6oKzQ-rlE4wj85frRb_Gl9tY6DqJ7AhDfRv9j8h/s640/The+Labyrinth.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
Weapons and Shields... <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj64cPC5vmAyXjAF36Au3wjw0MocBjUPtzPFO5AVdrsfyJgZaCHHrdSK1X0eoql0KI0FbQOcpfsmgd5J_QY9nBEK0-BhcPzBYkLJYz_Acy4wmLnKBVZBUWJWWnNfA4fpAn41wZRz6oHNe4A/s1600/The+Labyrinth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj64cPC5vmAyXjAF36Au3wjw0MocBjUPtzPFO5AVdrsfyJgZaCHHrdSK1X0eoql0KI0FbQOcpfsmgd5J_QY9nBEK0-BhcPzBYkLJYz_Acy4wmLnKBVZBUWJWWnNfA4fpAn41wZRz6oHNe4A/s640/The+Labyrinth.png" width="640" /></a></div>
<br />
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-75501296035512339412016-09-15T19:27:00.001+02:002016-09-17T18:50:13.603+02:00Hero goes shopping<div class="separator" style="clear: both; text-align: center;">
<br /></div>
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...<br />
<br />
IShopItem = interface<br />
['{D6EFA6AF-05C3-4A54-984E-37F6A4809FC0}']<br />
function GetCost: integer;<br />
function GetDescription: string;<br />
function GetId: string;<br />
function GetType: string;<br />
function GetLevel: integer;<br />
function GetProperties: IMemVar;<br />
end <br />
<br />
IShop = interface<br />
['{93AD660B-79F0-4CED-A37C-EFE384228D51}']<br />
function Count: integer;<br />
function Exists(const aItem: string): boolean;<br />
function Enter(aInventory: IInventory): boolean;<br />
function Find(const aItem: string): IShopItem;<br />
function GetCategories: TList<string>;<br />
function GetItems(const aCategory: string): TList<string>;<br />
function Purchase(const aItem: string; aInventory: IInventory): boolean;<br />
procedure Remove(const aItem: string);<br />
end; <br />
<br />
<span style="font-size: small;"><span style="font-family: inherit;"><span style="background-color: white; color: #222222; line-height: 18.48px;">Found binaries at </span><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="background-color: white; color: #888888; line-height: 18.48px; text-decoration: none;">OneDrive</a></span></span> <br />
<br />
HBF)<br />
<ul>
<li>New Enemy Octopus </li>
<li>NPC talk is more accurate</li>
<li>Doors now can be hidden</li>
<li>All entities can have a Hint</li>
<li>Adding a shop</li>
<li>New inventory class</li>
<li>Now taken coins are shown and not left coins</li>
<li>When in finish screen, last level is not shown</li>
<li>New music when shopping </li>
<li>New element cauldron </li>
<li>When hero got a shield it can stop arrows</li>
<li>Render screens code refactored</li>
<li>NPC can yield coins </li>
<li>Hero can attack if proper item is owned (sword, axe and knive)</li>
<li>Enemy energy is now used</li>
<li>Now shop offers boots! (faster walk, jumping, slippery...)</li>
<li>Screen Prepare() method more handy</li>
<li>Blocks can contain hidden coins</li>
<li>New element Idol </li>
<li>GameServices.GetHero returns now IHero </li>
<li>Hero's shield is affected by arrows depending on its level (pushed backwards)</li>
<li>Enemies killed with a weapon spawns a coin</li>
<li>Shopping menu slowly improved</li>
<li>During the same game, already taken coins do not appear again when revisiting a level </li>
</ul>
<br />
BB)<br />
<ul>
<li>New TMasterDetail<M, D> class</li>
<li>Some functions changed parameters of type TDummySprite to ISprite </li>
<li>TLevels simplified</li>
<li>New TObjectHelper.CreateByName(), it creates any kind of class by name, very handy for the inventory</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy5kAS-nO84ITRHMFYJ6LbcMjDwxBMIYWir4Ut_y4dVcn6Kv-AnOwG3qx-ONJfFopPL01uXh1Bsp79hiDrqpGYyQfzCe6LlIgouCiIwgUzksiZ4BSyf8cJ4FOhcyhUqE1KveE2xmc49-31/s1600/Shop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy5kAS-nO84ITRHMFYJ6LbcMjDwxBMIYWir4Ut_y4dVcn6Kv-AnOwG3qx-ONJfFopPL01uXh1Bsp79hiDrqpGYyQfzCe6LlIgouCiIwgUzksiZ4BSyf8cJ4FOhcyhUqE1KveE2xmc49-31/s640/Shop.png" width="640" /></a></div>
<br />
Hero with his sword and shield after purchasing them in the futuristic shop :-)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgijFB8smK91CXhickcG1uH5tWlls6MoqAOAvkP8GhFC3t265pu_XUXVKqS3opOptqxCXqeFZArhvEcc7llDaYCZ7XVT5bMr7u0Hf1Z8hD2TUpVkM4KysQyTIiIY9jRUsPs9Zfx2aLygzub/s1600/The+Labyrinth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgijFB8smK91CXhickcG1uH5tWlls6MoqAOAvkP8GhFC3t265pu_XUXVKqS3opOptqxCXqeFZArhvEcc7llDaYCZ7XVT5bMr7u0Hf1Z8hD2TUpVkM4KysQyTIiIY9jRUsPs9Zfx2aLygzub/s640/The+Labyrinth.png" width="640" /></a></div>
<br />
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-84554050461912457712016-08-08T10:25:00.000+02:002016-09-15T19:02:43.085+02:00Say hello to Non Player Characters<span style="font-family: inherit;"><span style="font-size: small;"><span style="background-color: white; color: #222222; line-height: 18.48px;">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:</span></span></span><br />
<span style="font-family: inherit;"><span style="font-size: small;"><span style="background-color: white; color: #222222; line-height: 18.48px;"><br /></span></span></span>
<span style="font-family: inherit;"><span style="font-size: small;"><span style="background-color: white; color: #222222; line-height: 18.48px;"> INPC = interface<br /> function GetItems: string;<br /> function GetNeeded: string;<br /> function GetAchievement: string;<br /> function GetDelay: cardinal;<br /> function IsDeal(aInventory: IMemVar): boolean;<br /> function Interact(aInventory: IMemVar): TNPCResult;<br /> procedure StopWalking;<br /> function Talk(out aText: string): boolean;<br /> end;</span></span></span><br />
<br />
<span style="font-family: inherit;"><span style="font-size: small;"><span style="background-color: white; color: #222222; line-height: 18.48px;"> Just chatting, expecting some items and give new items..., nothing fancy</span></span></span><br />
<br />
<span style="font-family: inherit;"><span style="font-size: small;"><span style="background-color: white; color: #222222; line-height: 18.48px;">Found binaries at </span><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="background-color: white; color: #888888; line-height: 18.48px; text-decoration: none;">OneDrive</a></span></span> <br />
<br />
HBF)<br />
<ul>
<li>Minimap also prints teleport, enemies and doors</li>
<li>New class TDead for handling disintegrate effects</li>
<li>Blood has more colors in the same range</li>
<li>Door can take you to specific levels</li>
<li>Water can flow to already existing reservoir</li>
<li>New level Asphyxia!</li>
<li>Game now can have more than one door, so keys are related to door groups</li>
<li>Now doors can be upside-down </li>
<li>Better handling of door keys </li>
<li>Some pools are now based in lava </li>
<li>Liquid now have texture, Thrownrate, Sound and SplashCadency properties</li>
<li>class TSpawner improved</li>
<li>Lava can do ice heating</li>
<li>Quake is now done with camera </li>
<li>Birds spawning code improved</li>
<li>TDust now has orientation (horizontal/vertical)</li>
<li>New TLiquid.IsResetable()</li>
<li>New bee (replacing bird...)</li>
<li>All Direction stuff removed, it was useless</li>
<li>Deadly liquid does not sound like water anymore</li>
<li>New class TFloater, barrel inherits from it</li>
<li>New element Boat, inherits from TFloater</li>
<li>Waterfalls streams work 100% now</li>
<li>New Achievement regarding waterfalls</li>
<li>Adding NPC </li>
<li>Now game shows inventory</li>
<li>New achievement related with NPC (talk to them...)</li>
<li>Menu option continue on removed, now when entering a level one can freely choose another level (if reached of course)</li>
<li>Optimizer now can load from multiple folders </li>
</ul>
<br />
BB)<br />
<ul>
<li>Main engine render loop finally done in a proper way</li>
<li>Particles now have friction </li>
<li>New default buffer timeout is infinite</li>
<li>Triggers can be linked to other triggers, so until related trigger is not executed current one cannot be executed</li>
<li>Liquid might have textures (used for lava)</li>
<li>Fonts rendering improved</li>
<li>Fixed an error with buffer size increments</li>
<li>Liquid now has thickness</li>
<li>Liquid now is got some optimization when big areas</li>
<li>Particles now have emission type (continuous, once)</li>
<li>TLaser now inherits from TDummySprite</li>
<li>Trying to add some noise to the laser </li>
<li>Fixed some offset issues with some primitives</li>
<li>New TSpriteEngine.Find(name)</li>
<li>Now Triggers can target any entity that implement IExecutor </li>
<li>Liquid edges are shown properly</li>
<li>All sprites now can have texture offsets </li>
<li>Sprites can now also load from big File</li>
<li>Laser can now have a texture assigned</li>
<li>New utils.fmod (float modulo)</li>
</ul>
<br />
<br />
New secret and hidden level! <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji7hltB18c8ukCjhqS3VasETEW9zDHqVlBjClgmFVjpjXEuOkO1cfreuCCE-lMezx54qPSMwwZ4eXs_EzcPC6z5OopmKgMWHBjFNLtewaVXVtO7W6DZVOrVM1RKJhQSCUuADFW_5BnjnvL/s1600/Asphyxia.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji7hltB18c8ukCjhqS3VasETEW9zDHqVlBjClgmFVjpjXEuOkO1cfreuCCE-lMezx54qPSMwwZ4eXs_EzcPC6z5OopmKgMWHBjFNLtewaVXVtO7W6DZVOrVM1RKJhQSCUuADFW_5BnjnvL/s640/Asphyxia.png" width="640" /></a></div>
<br />
Old man giving me something... <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirjrPZKqW_JbVWucWjAYMjs7g4Ie7fBRigI2B_CmkrEbE2wf-VbjCzYJdBjq03sr0tauKsmb3rDghHXPTGDafzti3jit-W0kxAA9zMBTxLXNv9VJXQ1MRr0LDWLdplqMfGWO04SZoUsayx/s1600/The+Beginning.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirjrPZKqW_JbVWucWjAYMjs7g4Ie7fBRigI2B_CmkrEbE2wf-VbjCzYJdBjq03sr0tauKsmb3rDghHXPTGDafzti3jit-W0kxAA9zMBTxLXNv9VJXQ1MRr0LDWLdplqMfGWO04SZoUsayx/s640/The+Beginning.png" width="640" /></a></div>
<br />
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0tag:blogger.com,1999:blog-6500511128374134254.post-36145024806961602992016-05-07T13:44:00.004+02:002016-05-10T16:54:19.011+02:00Fluids flowingTime to post!, now that particles are used and abused, then I was playing a bit with liquids<br />
<br />
<span style="font-size: x-small;"><span style="background-color: white; color: #222222; font-family: "trebuchet ms" , "trebuchet" , sans-serif; line-height: 18.48px;">Found binaries at </span><a href="https://onedrive.live.com/?cid=3fbc9fcc4cdfacf8&id=3FBC9FCC4CDFACF8%21114" style="background-color: white; color: #888888; font-family: "Trebuchet MS",Trebuchet,sans-serif; line-height: 18.48px; text-decoration: none;">OneDrive</a></span><br />
<br />
What's new since the last update? <br />
<br />
HBF)<br />
<ul>
<li>Dust and starfield are no longer split into render/tick, so looping twice is avoided</li>
<li>When hero dies in lava, particles are shown in a different color </li>
<li>Fireworks done with particles </li>
<li>Many Trunc() and Round() removed </li>
<li>Scepter does not appear in the same position as in the previous iteration</li>
<li>Replaced all possible TGraphicsDriver.Instance by new interfaces from IGameServices </li>
<li>Waterfalls are always fully developed since the very first frame</li>
<li>Ending changed a bit... </li>
<li>Runes class improved</li>
<li>Shunenbukaidesu improved</li>
<li>Since blood was everywhere now it got its own class</li>
<li>In final enemies energy is shown centered and with alpha </li>
<li>Kurkani also disintegrates and bleeds</li>
<li>Fireworks are now nicer (I guess...)</li>
<li>Platforms handling code moved from game to sprites </li>
<li>New elements AirBubble, Hit, LavaSplash and Spark </li>
<li>New animation for scepter </li>
<li>New pickup Minimap</li>
<li>New explosion sprites sheet</li>
<li>When water finds a hole it flows</li>
<li>Barrel movement improved</li>
<li>Some name changes in levels</li>
</ul>
BB)<br />
<ul>
<li>Sprites have now X & Y also as int</li>
<li>Particles now can have many emitters</li>
<li>Particles now have autozoom</li>
<li>New particle visible property</li>
<li>Now when screen buffer is overflow then it is skipped (avoiding AV)</li>
<li>Improved sleeping code</li>
<li>Surfaces can have gamma</li>
<li>TGraphicsDriver.Triangle() was not drawing properly... </li>
<li>Improved how sprites internally do Render() & Tick()</li>
<li>Internal list in SpriteEngine changed from TList<T> to TLinkedList<T></li>
<li>Handled platforms in some cases were removed from list incorrectly</li>
<li>New animation property wait, used to change the cadency of the first frame (used in sceptor)</li>
<li>Camera2d adding zoom functionality... (WIP)</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE_-S4f2uS-z4AtZgDXv7WJ4ZGXJrfTVqOYA5rrFLUEALQhH4quKFXzOeSbA-vgYfNl9jVEDtiuLu6tqhLgnoKOgPaXGl61UtPQkJ8Lit-dHjQyZhe6BHHq3U7f6ZfjYP__f6sDFM-fuqT/s1600/Climbing+Up.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE_-S4f2uS-z4AtZgDXv7WJ4ZGXJrfTVqOYA5rrFLUEALQhH4quKFXzOeSbA-vgYfNl9jVEDtiuLu6tqhLgnoKOgPaXGl61UtPQkJ8Lit-dHjQyZhe6BHHq3U7f6ZfjYP__f6sDFM-fuqT/s640/Climbing+Up.png" width="640" /></a></div>
<br />
<!--[if lt IE 7]> <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;'>
<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx?ocid=ie6_countdown_bannercode"><img src="http://www.theie6countdown.com/images/upgrade.jpg" border="0" height="42" width="820" alt="" /></a></div>
<![endif]-->Abel Belzunceshttp://www.blogger.com/profile/01902243542425747741noreply@blogger.com0Palma, Balearic Islands, Spain39.5696005 2.650160300000038739.47168 2.4887988000000387 39.667521 2.8115218000000386