Skip to content

Releases: tweenko/tldr-engine

v1.13.1+1

03 May 18:42
6236b92

Choose a tag to compare

Ripple (v1.13.1)

by @tweenko

ripple effects library:

  • library by techncolour with some polish by me
  • added Clean Shapes by Juju Adams and others as an external library
  • new function lb_ripple_create that creates a ripple wherever you'd like with lots of customization
  • new functions lb_ripple_vision_on and lb_ripple_vision_off that enable/disable ripple vision
  • new object o_lb_ripple
  • new object o_lb_ripple_vision for making dark rooms
  • when under ripple vision, leader actor now emits ripples every other footstep

lighting system modifications:

  • o_eff_lighting_controller has three new variables: shadows, darken and highlights that determine whether actors have these drawn when under lighting globally

bugfixes:

  • soul sprite was changed to be accurate with DR

Climbing Adjustments (v1.13.1+1)

by @Notrealb

Tweaks to climbing:

  • Climb camera moves faster.
  • Multi-Key direction behavior: Holding multiple keys in a general direction will alternate between the two directions, allowing diagonal-like movement. You'll also no longer constantly bump while holding multiple keys against the climbable boundaries.
  • Charge animation sync.
  • Allowed some support for jump_reach_max values above 50 by clamping it where needed.

v1.13.0

02 May 20:04
5b40b2a

Choose a tag to compare

Climbing and More (v1.13.0)

by @tweenko
update tutorial

IDE Version: v2024.14.4.222
Runtime Version: v2024.14.4.268

climbing system:

  • added a climbing system. you can add tiles on a layer with a name that starts with climb, and the system will register them. aside from tiles, you can simply add o_dev_climb_tile objects as well
  • you can see an example of its usage in room_test_climbing
  • camera switches into a smoother following mode when climbing to look like deltarune

actor changes:

  • a slight touch-up of the actor mover system (it still sucks though)
  • new actor_movement_jump_into that is just a jump movement without the landing animation
  • added an optional argument to actor_movement and actor_movement_jump called _play_sfx that determines whether corresponding sfx should be played (if applicable)
  • added an optional argument to actor_movement_jump called _time that determines the time the jump animation will take
  • new o_actor variable override_blend that, if not set to undefined, will override the actor blending. for internal usage
  • new o_actor variable alpha_mod that can modify the actor alpha

test zone changes:

  • connected room_test_climbing and room_test_loopback
  • added some more decor to room_test_loopback

misc changes:

  • marker_find_closest was moved to deprecated and renamed to marker_find_closest_id
  • marker_find_closest_inst was renamed to marker_find_closest and marker_find_closest_inst is now deprecated
  • o_eff_generic now has start_alpha and end_alpha
  • o_eff_generic's start_scale was changed to 1
  • o_afterimage now has a scale_mod variable
  • o_camera now resets most variables when changing rooms
  • extended game over screen light transition by 10 frames
  • game overs now can happen outside dodge events
  • added support for o_text_typer mini text not having any faces associated with it via using not a valid face (e.g. -1 or nil)
  • removed o_ui_fuse
  • added a new argument to audio_play and cutscene_audio_play called offset that offsets the sound by an x amount of frames
  • cutscene_audio_play now has a new argument called sound_type that determines the target emitter of the sound you want to play
  • added JSDoc for cutscene_audio_play
  • new function audio_get_target_emitter that returns an audio emitter based on the sound type provided
  • added a new argument to item_contains called item_type
  • implemented magical glass from deltarune as o_ow_magicalglass

bugfixes:

  • party_contains's usage was adjusted in the party selector to account for passive party members (above limit)
  • enc_set's win_condition now actually works and the behavior linked to o_enc's win_condition was changed to now be linked to enc_set's method
  • fixed the item_contains function to work correctly (it didn’t work before)

v1.12.2+1

12 Apr 17:02

Choose a tag to compare

v1.12.2+1 (Dev Tools, QOL & Bugfixes)

by @tweenko
update tutorial

IDE Version: v2024.14.4.222
Runtime Version: v2024.14.4.268

dev tool changes:

  • revamped dev tool UI
  • removed save deletion logic from o_world and simply made it spawn o_dev_savewipe_prompt instead
  • added support for dev tools to react to different game widths and heights

turn changes:

  • o_turn's user event 0 is now called once all the turns were spawned in, not 1 frame after its creation
  • fixed logic for __support_init_default and __support_destroy_check that now ignores the support turns

save changes:

  • added a new macro called SAVE_ENCODE in the save script that controls whether to encode a player's save data when saving. set to false by default, but encouraged to be set to true when finishing the game
  • two new functions: save_to_string and save_from_string that convert save data to/from strings
  • added JSDoc for save_reload
  • saves are no longer saved as .json files, instead saved with no format at all

