Skip to content

Releases: KristalTeam/Kristal

v0.9.0

22 Dec 00:06
Compare
Choose a tag to compare

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 or Game:startLegend
  • 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 and optionalDependencies settings to libraries
  • Main Menu restructuring
    • Rename Menu to MainMenu
    • Extract all menu states to standalone classes
    • Move Menu:printShadow to Draw.printShadow
  • 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
  • Adjust enemy conditional status text behaviour
    • Add tired_text
    • Add low_health_percentage used to determine whether to display low_health_text
    • Add prioritySpareableText engine setting to determine priority between tired / low-health text and spareable text
  • Change default Object:shake params to match most Deltarune shaking
  • Implement some Lua operators (+, *, []) for strings
  • Add Actor.soul_offset and Actor: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 engine debug option for verbose asset loading
  • Add EnemyBattler:removeAct function
  • Change file select to skip save select if mod setting useSaves is set to has_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 and Actor:getFont to specify default speech font
    • speech_bubble_font_size and getSpeechBubbleFontSize for speech bubbles
  • More Utils functions
    • isNaN to check if a number is NaN
    • xor returns an XOR boolean result on an arbitrary number of inputs
    • squishAndTrunc 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 and pitch properties to map transition event
    • Replaces stairs property (used "escaped" sound)
  • Add custom keybinds for mods (using the keybinds mod setting)
  • Add Wave.arena_rotation and Wave: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 using https library
  • Add EnemyBattler.dmg_sprite_offset variable
  • Add BrokenCake, Lancer, Rouxls Kaard and Starwalker key items
  • Add Character.party variable
  • Add stronger_absent and getStrongerAbsent 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.

v0.8.1

09 Sep 19:25
Compare
Choose a tag to compare

Changelog

  • Many Deltarune accuracy fixes
  • Added text choicers (undertale-style choicers, seen at the start of Chapter 1)
  • Added ability to use spells from the Power menu in the overworld (requires both keepTensionAfterBattle and overworldSpells config options enabled)
  • Added UT Accurate Save Menu for Light World by @DiamondBor in #29
  • Added Sprite event for maps
  • Added option for save points to not heal (heals boolean property)
  • Made gear ability icon color in the equip menu customizable (bonus_color item variable)
  • Added basic flag viewer/editor in the debug menu
  • Added Hot Chocolate and Bouquet light world items
  • Added missing Chapter 1 Ralsei sprites by @DiamondBor in #25
  • Added more LW sprites for kris, susie and noelle, added missing key items by @DiamondBor in #26
  • Added Box of Heart Candy & Cards LW items by @DiamondBor in #28
  • Removed dark transition option for mods, along with Kristal.stageTransitionExists function
  • Added Event interaction buffer by @MrOinky in #32
  • Improve some stuff regarding standalone builds by @Dobby233Liu in #31
    • Moved TARGET_MOD to src/engine/vendcust.lua
  • Added git finder for showing the commit hash on the main menu when running the engine with git
  • Various tweaks by @Dobby233Liu in #30
  • Added 2nd page to credits menu by @DiamondBor in #27
  • World music continues into shop if shop_music is nil by @Simbel0 in #24
  • Error handler tweaks by @MrOinky in #33
  • Fixed soulshine animation speed by @IDunno1 in #34
  • Added callbacks
    • Mod:
      onMapMusic, onActionSelect, onBattleMenuSelect,
      onBattleAction, onBattleActionBegin, onBattleActionEnd, onBattleActionEndAnimation,
      onBattleActionCommit, onBattleActionUndo
    • Encounters:
      onActionSelect, onMenuSelect, getSoulSpawnLocation,
      getVictoryMoney, getVictoryXP, getVictoryText
    • Items:
      onMenuOpen, onMenuClose, onMenuUpdate, onMenuDraw

Full Changelog: v0.8.0...v0.8.1

Instructions

Windows: Download and extract the .zip, and run kristal.exe to play
Others: Download and install Love2D, and run the .love with Love2D 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.

v0.8.0

10 Apr 00:16
Compare
Choose a tag to compare

A months-overdue release of changes, additions, and fixes to Kristal.

