#💻・modding-dev

1 messages · Page 470 of 1

granite nymph
#

no the message works

#

the chips on the left would apply all the extra chips, then when the normal chip amount from the card scores, it gets rid of all the extra chips

red flower
graceful vapor
#

ok

#

But samplejimbos looks nothing like thta

red flower
#

samplejimbos bad

graceful vapor
#

._.

#

replace it?

graceful vapor
#

I'll just replace it

granite nymph
#

thank you

chrome widget
#

phew

#

Back on the grind

red flower
#

💪

modern kindle
#

winter my goat

chrome widget
#

I just finished a hotfix update for Cardsauce

#

So back to my own mod

modern kindle
#

do a hotfix update for my mod now

chrome widget
#

uhhhhh sure

red flower
#

all your fixes are hot dilly

modern kindle
graceful vapor
#

The texture isn't working

#

I'll add a description later

#

What's the coordinates for these

crisp coral
#

0 0 and 1 0 respectively

graceful vapor
#

Oh of course it started at zero

#

I'm scoopy

#

thanks

pale rampart
#

whats wrong with this, i dont understand (geniuenly)

red flower
#

dunno why people are afraid to screenshot the entire screen lol

pale rampart
red flower
#

code

pale rampart
#

its supossed to be a joker that gets 5 mult from every rank 2 card played

#

this may be pretty obvious for someone but im pretty new at this

red flower
#

ok yeah,

  1. those commas are wrong
  2. message = "Yeah!" won't do anything outside a return block
chrome widget
#

The "unexpected symbol" error is because of the commas, since they're not in a table declaration

red flower
#

i do recommend getting the vscode lua extension and reading a bit more on lua basics

granite nymph
#

does anyone know the prefix for boosters

#

(like how jokers are j and consumables are c)

red flower
#

p_ iirc

pale rampart
modern kindle
#

god fnf modding...

unborn bay
#

psych lua FUCKING sucks

chrome widget
unborn bay
#

its not good

red flower
chrome widget
#

Also it took me until literally today to learn that showman's key isn't j_showman

unborn bay
#

fnf engine with lua api

red flower
#

ring_master

modern kindle
red flower
#

i like heirophant

pale rampart
graceful vapor
#

The joker doesn't work

red flower
#

hi something

pale rampart
graceful vapor
red flower
#

rather than a video I'd like to see the code

graceful vapor
#

Do I need an entire script for the joker to trigger?

red flower
#

you need a calculate function

#

also it's specifically extra not extras

graceful vapor
red flower
#

no, look at how jimbo does it in the link i sent earlier

#

should be the first joker

fallow breach
#

anyone know a way to make a joker give -1 joker slots? or better yet, require 2 open joker slots?

graceful vapor
#

Nevermind I think I figured it out by looking at triboulet's code

red flower
#

and probably something else for packs im not remembering rn

fallow breach
#

do buffoon packs handle it differently?

red flower
#

yes, they disable the button instead

#

G.FUNCS.can_select_card

graceful vapor
#

Is still not work

#

I also tried self.ability.extra

red flower
#

you can't score in context.before but also you're missing an end

graceful vapor
#

then what DO I use for score

red flower
#

well i told you what to look to check

#

but it's context.joker_main

errant arrow
#

what is the recommended program for coding in lua? i have vs core and sublime text atm

red flower
#

vscode is good

#

you should install the lua extension

errant arrow
#

im assuming the one from sumneko

red flower
#

yes

leaden hollow
#

anyone know which context I would use if I want the joker to trigger on the final hand of the round? i can't seem to find the right one lol

fallow breach
frigid cargo
#

How should i make the dimensions for a joker in the code that is smaller than regular (similar to wee joker), i know how to change its pixel size(kinda) but idk how to decide what i multiply 71 and 95 with? Its dimensions is 21:26

errant arrow
#

is there something im doing wrong then? because doing SMODS.Atlas gives me an error

red flower
#

is it an error or a warning

lyric maple
#

i'm making a cursed op meme joker and i just want to ask
is Emult supported by talisman or do i have to code it in myself

red flower
#

it is supported

errant arrow
#

warning, not error mb

errant arrow
#

is that fine or?

lyric maple
#

and i'm assuming tetration is like eemult?

lyric maple
#

aight

red flower
leaden hollow
daring fern
#

fallow breach
hasty mist
#

people seem to be getting this error in my mod, im not getting the error myself, and it sems to happen whether i wrap it in to_big or not, what could possibly be going wrong here?

daring fern
red flower
serene granite
#

heyy does anyone have any examples of how i can have my joker have that little section that says (active) when the criteria is met ?

graceful vapor
#

It crashes with unexpected symbol near end

red flower
red flower
graceful vapor
#

oh
right

#

It's been a while since I've done anything code related tbh lol

fallow breach
#

here's a chunk that shows how the message is formed

red flower
#

by section i was guessing in the description not in a message but idk

fallow breach
#

oh you're right probably

#

is there a vanilla joker that does that?

red flower
#

luchador

errant arrow
#

the first error of many...
attached .txt is the error, all im trying to do right now is add a placeholder joker just so i know it works

red flower
#

loyalty too

#

they do it differently

serene granite
# fallow breach

yeah because i want to make a joker that gives 2 xmult ion first hand played

errant arrow
#

i see my error

fallow breach
#

like dna and trading card

serene granite
#

ohh i didnt think of that, thats a good point

fallow breach
#

but otherwise you'd have to look at loyalty card's code

red flower
#

anyway all of those are in vanillaremade

graceful vapor
#

Isn't everything closed up?

serene granite
fallow breach
#

