Skip to content

Kristal v0.10.0

Latest

Choose a tag to compare

@NyakoFox NyakoFox released this 23 Jun 05:14

Important

Most of the time, you'll want to follow this page:
https://kristal.cc/wiki/downloading
It has instructions to download and set up the source code, rather than using the builds here.

An even bigger update to Kristal, which took even longer than the last one, somehow. Either way, it's packed with some pretty good things!

Thanks to all our contributors for continuing to maintain the project.

Changelog

Climbing

  • Climbing has been implemented
  • Relevant objects are ClimbArea, ClimbEntry, ClimbExit, ClimbLanding, ClimbUnsafe, and FallingClimbArea
  • ClimbMover has been added as well, which moves the player to a location when overlapped
  • The system uses markers in many places, which can now be Tiled object references
  • World bullets now hurt the player if they're in the climbing state
  • ClimbEnemy has been added, which are WorldBullets which can be killed when jumped into

Reduced Tension

  • In your encounter, set reduced_tension to true in init (or override Encounter:hasReducedTension())
  • For enemies, override EnemyBattler:getGrazeTension() and always return 0 (since reduced tension fights do not give TP from grazing)
  • For any custom bullets with custom TP set, either remove it or set it to 0 (same reason as above)
  • When you spawn bullets (from a wave, or in a bullet's init), set grazed to true (because reduced tension fights do not give the "graze tick")
  • The TensionBar can now flash with TensionBar:flash() (thanks, @yeetussnoopy!)

Swooning

  • You can now disable auto healing through Encounter:isAutoHealingEnabled()
  • Encounter:canSwoon(target) now exists (so you can filter out Kris, or have other conditions)
  • Bullet:shouldSwoon(damage, target, soul) now exists (should just return true)
  • Party members now have battler/swooned animations, set it to battler/defeat if you dont have a unique sprite
  • EnemyBattler:getHealthDisplay() now exists, feel free to return "???" if you're imitating the Knight
  • Party health in the battle UI now has a lower limit

Chapters 3 and 4

Battle background changes

  • BattleBackground has been added, which is an object which draws the battle's background
  • BattleDarkener has been added, which is an object which darkens the battle's background, and also is responsible for darkening party battlers
  • To spawn a custom background, override Encounter:createBackground() and return an instance of BattleBackground. You must add it to the battle yourself, so the code would look something like return Game.battle:addChild(MyCustomBattleBackground())
  • The same exists for Encounter:createBattleDarkener(), but it is unlikely this needs to be overridden
  • Encounter:drawBackground(fade) has been removed

Tiled changes

  • Any "list properties" (ex. text1, text2) in Tiled now support actual Tiled lists (@Hyperboid, #513)
  • The "class" field in Tiled layers now work properly
  • Transitions can now take Tiled object references if the marker is in the same room
  • Markers can now have a player_state property. When the player spawns at one, their state will be set to the value of that property. This can be used to have rooms which you enter while climbing or sliding.
  • A new "event registry" has been added, allowing developers to easily register events
    • Rather than being automatically registered from the events folder (which is no longer preferred), events and objects should be registered through Game:registerEvent(id, constructor).
    • Game:registerEvent("tensionbar", function(data) return TensionBar(data.x, data.y) end) is an example registering a Tiled event. Placing the tensionbar event in Tiled will spawn the TensionBar object when the map is loaded.
    • This gives developers finer control over how their objects are instantiated by the event system, allowing any object to be created and not just those in the events folder, and allows better organization.
    • With this system, events should be put in the objects folder like any other object. Events which remain in the events folder will continue to be automatically registered (to not break older projects), but this is not preferred.
  • The "Events" table in projects, if that was ever used, has now been removed. It was undocumented, and a very poor way to interact with the event system.
  • Group layers now have a "thin" property which sticks them together for depth purposes (@Hyperboid, #359)
  • The silhouette event now has a custom color property (@HUECYCLES, #583)
  • Layer parallax now affects objects (@HmmNoPls, #483, #488, #489)
  • Tiled polygon shapes can now be used as Event collision (@MrOinky, #343, @Hyperboid, #353)
  • Flipped + rotated tiles now appear correctly (@Hyperboid, #620)
  • Some errors for Tiled path resolution have been improved

Utils split

  • The Utils module has been split into smaller modules, and Utils has been mostly transformed into deprecated functions, to be removed in the future. For things which still exist in Utils without being moved, you can expect them to be moved eventually. (@NyakoFox, #403)
  • Utils.numberFromKey(t, name) has been removed.
  • Utils.keyFromNumber(t, number) has been removed
  • Utils.hexToRgb(hex, value) now supports hex codes which aren't just #RRGGBB, so value can now be a multiplier if you enter hex with alpha, for example #00FF00AA
  • Utils.lerp's table support (now handled by TableUtils.lerp) is more strict and will error if table sizes are mismatched

Dev mode

  • mod.json now contains a dev key, controlling "Dev mode". If not present, it's assumed to be true
  • In "dev mode", you have full access to the Kristal debug system
  • When disabled, you can no longer use the debug system in Kristal
  • WHen disabled, the hotkey CTRL+ALT+SHIFT+M can forcibly enable it for the session, to help with debugging issues in released projects
  • Kristal itself now has a RELEASE_MODE option in vendcust, which controls whether these options are allowed in the engine itself, intended for standalone project releases, and "stable releases" of Kristal

Debug changes

  • Battles now show debug hotkeys in the top-left if debug rendering is enabled
  • CTRL+K now gives max tension instead of twice that, as that was only intended for testing SnowGrave early on
  • Hotkey for gaining tension in the overworld (@FireRainV, #310, #505)
  • CTRL+R is now disabled under certain conditions (to prevent some crashes)
  • Text input has been improved slightly as well
  • The debug system had a ton of improvements and should work smoother
  • A debug option for "give spell" has been added (@NyakoFox, @MrOinky, #487)
  • The wave selector can now select multiple waves at once (@MrOinky, #486)
  • A debug option for "give money" has been added (@HUECYCLES, #481)

Accuracy changes

  • Text shake is finally framerate-independent
  • Text shake offset no longer persists after a shake is reset
  • Fixed downing a defending party member taking away TP
  • Sprite animation speeds have been fixed
  • Walking animations have been made more accurate
  • battle/transition_out has been added for actors
  • The "plain" font's accuracy has been improved
  • Menu boxes are no longer "broken" like earlier releases of DELTARUNE and now look like their modern fixed versions
  • The "name" font has had some color consistency corrected
  • Text is now disconnected from BattleUI itself, so it does not move when BattleUI does
  • The UIBox animation is now accurate to DELTARUNE
  • Shaking logic has been fixed at higher framerates
  • Mercy messages are now more consistent with DELTARUNE. By default, mercy messages will always appear, and the previous behavior can be attained through manual checks (@NellMonell, #555)
  • The cell phone is now accurate for chapter 1 (@SweetSylveon, #625)

Miscellaneous changes

Full Commit History: v0.9.0...v0.10.0

Instructions

Important

Most of the time, you'll want to follow this page:
https://kristal.cc/wiki/downloading
It has instructions to download and set up the source code, rather than using the builds here.

Windows: Download and extract kristal-x.x.x-win.zip, and run kristal.exe to play
Others: Download and extract kristal-x.x.x-love.zip, and run kristal.love with LÖVE to play

Check out the documentation for how to use this engine, and download example-project.zip for project structure, as well as overworld and battle examples.