Breaking changes

  • fadeTo and fadeOutAndRemove now take 'time' arguments instead of 'speed'
  • Added fadeToSpeed and fadeOutSpeedAndRemove
  • Removed getSpeed, added getSpeedDir and getSpeedXY
  • Removed setRelativePos bc honestly who was using that
  • Map load now happens after Mod:load
  • Timer:everyInstant() now calls its function exactly 'count' number of times, instead of one extra time
  • Change arguments for SpeechBubble from text, x, y, speaker, right, style to text, x, y, options, speaker
  • Change arguments for Battler:spawnSpeechBubble() from text, right, style to text, options
  • Renamed dialogue text line_advance_callback to line_callback, made it get called on first line, and made it receive the line index
  • Renamed resetGraphicsTransform to resetGraphics
  • Made Cutscene:fadeOut/fadeIn not automatically wait
  • Renamed Utils.padSpacing to Utils.padString
  • Reaction data tables are now formatted like {text, x, y, face, actor} (changed from the previous arrangement of {actor, face, x, y, text})
    • Textbox:addReaction(id, text, x, y, face, actor) and SmallFaceText(text, x, y, face, actor) have been similarly changed
  • Removed shake_x and shake_y variables from Objects
  • Added Object:shake(x, y, friction, delay) and Object:stopShake()

There are many additions and changes that are hard to list here in a release!
Check the commits for a full changelog: v0.7.1...v0.8.0

Instructions

Windows: Download and extract the .zip, and run kristal.exe to play
Others: Download and install Love2D, and run the .love with Love2D 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.

v0.7.1

15 Sep 22:11
Compare
Choose a tag to compare

A small update to Kristal that includes some important fixes.

Changelog

Additions:

  • Tiled 1.9 feature support
    • Tilesets can be defined to scale up to the map grid size, allowing unresized 20x20 tilesets
    • Image Collection tilesets can now define sub-images
  • New debug menus
    • Portrait selector, for viewing and copying portrait paths
    • Wave selector, for testing waves in battles
    • Sound test, for previewing sound effects
  • Added darkfountain and fountainfloor events, and a fountainshadow controller
  • Added a few sounds and sprites
  • Added some more palette options
  • Mod:getPaletteColor(index), Mod:getUISkin() callbacks

Changes:

  • color and highlight options for choicers
  • Disable NPC turn option by default
  • More Chapter 1 UI accuracy
    • New Chapter 1 TP bar config option (boxes it)
    • Drop Dog stat change to 2% in Chapter 1, sorry dog hunters
  • Portraits can now animate while talking
  • Lots of fixes

Full Changelog: v0.7.0...v0.7.1

Instructions

Windows: Download and extract the .zip, and run kristal.exe to play
Others: Download and install Love2D, and run the .love with Love2D 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.

v0.7.0

01 Sep 18:15
Compare
Choose a tag to compare

An update to Kristal that includes controller support, screen borders, warp doors, and some various changes.

Changelog

Additions:

  • Added controller support and rebinding
  • Added screen borders, which can be enabled in the options menu
    • Mods can change the dynamic border using Game:setBorder() or the border map property
    • Custom drawing can be added using the Mod:onBorderDraw callback
  • Added warp door event
  • Added indent customization for text (the * at the start of text)
    • Settable for an actor via the indent_string actor variable
    • Settable per-text with the [indent] text modifier
  • Added disable_mercy variable to enemies
  • Added built-in last_x and last_y variables to Objects
  • Miscellaneous functions:
    • Cutscene:during(func) to add an update function to the current cutscene
    • Game:setPartyMembers(...), Cutscene:playSound(), Music:setPitch(), BattleCutscene:closeText(),
      Utils.wave(), Event:addFlag()
  • Many useful callbacks:
    • Encounter:onCharacterTurn(battler, from_undo), PartyMember:onActionSelect(battler, undo),
      Encounter:onReturnToWorld(events), Encounter:getPartyPosition(index),
      PartyMember:onActionBox(box, overworld), Encounter:onGameOver(), Map:onGameOver()
      Mod:getConfig(key), Spell:onSelect(user, target), Spell:onDeselect(user, target),
      Actor:createSprite()

