A very big update to Kristal, over a year since the previous release. Thanks to all our contributors for continuing to maintain the project. Merry Christmas!
Changelog
- Update to LÖVE 11.5
- LTS Parity
- Add hours to file select menu and save menus
- Remove single pixel from susie hurt sprite (!!!!!!)
- Recruit system
- Border registry in
scripts/borders
for dynamic borders - Shader asset registry in
assets/shaders
for better organization - Legend cutscenes
- Registered in
scripts/legends
- Activated with
Game:fadeIntoLegend
orGame:startLegend
- Registered in
- New UI component system
- Dark Inventory is no longer attached to the Ball of Junk
- Add Chapter 1 Game Over screen
- Add per-battle party stat buffs
- Discord Rich Presence support
- Add support for BMFont fonts
- Add
dependencies
andoptionalDependencies
settings to libraries - Main Menu restructuring
- Rename
Menu
toMainMenu
- Extract all menu states to standalone classes
- Move
Menu:printShadow
toDraw.printShadow
- Rename
- Dynamic Dark Transition 🎉
- Increase Noelle HP cap to 999 (theoretical Deltarune limit) from 166 (achievable Deltarune limit)
- Add alternate animations/sprites to Noelle actor triggered by setting the Noelle party member's
weird
flag - Say hi to our new example mod shopkeeper Amelia :3 (only accessible with debug for now...)
- Add mouse input functions
Input.mouseDown
,Input.mousePressed
,Input.mouseReleased
,Object:clicked
- Change enemies to dodge ("miss" message) when taking 0 damage or less
- Add
damageUnderflowFix
engine setting which can be disabled to make enemies heal from negative damage instead
- Add
- Adjust enemy conditional status text behaviour
- Add
tired_text
- Add
low_health_percentage
used to determine whether to displaylow_health_text
- Add
prioritySpareableText
engine setting to determine priority between tired / low-health text and spareable text
- Add
- Change default
Object:shake
params to match most Deltarune shaking - Implement some Lua operators (
+
,*
,[]
) for strings - Add
Actor.soul_offset
andActor:getSoulOffset
for overworld soul placement - Add weapon attack stat comparison to the Equip menu
- Add
onWheelMoved
mod callback - Change left/up player movement to override right/down movement for Deltarune accuracy
- Add
usetile
property to interactables to conveniently display a Tile Object - Add
getDamage
function to all relevant Deltarune spells for easy hooking - Add restart engine hotkey (
Ctrl+Shift+Alt+R
) - Add toggle noclip debug hotkey (
Ctrl+N
) - Add character
alert
function to characters, battlers, and cutscenes - Add
previewMusicLoop
mod option - Add
Music:setLooping
function - Remove
Input.getText
return_sprite
argument- Add
Input.getTexture
function for this behaviour
- Add
- Add engine debug option for verbose asset loading
- Add
EnemyBattler:removeAct
function - Change file select to skip save select if mod setting
useSaves
is set tohas_saves
- Add
nameLimit
mod setting to define save file character limits - Better light world item implementation
- Add mod and encounter callbacks for battle menus
Mod:onBattleMenuCancel
/Encounter:onMenuCancel
Mod:onBattleEnemySelect
/Encounter:onEnemySelect
Mod:onBattleEnemyCancel
/Encounter:onEnemyCancel
Mod:onBattlePartySelect
/Encounter:onPartySelect
Mod:onBattlePartyCancel
/Encounter:onPartyCancel
- Tweak logic for default overworld object layer
- Add
Actor.font
andActor:getFont
to specify default speech fontspeech_bubble_font_size
andgetSpeechBubbleFontSize
for speech bubbles
- More Utils functions
isNaN
to check if a number is NaNxor
returns an XOR boolean result on an arbitrary number of inputssquishAndTrunc
for fitting text on-screen with squishing (horizontal scaling)
- Add fade parameter to
Game:enter
- Add
onMapBorder
mod callback to customize which border is set by a map - Add a keyboard with lowercase alphabet
- Allow negative amount in
EnemyBattler:addMercy
- Overhaul DarkMenu to make it easier to add buttons via events
- Add debug option to change party
- Add argument to
onDodge
which checks whether you attacked or not - Add
sound
andpitch
properties to map transition event- Replaces
stairs
property (used "escaped" sound)
- Replaces
- Add custom keybinds for mods (using the
keybinds
mod setting) - Add
Wave.arena_rotation
andWave:setArenaRotation
- Add
Shop:removeTalk
function - Add
PartyMember:replaceSpell
function - Move all mod callback strings to
KRISTAL_EVENT
table - Add
setWindowTitleAndIcon
mod setting - Add
Draw.printAlign
function - Add more overworld enemy settings for chasing and pacing
- Chapter 1 equipment inventory accuracy (12 slots instead of 48)
- Add
ChaserEnemy:onAlerted
callback - Add
Kristal.fetch
for HTTPS requests usinghttps
library - Add
EnemyBattler.dmg_sprite_offset
variable - Add BrokenCake, Lancer, Rouxls Kaard and Starwalker key items
- Add
Character.party
variable - Add
stronger_absent
andgetStrongerAbsent
to Party Members to determine which characters "get stronger" while not in the party - Add hotkey to save screenshot (
F9
) - Add argument to wavy text for speed
- Add
Soul:onGraze
callback - Add
getDialogueTextStyle
mod callback
Congratulations! You reached the end of the cherry-picked changelog only listing the additions! There are also countless fixes and more small changes/additions, but...
Full Commit History: v0.8.1...v0.9.0
Instructions
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-mod.zip
for mod structure, as well as overworld and battle examples.