#Bird Jokers (Semi-WIP)

1 messages · Page 1 of 1 (latest)

blissful totem
#

This is my first time making a mod, so I don't expect this to be too good yet.
https://github.com/JustinBanzon/Bird-Jokers
The jokers:

  • Unlucky Crow:
  • This Joker has a 1 in 4 chance to gain X0.25 Mult every hand (gains X0.25 mult every time wheel of fortune says "Nope!")
  • Lucky Swallow:
  • This Joker has a 1 in 8 chance to gain X0.25 Mult every hand, Odds increase per consecutive hand played without succeeding (gains X0.25 mult every time wheel of fortune gives an edition)
  • Manzai Birds:
  • Retrigger the last played card used in scoring once, 1 in 4 chance for retriggered card to gain x2 Mult
  • Crow Person:
  • has a 1 in 2 chance to mark all scored cards as sacred geometry cards, (Spoilers for those who want to see the ending to the game Monument Valley) ||Transforms into its true form if 10 or more sacred geometry cards score || (returns all scored sacred geometry cards)
  • (Spoilers for those who want to see the ending to the game Monument Valley) || Crow Person (True form)||
  • (Spoilers for those who want to see the ending to the game Monument Valley) || has a 1 in 2 chance to mark all scored cards as sacred geometry cards, Scoring returned sacred geometry cards give X2 mult (returns all scored sacred geometry cards)||
GitHub

A Balatro mod that adds in a few bird-inspired jokers - JustinBanzon/Bird-Jokers

blissful totem
#

Hate having to necropost, but I'm thinking of adding another anti-frustration bird joker which prevents death if at least 90% of blind scored and doesn't destroy itself upon saving the run.

blissful totem
#

Updated some sprites and made the crow people HD in 2x resolution

fervent flume
#

What is Semi-wip

blissful totem
blissful totem
#

Made art for Phoenix, a new bird joker. I am still testing its effect.
The intended effect is Prevents death if chips scored are at least 90% of required chips, spawns a negative copy of itself if destroyed

cold sinew
#

seems very niche tbh

granite meadow
#

If you’re going to give balance feedback, you should say exactly what feature of the thing is not good and why. That comment is counterproductive

#

Trying to translate: maybe the power level is a bit low? You’re essentially getting a permanent x1.11 after this joker goes off, but 1.11 isn’t usually going to make a difference

#

80% might be reasonable

cold sinew
#

reminder that mr bones is 25%

#

like i don't see why i'd run this instead of mr bones

granite meadow
#

this is permanent

cold sinew
#

i guess it has that going for it and you could intentionally pop it

#

but idk, that seems like too much work vs just winning

#

this doesn't really do much pre endless (i'd just take mr bones)
post endless it's negative fodder

granite meadow
#

What would you give for 1/2 of a negative polychrome joker? What about a full 1.5x negative joker

cold sinew
#

but you know, negative and polychrome don't stack? i don't see your point

granite meadow
#

It’s a thought experiment

cold sinew
#

i mean i like the idea behind this joker but i don't really see why i'd take it over mr bones

granite meadow
#

I would. But this joker is more an investment into the future, anyway; it’s a different context

#

I take Mr. Bones a lot, but I would pass it if I am not in danger

blissful totem
granite meadow
#

There’s a lot of things that are possible to do- the condition is thematic, not sure I’d get rid of it

cold sinew
#

i'd reduce the prevent death reqiurement to 75-80% or something

blissful totem
#

I'm getting an error when I try to use an effect when Phoenix get destroyed and triggers after:

main.lua:3481: assertion failed!

Additional Context:
Balatro Version: 1.0.1f-FULL
Modded Version: 1.0.0-ALPHA-0702a-STEAMODDED
Love2D Version: 11.5.0
Lovely Version: 0.5.0-beta6
Steamodded Mods:
    1: Sound Util by infarctus [ID: Sound_Util]
    2: Bird Jokers by Justin [ID: BirdJokers]
    3: Lobotomy Corporation by Mysthaps [ID: LobotomyCorp, Version: 0.7.0]
    4: Myst's Boss Blinds by Mysthaps [ID: MystBlinds, Version: 1.2.5b]
    5: gamblecore by arachnei [ID: arachnei_gamblecore]

Stack Traceback
===============
(3) global C function 'assert'
(4) Lua method 'set_edition' at file 'main.lua:3481'
Local variables:
 self = table: 0x29166678  {click_offset:table: 0x28d65120, children:table: 0x28a02838, ambient_tilt:0.2 (more...)}
 edition = string: "negative"
 immediate = nil
 silent = nil
 edition_type = nil