you would go to the jokers.lua in src (if we're talking about vanillaremade)

red flower
serene granite
#

thanks everyone ! im making good progress on my mod !

graceful vapor
#

yaaaas it works

#

thanks

leaden hollow
#

how come I keep getting this crash?

fallow breach
#

you set the xmult value in config right?

#

config = {extra = { Xmult = number } },

leaden hollow
#

yea

vast bough
#

for talisman compatibility with jokerforge, will regular smods code play nice with talisman-proof code or do i need to basically generate two types of each code block depending on if talisman is wanted as a dependency or not?

daring fern
solemn shuttle
#

say is there a way to make it so a joker can't be sold but CAN be destroyed

or a way for it to tell in regards to remove_from_deck HOW it is being removed so i could do a workaround

solemn shuttle
#

-# how so if i may ask

daring fern
vast bough
fallow breach
daring fern
vast bough
fallow breach
#

on an unrelated note

#

this is me just trying stuff out but how i would check for the number of cards in a hand that share a rank

daring fern
solemn shuttle
fallow breach
#

is that for all cards that share a rank?

daring fern
daring fern
fallow breach
#

enlighten me pls

daring fern
fallow breach
#

so then for this, say i want to do an effect on the pair of a full house

#

the game would have to keep track of there being only two cards of the same rank

#

man my brain hurts thinking about this

errant arrow
bitter portal
#

learning to mod i think im winning

rapid stag
#

dorito cards cirPoint

red flower
fallow breach
red flower
#

the easiest would be looping through context.scoring_hand and counting the ranks like something said and then destroying the one that has a count of 2

proud vine
orchid dawn
#

this is the code for my mod blind, the ideia is to invert hands ands discards, but for some reason, when i enter the blind, it resets hand and discards to default

SMODS.Blind {
    key = 'inversion',
    atlas = 'losted_blinds',
    pos = LOSTEDMOD.funcs.coordinate(3),
    discovered = true,
    unlocked = true,
    mult = 2,
    dollars = 5,
    boss = { min = 1 },
    boss_colour = HEX('FFD700'),
    set_blind = function(self, card, from_debuff)
        local hands = G.GAME.round_resets.hands_left,
        local discards = G.GAME.round_resets.discards_left,

        G.GAME.rounds.hands_left = discards,
        G.GAME.rounds.discards_left = hands
    end
}
#

does anyone know why?

manic rune
#

might want to use ease_hands and ease_discards instead?

daring fern
manic rune
#

oh yeah

#

WHY IS IT SO INCONSISTENT ISTG

pale rampart
#

gn chat

manic rune
#

gn pixel

bitter portal
#

what have i done... 😭

keen atlas
#

nan of hearts

ocean goblet
#

i kinda fw NaN ngl could be like

#

functions as a shortcut for straights but otherwise lacks a rank

orchid dawn
#

idk sorry

bitter portal
orchid dawn
#

G.GAME.round_resets.ease_hands ?

ocean goblet
orchid dawn
daring fern
orchid dawn
orchid dawn
#

oh ok

#

ty

#

idk

#

is there any documentation about it or that include it on steammoded?

keen atlas
orchid dawn
orchid dawn
daring fern
orchid dawn
keen atlas
# orchid dawn how do i use it?

ease_hands_played adds/reduces number of hands
ease_hands_played(1) adds hand by 1
ease_hands_played(-1) reduces hand by 1

final jewel
#

What am I missing ? The game crash when I'm launching it

daring fern
#

text should be a table.

final jewel
#

omg it was only that. I am sooooo dumb

rapid stag
#

bump

serene granite
#

heyy im back again to ask, this question is a little weird because idk if balatro has a way to detect this but is there a way to use the amount of cards that arent scored in a joker

i want to make a joker that gives +1 xmult for every card that is played but not scored

daring fern
serene granite
#

woahh ur so fast omg thanks

final jewel
#

why did it write ERROR and how can I be able to pull card ?

daring fern
bitter portal
#

oh the temptation...

tall wharf
gilded bramble
final jewel
sturdy compass
daring fern
final jewel
thorn furnace
#

Is there a function to get the last played poker hand or is that something I'd have to add manually

thorn furnace
lament agate
#

some syntax error around here, do you guys spot it

#

i cant find it

daring fern
orchid dawn
#

my code is like this, but for some reason it's not even being recognized by the mod

local blindInfo = {
    key = 'inversion',
    pos = { x = 0, y = 19 },
    atlas = 'losted_blinds',
    discovered = true,
    unlocked = true,
    mult = 2,
    dollars = 5,
    boss = { min = 1 },
    boss_colour = HEX('FFD700'),
    config = {},
    set_blind = function(self, card, from_debuff)
        ease_hands_played((-G.GAME.current_round.hands_left)+G.GAME.current_round.discards_left),
        ease_discards((-G.GAME.current_round.discards_left)+G.GAME.current_round.hands_left), 
    end
    defeat = function(self, card, from_debuff)
        ease_hands_played((+G.GAME.current_round.hands_left)-G.GAME.current_round.discards_left),
        ease_discards((+G.GAME.current_round.discards_left)-G.GAME.current_round.hands_left), 
    end
}

return blindInfo
lament agate
#

the second one or the third one

daring fern
orchid dawn
# daring fern You need to use `SMODS.Blind`

oh, no, im making this mod with my friend, he doing it in a way where each blind is a separate file inside the blinds folder, which is inside the items folder, and then he loads each one individually, i already made sure to put this blind in the right place, in fact, if i remove the code inside its function, it gets detected

daring fern
orchid dawn
daring fern
orchid dawn
daring fern
orchid dawn
#

where

#

in the end ?

daring fern
orchid dawn
#

oh ok, bruh

#

ty

#

bruh 2
there sill some error, uhh

pastel torrent
#

method to detect if joker as an effect?
exemple: if this joker is negative then...

pastel torrent
orchid dawn
#

i use this method to detect enhancements in the cards

bitter portal
#

Hello i'm... very new to modding, How do i make my custom seal do something when discarded?

orchid dawn
bitter portal
pastel torrent
#

I should go to sleep tbh

sturdy compass
#

Wow there are a lotta people in here I have never seen before

#

welcome

orchid dawn
# pastel torrent mind providing code block to check if I did it right?
loc_vars = function(self)
        return { vars = {} }
    end,

    modify_hand = function(self, cards, poker_hands, text, mult, hand_chips)
        local changed = false

        for _, card in ipairs(cards) do
            local enhancements = SMODS.get_enhancements(card)
            if enhancements and next(enhancements) and not card.debuff then
                card:set_ability('c_base', nil, true)
                G.E_MANAGER:add_event(Event({
                    func = function()
                        card:juice_up()
                        return true
                    end
                }))
                changed = true
            end
        end

        if changed then
            G.GAME.blind_message = {
                message = localize('k_losted_enhancements_removed'),
                colour = G.C.RED
            }
        end

        return mult, hand_chips, false
    end,

this is my blind

orchid dawn
#

like the joker vampire

orchid dawn
sturdy compass
sturdy compass
#

VanillaRemade is a fantastic resource and I wish I had it while I was learning (hence why I contributed to it lol)

orchid dawn
#

for some reason it's not even being recognized by the mod

local blindInfo = {
    key = 'inversion',
    pos = { x = 0, y = 19 },
    atlas = 'losted_blinds',
    discovered = true,
    unlocked = true,
    mult = 2,
    dollars = 5,
    boss = { min = 1 },
    boss_colour = HEX('FFD700'),
    config = {},
    set_blind = function(self, card, from_debuff)
        ease_hands_played((-G.GAME.current_round.hands_left)+G.GAME.current_round.discards_left),
        ease_discards((-G.GAME.current_round.discards_left)+G.GAME.current_round.hands_left), 
    end,
    defeat = function(self, card, from_debuff)
        ease_hands_played((+G.GAME.current_round.hands_left)-G.GAME.current_round.discards_left),
        ease_discards((+G.GAME.current_round.discards_left)-G.GAME.current_round.hands_left), 
    end,
}

return blindInfo

anyone do have any ideia what it could be ?

sturdy compass
orchid dawn
sturdy compass
#

Why are you/is your friend not just using SMODS.load_file() instead?

#

It's a far simpler method of loading external files

orchid dawn
sturdy compass
#

It looks to me like he copied cryptid's loading method which breaks a lot of standards and should very rarely be used as a reference mod. Here's what it looks like using Steamodded's loading method

#

I cannot recommend switching to that more to guarantee your objects are loading properly

sturdy compass
#

Most of that is just debug messages too so it could be cut down by a lot

sturdy compass
#

you or your friend

#

whichever

bitter portal
#

ooough is there an easy way to test my modded seal without having to wait until it shows up

sturdy compass
#

Get DebugPlus

bitter portal
orchid dawn
#

ty for advice

#

btw, sorry for mistakes, i dont speak english very well

#

but, @sturdy compass , you can help me with my blind ?

#

its not the loading method, since the other 3 blinds are fine, and if i remove the function from inside this blind, its load normally

sturdy compass
#

With how you have it set up, I cannot help you get it recognized, hence why I gave you the suggestion of changing your loading method

orchid dawn
#

at least not this error

bitter portal
#

currently trying to figure out how to set a seal on a card with debug plus 😭

sturdy compass
#

ctrl + e

#

while hovering over the card

bitter portal
#

ooh

bitter portal
#

thank you!

#

ok now to make this actually do what i wanted it to

sturdy compass
#

If you need more keybind tips just hold tab to open the menu. It has a bunch of buttons as well as keybind instructions

orchid dawn
sturdy compass
#

I've told you, I cannot help you with how you're attempting to load it and I doubt many others can as well

thorn furnace
#

Just wondering about a thing
Like if I do like
evaluate_poker_hand(hand)["Straight"][1] for example
I think it returns a hand of cards
How do I return the scored value of one of those cards

sturdy compass
#

I'm telling you it is, trust me

orchid dawn
#

my others blinds are fine

orchid dawn
sturdy compass
#

Where do the blinds get loaded in the code

orchid dawn
#

its a syntax error probably

#

or other error in my code

sturdy compass
#

This is a very unorthodox mod structure and I have no idea what you are showing me

#

Great if it works for you, but I cannot help

orchid dawn
#

probably is error in my code

#

but ok

flat mist
#

SMODS.destroy_cards(G.hand.highlighted)
So instead of destroying selected cards how to modify it to destry cards of a specific rank

bitter portal
#

How do i get the index of the card discarded when im using context.discard?

#

nvm i think i got it

#

nvm i dont think this is working...

#

nvm it DOES work

#

lets gooo :D

thorn furnace
#

Is there a way to get the amount of cards in a specific hand

serene granite
#

is m_mult the thing used for mult cards?

bitter portal
#

wtf why do i have a mystery card im not even on a boss blind

serene granite
#

can someone help me out, im trying to make a joker thats almost exactly like certificate but instead of a random seal its just a random card that always has the mult enhancement, is that possible? like what would it look like?

hard flume
#

Can someone explain to me SMODS.DrawStep? Like. When/how can it be called?

bitter portal
#

Is there anything missing in my seal implementation that might cause issues?

flat mist
daring fern
thorn furnace
vast night
#

Another desperate bump

orchid dawn
#

@daring fern Is there any method to check if classes or suits are equal?
and, is there any method to check if retrigger?

vast night
daring fern
orchid dawn
#

isolated

#

something ranks or somenthing suits

flat mist
#

SMODS.destroy_cards(G.hand.highlighted)
So instead of destroying selected cards how to modify it to destry cards of a specific rank

orchid dawn
#

example, i play the 5 kings, but suits dont equals
i can check this ?

orchid dawn
#

Is it possible to do that but with suits?

daring fern
# orchid dawn how ?
local pass = true
for k, v in pairs(context.full_hand) do
    if not v:is_suit(context.full_hand[1].base.suit) then
        pass = false
        break
    end
end
if pass then
    -- do things
end
```?
flat mist
# daring fern Yes.

SMODS.destroy_cards(G.hand.highlighted)
So instead of destroying selected cards how to modify it to destry cards of a specific rank

orchid dawn
#

to check if all cards have the same rank, do i just do the same thing, but replace iv_suits with iv_ranks? or is there another method?

daring fern
orchid dawn
#

i want check if all cards have the same rank and same suits

#

like a flush five

#

but, flush four, flush three, flush pair, etc

daring fern
daring fern
orchid dawn
#

oh ok

#

really ty much

#

Is there any method to check if a card has been triggered before?

#

like, i play two queens of hearts, and on the second queen of hearts, an event occurs

orchid dawn
orchid dawn
#

any way to check if a card has already been scored

orchid dawn
#

@daring fern is it there ?

orchid dawn
#

ok

#

ty

bitter portal
#

is it just me or do my custom sprites have weird aliasing?

serene granite
bitter portal
#

this is supposed to make a poker hand for if you run a 6, then a 9, with a 4, then a 2, then a zero after. but it seems to just show up whenever i play 5 cards at all, what did i do wrong?

(please dont question the hand itself................)

vast night
thorn furnace
vast night
#

why 69 and 420

bitter portal
bitter portal
thorn furnace
bitter portal
#

oh.

thorn furnace
# thorn furnace

apparently #hand runs into UB and just returns 0 for some reason
so I'm hoping there's an alternative

bitter portal
daring fern
hard flume
#

How would I go about checking if a certain modded sticker is currently on a card

daring fern
serene granite
vast night
thorn furnace
#

if you can make the last hand you played with your current cards, it plays it

#

this gets all such possible hands of that type

thorn furnace
#

it's a button

flat mist
#

Is there anyway to print outputs in lua like in python

thorn furnace
vast night
#

i guess you need to check a variabke in G.hand or smtn

#

there must be a variable for thid

thorn furnace
bitter portal
#

Is there documentation on what functions and vars exist in a card instance?

vast night
flat mist
bitter portal
#

i might as well ask then

#

How do i get the suit of a card? And does it come as a number or string?

vast night
bitter portal
#

i'm crashing cause im indexing nil here when selecting a 5th card while playing

#

this code is inside my custom poker hand

thorn furnace
thorn furnace
thorn furnace
bitter portal
vast night
thorn furnace
#

a high card only needs to be 1 card

vast night
#

hm,

#

lemme think rq

#

do you know what cards are im each hand

bitter portal
thorn furnace
#

because then I could just take the size of that array

vast night
#

oh

#

honestly

#

ive never used evaluate hand before

#

wait until N* comes online

thorn furnace
vast night
#

sry

flat mist
#

Is there anyway to print outputs in lua like in python

#

Dont ignore this time

bitter portal
#

How do i ensure that get_id() alyways returns the right ID for my custom rank?

vast night
#

dont ignore me :)

bitter portal
flat mist
vast night
bitter portal
#

I can do that? How?

vast night
#

nvm

#

gtg

bitter portal
#

😭

glossy sky
#

I'm trying to patch the set_cost() function, but I'm kinda stuck as when the function is called, anything I added seems to just get ignored, like even when I changed it to simply be an unconditional self.sell_cost = 100 to globally change all Jokers to 100 sell value to test, nothing seemed to happen. Does anyone know how to do this sorta thing correctly, because I'm lost on this one.

vast night
glossy sky
#

is there a tutorial for doing that?

bitter portal
#

oh cool im so very glad suit_map doesnt work with SMODS.Atlas but works with SMODS.Sprite:new WHY

errant arrow
#

how would i get a joker to detect when a blind/round is complete? i want to make a plant based mod

bitter portal
bitter portal
maiden phoenix
#

If its here and it still doesnt work, theres a lil chance the function is overriden by SMODS or another mod

#

You'll have to use an hook if so

glossy sky
bitter portal
maiden phoenix
maiden phoenix
thorn furnace
maiden phoenix
#

Didnt know this acronym ty

thorn furnace
#

I usually never use it outside of like segfaults in C

maiden phoenix
#

Try putting some prints mayhaps to see where it goes wrong?

maiden phoenix
errant arrow
#

for more than one joker, in my code would i put key = 'joker3' ?

thorn furnace
errant arrow
maiden phoenix
maiden phoenix
thorn furnace
#

The weird thing right
Uh lemme send

thorn furnace
# thorn furnace The weird thing right Uh lemme send
local function get_all_hands()
    no_hand_size_limit = evaluate_poker_hand(G.hand.cards)[G.GAME.last_hand_played]
    hand_limit_accounted = {}

    if no_hand_size_limit then
        for _, hand in ipairs(no_hand_size_limit) do
            if #hand <= G.hand.config.highlighted_limit then -- Apparently #hand doesn't work and just returns zero? Replace with something equivalent
                hand_limit_accounted[#hand_limit_accounted + 1] = hand
            end
        end
    end
    
    return hand_limit_accounted
end

G.FUNCS.play_last_hand = function(e)
    G.hand.highlighted = get_all_hands()[1]
    G.FUNCS.play_cards_from_highlighted(e)
end

play_last_hand works perfectly fine

#

as long as get_all_hands() works

#

that is to say if I get rid of the hand size requirement and just return no_hand_size_limit, it's fine and works as intended
so you'd think you just take the size of that to get the card count but no

maiden phoenix
#

I think you're getting the wrong right results

#

Ill do some experiments w this when Im on pc if you dont figure this out

thorn furnace
#

oki

bitter portal
#

How do i set a rank as a face card rank?

#

oh nvm im stupid

#

its litterally right there in the docs

errant arrow
#

can someone explain how i would set up code for the round counting on the invis joker, im staring at the code and it's not clicking

maiden phoenix
#

Look at VanillaRemade's version of it instead

errant arrow
#

i am, and it looks like hieroglyphics to my noob coder brain

maiden phoenix
#

Can you send a screenshot of the whole invis VR code?

errant arrow
#

it was too large to fit in one ss

#

im honestly impressed with the balatro dev(s) and any modders that can understand this. my brain hurts looking at it

thorn furnace
thorn furnace
maiden phoenix
# errant arrow it was too large to fit in one ss

Ill explain the essential

  1. In config you setup your values with the count (invis_rounds) and the total (total_rounds)

  2. In calculate, when whatever condition is met (here context.end_of_round), you increment your count then check if your count is equal to the total

#

The rest of the block in end of round is to make the card juice up forever or show a message that goes "1/2"

bitter portal
#

behold.... Peasant Rank

errant arrow
thorn furnace
glossy sky
#

Alright so I tried hooking the set_cost function, but it seems that it still doesnt actually do anything ingame. The status text also doesnt appear. anyone know what I'm doing wrong?

errant arrow
maiden phoenix
#

You save the func in a local
Type the function you want to hook in
do stuff it in and call the saved local func

hard flume
#

Hiii. Does anyone know how to apply a sticker via a Joker effect?

maiden phoenix
#

or set_eternal or set_rental

hard flume
#

Okay but. What if its a modded sticker

maiden phoenix
#

Oh SMODS has a func for that, Card:add_sticker(sticker, bypass_check)

#

I suppose sticker goes modprefix_stickerkey

vast night
#

another one

icy moat
glossy sky
thorn furnace
#

How would I go about creating a new card section

bitter portal
#

high contrast peasant cards

thorn furnace
maiden phoenix
#

You have to make your own cardarea

#

How to do that tho I don't know

thorn furnace
#

o

maiden phoenix
#

JoyousSpring has a custom cardarea if you need ref too idk if it's a little too extreme knowing N's code

vast night
errant arrow
#

well thats goofy, where my sprite

vast night
#

also

maiden phoenix
vast night
#

add a buffer pixel around your sprite to prevent these whacky lines

errant arrow
#

okay

vast night
#

also bumping this since i cant find anything anywhere

maiden phoenix
bitter portal
#

why is this marked as my mod?

maiden phoenix
bitter portal
#

Nope

maiden phoenix
#

It only shows on blue seal cards or stone cards?

vast night
thorn furnace
bitter portal
#

Funny that can happen

vast night
maiden phoenix
#

What if on your card you did card:set_ability("j_triboulet") ?

errant arrow
#

i did the pixel of transparent and fixed the offset, but it's still the line

vast night
maiden phoenix
#

So it's bleeding trough

vast night
maiden phoenix
#

But you don't allow it in any pool and hide it from collection

vast night
maiden phoenix
#

I'm having an hard time trying to visualize the idea 😅 What is it exactly you're trying to do? Images would help

vast night
vast night
maiden phoenix
#

Oooh so if I understand correctly now, you want Triboulet as one of the option?

vast night
#

so what i want is to remove the name and description from the ui and put it into the info box of the card

vast night
#

i just want to modify the text description box of a Card instance

#

thsts all

maiden phoenix
#

And it has to not be permanent?

vast night
#

since the card disappears once the ui is closed

#

its purely for asthetics

maiden phoenix
#

What if you were able to detect when the card is in your fancy menu, and you made it so that if this card is in the menu, it loads a different descriptions than it usually should?

bitter portal
#

My mod is crashing my game here, it has to do with my custom poker hands but I dont know why:


SMODS.PokerHandPart {
    key = "funny",
    func = function(hand)
        if #hand < 5 then return {} end

        local required_ids = {6, 9, 4, 2, 15}

        local found_ids = {}
        for _, card in ipairs(hand) do
            found_ids[card:get_id()] = card
        end

        for _, id in ipairs(required_ids) do
            if not found_ids[id] then
                return {}
            end
        end

        local positions = {}
        for _, global_card in ipairs(G.hand.cards) do
            local gid = global_card:get_id()
            if found_ids[gid] then
                positions[#positions + 1] = { id = gid, index = #positions + 1 }
            end
        end

        local last_index = -1
        for _, required_id in ipairs(required_ids) do
            for i, gcard in ipairs(G.hand.cards) do
                if gcard:get_id() == required_id then
                    if i > last_index then
                        last_index = i
                        break
                    else
                        return {}
                    end
                end
            end
        end

        local scored_cards = {}
        for _, id in ipairs(required_ids) do
            table.insert(scored_cards, found_ids[id])
        end

        return { scored_cards }
    end,
}

SMODS.PokerHandPart {
    key = "roundabout",
    func = function(hand)
        if #hand < 5 then return {} end

        local scored_cards = {}
        local suits_found = {}
        local count = 0
        local suits = { "Hearts", "Clubs", "Diamonds", "Spades", "cfawm_Triangles" }

        for _, card in ipairs(hand) do
            for _, suit in ipairs(suits) do
                if card:is_suit(suit) and not suits_found[suit] then
                    suits_found[suit] = card
                    count = count + 1
                end
            end
        end

        if count == 5 then
            for _, card in pairs(suits_found) do
                table.insert(scored_cards, card)
            end
            return { scored_cards }
        end

        return {}
    end,
}
vast night
maiden phoenix
#

Again I don't see what's the issue with make a new Joker just for that purpose

vast night
#

OOOOOOH

small tartan
#

Hi guys, how to make that a custom deck spawns without ranks 8 thru 10?

vast night
#

You mean making a new joker with dynamic text/loc_vars and modifying THEM?

vast night
maiden phoenix
small tartan
maiden phoenix
#

Like

SMODS.Joker {
  key = "triboulet2",
...
#

idk

vast night
#

how would i be able to modify the loc vars tho

#

like directly

errant arrow
#

provided both my placeholder sprite sheet and code for the placeholder seed, im still getting the line

vast night
maiden phoenix
maiden phoenix
maiden phoenix
errant arrow
#

-# oh

#

-# i see

vast night
maiden phoenix
vast night
#

im gonna try that once i get to my pc

errant arrow
#

still getting the line

maiden phoenix
maiden phoenix
bitter portal
maiden phoenix
#

Ooh

errant arrow
#

both cards are 71x95
atlas = 'Jokers'
pos = {x = 1, y = 0}

#

{x = 0, y = 0} is for the rose, which works flawlessly*
-# slightly tilted to the left, but its fine in game

maiden phoenix
#

This is the size for the area, but usually jokers cards are 69x93

errant arrow
#

so just cut a bit off the white and try again?

maiden phoenix
#

Yes

#

First pic is the size of the card, second is the area

#

You can see the values at the bottom

maiden phoenix
#

One of your values called in an ipairs is nil but which one idk, try doing some debugging by putting some prints

hard flume
#

Hiii

#

I got the super mushroom power-up working for my mod

errant arrow
#

got rid of the line, it just doesn't exist anymore.
game detects that there is a joker and i can hover over where it would be, there's just... nothing

#

kinda funny ngl
-# featuring tilted rose

maiden phoenix
#

Can you show the pos of your second joker?

errant arrow
#

here's the code block if i missed anything else,
pos value is above config

#

i looked inside other .lua s in other mods, thats how i saw it

maiden phoenix
#

Yea no it should be correct

#

Does both your jokers use the same atlas?

errant arrow
#

yeah, both are set to 'Jokers'

maiden phoenix
#

Can you show both your x1 and x2 spritesheet?

errant arrow
maiden phoenix
#

And both have the same file name?

errant arrow
#

yeah

#

both are Jokers.png

maiden phoenix
#

Does your two jokers have the same key?

errant arrow
#

no, i have the placeholder rose as 'rose' and the placeholder seed as it's name without the space

#

-# though since im not using cryptid and dont have the seed card i coulda just put seed...

maiden phoenix
#

Can you DM request me with a zip of the mod, I'm clueless as to what the issue is rn

#

Ok the issue was the x wasn't equal to 1 unlike the one shown in the screenshot for some reasons 😅

bitter portal
# bitter portal My mod is crashing my game here, it has to do with my custom poker hands but I d...

Turns out this crash is related to my 0 rank somehow??? It's still crashing...

SMODS.Rank {
    key = '0',
    card_key = '0',
    shorthand = '0',
    nominal = 1,
    lc_atlas = 'cfawm_0_rank_cards',
    hc_atlas = 'cfawm_0_rank_hc_cards',
    next = {
        '2',
        'A'
    },
    pos = { x = 0 },
    loc_txt = {
        ['en-us'] = {
            name = '0',
            text = {
                "{C:chips}+#1#{} Chips",
            }
        },
    },
    suit_map = { Hearts = 0, Clubs = 1, Diamonds = 2, Spades = 3, cfawm_Triangles = 4 },
}
maiden phoenix
#

Does your hand work if you don't use this rank?

molten musk
#

code removes seals and gains Xmult, but for some reason when it removes seals thier effects trigger?

maiden phoenix
#

Try removing the seals in context.before

molten musk
#

so change context.joker main to context.before

maiden phoenix
#

No cuz you'll also need context.joker_main to give out the xmult

#

Btw you should return xmult not mult

molten musk
#

deleted x by mistake it was xmult

#

stoped working at all

#

not removing seals and not gaining xmult

maiden phoenix
#

joker_main and before doesn't exists at the same time, they should be at the same level 😭

molten musk
#

oh

maiden phoenix
#
if context.before ...
end

if context.joker_main ...
end
molten musk
#

new stuff learned

bitter portal
#

It happens when I select 5 cards and one of those 5 cards is a zero rank

molten musk
#

so it just doest do xmult now

maiden phoenix
#

Btw G.playing_cards is all of your cards

#

Also I think some end are written improperly

molten musk
maiden phoenix
#

Add a end before context.joker_main line and remove one of the end at the same level of the last one

maiden phoenix
#

Otherwise I got 0 clue I never made a rank sorry

molten musk
bitter portal
#

well guess aces cant be used with zeroes for straights

#

nvm

#

it didnt

maiden phoenix
maiden phoenix
#

context.scoring_hand for the first and context.full_hand for second

maiden phoenix
bitter portal
# maiden phoenix Do you get a different crash? Also show your rank code
SMODS.Rank {
    key = '0',
    card_key = '0',
    shorthand = '0',
    nominal = 1,
    face_nominal = 0.5,
    lc_atlas = 'cfawm_0_rank_cards',
    hc_atlas = 'cfawm_0_rank_hc_cards',
    pos = { x = 0 },
    loc_txt = {
        ['en-us'] = {
            name = '0',
            text = {
                "{C:chips}+#1#{} Chips",
            }
        },
    },
    suit_map = { Hearts = 0, Clubs = 1, Diamonds = 2, Spades = 3, cfawm_Triangles = 4 },
}
#

The crash was the same exact one

#

(i removed next here)

maiden phoenix
#

Why do you have a face_nominal btw

bitter portal
#

sorry, i just added that

#

removing...

#

Wait

maiden phoenix
#

face_nominal is usually used for face cards 😅

bitter portal
#

Now that i've removed next

#

im getting a new crash

maiden phoenix
#

Seems to be an issue with whatever is Roundabout

bitter portal
#

Ah, seems now my custom hands are finally causing problems.........

#
SMODS.PokerHandPart {
    key = "roundabout",
    func = function(hand)
        if #hand < 5 then return {} end

        local scored_cards = {}
        local suits_found = {}
        local count = 0
        local suits = { "Hearts", "Clubs", "Diamonds", "Spades", "cfawm_Triangles" }

        for _, card in ipairs(hand) do
            for _, suit in ipairs(suits) do
                if card:is_suit(suit) and not suits_found[suit] then
                    suits_found[suit] = card
                    count = count + 1
                end
            end
        end

        if count == 5 then
            for _, card in pairs(suits_found) do
                table.insert(scored_cards, card)
            end
            return { scored_cards }
        end

        return {}
    end,
}
maiden phoenix
#

Btw what was the next set to in your custom rank?

#

I just realized if you put Ace in next it has to be "Ace" not "A"

bitter portal
#

it's currently unset

#

noted

molten musk
#

it worked

#

thx

bitter portal
maiden phoenix
#

Does your poker hand have localization?

bitter portal
#

Yes

maiden phoenix
#

Like you made a PokerHandPart but have you made the PokerHand?

bitter portal
#

Yes

maiden phoenix
#

Ok

bitter portal
#
SMODS.PokerHand {
    key = "Roundabout",
    mult = 4,
    chips = 35,
    l_mult = 2,
    l_chips = 15,
    example = {
        { 'S_5', true },
        { 'cfawm_TRI_9', true },
        { 'D_8', true },
        { 'H_2', true },
        { 'C_7', true }
    },
    loc_txt = {
        ['en-us'] = {
            name = 'Roundabout',
            description = {
                'A card from each suit'
            },
        }
    },
    evaluate = function(parts, hand)
        return parts.cfawm_roundabout
    end,
}
maiden phoenix
#

Can you go into your lovely/dump folder, click on cardarea.lua and show what's at line 192?

bitter portal
#

arent I supposed to... not do that?

#

The line appears to be updating hand text for the current hand you are playing

maiden phoenix
#

Do you have a planet card for your hand?

#

Could be useful to test if it's the localization that's faulty

bitter portal
#

Guess I'll go make a planet card real quick then.

#

Wait which one of these is for planet cards?

maiden phoenix
#

consumable

#

You could also look at VanillaRemade planet cards

bitter portal
#

Looks like my game also crashes when i try to open run info so it seems translation related

maiden phoenix
#

Yea

dense wedge
#

how would I make a custom rarity?

lament agate
#

you also need planet cards for custom hand type?

maiden phoenix
#

It's not obligatory

#

Rn it's just to debug something

maiden phoenix
maiden phoenix
dense wedge
#

thank you bro

molten musk
#

whats the key for seals?

#

its _seal right?

bitter portal
#

does this need my mod prefix?

config = { hand_type = 'Roundabout' },

maiden phoenix
bitter portal
#

Yep... might be a translation issue

#

By the way, should i be doing my translations with loc_txt or use a seperate file?

maiden phoenix
#

If you want to add multiple translation, a localization folder should be best

bitter portal
#

Okay, how does the localization folder work?

maiden phoenix
bitter portal
#

what is the key of my poker hand object?

#

nvm

#

im dumb

#

4 am moment

molten musk
#

im trying to make a played seal change into another, but not working

maiden phoenix
#

You're trying to set a seal on G.play.cards

molten musk
maiden phoenix
#

replace _S by context.other_card

molten musk
#

be right back

thorn furnace
maiden phoenix
#

I think I can see the issue, when you remove something from the start at index 1, the object at index 2 goes to index 1, then you move to index 2 and remove the object that was at index 3.

Try doing your thing in reverse order to avoid this issue

thorn furnace
#

oh

#

I didn't think a foreach would work like that

bitter portal
#

Im sad additions doesnt show ranks, poker hands, or suits added

#

new error :D

#

also happened upon selecting 5 cards eligable for the "Roundabout" hand

#

not with 0 though

#
SMODS.PokerHandPart {
    key = "roundabout",
    func = function(hand)
        if #hand < 5 then return {} end

        local scored_cards = {}
        local suits_found = {}
        local unique_count = 0

        for _, card in ipairs(hand) do
            local suit = card:get_suit()
            if suit and not suits_found[suit] then
                suits_found[suit] = card
                unique_count = unique_count + 1
            end
        end

        if unique_count == #hand then
            for _, card in pairs(suits_found) do
                table.insert(scored_cards, card)
            end
            return { scored_cards }
        end

        return {}
    end,
}
#

somehow this line is getting nil

#

right

#

get suit isnt a thing

molten musk
#

im back

molten musk
zealous glen
thorn furnace
#

I'm used to it being a value and not a reference

bitter portal
#

I DONT CRASH ANYMORE 🎉

maiden phoenix
zealous glen
thorn furnace
#

Yes

rotund sable
#

is there a more "clean" way of getting the most played hand than

local hand_types = {
    "Flush House", 'Full House', 'Flush', 'Pair',
    "Straight", "High Card", "Three of a Kind", "Two Pair",
    "Flush Five", "Five of a Kind", "Four of a Kind", "Straight Flush"
}
local max_played = -1
for k,v in ipairs(hand_types) do
    if G.GAME.hands[v].played > max_played then
        max_played = G.GAME.hands[v].played
        hand_chosen = v
    end
end
SMODS.smart_level_up_hand(nil, hand_chosen, false)
maiden phoenix
# rotund sable is there a more "clean" way of getting the most played hand than ```lua local ha...

From paperback

function PB_UTIL.get_most_played_hands()
  local hands = {}

  for _, v in ipairs(G.P_CENTER_POOLS.Planet) do
    if v.config and v.config.hand_type then
      local hand = G.GAME.hands[v.config.hand_type]

      if hand and hand.visible then
        hands[#hands + 1] = {
          key = v.config.hand_type,
          hand = hand,
          planet_key = v.key
        }
      end
    end
  end

  table.sort(hands, function(a, b)
    if a.hand.played ~= b.hand.played then
      return a.hand.played > b.hand.played
    end

    -- Sort by base values if the played amount is equal
    return (a.hand.s_mult * a.hand.s_chips) > (b.hand.s_mult * b.hand.s_chips)
  end)

  return hands
end
flat mist
#

how to destroy card at end of the round of a specific rank using a joker

jagged zodiac
#

wowowow

#

oh, it should have an outline

flat mist
#

i have fugure out this much using calc_dollar_bonus = function(self, card) function to activate a command at end of the round but what would be that command

jagged zodiac
jagged zodiac
#

wait

#

ah gold cards don't do much useful

#

hmmm if it's open source, you could check what the Farmer of the Extra Credits mod does it

#

well, it gives money like gold cards do
it doesn't destroy anything

jagged zodiac
flat mist
#

SMODS.destroy_cards(G.hand.highlighted) i think by modifing this command i can do it

echo aurora
#

what rank are you trying to destroy?

flat mist
#

instead of selected card if i give it a rank it might work

jagged zodiac
#

trading card:

            return {
                dollars = card.ability.extra.dollars,
                remove = true
            }
flat mist
jagged zodiac
#

that is, within 'discard' context

flat mist
flat mist
jagged zodiac
#

does somebody know what these things on the backs of juggler and drunkard are??

#

||besides amogi||

molten musk
jagged zodiac
#

ahh

molten musk
#

as for drunkard i have no clue, maybe his sanity left him after he drank too much

jagged zodiac
#

ah

#

because I'm making the Junkie which gives +1 hand and should be similar to these two

molten musk
#

junkie as in food junkie or somethig else?

bitter portal
#

Hey, i noticed my brown seal is returning control and drawing cards too early (most noticeable when chaining them), how do i fix this?
(For context, the brown seal discards the card to the right when it is discarded)

molten musk
#

i finished all my jokers except for 2 and im struggling to get them going

#

i need help

#

first is this that makes a seal change into another

#

not working

long sun
#

UH!! OKAY SUDDENLY MY CODE WORKS NOW

#

note to self: that required putting the delays and draw card function in Events

daring fern
#

Also it's just "Red"

bitter portal
#

wtf is the full key of cards that have a vanillia suit but a modded rank?

tight hull
#

hi, if I have a sprite sheet in x2 is there an easy way to rescale it to x1?

bitter portal
tight hull
daring fern
tight hull
#

thnx

long sun
#

oh ya one more question ^^; why does Base work here, and why isn't it Enhanced instead?
SMODS.create_card { set = "Base", enhancement = "m_stone", area = G.discard }

#

what do Base and Enhanced mean?

molten musk
daring fern
molten musk
#

its just didnt change the seal

#

it stayed the same

long sun
#

rightright

#

when would i need to change it to Enhanced?

daring fern
long sun
#

cheers ^^ i'll check the source code too to make sure

#

oh ya you're right ^^ Base is if you don't want it to generate its own, and Enhanced is if you do

#

cheers!

molten musk
#

@daring fern

daring fern
tight hull
molten musk
molten musk
#

crashed

#

@daring fern

daring fern
molten musk
#

loc_ var = context.other_card?

daring fern
jagged zodiac
#

amazing art wow!!

tight hull
bitter portal
#

how do i get these ids?

#

for the example field in PokerHands

jagged zodiac
daring fern
jagged zodiac
#

now I have to figure out a good way to scale them up

#

for some reason

molten musk
#

ok it works

#

thx

#

now the last joker

bitter portal
#

Thank you!

tight hull
jagged zodiac
#

oh I figured it out ^>^

tawdry oriole
#

is there a way to implement exponential mult without the use of talisman?

jagged zodiac
#

yay Gay Jokers looks good now

tight hull
molten musk
#

so i wanted a joker that reads what seals are there in deck, stores them, chooses one of them randomly
and the give money based of how many of the selected seal there is
and each round seal changes

bold sleet
#

Hello. Again, how did I save data for any given card inside a run (and prevent it from resetting upon reloading the run or the game and what not)

molten musk
#

if deck has onle 1 type of seal the joker will only choose that type

#

code is nowhere near done and i have no idea what to do

bold sleet
tawdry oriole
#

there is

#

but

#

i'm not sure how to get the current mult

#

that's like my only barrier

bold sleet
#

I may be able to help with that.

#

hold on

daring fern
tawdry oriole
daring fern
jagged zodiac
#

sorry, I have no idea

red flower
#

also its funny you kept the (sic) comment lol

molten musk
#

haha yeah

#

code half stolen lol

#

cant think of how to do it

#

so far i made a table to save seals in

#

and random to selact a random seal

red flower
#

do you want all seals to be equal weight when selecting them

molten musk
#

yeah

bold sleet
#

Then you should compare each card to the table with the already listed seals, and if the seal is already in the table, don't add the card's seal to the table.

#

I don't know how well I have explained myself.

daring fern
# molten musk yeah
local seals = {}
for k, v in pairs(G.playing_cards) do
    if v.seal then seals[v.seal] = (seals[v.seal] or 0) + 1 end
end
local _, index = pseudorandom_element(seals, "seed")
return {dollars = seals[index]}
```?
red flower
#

yeah that

molten musk
#

it does this btw

molten musk
red flower
bold sleet
#

huh what

daring fern
red flower
#

if the card is in another area already save the position or unique id

bold sleet
#

I need to save the card's data in like, a separate list to later retrieve it.

#

I just need a place to save this list and not resetting when the game crashes or whatever.

maiden phoenix
bold sleet
#

huh what now?

#

chat i may be stupid

molten musk
#

works now

#

thx

maiden phoenix
#

What is it you're trying to save?

bold sleet
#

A whole card worth of data.

red flower
#

why

bold sleet
#

Let me explain the joker

red flower
#

whats the goal

bold sleet
#

Don't judge the idea, it isn't mine. I am here to make it happen.

red flower
#

afaik, you need to copy the joker and save it to a cardarea

bold sleet
#

Like G.jokers?

maiden phoenix
#

What if he saved it in G.GAME?

bold sleet
unborn bay
#

for that you can really just save the ability of that joker and the key of its center

#

cards do not save unless stored in a cardarea

red flower
bold sleet
unborn bay
#

most of everything is stored on ability anyways :V

bold sleet
unborn bay
#

then don't deep copy it

maiden phoenix
#

You can save a whole card in a card.ability

bold sleet
#

I will try again.

bold sleet
maiden phoenix
#

Use SMODS.shallow_copy instead

red flower
#

you cant save a function sadly

bold sleet
#

Like, an exact replica

unborn bay
#

😭

#

you don't need everything copied

#

its a table

bold sleet
#

I need the key and shit, abilities, and what not

unborn bay
#

if it doesn't exist in that memory location it exists in another so long as its in memory

#

you don't even need a shallow copy even

bold sleet
#

As long as the user just sees two copies of a given card, I am content.

#

Including scaling values and other shit.

unborn bay
#

which you can do by just saving the ability table and bringing it back when you recreate the card

bold sleet
#

So, what do and where

unborn bay
#
card.ability.saved_ability = other.ability
card.ability.saved_key = other.config.center_key
-- later
local c = SMODS.add_card { key = card.ability.saved_key }
c.ability = card.ability.saved_ability
bold sleet
#

yum

#

ty

#

I assume other is the card I want to save info?

unborn bay
#

yeah

bold sleet
#

Let's see...

bitter portal
#

What's wrong with my planet translation? it wont show up in game, i already check Vanillia Remade

Planet = {
            ["cfawm_hd 189733b"] = {
                name = 'HD 189733b',
                 text = {
                    "{S:0.8}({S:0.8,V:1}lvl.#1#{S:0.8}){} Level up",
                    "{C:attention}#2#",
                    "{C:mult}+#3#{} Mult and",
                    "{C:chips}+#4#{} chips",
                },
            },
        },
SMODS.Consumable {
    key = "hd 189733b",
    set = "Planet",
    cost = 3,
    pos = { x = 0, y = -1 },
    config = { hand_type = 'cfawm_Roundabout' },
    loc_vars = function(self, info_queue, card)
        return {
            vars = {
                G.GAME.hands[card.ability.hand_type].level,
                localize(card.ability.hand_type, 'poker_hands'),
                G.GAME.hands[card.ability.hand_type].l_mult,
                G.GAME.hands[card.ability.hand_type].l_chips,
                colours = { (G.GAME.hands[card.ability.hand_type].level == 1 and G.C.UI.TEXT_DARK or G.C.HAND_LEVELS[math.min(7, G.GAME.hands[card.ability.hand_type].level)]) }
            }
        }
    end
}
unborn bay
#

please don't put spaces on your consumables

bitter portal
#

noted

red flower
bitter portal
bold gyro
#

hey y'all, is there a simple way to change on the fly the alpha/transparency of a joker?

rotund sable
#

isn't card.ability.extra a per-card field?

update = function(self, card, dt)
    if card.ability.extra.delay == 60 / card.ability.extra.FPS then 
        card.config.center.pos.x = (card.config.center.pos.x + 1) % 40
        card.ability.extra.delay = 0
    else
        card.ability.extra.delay = card.ability.extra.delay + 1
    end
end,
rotund sable
#

oh wait

#

it changes global texture 🤦‍♂️

bitter portal
red flower
#

before

red flower
lament agate
#

how do you

#

detect a mod

#

installed

red flower
#

next(SMODS.find_mod("modid")) checks if it's installed and loaded

#

(many mods have a global table you can check too)

bitter portal
#

Is the text on planet cards a specifc font or handrawn?

red flower
#

handdrawn

bitter portal
#

oh boy...

rotund sable
bitter portal
#

Not numbers however

#

im on my own for numbers 😭

rotund sable
#

gl <3

bold sleet
#

Again, is there a way to make sure the sold card is the joker itself and not any other random bs?

red flower
#

context.card == card

#

oh wait im dumb

bold sleet
#

ah

#

aher

red flower
#

that works but it's context.selling_self too

bitter portal
#

Alright... this is okay for now

jagged zodiac
#

any ideas for what I can do with the bottom??

#

maybe 'Jackpot'

sullen brook
#

What's the name of the Joker? Could always use LUCKY

bitter portal
#

Balatro bluescreened my computer 🎉

#

I was working on a mod... I opened a celestial pack and it crashed right before it could finish opening...

jagged zodiac
#

maybe Lucky is good too yeah

bitter portal
sullen brook
faint yacht
bitter portal
#

Yep! I am 99% sure my GPU is cursed.

jagged zodiac
#

;-; I made the image 71x90 instead of 71x95