Releases: Steamodded/smods
1.0.0-beta-1620a
Fixes various bugs and visual inconsistencies. Also includes performance improvements and better compatibility with mobile devices.
What's Changed
soul_atlas: Separate atlas for center's floating sprite by @SleepyG11 in #1317- Mobile patches by @Aurelius7309 in #1325
- fix: resolve nil-indexing crashes in deck_preview UI by @spadesmaster in #1320
- Some UI optimizations by @SleepyG11 in #1316
- Optimize quantum enhancements's
set_abilityby @SleepyG11 in #1322 - Fix dropdowns causing unnecessary recalculates by @ThunderEdge73 in #1315
- feat: screen shader draw by @WilsontheWolf in #1342
- fix: booster select not accoutning for extra_slots_used by @WilsontheWolf in #1337
Full Changelog: 1.0.0-beta-1606b...1.0.0-beta-1620a
1.0.0-beta-1606b
Fixes a number of bugs from 1531zeebee. Lot's of wiki updates have been done as well documenting recent features/changes.
What's Changed
- "Cutting-edge technology bleeding pixels" fix by @SleepyG11 in #1301
- Add assert to shader loading for missing files by @lord-ruby in #1300
- split Card:set_cost for convenient overrides by @vitellaryjr in #1310
- Consistency changes to SMODS.create_card by @Aurelius7309 in #1313
Full Changelog: 1.0.0-beta-1531zeebee...1.0.0-beta-1606b
1.0.0-beta-1531zeebee
Heebee zeebees 😨
Full notes to come later/on the wiki.
What's Changed
- Fix: Update Blind's description with
set_text(Fixes #1233) and properly update name with loc_vars by @nh6574 in #1243 - Fix AnimatedSprite size in mods menu by @nh6574 in #1235
- Support starting & custom modifiers without UI for Challenges by @stupxd in #1230
- Fix fix implemented by #1159 (fixes #1220) by @wingedcatgirl in #1226
- Allow calc_scaling to apply to editions by @jumbocarrot0 in #1014
- Identify fake objects by passing
keytofake_cardfield by @HuyTheKiller in #1234 - Stake injection and UI fixes by @wingedcatgirl in #1058
main_start/endsupport for multiboxes by @nh6574 in #1246context.main_scoringfor 'individual' areas by @nh6574 in #1245- pass args.level_up to args.func in SMODS.upgrade_poker_hands by @MetaNite64 in #1268
disable_shinefor boosters, vouchers, and spectrals by @the-Astra in #1263- modify_booster_card context by @the-Astra in #1191
- Tweak
Card.selectable_from_pack, documentSMODS.card_select_areafunction andselect_cardfields by @HuyTheKiller in #1266 - feat: add conditionals for cycling dynatext content by @Foo54 in #1273
- Implement SMODS.GUI.scrollbar and SMODS.GUI.dropdown_select by @ThunderEdge73 in #1253
- Allow shaders to be applied to UI boxes by @InvalidOS in #1062
- feat: score modification effect by @Aikoyori in #1167
- Partial
no_overflow& scrollable mod name, authors and badge by @SleepyG11 in #1247 - Fix #1267 by @wingedcatgirl in #1278
- feat: UI elements in localization by @Aurelius7309 in #1283
- Proper prefix conflicts by @Aurelius7309 in #1290
- Allow mods to specify icon_path to have icons when unloaded by @lord-ruby in #1282
- Fix scrollbar bug with scrollbox content being smaller than or the same size as scrollbox bounds + Improve Dropdown API by @ThunderEdge73 in #1287
- Ability to specify scale args for custom round eval rows by @NeatsTopFoo in #1288
- Loader support for duplicate mods by @Aurelius7309 in #1291
calc_dollar_bonusimprovements by @nh6574 in #1244- feat: blind size modification effect by @LasagnaFelidae in #1281
- DynaText shaders, more robust UI element shaders by @InvalidOS in #1277
- Fix Center Unlock Text by @NeatsTopFoo in #1262
- stakes don't increment their own order anymore by @MetaNite64 in #1292
- Fix spectral card RNG parity with vanilla Balatro by @liafonx in #1231
- Update card_draw.lua by @RainDance2871 in #1236
- Add strikethrough formatting by @ThunderEdge73 in #1293
- DynaText: font for each individual string by @SleepyG11 in #1294
- feat: Add
weightsto every object andSMODS.Attributeby @Eremel in #1284
New Contributors
- @Foo54 made their first contribution in #1273
- @ThunderEdge73 made their first contribution in #1253
- @NeatsTopFoo made their first contribution in #1288
- @LasagnaFelidae made their first contribution in #1281
- @liafonx made their first contribution in #1231
- @RainDance2871 made their first contribution in #1236
Full Changelog: 1.0.0-beta-1503a...1.0.0-beta-1531zeebee
1.0.0-beta-1503a
Few bug fixes relating to installing for the first time, duplicate install detection and version checking.
Also contains some forbidden knowledge that will be explained in next release
1.0.0-beta-1501a
Look at this enormous list of pull requests and contributors. Thanks to everyone for their efforts in providing fixes and new features.
Full notes can be found here
What's Changed
- fix: crash with attention_text with text as table by @frostice482 in #1140
- Fix win condition to accomodate ante skipping by @wingedcatgirl in #1159
- [FIX] SMODS.is_eternal does not properly work for objects without a default eternal_compat value by @the-Astra in #1147
- Update LSP defs by @wingedcatgirl in #1169
SMODS.Back.initial_deckby @Gloompashcy in #1124- Allow custom types in
create_UIBox_notify_alertby @wingedcatgirl in #1138 - Ignore folders with .lovelyignore when running find_self by @stupxd in #1142
- Added German Translation (Create de.lua) by @onichama in #768
- Add
text_colourto challenges by @nh6574 in #1173 - Add SMODS.get_clean_pool by @the-Astra in #1146
- Fix crash in check_applied_stakes when stake.applied_stakes is nil by @toppeak-web in #1175
- implement the menu_cards function by @MetaNite64 in #1165
menu_cardsfixes by @nh6574 in #1185- Multiple columns for additional Ranks by @cloudzXIII in #1179
- add winning hand info to context.end_of_round by @lord-ruby in #1180
- implement CanvasSprite class by @MetaNite64 in #1020
- align_buttons cardarea config option by @the-Astra in #1148
- Hide palette selector for deckskins/collabs that have only a single palette by @VivianGiacobbi in #1163
- Custom StatusText in
update_hand_textby @Gloompashcy in #1172 - Prospective #1168 Fix by @Gloompashcy in #1184
- Preflight V1 by @WilsontheWolf in #1186
- #1179 Fix by @cloudzXIII in #1187
- Blind description formatting by @nh6574 in #1199
buttonsupport for text formatting by @nh6574 in #1200- add SMODS.ScreenShader by @real-niacat in #1174
- Add
.lovelyignoreto.gitignoreby @nh6574 in #1213 - Add info to
SMODS.destroy_cardslsp def by @nh6574 in #1215 - fix displaying negative chips from rank.nominal by @RandomsongV2 in #1222
- add array support to screenshader by @real-niacat in #1212
- Comment for ovewritten functions in vanilla code by @nh6574 in #1214
- Changes to badge colour handling by @nh6574 in #1219
- Allow
Card.remove_stickerto removepinnedby @nh6574 in #1221 pre_funccalculation key (Fixes #1098) by @nh6574 in #1218- Fix
SMODS.scale_cardLSP def by @nh6574 in #1229 - Fix no_juice returns not working by @InvalidOS in #1224
- Add context for altering Poker Hands by @DigitalDetective47 in #1139
New Contributors
- @frostice482 made their first contribution in #1140
- @onichama made their first contribution in #768
- @toppeak-web made their first contribution in #1175
- @cloudzXIII made their first contribution in #1179
- @RandomsongV2 made their first contribution in #1222
Full Changelog: 1.0.0-beta-1224a...1.0.0-beta-1501a
1.0.0-beta-1224a
Pushing through a small bug fix release before the festive period fully kicks off.
Cleans up some bugs introduced in the previous release.
1.0.0-beta-1221a
For detailed information on what this release adds, please see this discussion:
Click to see discussion post
What's Changed
- Fix Orbital Tag missing poker hand, expand
add_tagfunction by @HuyTheKiller in #1007 - Update ko.lua by @PixVoxel in #1040
- Update sticker.lua by @wingedcatgirl in #1061
- Fix display for scoring parameters with negative values by @nh6574 in #1088
- Add context.blueprint_copier by @InvalidOS in #1067
- Adds tracking for hands played per ante by @VivianGiacobbi in #1091
- Fix replace sound infinite loop by @VivianGiacobbi in #1090
- Add Poker Hands to collection by @nh6574 in #844
- Add config options to CardArea by @nh6574 in #891
- Shop Card Editing by @the-Astra in #953
- Custom ConsumableType usage tracking by @the-Astra in #978
- Add shader patching for lovely 0.9.0+ by @cg-223 in #1006
SMODS.is_active_blind()function by @AllUniversal in #1015- Updated ko.lua by @PixVoxel in #1084
- Added
SMODS.create_sprite()to decide betweenSpriteandAnimatedSpritedepending on the Atlas by @AllUniversal in #982 - Stake
loc_varsby @HuyTheKiller in #1082 - Add Poker Hand
keyto G.GAME.hands by @nh6574 in #1099 - Show the Cat during loading by @TheOneGoofAli in #1059
- add a more robust way to upgrade base hand score by @MetaNite64 in #994
- Fix crash on unlocking any vanilla item by @wingedcatgirl in #1102
- consistently define "added_to_deck" for playing cards by @vitellaryjr in #1106
- Fix Card:load by @ellestuff in #1116
- Fix a memory leak that occurs when quickly switching menus/tabs that contain text inputs by @VivianGiacobbi in #1120
- Address all unnecessary
update_hand_textcalls by @HuyTheKiller in #1111 - Add extra easings for "ease" event type by @Mysthaps in #1110
- Add missing stake
loc_varspatches and overrides by @HuyTheKiller in #1123 - Add disable_if_empty to SMODS.Rarity by @factwixard in #1101
- Automatic Achievement ordering in Mod Collection by @Aikoyori in #1128
- Minor pseudorandom_element LSP fix by @nh6574 in #1130
- Ensure object is non-nil in SMODS.get_card_areas by @mleaf233 in #1127
New Contributors
- @PixVoxel made their first contribution in #1040
- @InvalidOS made their first contribution in #1067
- @TheOneGoofAli made their first contribution in #1059
- @ellestuff made their first contribution in #1116
- @factwixard made their first contribution in #1101
- @mleaf233 made their first contribution in #1127
Full Changelog: 1.0.0-beta-1016c...1.0.0-beta-1221a
1.0.0-beta-1016c
This release mostly contains various slight bug fixes. For a complete list, you can review the commit messages since the last release. Some notable inclusions are:
context.ante_endfixed whenease_anteis hooked- added
SMODS.DynaTextEffect- docs to follow, aiko is a dynatext wizard - added
SMODS.update_context_flagsfunction to be used in response to some calculation contexts - added
SMODS.poll_editionfunction to wrap the default poll function to allow similar usage toSMODS.poll_sealandSMODS.poll_enhancement select_cardproperty is now able to be added to individualCenterobjects andConsumableTypes, and can be defined as a function.select_button_textcan also be defined on an object as a function returning a localized string, or as a string which is a localization key, to control the text that appears on the button.SMODS.Scoring_Parameternow has ajuice_on_updateflag set totruewhich controls whether the display of it uses juice_up when it updates- added
SMODS.is_challenge_unlockedfunction
What's Changed
- Add SMODS.DynaTextEffect for custom DynaText manipulations by @Aikoyori in #917
- Fixed infinite "Getter" context loops by @AllUniversal in #945
- make destroy_cards not crash when passed an empty table by @cg-223 in #948
- Added
SMODS.update_context_flags(context, flags)function by @AllUniversal in #875 - Ante and setting ability contexts lsp definitions by @nh6574 in #955
- Fixed incorrect hand size when reloading with
negativeplaying cards in hand by @AllUniversal in #966 - Fix
SMODS.add_to_poolbeing ignored by @nh6574 in #927 - Small tweak and expansion to Operator API by @HuyTheKiller in #943
- Update zh_CN.lua by @HONE13 in #857
- Update to the italian localization by @alexxyo3 in #988
- Card.selectable_from_pack null check by @blamperer in #997
- Fix orphaned info_queue Dynatext appearing in the top left of the screen for a frame by @nh6574 in #1009
- Fix challenge unlock counter by @wingedcatgirl in #996
- Expanded select_card arg by @the-Astra in #892
- feat: add custom draw functions for dynatexteffect by @Aikoyori in #995
New Contributors
- @HONE13 made their first contribution in #857
- @alexxyo3 made their first contribution in #988
- @blamperer made their first contribution in #997
Full Changelog: 1.0.0-beta-0827c...1.0.0-beta-1016b
1.0.0-beta-0827c
For detailed information on what this release adds, please see this discussion:
Click to see discussion post
What's Changed
- Add basic safety checks to
e.config.pageaccess andLAST_SELECTED_MOD_TABassignment by @Breezebuilder in #823 - Fix authors marquee max width by @lord-ruby in #825
- Support animated Mod Icons by @lord-ruby in #819
- Added context.change_suit and context.change_rank by @bepisfever in #813
CalcContextLSP update by @nh6574 in #843- Prevent calculate_context from being called outside of a run (Closes #849) by @nh6574 in #850
- Add scale_card functionality for scaling detection and modification. by @lord-ruby in #861
- Added SMODS.JimboQuip by @Kekulism in #745
- Function support for Challenge Banned Cards by @VivianGiacobbi in #799
- Fix smart_level_up_hand() not properly updating hand text for hands with face-down cards by @JustOsquo in #800
- Add context.money_altered (and G.STATES.SMODS_REDEEM_VOUCHER) by @JustOsquo in #804
- Miscellaneous LSP updates by @nh6574 in #856
- Remove padding from base node of dynamic tab by @gfreitash in #806
- Better handling of
trueinSMODS.merge_effectsby @nh6574 in #811 - Added perma_repetitions to perma_bonus.toml by @AllUniversal in #820
- Fix vanilla JimboQuip registering by @nh6574 in #862
- Added no_mod arg to probability functions by @the-Astra in #816
- ConsumableType: change primary/secondary color to text/bg color by @MetaNite64 in #833
- LSP Updates for 0808a by @nh6574 in #863
JimboQuipchanges by @nh6574 in #864- Fixed Campfire "Upgrade" attention text when selling it. by @AllUniversal in #868
- Negative playing cards draw fix by @AllUniversal in #854
- Fixed Card:set_base regression with manual sprites by @VivianGiacobbi in #869
- Use Card:should_hide_front() in DrawStep code by @the-Astra in #870
- info_queue's stylized name + multi lines name support by @bepisfever in #839
- Added probability numerator/denominator handling to other cardarea types by @VivianGiacobbi in #845
- Add G.GAME.modifiers.booster_choice_mod by @JustOsquo in #814
SMODS.is_in_pool()by @nh6574 in #828- Challenge
applyandcalculateby @nh6574 in #846 - Global mod
calculateby @nh6574 in #847 - Stake
calculateby @nh6574 in #859 - Added a "hand_type" argument to SMODS.four_fingers() by @VivianGiacobbi in #874
- Mods menu restarts after changes when pressing esc (Fixes #616) by @nh6574 in #848
allow_duplicatesinSMODS.create_cardby @nh6574 in #855- Update
es_419.luaandes_ES.luaby @nh6574 in #815 - Use
SMODS.shattersin localrandom_destroyby @HuyTheKiller in #881 - New ante-related contexts by @the-Astra in #878
- Chip-Mult Operator API by @balt-dev in #809
- Add deck loading when reloading a run by @nh6574 in #872
- Fix modded booster
select_cardsoftlock by @VivianGiacobbi in #841 blind.effectby @nh6574 in #873- Added
Card:is_rarity()function toutils.luaby @AllUniversal in #885 - Custom hidden achievement names by @Gloompashcy in #842
- Added
SMODS.context_stackby @AllUniversal in #877 - setting_ability Context by @the-Astra in #886
- fix edition card limit crash in collection by @real-niacat in #896
- Fixed
delay_editioninCard:set_edition()not working if removing Editions by @AllUniversal in #897
New Contributors
- @Breezebuilder made their first contribution in #823
- @lord-ruby made their first contribution in #825
- @bepisfever made their first contribution in #813
- @gfreitash made their first contribution in #806
- @AllUniversal made their first contribution in #820
- @MetaNite64 made their first contribution in #833
- @balt-dev made their first contribution in #809
- @real-niacat made their first contribution in #896
Full Changelog: 1.0.0-beta-0711a...1.0.0-beta-0820a
1.0.0-beta-0711a
Main Notes
- Added SMODS probability functions
- Poker Hands
visibleproperty adjustments - Animation adjustments
- certificate/marble
- card juicing on conditional upgrades
- level not updating when levelling up a different hand
- Discard effects on debuffed cards fixed
- Blueprint effects no longer copy debuffed jokers
- Blind debuff text can now be updated after it has been created
- Added
context.initial_scoring_step - Added
context.joker_type_destroyed - Added
context.evaluate_poker_hand - Added
context.check_eternal - Added
SMODS.is_eternal - Added
Card:should_hide_front - Added
context.beat_bosstocontext.end_of_roundto signify if a boss was defeated
Probability Changes
Probability has had it's functionality changed to allow for more granular control of it, and to allow for effects to happen based on probability rolls. Unfortunately, this requires updating older mods to be able to function properly with the new changes. There are two steps to do this.
Updating Probability Chances
Step 1 - Replace your loc_vars
Any item descriptions that contain a chance roll should be updated to use the new functionality. If your code looked like this before,
return {vars = {numerator, denominator, other_value}}then it should be changed to
local new_numerator, new_denominator = SMODS.get_probability_vars(card, numerator, demoninator, 'identifier') -- it is suggested to use an identifier so that effects that modify probabilities can target specific values
return {vars = {new_numerator, new_denominator, other_value}}This will allow your item description to dynamically update based on probability altering effects.
Step 2 - Replace your probability checks
The probability check will also need to be adjusted. If your code look like this before,
if pseudorandom('seed') < G.GAME.probabilities.normal * numerator / denominator thenthen it should be changed to
if SMODS.pseudorandom_probability(card, 'seed', numerator, denominator, 'identifier') thenThis will allow your random chance effect to be based on probability altering effects.
Modifying Probability
It is now possible to modify probability in two ways. By using new calculation contexts, you can modify both the numerator and denominator of a chance based effect, with respect to joker order, or you can set it to a fixed value. Both of these new contexts have context.numerator and context.denominator which are the current values of the numerator and denominator, taking into account modifications from previous jokers. They also have context.trigger_obj and context.identifier which can be used to identify the source of the chance roll.
fix_probability = true, from_roll = from_roll, trigger_obj = trigger_obj, identifier = identifier, numerator = additive.numerator or base_numerator, denominator = additive.denominator or base_denominator
context.mod_probability
This context should be used for any additive or multiplicative modifications to the probability.
if context.mod_probability thencontext.numerator -- current numerator
context.denominator -- current denominator
context.mod_probability -- boolean value to flag this context, always TRUE
context.trigger_obj -- the object that the roll comes from (note: The Wheel blind switches between the blind object and the blind prototype object)
context.identifier -- a string value to identify the source of the roll
context.from_roll -- internal value used to only trigger certain return values when the roll is made rather than a tooltip updateFor example, Oops All 6s! would use this check:
if context.mod_probability and not context.blueprint then
return {
numerator = context.numerator * 2
}
endcontext.fix_probability
This context should be used for setting either the numerator or the denominator.
if context.fix_probability thencontext.numerator -- current numerator
context.denominator -- current denominator
context.fix_probability -- boolean value to flag this context, always TRUE
context.trigger_obj -- the object that the roll comes from (note: The Wheel blind switches between the blind object and the blind prototype object)
context.identifier -- a string value to identify the source of the roll
context.from_roll -- internal value used to only trigger certain return values when the roll is made rather than a tooltip updateFor example, a joker that sets every chance based effect to a 1 in 2 would use this check:
if context.fix_probability and not context.blueprint then
return {
numerator = 1,
denominator = 2
}
endResponding to probability rolls
It is also possible to trigger effects based on the outcomes of probability rolls, using another new context.
Some return values may appear misordered here. Please report any such occurances then we can continue to improve SMODS.
context.pseudorandom_result
This context should be used for setting either the numerator or the denominator.
if context.pseudorandom_result thencontext.pseudorandom_result -- boolean value to flag this context, always TRUE
context.result -- the result of the chance roll
context.numerator -- the numerator used for the chance
context.denominator -- the denominator used for the chance
context.trigger_obj -- the object that the roll comes from (note: The Wheel blind switches between the blind object and the blind prototype object)
context.identifier -- a string value to identify the source of the rollFor example, a joker that triggers a message when a chance roll fails would look like this:
if context.pseudorandom_result and not context.result then
return {
message = 'Chance failed!'
}
endOther Changes
New Contexts
context.initial_scoring_step
This context is used for scoring effects that happen before playing cards are scored.
Note: This happens after context.before
if context.initial_scoring_step thencontext.cardarea, context.full_hand, context.scoring_hand, context.scoring_name, context.poker_hands,
context.initial_scoring_step -- boolean value to flag this context, always TRUEcontext.joker_type_destroyed
This context is used when a non-playing card is destroyed.
if context.joker_type_destroyed thencontext.joker_type_destroyed -- boolean value to flag this context, always TRUE
context.card -- the card object that has been destroyedNote
You can return no_destroy = true within this context to block the destruction event.
context.evaluate_poker_hand
This context is used to make modifications to the evaluation of poker hands, or to display custom hand names.
if context.evaluate_poker_hand thencontext.evaluate_poker_hand
context.cardarea, context.full_hand, context.scoring_hand, context.scoring_name, context.poker_hands
context.evaluate_poker_hand -- boolean value to flag this context, always TRUE
context.display_name -- the current text that is displayedValid return values to make modifications within this context are:
replace_scoring_name = "Hand Type"used to change which poker hand is used to scorereplace_display_name = "String"used to change the displayed text (also accepts a loc_key for a string stored in thepoker_handsloc_table)replace_poker_hands = tableused to modify the poker hands table (this is fairly advanced and should only be used if you know what you are doing)
context.check_eternal
This context is used to apply the eternal effect without the sticker being applied.
if context.check_eternal thencontext.check_eternal -- boolean value to flag this context, always TRUE
context.other_card -- the card object that is being checked
context.trigger -- the source of the check (this is an empty table if it has not been provided)Note
You can return no_destroy = true within this context to add the eternal effect to a card. Returning no_destroy = {override_compat = true} will apply the effect to cards that are marked as eternal_compat = false.
New Functions
SMODS.is_eternal(card, trigger)
This function is used for checking whether a card object has an eternal property, provided either through the Eternal sticker, or other means.
card- the card that is being checkedtrigger- generally should be a reference to the object that is doing the check. If the check is being done by a general function, it is recommended to supply an identifying table such as{destroying_cards = true}
Card:should_hide_front()
This function checks whether a card object should display the front sprite or not. Currently only checks for Stone cards and cards with overrides_base_rank = true defined on the Center, but can be hooked to provide additional functionality as required.
SMODS.is_poker_hand_visible(handname)
This function checks whether a poker hand is visible in the poker hands menu.
handname- string of poker hand name
What's Changed
- Fix DeckSkin Credit UI breaking modded languages by @HuyTheKiller in #751
- Fix
smart_level_upnot updating level in scoring by @nh6574 in #755 - Dedicated functions for listed probabilities by @TamerSoup625 in #661
- Better calc individual juice fix (Issue #711) by @Gloompashcy in #737
- SMODS.PokerHand function to control visibility by @nh6574 in #764
- Blind debuff text can now update if provided a new message by @VivianGiacobbi in htt...