(5) Lua global 'create_card_alt' at file 'BirdJokers.lua:621' (from mod with id BirdJokers)
Local variables:
 _type = string: "Joker"
 area = table: 0x2857b4c8  {click_offset:table: 0x286a1e20, children:table: 0x28cd90d0, shuffle_amt:0 (more...)}
 legendary = nil
 _rarity = nil
 skip_materialize = nil
 soulable = nil
 forced_key = string: "j_bird_jokers_phoenix"
 key_append = nil
 edition_append = boolean: true
 forced_edition = string: "negative"
 area = table: 0x2857b4c8  {click_offset:table: 0x286a1e20, children:table: 0x28cd90d0, shuffle_amt:0 (more...)}
 center = table: 0x287a22c8  {alerted:true, loc_vars:function: 0x28357828, mod:table: 0x2856fad8, unlocked:true (more...)}
 front = nil
 card = table: 0x29166678  {click_offset:table: 0x28d65120, children:table: 0x28a02838, ambient_tilt:0.2 (more...)}
(6) Lua field 'func' at file 'BirdJokers.lua:523' (from mod with id BirdJokers)
(7) Lua method 'handle' at file 'engine/event.lua:99'
Local variables:
 self = table: 0x28ad4d80  {start_timer:true, timer:TOTAL, blockable:true, trigger:immediate, func:function: 0x28f59e40 (more...)}
 _results = table: 0x287cac38  {blocking:true, pause_skip:false, time_done:false, completed:false}
(8) Lua method 'update' at file 'engine/event.lua:182'
Local variables:
 self = table: 0x288b1b38  {queue_last_processed:150.60000000001, queues:table: 0x288b1b60, queue_dt:0.016666666666667 (more...)}
 dt = number: 0.01218
 forced = nil
 (for generator) = C function: next
 (for state) = table: 0x288b1b60  {unlock:table: 0x288b1b88, other:table: 0x288b2000, tutorial:table: 0x288b1bd8 (more...)}
 (for control) = number: nan
 k = string: "base"
 v = table: 0x288b1bb0  {1:table: 0x28cd9080, 2:table: 0x28ad4d80, 3:table: 0x28df2830, 4:table: 0x2872cab0 (more...)}
 blocked = boolean: false
 i = number: 2
 results = table: 0x287cac38  {blocking:true, pause_skip:false, time_done:false, completed:false}
(9) Lua upvalue 'gameUpdateRef' at file 'game.lua:2510'
Local variables:
 self = table: 0x28364078  {PALETTE:table: 0x28504928, ANIMATION_FPS:10, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true (more...)}
 dt = number: 0.01218
 http_resp = nil
(10) Lua method 'update' at file 'main.lua:479'
Local variables:
 self = table: 0x28364078  {PALETTE:table: 0x28504928, ANIMATION_FPS:10, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true (more...)}
 dt = number: 0.01218
(11) Lua field 'update' at file 'main.lua:133'
Local variables:
 dt = number: 0.01218
(12) Lua function '?' at file 'main.lua:77' (best guess)
(13) global C function 'xpcall'
(14) Love2D function at file 'boot.lua:377' (best guess)
Local variables:
 func = Lua function '?' (defined at line 48 of chunk main.lua)
 inerror = boolean: true
 deferErrhand = Lua function '(Love2D Function)' (defined at line 348 of chunk [love "boot.lua"])
 earlyinit = Lua function '(Love2D Function)' (defined at line 355 of chunk [love "boot.lua"])
granite meadow
#

the traceback is REALLY helpful

#

usually you'll be able to see the exact line things crashed

blissful totem
#

I managed to fix the issue by replacing this:

local new_card = create_card_alt('Joker', G.jokers, nil, nil, nil, nil, 'j_bird_jokers_phoenix', nil, true, "Negative")

with this:

local new_card = create_card_alt('Joker', G.jokers, nil, nil, nil, nil, 'j_bird_jokers_phoenix', nil, true, {negative = true})
#

The video below shows that the Phoenix joker only "revives" if destroyed from a joker to its left but not from a joker to its right. How do I make sure it "revives" whenever it's destroyed?

granite meadow
blissful totem
granite meadow
granite meadow
granite meadow
blissful totem
granite meadow
#

I believe card:start_dissolve is what you want

#

hm, it's a little awkward because start_dissolve adds events to do its work

#

you could add another event at the end of start_dissolve if you want the new joker to come in after the old one is fully done removing itself

#

ugh, this game's events are weird

blissful totem
# granite meadow I believe card:start_dissolve is what you want