misc changes:

  • the game's width and height is now controlled by four new macros: GAME_W, GAME_H and GAME_W_GUI and GAME_H_GUI (the normal draw scale and the gui draw scale respectively)
  • added a new function called draw_text_highlighted that's used in most dev tools now
  • all main party member collision boxes are identical to kris' one for consistent gameplay among the main party members
  • text typers now have a new font hash that determines the font that their text will use. can be a loc ID for a font or a reference to an asset (undefined will just not change the font)
  • o_ex_turn_complex_box was extended from 120 frames to 300
  • o_ex_turn_dentos is now a support turn
  • o_ex_turn_dentos now appropriately uses cutscene_stop instead of instance_destroy
  • o_ex_turn_dentos turn's logic was changed so that it works if its index is higher than 1
  • made spawn bullets animated
  • updated cutscene_lb_music_pitch to work the new cutscene system
  • added enum for SOUL_COLOR instead of real numbers
  • added the documeation link in the setup note
  • removed unused variables in o_world

bugfixes:

  • fixed a bug where previously, i accidentally made local cutscene_player_canmove always set the player instance's moveable variable to false instead of the desired choice
  • enc_enemy_isfighting now correctly checks for whether an enemy is still fighting and can be hurt
  • fixed a bug where shadow guys shoot act would crash the game if any of the enemies was not fighting anymore

v1.12.1+1

10 Apr 16:37

Choose a tag to compare

v1.12.1+1 (Cutscene Updates, Bugfixes)

by @tweenko
update tutorial

IDE Version: v2024.14.4.222
Runtime Version: v2024.14.4.268

  • added a new function called cutscene_stop
  • added a new property for cutscenes called local that determines whether to destroy the cutscene when leaving the room
  • cutscene_player_canmove now has a new argument called _global that determines whether to make the movement rule global (persists through rooms) or local (only for this room) false by default
  • fixed errors when equipping/unequipping items
  • removed cutscene logic for unique_ids

v1.12.1

09 Apr 17:57
cc3495b

Choose a tag to compare

v1.12.1 (More Localized Sprites)

by @Leftory and @tweenko
update tutorial

IDE Version: v2024.14.4.222
Runtime Version: v2024.14.4.268

localization changes:

  • localized Damage text in battle (and added Japanese variant of RECRUIT text)
  • localized TP caption in battle and overworld power menu
  • localized "PRESS" hint when fighting in battle
  • localized "HP" text in battle and overworld menu
  • localized "GAMEOVER" text
    Target box in battle
  • added a new loc file called "damage.json" that contains all damage localization IDs
  • changed logic for localizing damage sprites
  • applied the TEXT_HPCHANGE_MODE enumerator in source code when possible
  • added support for light world menu localization

misc changes:

  • added the "bandage" armor
  • the default weapon & armor are now the bandage and pencil instead of being undefined

v1.12.0

08 Apr 18:10
3793dcd

Choose a tag to compare

v1.12.0 (Saves, Memories and Localization Overhaul)

by @tweenko
update tutorial

IDE Version: v2024.14.4.222
Runtime Version: v2024.14.4.268

be careful when updating your project! this update changes a lot of things!

save system changes:

  • the whole save system was rewritten from the ground up
  • the new save system is a lot more reliable and fixes lots of issues and bugs related to saving/loading that the engine had before
  • settings now support save_entries
  • all save_entry related things were moved to their own script called save_entries
  • saves script renamed to simply save
  • all functions in the save system now follow a more concrete naming pattern, thus lots of functions were renamed
  • renamed global.saves to global.save_files to reduce confusion between it and global.save
  • empty save files are now marked by being empty structs ({}) instead of -1
  • new function save_entry_reset_default that resets the default value of a save entry to its original definition. could be useful in certain scenarios

memory changes:

  • if you remember anything about states, please feel free to forget about everything you've known. now they're called memories and they're completely different
  • the memory' predecessor, states, is now considered deprecated and is simply imitating a behavior simillar to the one achieved by the new memories. their use of id is also a bit broken due to some things not having an id. if you want to keep using states, which i don't recommend you do, you must add an identificator to all of them!
  • memory_get(_category, _identificator) returns a certain memory identifier in a certain memory category
  • memory_set(_category, _identificator, _value, _locked = false) sets a certain memory identificator to a value. returns whether the target memory was changed or not
  • memory_flick(_category, _identificator, _locked = false) flicks a memory. if the memory doesn't exist, it will be flicked to true. returns the new value of the memory
  • memory_remove(_category, _identificator) flicks a memory. if the memory doesn't exist, it will be flicked to true. returns the new value of the memory
  • example of how you'd use memories:
