Releases: KristalTeam/Kristal
v0.8.1
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
andoverworldSpells
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
tosrc/engine/vendcust.lua
- Moved
- 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
- Mod:
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
A months-overdue release of changes, additions, and fixes to Kristal.
Breaking changes
fadeTo
andfadeOutAndRemove
now take 'time' arguments instead of 'speed'- Added
fadeToSpeed
andfadeOutSpeedAndRemove
- Removed
getSpeed
, addedgetSpeedDir
andgetSpeedXY
- 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
totext, x, y, options, speaker
- Change arguments for Battler:spawnSpeechBubble() from
text, right, style
totext, options
- Renamed dialogue text
line_advance_callback
toline_callback
, made it get called on first line, and made it receive the line index - Renamed
resetGraphicsTransform
toresetGraphics
- Made
Cutscene:fadeOut
/fadeIn
not automatically wait - Renamed
Utils.padSpacing
toUtils.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)
andSmallFaceText(text, x, y, face, actor)
have been similarly changed
- Removed
shake_x
andshake_y
variables from Objects - Added
Object:shake(x, y, friction, delay)
andObject: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
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
andfountainfloor
events, and afountainshadow
controller - Added a few sounds and sprites
- Added some more palette options
Mod:getPaletteColor(index)
,Mod:getUISkin()
callbacks
Changes:
color
andhighlight
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
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 theborder
map property - Custom drawing can be added using the
Mod:onBorderDraw
callback
- Mods can change the dynamic border using
- 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
- Settable for an actor via the
- Added
disable_mercy
variable to enemies - Added built-in
last_x
andlast_y
variables to Objects - Miscellaneous functions:
Cutscene:during(func)
to add an update function to the current cutsceneGame: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 toface/noelle
folder - Added
death
argument toWave:onEnd
- World music now plays in encounters with music set to nil
- Renamed
EnemyTextbox
class toSpeechBubble
- Removed
Battle:spawnEnemyTextbox()
, replaced with[Party|Enemy]Battler:spawnSpeechBubble()
- Renamed
onTextboxSpawn()
,onTextboxRemove()
toonBubbleSpawn()
,onBubbleRemove()
- Removed
- Renamed
BattleCutscene:enemyText()
toBattleCutscene:battlerText()
- Return encounter after cutscene:startEncounter()
- Removed
love.graphics.drawCanvas
, replaced withDraw.drawCanvas
- Renamed
Draw.drawCutout
toDraw.drawPart
(also addedDraw.drawCanvasPart
) - Fixed some floor/ceil issues
- Fixed shader issues on some platforms, thanks to @Dobby233Liu
New Contributors:
- @prokube made their first contribution in #10
- @Dobby233Liu made their first contribution in #13
..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
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, andcutscene: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 moreralsei_ch1
) require
no longer works inside mods to load mod scripts, usemodRequire(path)
orlibRequire(lib_id, path)
- Renamed
onStart
callback from spawning things via wave toonWaveSpawn
- Swapped the
id
andname
arguments ofDebugSystem:registerMenu
- Renamed
Object:isDebugSelectable
toObject:canDebugSelect
- Renamed
Object:getDebugInformation
toObject:getDebugInfo
- Changed
wait
argument ofWorldCutscene:startEncounter
to anoptions
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 theSLIDE
state - Renamed
Event:postLoad
toonLoad
, addedpostLoad
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
Changelog
Changes:
- Renamed
WorldCutscene:switchMap
toWorldCutscene: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
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 regioncybertrash
: same aschest
but Cyber City styledforcefield
: block the player from going somewhere for vague plot reasons👍pushblock
: it wants to be pushed around (but not into a certifiedblockcollision
layer shape)tilebutton
: it wants to be stepped on
- Added callbacks:
Object:onStart
whenever spawned by a WaveObject: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 globalDT
orDTMULT
instead - Removed
snd_
prefix from all built-in sounds - Script events are now only removed if
once
is true, settemp
to not perma-remove - Replaced
interactscript
andreadable
events withinteractable
- World
transition
function has been renamed tomapTransition
transitionImmediate
renamed toswitchMap
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 globalRUNTIME
instead oflove.timer.getTime()
aura
property for enemies, to disable the glowing red effectmapflag
property forsetflag
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
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
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
, addedTensionItem
class
- Added more values to
- 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
andItem:load
functions - Added
globals
anddrawfx
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
, addedEnemyBattler.exit_on_defeat
boolean instead - Replaced
keepFollowerPositions
withinterpolateFollowers
wait
argument forWorldCutscene: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 tocutscene
- 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.
v0.3.2
Changelog
Additions:
- Added
has_xact
to PartyMember
Changes:
- Made
Wave:spawnObject
set the object'swave
variable
Fixes:
- Fixed ACTs not chaining together correctly
- Fixed starting a cutscene during
Wave:onEnd
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.