Looks like redefining the card:start_dissolve worked. It even works when I put an event before the card, but it makes a card appear before the old one is gone.

local dissolve_ref = Card.start_dissolve

function Card.start_dissolve(self, dissolve_colours, silent, dissolve_time_fac, no_juice)
    self.getting_destroyed = true
    if self.ability.name == "Phoenix" then
           G.E_MANAGER:add_event(Event({trigger = 'immediate', func = function()
            local new_card = create_card_alt('Joker', G.jokers, nil, nil, nil, nil, 'j_bird_jokers_phoenix', nil, true, {negative = true})
            new_card:add_to_deck()
            G.jokers:emplace(new_card)
            new_card:start_materialize()
            G.GAME.joker_buffer = 0
            return true;
        end}))
    end
    dissolve_ref(self, dissolve_colours, silent, dissolve_time_fac, no_juice)
end
granite meadow
#

hey, it works? great!

blissful totem
granite meadow
#

oh yeah, whoops. forgot to say that

#

yeah, that's pretty funny

#

on G.GAME.joker_buffer, ok technically you gotta increase that by 1 and also increase jokers.card_limit by 1, but whatever, don't bother

#

sorry about that comment, don't worry about it

blissful totem
#

Me when I wrote "Saved by Joker" on the phoenix Joker, not knowing I was actually going to use something similar as the message when a joker saves a run from death:

blissful totem
# granite meadow oh yeah, whoops. forgot to say that

Also, Fixed it by adding an ability flag to the joker:

-- Note: "-- ... --" is used in place of irrelevant code.
local phoenix = SMODS.Joker{
-- ... --
config={extra = {destroy_disolve = true}},
-- ... --
calculate = function(self,card, context)
        if context.end_of_round and context.game_over and 
        G.GAME.chips/G.GAME.blind.chips >= 0.8 then
            -- ... --
        elseif context.selling_self then
            card.ability.extra.destroy_disolve = false
        end
    end
}

and adding a check to see if the flag is true

local dissolve_ref = Card.start_dissolve
local todays_date = os.date("*t",os.time())
function Card.start_dissolve(self, dissolve_colours, silent, dissolve_time_fac, no_juice)
    dissolve_ref(self, dissolve_colours, silent, dissolve_time_fac, no_juice)
    if self.ability.name == "Phoenix" and (self.ability.extra.destroy_disolve or (todays_date.month==4 and todays_date.day==1))then
           G.E_MANAGER:add_event(Event({trigger = 'immediate', func = function()
            local new_card = create_card_alt('Joker', G.jokers, nil, nil, nil, nil, 'j_bird_jokers_phoenix', nil, true, {negative = true})
            new_card:add_to_deck()
            G.jokers:emplace(new_card)
            new_card:start_materialize()
            G.GAME.joker_buffer = 0
            return true;
        end}))
    end
end