var evil = memory_get("choices", "test_evil"); // first, we get a memory from an arbitrary category. if the memory doesn't exist, undefined will be returned
if !evil && choose("A", "B") == "A" // if we aren't evil yet, we choose between "A" and "B" in a 50% chance to become evil
    memory_flick("choices", "test_evil", true); // if fate so decides, the "test_evil" memory is flicked true. the last argument here locks the memory from changing back to false if it's true already.

localization changes:

  • new function loc_string that does the same thing as loc does with the functionality of replacing bracketed numbers (e.g. {0}), just like base GML’s string command
  • all uses of loc and string together were adjusted to use loc_string instead
  • new function input_verb_get_name that returns the name of an input verb and localizes it. applied it where it’s applicable
  • fixed fallback languages to actually work by checking whether a localization entry exists with that name before adding it to the localization data
  • added new localization IDs in the form of localized bind names (e.g. “menu_bind_down”). you may add your own bind names you’d like to localize if you want to! just make sure they fit the menu_bind_{x} naming scheme (where the {x} is your bind name)
  • added a new function loc_exists that returns whether a localization entry exists or not

text_typer changes:

  • first of all, don’t get too attached. i’ll probably rewrite it sometime later in 2026 in my unrelated project
  • the effect command, while still accepting real numbers, now counts this behavior as deprecated and should instead use strings to refer to their target effect
  • the effect command now has bonus arguments called effect_arguments that will change the effects’ behavior
  • the command recognition system should recognize boolean statements more reliably now because all bool(x) calls were replaced with the new string_to_bool(x)
  • added a new “wave” effect
  • added support for all string_to_color colors to also understand colors without the “c_” prefix

misc changes:

  • emitter_music was renamed to emitter_bgm
  • bus_music was renamed to bus_bgm
  • added a new function struct_empty that checks whether a given struct is empty
  • chapter select now uses the new save_entry_set_default instead of simply changing the empty save that the engine was using
  • rewrote diagonal collision logic that better accounts for possible interferences once landing into the target zone
  • added a new command called string_to_bool that reliably converts strings into boolean, while also accounting for the possibility that the string may simply equal to “true” or “false”

bugfixes:

  • collision bugs are a lot less likely to occur due to a few rewrites
  • the save system is a lot more consistent thanks to the rewrite and eliminates most of the bugs that can be found in versions before v1.12.0
  • fixed an issue where the input_binding_intext function would add one too many slashes (“/”)
  • fixed an issue where the current save's room name wouldn't be localized when overwriting a save

v1.11.2

05 Apr 16:12

Choose a tag to compare

v1.11.2

by @tweenko with contributions from @Leftory
update tutorial

IDE Version: v2024.14.4.222
Runtime Version: v2024.14.4.268

localization system changes:

  • added a feature of a fallback language for localization that you can configure by changing the global.loc_fallback_lang variable.
  • if loc cannot find the localized asset in the language requested, it will return the fallback asset as a failsafe
  • changed loc_switch_lang to roll you back to your last save by default
  • improved JSDoc for loc_switch_lang
  • renamed last loc_switch_lang argument to load_save (whether to load the last available save, true by default)
  • changed the console's language_switch command accordingly
  • added a failsafe for when a charset doesn't exist for the partyname font

chapter select changes:

  • chapter names are now localized in the draw event in real time instead of being localized when the object is created
  • added an option to not restart the chapter select screen when switching languages that's set to true by default. that's not how it is in deltarune, so you can set it to false in o_chapter_select's create event
  • changed certain code formatting choices to look more alike to the rest of the engine's code
  • the "Quit" option is now localized based on chapter_select_quit
  • "Chapter X" labels are now localized based on chapter_select_chapter
  • stars' x position was changed to account for the chapter label width (written by @Leftory) (feature request)

misc changes:

  • revivemint is no longer a default item
  • engine_info renamed to game_info
  • game over screen was fixed to actually spawn in dialogue and skip waiting altogether if there is no dialogue to show
  • all macros and functions with engine in them were changed to game:
    • ENGINE_VERSION -> GAME_VERSION
    • ENGINE_NAME -> GAME_NAME
    • ENGINE_LAST_COMPATIBLE_VERSION -> GAME_LAST_COMPATIBLE_VERSION
    • __engine_version_to_real -> __game_version_to_real
    • __engine_versions_compare -> __game_versions_compare

known issues:

  • if you switch the language in the save_select menu, when loading a save the items will be localized incorrectly. will be solved after the save system rewrite

v1.11.1+1

04 Apr 16:54
36c2916

Choose a tag to compare

v1.11.1+1

made by @tweenko

IDE Version: v2024.14.4.222
Runtime Version: v2024.14.4.268

party changes:

  • party_ismember was renamed to party_contains
  • fixed potential bugs related to checking whether a party member is in the partyrelated to the party_limit. for example, in battles, even if the party member was out of the limit, if there were acts that used them, they would still be available to use
  • party_contains received a new argument called _full_party that is boolean for whether to check for the full party (above the party limit)
  • all mentions of array_contains(global.party_names, ...) were replaced with the new party_contains function