Changes:

  • Tension bar colors are now customizeable via the PALETTES table
  • Moved face/noelle_lw sprites to face/noelle folder
  • Added death argument to Wave:onEnd
  • World music now plays in encounters with music set to nil
  • Renamed EnemyTextbox class to SpeechBubble
    • Removed Battle:spawnEnemyTextbox(), replaced with [Party|Enemy]Battler:spawnSpeechBubble()
    • Renamed onTextboxSpawn(), onTextboxRemove() to onBubbleSpawn(), onBubbleRemove()
  • Renamed BattleCutscene:enemyText() to BattleCutscene:battlerText()
  • Return encounter after cutscene:startEncounter()
  • Removed love.graphics.drawCanvas, replaced with Draw.drawCanvas
  • Renamed Draw.drawCutout to Draw.drawPart (also added Draw.drawCanvasPart)
  • Fixed some floor/ceil issues
  • Fixed shader issues on some platforms, thanks to @Dobby233Liu

New Contributors:

..and more I likely missed in this list! See the full changelog: v0.6.0...v0.7.0

Instructions

Windows: Download and extract the .zip, and run kristal.exe to play
Others: Download and install Love2D, and run the .love with Love2D 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.

v0.6.0

23 Jun 22:59
Compare
Choose a tag to compare

A long overdue update to Kristal. This update includes a lot of various small changes.

Changelog

Additions:

  • Added "Create a new mod" button to the mod menu, which easily creates an example mod template
  • Added fixed FPS options (default 60)
  • Added right-click context menu to debug selection
  • Added copying and pasting objects to debug selection
  • Added support for the Tiled features Tile Objects, and Image Collection Tilesets (also tile rotation/flipping)
  • Added video assets folder & Video object

Changes:

  • Significantly changed camera behaviour
    • Camera will now always snap to its follow target while attached
    • Make sure to run cutscene:detachCamera at the start of your cutscenes, and cutscene:attachCamera at the end
  • The functions which modify TP have been moved to Game
    • The default max tension has been lowered to 100, from 250. Because of this, the "exact" versions of the tension modification functions have been removed, and the normal ones no longer multiply by 2.5.
  • Ctrl+Shift+R now reloads from last save, Ctrl+Alt+R full reloads
  • Merged Ralsei actor into one actor (just ralsei, no more ralsei_ch1)
  • require no longer works inside mods to load mod scripts, use modRequire(path) or libRequire(lib_id, path)
  • Renamed onStart callback from spawning things via wave to onWaveSpawn
  • Swapped the id and name arguments of DebugSystem:registerMenu
  • Renamed Object:isDebugSelectable to Object:canDebugSelect
  • Renamed Object:getDebugInformation to Object:getDebugInfo
  • Changed wait argument of WorldCutscene:startEncounter to an options table argument (pass in {wait = false} to avoid waiting)
  • Use Player auto_moving variable to determine whether followers should keep moving on their own, for the SLIDE state
  • Renamed Event:postLoad to onLoad, added postLoad for later

... and much more! See the full changelog: v0.5.1...v0.6.0

Instructions

Windows: Download and extract the .zip, and run kristal.exe to play
Others: Download and install Love2D, and run the .love with Love2D 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.

v0.5.1

07 May 19:35
Compare
Choose a tag to compare

Changelog

Changes:

  • Renamed WorldCutscene:switchMap to WorldCutscene:loadMap

Instructions

Windows: Download and extract the .zip, and run kristal.exe to play
Others: Download and install Love2D, and run the .love with Love2D 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.

v0.5.0

07 May 19:19
Compare
Choose a tag to compare

A significant update to Kristal. This update includes a lot of various small changes, as well as the start of a big debug system.

Changelog