(Yep, I added the "infinite money glitch" as a feature for when the system date is April fool's day)

blissful totem
#

I feel like a "prevents death if xx% of chips scored" ability is weak for a joker that can respawn as a negative, but the respawn as a negative part is probably enough to make it at least an uncommon joker. What effect should I give it?

blissful totem
#

What should I do for other bird jokers?

blissful totem
#

Thinking of making this bird a common $1 joker
House sparrow: +1 mult, disables the effect of ||Common Muck|| (hehe no more cruelty from that boss for you!)

fervent flume
#

I forgot to comment but these birbs are so cute. Love them

blissful totem
#

Crying internally (Sparrow is supposed to disable Common Muck's effect)

blissful totem
blissful totem
#

Weird interaction where House sparrow tries to disable ||White Night|| (From the LobCorp mod) it succeeds but the boss still displays its ||"Do not deny me"|| text...

blissful totem
#

Me when trying to make the mod compatible with Joker displays, but can't get ||Crow Person (True form)|| to detect Manzai birds' retriggers

blissful totem
#

Thing is it was because I didn't set a "Retrigger" function for the Manzai birds joker.

uneven harness
#

Oh yeah @blissful totem btw idk if you know about this or not

#

but the Phoenix joker is incompatible with Talisman

blissful totem
#

I didn't use the Talisman, so I didn't know it had compatibility issues.

#

I checked spawning in Mr. Bones and that also seemed to break Talisman... maybe it has something to do with the G.localization.misc.dictionary.ph_mr_bones variable

blissful totem
#

Sorted the issue with the Phoenix joker with Talisman, should work now.

uneven harness
blissful totem
#

Testing some UI changes for Lucky swallow (Added "reset" text for odds when mult increases. changes to odds are now green and changes to xmult are now colored mult-red)

blissful totem
#

Thinking of adding a new joker "Hummingbird nerd" that immediately ends the round if the ratio of the current score to the required score is at least the ratio of hands used to starting hands
Gamblecore 3 reference: this joker will have "We are done gambling" on its card art

blissful totem
#

Made art for the "Hummingbird nerd" joker and have a version with text, but should I use the "It's pronounce "pyoopah", and I'm not a moth" or "We are done gambling, that is it" for its text?

blissful totem
chilly socket
#

pyoopah is a funny word so I vote that

blissful totem
somber bronze
#

Unlucky Crown triggered a "Nope!" when I used a Wheel of Fortune somehow

faint pine
#

Did the wheel of fortune work?

#

If so that's intended behavior

blissful totem
faint pine
#

Those attributes that him and the lucky one have remind me of Pokemon abilities kinda

somber bronze
#

Oh I was wondering why wof's "Nope!" wasn't showing

blissful totem
# blissful totem

Looks like the results are just about in. I'll be using the quote "It's pronounce "pyoopah", and I'm not a moth" from the video "True Facts: The Hummingbird Warrior".

blissful totem
# blissful totem
poll_question_text

What should I have the text on the "hummingbird nerd" joker art say

victor_answer_votes

2

total_votes

3

victor_answer_id

1

victor_answer_text

It's pronunced "pyoopah" and I'm not a moth!

fervent flume
#

crashed on boot

blissful totem
blissful totem
#

Just pushed a fix now, should work.

blissful totem
#

Gamblecore 3 was referenced, but not in a joker art. Instead, it is referenced in the end screen when something saves your run or ends the round prematurely

fervent flume
#

Shouldn't house sparrow's effect on boss blinds float with current ante? like every 8 ante there's a boss, shouldn't it also disable them?

blissful totem
#

What do you mean by "float with current ante"? Do you mean disable finisher bosses regardless of ante?

fervent flume
#

yeah not just ante 8 boss

blissful totem
#

I don't know if there's a way to check to see if a boss is a finisher if not the ante 8 boss, but I could try.

fervent flume
#

you can maybe see the code from spoiler blind in bonus blind

#

This one

faint pine
blissful totem
#

I want to test House Sparrow disabling a finisher boss, but don't know of any mods that change the ante for winning...

faint pine
faint pine
#

looks like it might be working. Lost this game early on and it crashed too (pretty sure totally unrelated to your mod) so I didn't get to see if the description was actually right

blissful totem
#

I tested it in debug mode and it worked! (Too bad I didn't get proof...)

faint pine
#

Ayy nice that it works though

blissful totem
#

Should I make House Sparrow work on every showdown, (not just ones that show up on multiples of final antes)? If so, how would I detect it for JokerDisplay compatibility?

faint pine
#

Is about the JokerDisplay thing, but is say every final showdown makes sense

blissful totem
blissful totem
#

Hummingbird nerd still in development, not sure how to calculate the score at the end of a hand

faint pine
blissful totem
#

Ended up calculating the score check at the start of the next hand, using the joker.update() function

somber bronze
#

context.end_of_round happens twice, try using context.joker_main instead

blissful totem
blissful totem
#

Just a quick notice, I also added card indicators for when the "Crow Person" joker marks and returns sacred geometry cards

somber bronze
swift crest
#

Love these cards! I'm in a run now and noticed that crimsonotype from familiar activate twice every card scoring when paired with crow person. So I'm getting x2 from crow and then crimson jumps twice for 2x + 2x. Haven't seen crimson copy any other joker double like this

pastel fractal
#

manzai birds YES

blissful totem
somber bronze
#

Check if BP does it too

blissful totem
#

I see, the blueprints don't jiggle/activate, but the crow-person joker does so instead.

somber bronze
#

If you want to differentiate the bp card to the joker card you can use card_eval_status_text(context.blueprint_card or card...

blissful totem
#

This somehow also happens with Fibonacci and Blueprint, with just Bird Jokers and other Near-Vanilla mods.

swift crest
#

#1267615217613803580 message
And another where one card, DNA, behaves as normal but mime get's "tripled" instead of doubled, both vanilla cards

#

So the situations Ive come across have all been with either of the copying jokers from familiar, and in the case with DNA where everything acted out as expected the familiar joker still jumps/activates twice, and then DNA activates once by itself

glacial wren
#

more birds please balatroheart

blissful totem
#

Thought of an idea:
Lord God bird (legendary): retriggers all scoring cards twice, 1 in 2 chance for all scoring cards to give x2 mult

fervent flume
#

woah when did this changed? this is so much better

fervent flume
#

I mean the wording of the description

blissful totem
blissful totem
glacial wren
#

great combination

faint pine
#

most abused phoenix

blissful totem
# faint pine most abused phoenix

Should I make the phoenix have a sprite where some of its feathers have fallen off its body which displays when destroyed enough times?

blissful totem
# glacial wren great combination

"Zapobiega śmierci, jeśli zdobyte żetony stanowią co najmniej 80% wymaganych żetonów. W przypadku zniszczenia tworzy negatywną kopię siebie" -Phoenix's description, translated by Google into Polish

misty stirrup
#

when are the bits and bops birds becoming a joker

blissful totem
blissful totem
#

Well, I thought of an effect for both birds:
Wren: retriggers the first card used in scoring, also retrigger the last card used in scoring if 4 or more cards are used in scoring
Canary: the last card used in scoring gives +4 mult, if 4 or more cards score, the last card used in scoring instead gives +8 mult

blissful totem
#

Trying to put the effects into the mod.

blissful totem
#

Made a sprite for wren (from Bits and bops), still working out the kinks for JokerDisplay

fervent flume
#

Aww

#

Will you some day make these three geese into a joker?

#

It just hit me that you are the person to do this

blissful totem
#

Still making wren’s ability compatible with Joker Display (to keep it in line with the other jokers)

blissful totem
blissful totem
#

Chat, should I make this emoji from the emoji kitchen a joker in this mod?

glacial wren
#

It looks cute as hell

blissful totem
#

Have a lot on the suggestions and ideas list, currently working on the canary (from Bits and Bops)

analog crag
#

hawk when

#

(tuah)

blissful totem
#

Updated the 2x sprite

blissful totem
#

Also, wren is sitting on a windowsill, just like in Bits and Bops

blissful totem
#

I still want to work on this.

chilly socket
#

It's a good mod

ripe remnant
#

i wouldnt of downloaded this if manzai birds from rhythm heaven werent there

#

love your idea to add that

#

thanks for pleasing me, a RH fan

#

wait...

#

AND THAT BLACK BIRD FROM MONUMENT VALLEY!?

#

THANK YOU @blissful totem

blissful totem
#

You mean Monument Valley?

ripe remnant
#

yes

#

AND THANK YOU

blissful totem
blissful totem
weary dragon
#

Thank you for update.

#

Will there be more birds?

blissful totem
#

Considering it, surely

blissful totem
#

What to do to make 5 more jokers' effects and/or art?

blissful totem
blissful totem
#

Me when I make the 🐦🃏 emoji kitchen combination its own joker:

blissful totem
#

The original combination, for reference

blissful totem
#

It has come to my attention that some mods have compatibility issues with this mod. I'd like to figure out which mods are being weird with this mod.

blissful totem
blissful totem
#

What can I do to keep this mod somewhat relevant?

blissful totem
blissful totem
#

Thinking of making the crow from Jackbox games' Poll Mine a joker.

blissful totem
#

Poll crow: gains x0.25 mult when playing your [top three most]/[second, third, or fourth most]/[top five least] played hands. Gains -x0.25 mult otherwise

blissful totem
#

Also want to do joker fusions of Unlucky Crow, Lucky Swallow, and Hummingbird Nerd (the “gamblecore saga quoting birds”)…

#

Lucky Swallow and Unlucky Crow fusion quote: "We just won $3.4eINF!" "Let's go!" ("Thirty-four quadrillion billion zillion dollars" is replaced with "$3.4eINF")
Unlucky Crow and Hummingbird Nerd fusion quote: "Let's go gambling!" "Is that all you ever say!?"
Lucky Swallow and Hummingbird nerd fusion quote: "It's like I don't wanna gamble, ya know?" "Uh huh."

#

Quote from the fusion of all three "gamblecore saga quoting birds": "There's a lot of things that are worth gambling for..." "...and if you end up losing every now and then..." "...you can always bounce back!"

blissful totem
#

Dead chat for the mod

chilly socket
#

I really like the mod, there just isn't much to talk about rn

blissful totem
#

I just pushed an update to the GitHub repository fixing the "sacred geometry" and "returned sacred geometry" cards not displaying icons.

blissful totem
#

Since April Fool's day is coming up, I want to let you know there is a little "feature" when I was developing the Phoenix's "gain a negative copy of itself when destroyed" mechanic that also triggered when selling the Phoenix...

blissful totem
blissful totem
#

I don't know if I mentioned this, but an eternal Phoenix joker automatically gives itself the negative edition at the end of the round when its obtained.

blissful totem
#

I feel like I should get back to work on this sometime.