deprecated function changes:

  • all deprecated functions now have more detailed descriptions describing why they're deprecated and what to replace them with
  • save_set (deprecated) now simply hyperlinks to save_set_slot

v1.11.1

made by @tweenko

IDE Version: v2024.14.4.222
Runtime Version: v2024.14.4.268

item changes:

  • added a new hash for item_weapon constructor and its children called weapon_element. it must always be a struct containing two variables called element and multiplier. if the enemy's element matches with the weapon_element the multiplier will be applied to the damage dealt
  • moved weapon_fatal and weapon_whitelist from the item constructor to its child item_weapon constructor
  • moved armor_blacklist from the item constructor to its child item_armor constructor
  • moved is_mercyspell from the item constructor to its child item_spell constructor
  • moved is_party_act from the item constructor to its child item_s_defaultaction constructor and also made it optional to be set

encounter changes:

  • the enemy constructor and its children now have a new hash called element that's equal to undefined by default. if the enemy's element matches the weapon element, a multiplier based on the weapon will be applied to the dealt damage. please note that this element hash does not influence the element of the bullets in the encounter. that's configured in the bullets' objects.

misc changes:

  • added a failsafe for when an item_localize function can't find the correct localization struct
  • made the char command of o_text_typer perform an effect akin to the face_ex command when the character is the same as the current one. this is ill-advised, but this was added just because people kept facing this issue and it's seemingly a bit unintuitive
  • cutscene_wait_until's arguments argument is back after being accidentally removed in v1.11.0
  • changed slide speed to 5 to make it how it is in DELTARUNE

v1.11.0

30 Mar 15:53
fa693a5

Choose a tag to compare

v1.11.0 (Cutscene Overhaul)

made by @tweenko

IDE Version: v2024.14.4.221
Runtime Version: v2024.14.4.265

cutscenes:

  • the cutscene system was fully overhauled with better performance and improved customization!
  • added two new constructors: cutscene and cutscene_event, which are the cutscene instance and a cutscene event inside the instance queue respectively
  • cutscene_get and cutscene_set were renamed to cutscene_get_current and cutscene_set_current. the old names were moved to deprecated functions
  • cutscene_dialogue, cutscene_actor_dialogue and cutscene_actor_move now track the instance they create specifically when waiting in queue.
  • o_cutscene_inst is now redundant and deleted
  • added a new cutscene event: cutscene_actor_override that turns on/off an actor’s s_override variable

actor movement:

  • global.charmove_insts is now redundant and was removed from the engine entirely.
  • cutscene_actor_move's pos argument is now redundant and removed from all function uses
  • actor_move's pos argument is now redundant and removed from all function uses

misc changes:

  • the spr command for o_text_typer's arguments now are properly set as sprite_index, image_speed, image_index in this order. previously, the image_speed and image_index arguments were mismatched, leading to confusion
  • added a new function called party_leader_warp which warps the leader and their party members. created to avoid re-writing code
  • slide dust now appears only when the player is 30 pixels or lower below the starting point of the slide trigger
  • renamed room_ex_shopzone to room_test_shops for better consistency
  • moved room_test_shops to the test zone category in room warp
  • the soul now more consistently follows the party leader during overworld dodge sequences
  • the overworld slide speed is now controlled by global.slide_speed, and changed from 4 to 6!

dark lighting library changes:

  • fixed the issue when the falling light would stick to the screen position
  • added optional parallax effects for falling light (variable definitions parallax_x and parallax_y
  • made the example room 540x240 instead of 320x240

migration guide:

  • global search cutscene_actor_move and replace all of YOUR custom calls with cutscene_actor_move_old

v1.10.2+3

08 Mar 06:39

Choose a tag to compare

v1.10.2+3 (Bugfixes)

made by @tweenko

  • fixed a bug where instant item usage would target the next party member instead of the current one (bug report)
  • moved the checker for whether an enemy is still fighting or not in the all instances of spell code (bug report)
  • fixed a bug where items in encounters would use spell selection instead of item selection

v1.10.2+2 (Beat Pulser)

made by @tweenko

engine changes:

  • added a new library called Beat Pulser. it emits signals in sync to background music
  • added beat_pulser constructor and its JSDoc

v1.10.2+1 (PR #26 - "Add a party_length function that returns the number of party members")

made by @Vinchethescript and reviewed by @tweenko

party changes:

  • implemented a new function called party_length that returns the current number of party members.
  • replaced all instances of array_length(global.party_names) with party_length
  • added a new variable global.party_limit that determines the maximum amount of working party members. set to 3 by default. set to undefined for no limit (no limit is how it was in the engine previously)