Additions:

  • Added Debug Menu (ctrl+`, bindable), for easier mod debugging!
  • Added Object Selection (ctrl+o or middle-click), to look at object information and drag them around
  • Added equipment mod option, to easily adjust starting equipment
  • Added custom mouse cursor and some mouse-related config options
  • Added enemy speech bubble customization
  • Added config options for most chapter-specific game differences
  • Added [image], [offset], and [sound] text modifiers
  • Added text alignment option
  • Added fast-forward debug key (F5)
  • Added Object.timescale variable
  • Added controllers layer, and ToggleController (toggle), which shows/hides objects with a flag
  • Added events:
    • cameratarget: locks your camera at a position inside this region (subject to change)
    • hideparty: fades out followers when inside this region
    • cybertrash: same as chest but Cyber City styled
    • forcefield: block the player from going somewhere for vague plot reasons👍
    • pushblock: it wants to be pushed around (but not into a certified blockcollision layer shape)
    • tilebutton: it wants to be stepped on
  • Added callbacks:
    • Object:onStart whenever spawned by a Wave
    • Object:getDebugInformation, Object:isDebugSelectable, Object:getDebugRectangle for debug selection
    • Too many to list for Actor
  • Added various functions:
    • Object:slideTo, Object:slideToSpeed, Object:slidePath
    • Character:walkPath, Character:convertToEnemy
    • Camera:panTo
    • WorldCutscene:getEvent, WorldCutscene:getEvents, WorldCutscene:slidePath, WorldCutscene:walkPath
    • World:getEvent, World:getEvents
    • Map:getEvent, Map:getEvents, Map:getImageLayer
    • Game:addFollower, Game:removeFollower
    • Utils.shuffle, Utils.mergeMultiple, Utils.reverse, Utils.roundToZero, Utils.roundFromZero
    • Input.getMousePosition

Changes:

  • Removed all dt arguments, use global DT or DTMULT instead
  • Removed snd_ prefix from all built-in sounds
  • Script events are now only removed if once is true, set temp to not perma-remove
  • Replaced interactscript and readable events with interactable
  • World transition function has been renamed to mapTransition
    • transitionImmediate renamed to switchMap in cutscenes, loadMap in World
  • Made battle name sprites optional
  • GameOver has been moved into an Object
  • Accurate Light World death screen and save menu
  • Use Kristal.getTime() or global RUNTIME instead of love.timer.getTime()
  • aura property for enemies, to disable the glowing red effect
  • mapflag property for setflag event, to set a map flag instead of a game flag
  • Item check variable to quickly define check text (LW only)
  • Item light variable to define whether the item goes into your light or dark world inventory
  • Image fonts are now scalable with font size in text
  • Allow binding modifiers to keys (like ctrl+shift+a)
  • Console is now accessible anywhere in the engine, and console key is rebindable
  • Many adjustments to console text input

... And a lot more I certainly missed because it's been too long since the last release!
Full Changelog: v0.4.1...v0.5.0

Instructions

Windows: Download and extract the .zip, and run kristal.exe to play
Others: Download and install Love2D, and run the .love with Love2D 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.

v0.4.1

21 Apr 03:34
Compare
Choose a tag to compare

Changelog

Fixes:

  • Fixed setActSprite offsets being incorrect with the new offsets

Instructions

Windows: Download and extract the .zip, and run kristal.exe to play
Others: Download and install Love2D, and run the .love with Love2D 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.

v0.4.0

21 Apr 00:31
Compare
Choose a tag to compare

A significant update to Kristal. Most notably this update adds a nearly-complete Light World, as well as all Deltarune items.

Changelog

Additions:

  • Light world
    • Added light world textbox style (using a UIBox (formerly DarkBox) skin)
    • Added light world menu, including items, stats, and the cellphone
    • Added systems for converting between light world and dark world items
    • Party members have light world stats/LV
  • Added almost all Deltarune items to the engine
    • Added more values to HealItem, added TensionItem class
  • Added mini shop menu
  • Added Storage menu
  • Added enemy transitioning out of battle
    • Supported multiple enemies transitioning in
  • Added 'auto_spare' option for enemies
  • Added lots of getter functions for data classes
  • Added item flags, as well as Item:save and Item:load functions
  • Added globals and drawfx scripts folders (basically same as objects, just renamed)
  • Added talk sprite support

Changes:

  • Inverted all Actor offsets
  • Moved Dark Transition into an Object (WIP)
  • Autowrapping text!!!!!!!
  • Changed item and spell target values
  • Removed EnemyBattler.defeat_type, added EnemyBattler.exit_on_defeat boolean instead
  • Replaced keepFollowerPositions with interpolateFollowers
  • wait argument for WorldCutscene:startEncounter
  • Various changes to most Inventory functions, as well as inventory storage ids
  • shop setting for mod.json to start game in shop
  • Textboxes now automatically move to the top of the screen
  • Renamed scene property to cutscene
  • Renamed Map:unload to Map:onExit

Fixes:

  • Fixed inputting marker into WorldCutscene:panTo
  • Fixed shop backgrounds
  • Fixed master volume not saving
  • Fixed Sprite screen wrapping
  • ...and more

Full Changelog: v0.3.2...v0.4.0

Instructions

Windows: Download and extract the .zip, and run kristal.exe to play
Others: Download and install Love2D, and run the .love with Love2D 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.