#💻・modding-dev

1 messages · Page 257 of 1

solar eagle
#

thats why

#

not by default anyway you'd have to lovely patch it in

iron iron
#

wadafak smods wiki lied to me

solar eagle
#

smods might have patched it in

#

but the base game doesn't

iron iron
solar eagle
#

and im honestly tired of smods patching stuff and not indicating if its their addition or not

vast fractal
#

use this as ref

solar eagle
#

These were added in 1.0.0~ALPHA-1428c-STEAMODDED.
ahhh yeah i figured

#

so yeah that should work provided youre using latest smods

#

which reminds me i need to update

lofty axle
#

this was the EXACT thing i needed to get it working TYSM!!!!!!!!

unkempt kestrel
#

anyone know where rarities are defined in the base game i feel like ive searched everywhere

solar eagle
#

i do not

#

globals has the rarity colors but thats it

edgy reef
#

Just like stickers, rarities are kinda just a value handles in places it needs to without actual objects created to handle them.

unkempt kestrel
#

ah

solar eagle
#

oh cool

#

0312b is just broken

unkempt kestrel
#

ok well umm anyone know any other mods that have custom rarities since i think cryptid just uses its own thing

solar eagle
#

yeah

#

theyre easy

edgy reef
#

SMODS creates vanilla rarities as well.

solar eagle
#

just make one

unkempt kestrel
#

oh wait hang on

solar eagle
#

ok why is 0312b dying

unkempt kestrel
#

this was the original issue

#

im already using smods.rarity

solar eagle
#

then they cant show up at all

unkempt kestrel
#

uhh how do i do that

edgy reef
#

How many Jokers have this rarity?

unkempt kestrel
#

so far 1

#

im planning on more

solar eagle
#

4 is legendary and can't show up so it doesnt matter

edgy reef
#

Joker is the default when you can't add any more jokers of a specific rarity

solar eagle
#

I had to figure this out cause a joker i made needs to make all rarities have an equal chance to show up

edgy reef
#

Having only one means that you'll run into Jimbo any time it tries to generate two of your rarity.

solar eagle
#

in the case of vouchers, the game uses Blank

unkempt kestrel
#

ok hang on lemme try adding a different joker for testing

#

ok well that works

#

actually that makes a lot of sense

lofty axle
#

in case anyone's wondering how to destroy/remove all cards held in hand upon selling a joker: (thanks @solar eagle)

solar eagle
#

interesting choice using k

lofty axle
#

saw someone else use k and was like "eh why not"

heady siren
#

Whenever I start dissolving cards I start drawing these nothing cards that can't be selected, but take up deck and hand room

solar eagle
#

how are you dissolving them

solar eagle
#

i am already busy

#

sorry

heady siren
heady siren
solar eagle
#

look at hanged man

heady siren
#

I'm looking hanged man and it seems like it just also does start_dissolve, and does shatter for glass cards

unkempt kestrel
#

is it possible to add a gradient to the mods badge name?

vast fractal
heady siren
#

I've been getting 99% of my information from the wiki

runic pecan
#

Would "since taking this relic" be redundant?
I worded it this way because I wanted to differ from "in this run", but now I really wanna change it to "per Planet card used".

ruby delta
heady siren
ruby delta
vast fractal
heady siren
#

This is my current code

#

It only deletes the first card

runic pecan
# heady siren This is my current code

return makes your code thread immediately exit from your calculate function at that moment.
Since you put it inside the for loop, it only gets to process the first entry before ejection.

heady siren
#

Yeah, I know, how do I make it not do that while still properly removing every card?

runic pecan
runic pecan
heady siren
#

The for loop is also putting all of the cards into a variable on the joker

#

And I want it in the full hand

#

So the destroy_cards method just isn't gonna work, tried making it work with the full hand, it doesn't

runic pecan
runic pecan
heady siren
#

I do not know how to reference the currently being destroyed card inside the destroy_card context to use start_dissolve on it

#

card just dissolves the joker itself

tall salmon
#

hey all silly question, does creating a joker with the normal SMODS.Joker ={ make it able to spawn in the shop?

#

or do you have to like put them in a shop pool or something like that

heady siren
runic pecan
daring fern
tall salmon
heady siren
#

Yes

#

In the played hand

tall salmon
#

oh in played hand

#

cuz this works in deleting your entire hand

#

maybe if you edit G.hand.cards to G.play.cards it'll work

heady siren
#

That doesn't properly delete them

tall salmon
#

it does for me

heady siren
#

They show up as ghost cards that can appear in your hand but can't be selected or played

tall salmon
#

maybe it's different with the played hand?

heady siren
#

That's the whole reason I'm trying to find a way to delete them beyond start_dissolve

sullen gale
#

How can I replace the original atlas of all jokers with a custom file?

#

this doesn't work...

sullen gale
#

yes exactly

#

preferably as just one mod tho

daring fern
#

You should probably use Malverk then.

sullen gale
#

perfect thanks

tall salmon
#

you can use start_dissolve just fine

heady siren
#

No, I can't, because it started created ghost cards

#

I'm not saying that as a hypothetical

#

It started happening

tall salmon
#

im not either

heady siren
#

I don't know what you're doing differently then, I was just using start_dissolve

neat plover
#

how would i make a custom title? like instead of balatro, its fragment?

tall salmon
#

honestly try if this works

#

if it doesn't then your issue may be somewhere else

vast fractal
heady siren
#

No, I'm starting a new run every time, specifically to avoid that problem

vast fractal
#

if context.destroy_card and context.cardarea == G.play and not context.blueprint then is fine for me

unkempt kestrel
#

this might be a silly question but how do i make a custom deck? im looking at the wiki and theres no SMODS.Deck or anything

heady siren
#

SMODS.Back

unkempt kestrel
#

oh right

sullen gale
#

YESS IT WORKS

#

worth three hours lol

unkempt kestrel
#

absolute peak

chrome widget
#

Ripping my hair out trying to do what should be simple math 😭

brazen tusk
chrome widget
#

I am attempting to normalize a shader for texture atlases of different sizes (since vanilla cards tend to use big shared atlases and my modded cards each use an individual texture atlas)

#

And like........ this should not be hard?

fervent thicket
#

Is there a way to check the current chips during calculation?

daring fern
fervent thicket
#

So do I reference something to get the value or do I literally just put hand_chips?

#

Because I wanna divide hand_chips by a number to get a different value.

daring fern
#

There is also G.GAME.chips

chrome widget
#

you literally just do hand_chips. It's a global that's accessible during joker calculations

chrome widget
fervent thicket
#

Ok, will do.

heady siren
#

Now I am literally copy-pasting code from Hanged Man and it's not deleting cards

tall salmon
#

i saw it happening on mine too

heady siren
tall salmon
#

the only card that deletes played cards is sixth sense

#

so it's the only one where this is relevant

chrome widget
# chrome widget Attempt to diagram this out

This should be able to work just to get the pixel position of only within where the sprite position is currently set, but I'm still getting weird results

float height_mod = texture_details.a / image_details.y;
float pos_x = (texture_details.x + tex_coords.x * width_mod) * width_mod; // Normalized pos_x
float pos_y = (texture_details.y + tex_coords.y * height_mod) * height_mod; // Normalized pos_y
vec4 pixel = Texel(tex, vec2(pos_x, pos_y));```
tall salmon
#

however the game code on how it achieves is either very hidden or i am very sleep deprived

#

maybe both

chrome widget
#

One card has a texture width of 71x95, so the base texture size, it works fine. One has 142x95, meaning it's twice the width, and another is 213x95, so 3x with

#

On both of the latter two it seems like it doesn't squish the shader texture appropriately

heady siren
tall salmon
#

yeah

#

i dont get it

heady siren
#

Destroying cards shouldn't be this hard

tall salmon
#

i've been trying to figure it out too cause it might be something i want to do as well but it's suprisingly complex

unkempt kestrel
#

how can i give myself specific jokers or consumables?

tall salmon
#

maybe deleting the ghost cards off your deck after dissolving them?

#

im not sure how you'd do that tho

unkempt kestrel
vast fractal
tall salmon
#

oh like

chrome widget
#

If you have a more recent version of SMODS (within the last two months), there's a specific context to flag cards for deletion

unkempt kestrel
#

i was just going to use the execute command

#

i think thats what its called

tall salmon
#

you press ctrl and 3 on any card in the collection

unkempt kestrel
#

oh

vast fractal
#

tab for more info

brazen tusk
#

¯_(ツ)_/¯

heady siren
#

That only destroys scoring cards

#

Tried it before

#

Throw all obvious answers out the window, I've done them

brazen tusk
#

what you trying to destroy?

heady siren
#

All played cards

vast fractal
#

SMODS.optional_features.cardareas.unscored = true

heady siren
#

After adding them to a table inside the joker that destroys them

chrome widget
#

Then yeah, you use the option unscored cards feature, and then just have each card add itself to the joker within that context

unkempt kestrel
#

is there a way to reload a mod from inside the game???

tall salmon
heady siren
tall salmon
#

i compared scoring cards and full played hand for a joker of mine

vast fractal
unkempt kestrel
#

ive just been closing and reopening the game

primal shoal
#

I though you said there was, my bad

unkempt kestrel
#

oh right

primal shoal
#

I have a restart button though

heady siren
#

I love accidentally typing mmmmmmmm in the last place my cursor was on my text editor [=

frosty dock
#

you can also press alt+f5

heady siren
#

That doesn't work for me for some reason

#

Just straight up doesn't close

frosty dock
#

it was added like 2 days ago

#

So you probably need to update first

heady siren
#

Ah, yeah, that explains it

native zinc
heady siren
unkempt kestrel
#

WHERJES THE TOOLTIP

daring fern
#

I just realized, why does holding m remove all spaces from the mod directory?

unkempt kestrel
#

also whats up with C:dark_edition???

#

im guessing its used in place of a gradient but how do i add it?

neat plover
#

how do i change the title splash????

daring fern
#

I figured this one out, it was context.card.ability.set == 'Voucher'

#

How does one stop a voucher from redeeming?

unkempt kestrel
#

ok how on earth do i use C:dark_edition and get it to work and also whats the tooltip for a red seal???

daring fern
unkempt kestrel
#

well thats the neat part, i did but it doesnt do anything

#

presumably because it changes colour

daring fern
#

What does it look like in game?

unkempt kestrel
#

oh wait hang on

#

wait how do i put a tooltip and a colour on the same piece of text?

#

turns out it was just applying the tooltip and not the colour

#

IM NOT ALLOWED SPACES FOR SOME REASON

#

OK THEN

#

WHY IS THIS FINE

#

BUT THIS ISNT

brazen tusk
#

orange is fine just save and have a look

heady siren
#

I'm going insane

#

smod is fully up to date

#

The vanilla joker example literally uses context.other_card in the exact same function

#

I swear to god the universe just hates me

#

I think I'm done, I wanna make mods, but this is way too much of a hassle to get working, especially for something that should be so god damn easy, and something that is LITERALLY DONE BY THE OFFICIAL DOCUMENTATION

daring fern
#

How does one get the key of a vanilla object?

heady siren
#

Still haven't gotten it working, not even a little bit

unkempt kestrel
#

what object do you need?

heady siren
daring fern
unkempt kestrel
#

in the consumable slot??

daring fern
#

Yes?

unkempt kestrel
#

anyway this is them

unkempt kestrel
daring fern
#

I know but how do I get it from context.card?

unkempt kestrel
#

oh wait

daring fern
#

Also there is no redeem button when they are in the consumable slot.

unkempt kestrel
#

i mean vouchers dont normally go in the consumable slot

daring fern
#

I'm aware.

vocal cedar
#

hey what if i want the joker to subtract money at the end of the roun

daring fern
vocal cedar
#

bro i

#

i might

#

just be challenged LMAO

#

sorry

runic pecan
#

What font is the "JOKER" on the jokers in game?

#

As like, where can I find A-Z of that style so I can copy-paste onto my jokers?

unkempt kestrel
daring fern
unkempt kestrel
#

neat

#

yippee!!!

#

im started to think theres no tooltip for red seals

#

like i know you can get the little one on the side, its on deja vu

#

but no hover tooltip for some reason

vocal cedar
daring fern
vocal cedar
#

perf thank ya

#

was looking for the correct context

daring fern
#

Is there anyway to change this to +1 consumable slot?

brazen notch
#

how do i use modify_scoring_card to unscore a card? returning remove_from_hand = true doesn't seem to work

pearl jacinth
#

how do i create a specific joker

wintry solar
daring fern
pearl jacinth
#

thanks

manic rune
#

dont forget the mod prefix btw

maiden phoenix
#

Or simply use the SMODS.add_card function

pearl jacinth
#

how do i use it

manic rune
vocal cedar
#

bro

#

<@&1133519078540185692> smite this fella thanks

#

anyway

#

#G.GAME.interest_amount
is this not the correct thing for interest?

#

my game crashed when i tried to assign it to a variable

manic rune
#

G.GAME.interest_amount is a number

#

# is used to return how many keys are assigned to a table

#

:3 sorry

#

basically, just use G.GAME.interest_amount instead of adding the "#"

vocal cedar
#

my ass out here not knowing how to use SMODS

manic rune
#

mhm, no probs

manic rune
#

-# its not mine

daring fern
manic rune
#

im pretty sure the negative editions of consumables and jokers are different

daring fern
#

But this is a voucher.

wintry solar
#

You’ll need to change the key it’s using

#

To display the info queue

vocal cedar
#

is that

#

is that the right one?

frosty dock
wintry solar
frosty dock
#

the default is the joker version, and there's not exactly one that's voucher-specific

vocal cedar
#

is there like a G.GAME.Money_in_hand or

wintry solar
#

Yes, I don’t remember if there’s a function that does it, it’s probably manually done by thunk

vocal cedar
#

oh its dollars

fervent thicket
#

How do you use the pseudorandom function? Mostly how to do you put in a good seed for it?

manic rune
#

theres no definition of a "good seed"

#

as long as its unique, its good

fervent thicket
#

I tried to look at hallucinations code but it's causing bugs.

#

I'm using G.round_resets.ante and it's crashing the game

primal shoal
#

any good?

manic rune
#

wdym by "when a joker is debuffed then gain +X3"

primal shoal
#

when this joker debuffs another joker, the joker that debuff it gain +X3

manic rune
#

soo

#

Small Mag gives X3 Mult for each joker it disabled?

vocal cedar
vocal cedar
#

oh

#

i thought it was gonn agive the debuffed joker the XMULT i was like WOAH

#

thats some cryptd levels of shit

manic rune
vocal cedar
#

would be funny as hell lol

primal shoal
manic rune
#
Every hand, a random joker is debuffed,
gains X3 Mult
...
(Currently X1 Mult)
vocal cedar
manic rune
#

thats nottttt its effect

vocal cedar
#

i think stacking x3 mult over and over again is WAY too op

#

i know its not

manic rune
#

but yes, i agree its overpowered as hell

vocal cedar
#

i was suggesting a rebalance

manic rune
#

i think it should just be X1 mult

primal shoal
#

every hand you are losing every other joker

manic rune
#

X1 -> X2 -> X3

manic rune
warped marsh
vocal cedar
manic rune
#

lets say you have 4 fodder jokers

#

small mag would get X12 Mult from disabling them

#

thats busted

primal shoal
#

X1.5 then

manic rune
#

that works

#

also, are you using multitextbox from riv_falcon? :3

brazen notch
manic rune
#

dont forget to credit them if you are

brazen notch
#

although, i want modify_scoring_hand to be separated by whether it's called from debuff_hand or evaluate_play

wintry solar
#

Yeah that was mentioned yesterday, I’m not 100% on whether debuff hand should use that context or not

brazen notch
#

as a current workaround, i'm using G.STATE == G.STATES.HAND_PLAYED but that still gets called twice. i suspect one is from debuff_hand

vocal cedar
#

What the absolute FUCK

Anyone see any glaring errors with my logic lmfao?

#

interest cap is 25 okay nice

#

interest amount is one cool

#

cap it at 25 if i get more than 5 bucks of bonus

#

wait

wintry solar
#

You can just a math.min originally to avoid the if

vocal cedar
#

wdym

#

does it return the smaller of the two ooooh nice hold on

wintry solar
#

It will fix the bad logic you have in your if statement too

vocal cedar
#

did shit all

#

for whatever reason its just

#

not working

#

like the interest cap is not about to be a deciding factor in my joker

#

nope

#

fuck you

#

minus -12 dollars

wintry solar
#

What’s the intended effect?

vocal cedar
#

this

#

basically

#

joker eats your interest and turns it into +mult

#

i want the user to see it subtract the exact amount of interest on the round end page tho

#

so they know its doin smth

#
    key = 'greed',
    loc_txt = {
        name = 'Kulling Kopel',
        text = {
            "This Joker gains {C:mult}+#2#{} Mult",
            "per {C:money}$1{} earned of {C:money}Interest{}",
            "{C:red}Destroys all{} {C:money}Interest{} {C:red}Gained{}",
            "{C:inactive}Currently{} {C:mult}+#1#{} Mult}"
        }
    },
    config = { extra = { mult = 1, multgain = 1} },
    rarity = 1,
    atlas = 'BetterVanilla',
    pos = { x = 2, y = 0 },
    cost = 6,
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.mult, card.ability.extra.multgain } }
    end,
--     calculate and return flat mult
    calculate = function(self, card, context)
        if context.joker_main then
            return {
                mult_mod = card.ability.extra.mult,
                message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.mult } }
            }
        end
    end,

-- Steal dollar value from interest
    calc_dollar_bonus = function(self, card)
        local bonus = - (G.GAME.interest_amount * math.floor(G.GAME.dollars / 5))
        bonus = math.min(bonus,((G.GAME.interest_cap * G.GAME.interest_amount) / 5))
        card.ability.extra.mult = card.ability.extra.multgain*(-1 * bonus)

        return bonus
            --message = "Stolen"
    end
    -- Since there's nothing else to calculate, a calculate function is completely unnecessary.
}
#

this is what im runnin with so far

wintry solar
#
local bonus = G.GAME.interest_amount * math.min(math.floor(G.GAME.dollars / 5, G.GAME.interest_cap)
return -bonus

I’m pretty sure this is what you want

#

With the mult bit added obviously

vocal cedar
#

wait hold on lol

daring fern
#

How could one check if a consumable is being destroyed?

vocal cedar
#

OH its a NEGATIVE BONUS LOL

#

THANKYA!

vocal cedar
#

the pesky minus sign

wintry solar
#

You don’t need to compare it with this statement though

vocal cedar
#

yep

#

it works perfectly

#

thanks for catching that

#

while we on the topic tho

description fine?

joker in general a good early-mid scaling joker

#

i was thinking about turning bro into an XMULT joker tbh

#

like every one dollar is X0.05 mult so every 20 bucks it goes up by X1 or smth

#

i think as he is now he is a good common +mult scaler, about as balanced as a green joker or ride the bus as losing interest is about as bad as wasting all your hands to ramp a bus or a greenbo yknow

warped marsh
#

also 'all' and 'gained' dont have to be red

#

also you dont earn any interest right?

#

'This Joker gains {C:mult}+1{} Mult',
'per {C:money}$1{} earned of {C:money} Interest but,',
'does not earn {C:money} Interest{}'

manic rune
#

what would i need to do if i want to remove this badge?

#

its from a sticker

daring fern
#

Except the visual.

primal shoal
manic rune
prisma loom
#

Can someone explain why editions are applied before cards even fly out of hand? (Midas mask does everything properly but my joker doesn't)

#
        if not card.debuff then
            if context.cardarea == G.jokers and context.before and not (context.individual or context.repetition) and not context.blueprint then
                if pseudorandom("handsome") < G.GAME.probabilities.normal / card.ability.extra.denom then
                    local faces = {}
                    for k, v in ipairs(context.scoring_hand) do
                        if v:get_id() == 11 and not v.edition then
                            faces[#faces + 1] = v
                            v:set_edition(poll_edition('tag', nil, false, true, card.ability.extra.rates), nil, true)
                            G.E_MANAGER:add_event(Event({
                                func = function()
                                    v:juice_up()
                                    return true
                                end
                            }))
                        end
                    end
                    if #faces > 0 then
                        return {
                            message = localize('k_hnds_handsome'),
                            colour = G.C.dark_edition,
                            card = card
                        }
                    end
                end
            end
        end
    end```
#

it's a minor visual issue

warped marsh
#

delay(0.5) or something

prisma loom
#

also why midas mask doesnt have one?

warped marsh
#

before the for loop

warped marsh
prisma loom
warped marsh
#

hmmm

#

idk but my converting has a delay

prisma loom
warped marsh
#

yeah try it out

#

its all trail and testing

prisma loom
#

nothing changed

warped marsh
#

thats weird

daring fern
#

How do I make vouchers in the consumables slots give 3X mult each?

warped marsh
#

do it before set_edition

#

lets see if that works

#

make sure to restart your game obvi

wintry solar
#

That won’t work

prisma loom
#

nothing has changed

vocal cedar
wintry solar
#

You need to either put it in an event or use the delay in set edition

prisma loom
warped marsh
#

so try that

wintry solar
#

Immediate controls the delay

#

It might auto delay though I don’t fully remember

prisma loom
#

ah, so I put delay here?

wintry solar
#

No

#

I think just using an event is the way to go

daring fern
zealous glen
#

We also did it in Cosmos

#

If you want to both have the bonus from the Edition but also have the Edition wait until the correct time

#

You need to patch code to add a system similar to Midas Mask

#

What Midas Mask does is that it applies the Enhancement but sets a variable that tells the Enhancement to not be drawn

#

So the cards are already Gold, they just don’t show it

#

That’s what we had done for Spinagogue Champion in Cosmos

#

-# Although I suspect it’s slightly outdated now because I believe SMODS.DrawStep overwrite our patch targets

bold sleet
#

Hello good people! So, here is the problem: For some reason, this function seems to change the values of all localization stuff but the game just resets 'em back to normal. Any fix, maybe, idk?

wintry solar
#

I have a similar workaround in ortalab

prisma loom
#

mb I should return faces or something?

zealous glen
#

I don’t think it should use an Event

prisma loom
zealous glen
#

Events could end up mistimed IMO

prisma loom
#

Is there a tut for patches in balo?

zealous glen
#

Lovely

#

Might be outdated a bit though

wintry solar
#

Events will animate correctly but not count for scoring

storm kraken
#

very helpful balatro

zealous glen
zealous glen
nocturne garnet
prisma loom
storm kraken
wintry solar
#

Maybe I should just build delaying editions into smods properly

zealous glen
#

Just your own variable

storm kraken
# nocturne garnet lemme see
function localize(args, misc_cat)
FG.mila_iterate('mila')
return 'mila' end 

function FG.mila_iterate(args.text)
  for k,v in pairs(args) do
    if type(v) == 'string' then v = 'mila'
    elseif type(v) == 'table' then FG.mila_iterate(v) 
    end break
  end
end

i know it looks bad but basically we're trying to change every text in the game to mila

nocturne garnet
storm kraken
nocturne garnet
#

and why is one of the parameters args.text

storm kraken
#

do not question just i need help

brazen notch
#

some localize calls expect a table of nodes and not a string

nocturne garnet
storm kraken
wintry solar
#

Localise is one of those funny functions that works in completely different ways depending on how it’s called

storm kraken
#
function FG.mila_iterate(ref)
  for k,v in pairs(ref) do
    if type(v) == 'string' then v = 'mila'
    elseif type(v) == 'table' then FG.mila_iterate(v) 
    end break
  end
end

FG.mila_iterate(ref)

this is the original function made by other dev that i was busy fucking up

#

@bold sleet get over here we're getting helped

bold sleet
#

I am reading.

bold sleet
#

But balatro does not give a single fuck and reverts it back to normal.

brazen notch
#

...why is there a stray break?

bold sleet
#

Because I am tired somewhat and my brain cannot work correctly.

#

A slightly updated version.

#

When loading balatro, the prints do fire (when I uncomment them).

#

The values DO get replaced.

wintry solar
#

In this rare case that is complete jank and I don’t know why you’d ever do this, you should just rewrite localize

bold sleet
#

But uh... balatro idk how reverts everything back to normal™️

bold sleet
#

We do not understand how the fuck that function works.

wintry solar
#

You can’t mess with localisation like that

long sun
#

hihi, how do i add a custom colour for my seal?

#

like Blue Seal

nocturne garnet
prisma loom
# zealous glen Just your own variable
        if not card.debuff then
            if context.cardarea == G.jokers and context.before and not (context.individual or context.repetition) and not context.blueprint then
                if pseudorandom("handsome") < G.GAME.probabilities.normal / card.ability.extra.denom then
                    local faces = {}
                    for k, v in ipairs(context.scoring_hand) do
                        if v:get_id() == 11 and not v.edition then
                            faces[#faces + 1] = v
                            v.hnds_handsomed = true
                            v:set_edition(poll_edition('tag', nil, false, true, card.ability.extra.rates), nil, true)
                            G.E_MANAGER:add_event(Event({
                                func = function()
                                    v:juice_up()
                                    v.hnds_handsomed = nil
                                    return true
                                end
                            }))
                        end
                    end
                    if #faces > 0 then
                        return {
                            message = localize('k_hnds_handsome'),
                            colour = G.C.dark_edition,
                            card = card
                        }
                    end
                end
            end
        end
    end```
#

even with that patch it doesnt work like midas

long sun
nocturne garnet
#

ohhh

#

probably something with the loc_colours function

wintry solar
long sun
#

right

#

will take a look, thanks ^^

zealous glen
# long sun right, but how do i add my own colour?
G.C.VictinsCollection = {}

G.C.VictinsCollection.ENHANCEMENTS = {
    Stone = HEX("D0D2D6"),
    Wild = {0, 0, 0, 1},
}

G.C.VictinsCollection.HAND_LEVELS = {
    HEX('efefef'),
    HEX('ffff87'),
    HEX('ffd025'),
    HEX('ff9f43'),
    HEX('ff7b6b'),
    HEX('ff6195'),
    HEX('fb3fb7'),
    HEX('d425d0'),
    HEX('722be3'),
    HEX('3269ff'),
    HEX('58affe'),
    HEX('2effc4'),
}

G.C.VictinsCollection.HAND_LEVELS[0] = HEX('FE5F55')

G.C.VictinsCollection.POKER_HANDS = {
    ['High Card'] = HEX("A10000"),
    ['Pair'] = HEX("A15000"),
    ['Two Pair'] = HEX("A1A100"),
    ['Three of a Kind'] = HEX("626262"),
    ['Straight'] = HEX("416600"),
    ['Flush'] = HEX("008141"),
    ['Full House'] = HEX("008282"),
    ['Four of a Kind'] = HEX("005682"),
    ['Straight Flush'] = HEX("000056"),
    ['Five of a Kind'] = HEX("2B0057"),
    ['Flush House'] = HEX("6A006A"),
    ['Five of a Flush'] = HEX("77003C"),
}

G.C.VictinsCollection.OTHERS = {
    Purple = HEX("CB31DB"),
    Zodiac = {0, 0, 0, 1},
    Ophiucus = HEX("678900"),
}
#

this is how I do it

long sun
#

ah :D

long sun
#

cheers ^^

zealous glen
#

you'll need more to use it in text

wintry solar
long sun
#

oh, what else do i need?

zealous glen
# long sun oh, what else do i need?

I do it with a hook

local loc_colour_ref = loc_colour

function loc_colour(_c, default)
    if not G.ARGS.LOC_COLOURS then
        loc_colour_ref(_c, default)
    elseif not G.ARGS.LOC_COLOURS.vic_colours then
        G.ARGS.LOC_COLOURS.vic_colours = true

        local new_colors = {
            vic_HighCard = G.C.VictinsCollection.POKER_HANDS['High Card'],
            vic_Pair = G.C.VictinsCollection.POKER_HANDS['Pair'],
            vic_TwoPair = G.C.VictinsCollection.POKER_HANDS['Two Pair'],
            vic_3OAK = G.C.VictinsCollection.POKER_HANDS['Three of a Kind'],
            vic_Straight = G.C.VictinsCollection.POKER_HANDS['Straight'],
            vic_Flush = G.C.VictinsCollection.POKER_HANDS['Flush'],
            vic_FullHouse = G.C.VictinsCollection.POKER_HANDS['Full House'],
            vic_4OAK = G.C.VictinsCollection.POKER_HANDS['Four of a Kind'],
            vic_StraightFlush = G.C.VictinsCollection.POKER_HANDS['Straight Flush'],
            vic_5OAK = G.C.VictinsCollection.POKER_HANDS['Five of a Kind'],
            vic_FlushHouse = G.C.VictinsCollection.POKER_HANDS['Flush House'],
            vic_5OAFlush = G.C.VictinsCollection.POKER_HANDS['Five of a Flush'],

            vic_stone = G.C.VictinsCollection.ENHANCEMENTS.Stone,

            vic_perishable = G.C.PERISHABLE,
            vic_rental = G.C.RENTAL,
        }

        for k, v in pairs(new_colors) do
            G.ARGS.LOC_COLOURS[k] = v
        end
    end

    return loc_colour_ref(_c, default)
end
wintry solar
#

I’ll do it all for you so we don’t have multiple different systems trying to do the same thing

prisma loom
zealous glen
long sun
#

thanks ^^

zealous glen
#

I do think SMODS overwrites our patch target, but still

#

the code is there

wintry solar
#

I’ve already done it in ortalab

zealous glen
#

also I had forgotten I already had defined poker hand colors

twilit cargo
strong jacinth
#

Yoo

#

Eremel

#

Can you help me with my button

#

That keeps running away

wintry solar
#

Maybe later

#

I am about to head out

nocturne garnet
strong jacinth
#

Awe

#

No one can help me with this

strong jacinth
long sun
#

ooh question, has anyone added en-gb as a localisation language yet? :D

#

just in case spellings differ for some Jokers

strong jacinth
#

These are all added languages

long sun
#

right

#

i suspect they're effectively the same anyway, so it doesn't really matter

#

but it's a bit weird that it's en-us and not just en

twilit cargo
#

#setEnGbToDefaultItsTheCorrectEn

thin anchor
#

is this code correct

zealous glen
nocturne garnet
thin anchor
vocal cedar
#

are you setting a value?

#

your just douing a calculation with no return or member setting

thin anchor
#

oh

nocturne garnet
#
if context.joker_main then
  if card.ability.extra.chips > G.GAME.money then
    G.GAME.money = G.GAME.money + card.ability.extra.money
  end
  return {
    chips = card.ability.extra.chips,
   }
end

assuming its giving you money on joker_main if your chips are less than your money

#

also you forgot an end

vocal cedar
#

that seems pretty right

daring fern
thin anchor
#

thanks
im very new to this stuff

nocturne garnet
daring fern
nocturne garnet
#

<@&1133519078540185692>

#

pew pw

thin anchor
#

<@&1133519078540185692>

#

get em

grand violet
nocturne garnet
thin anchor
#

another day saved by egg

daring fern
nocturne garnet
#

of the thing you're making

#

or the function

#

in case you're changing calculate joker

daring fern
thin anchor
nocturne garnet
daring fern
#

Where?

nocturne garnet
#

everywhere except Card.calculate_joker and Card:calculate_joker

nocturne garnet
#

im not sure if joker_main is called for vouchers

daring fern
hushed field
#

Is there a mod that increases the power of Egg every time he bans a scammer?

nocturne garnet
#

is that like a thing your mod added?

#

sounds cool

daring fern
nocturne garnet
#

that is weird

daring fern
#

I have a video of a recent steamodded bug that is like this issue.

prisma loom
#

is there a context for:

  1. when a card gets enhanced
  2. when a card gets destroyed
#

?

thin anchor
#

help please
the variables have values and i dont know whats wrong

onyx sonnet
#

context.destroy_card

#

and context.destroying_card gives you the card being evaluated for destruction

#

im not sure if there is a context for a card being enhanced, thats sort of just a thing that happens

daring fern
frosty dock
onyx sonnet
#

ah

#

ty

tall wharf
#

hello aure how are you doing today

prisma loom
#

also, Im trying to use new permabonuses but it doesnt seem to work

#

Did I miss something?

onyx sonnet
#

its perma_mult

#

not perm_mult

prisma loom
#

Oh, I see

#

My bad

onyx sonnet
#

i have been having trouble with perma_mult recently, it doesnt seem to handle individual scoring as a trigger very well

#

go see if it still works tho

long sun
#

trying to add a localisation file for the first time, and am incredibly lost -w-

#

i have the file, but how do i connect it to my Jokers?

prisma loom
marble flint
onyx sonnet
prisma loom
#

Like when card gets enhanced, do X

long sun
#

grand

#

lemme try that then

daring fern
onyx sonnet
#
return {
    descriptions = {
        Joker = {
            --snaz jokers start here
            j_emerald_light_house = {
                name = "Lighthouse",
                text = {
                  "Increase by {X:mult,C:white}+#2#X{}",
                  "if played hand is {C:attention}#3#{}",
                  "{C:inactive}(Currently {X:mult,C:white}X#1#{})"
                },
            },```
#

this is the beginning of my localization file and an entry for a joker

long sun
#

ah i got it working :D

#

thanks!!!

#

here's Jinn ingame, btw :D

onyx sonnet
#

Awesome

#

Can you tell me how you got that custom badge?

hushed field
#

Ooh that art's really fun, Salt

marble flint
#

oh heck that's my spectral next to it

long sun
#

(but thanks ^^)

thin anchor
#

may someone check this code to see whats wrong?

hushed field
#

Oh, that art is fun, Ghost!

marble flint
thin anchor
#

no

hushed field
thin anchor
#

oops

#

hpld on

onyx sonnet
#

its G.GAME.dollars

marble flint
#

i think G.GAME.money is fake yeah

thin anchor
#

oh really?

onyx sonnet
#

mhm

thin anchor
#

thats odd

onyx sonnet
#

dollars are always called dollars

#

funcs, vars, etc etc always refer to it as dollars, never money

#

which is stangely consistent for localthunk

next timber
#

lol

thin anchor
#

odd

hushed field
#

G.GAME.dollars, yeah

onyx sonnet
#

oh actually

#

i think the color for dollars is called C.MONEY

thin anchor
#

well darn
i personally would call it money

onyx sonnet
#

lol

#

so it is still inconsistent

#

but usually its dollars

thin anchor
hushed field
#

Also, I recommend returning dollars , rather than setting the variable directly, in this case

onyx sonnet
#

mhm

primal shoal
#

C:money is the var for text

long sun
#

how do you create the little boxes that show up when your card references an enhancement, etc.?

hushed field
#

You can't return an if statement!

onyx sonnet
primal shoal
hushed field
#

But I'd set a local value with the if statement, and then return the value of that local ad dollars

onyx sonnet
#

example of a return for money i have

hushed field
#

Because if it's 0, nothing'll happen

thin anchor
#

i want it to give money if the joker's chips are more than dollars

primal shoal
#

```if not 0 then `
return {
#stuff
}
end

long sun
#

perfecto ✨

daring fern
onyx sonnet
#

can someone here tell me how to set custom badges for a mod?

onyx sonnet
daring fern
thin anchor
#

so like this?

nocturne garnet
nocturne garnet
#

wait

onyx sonnet
#

i did look through the docs but i couldnt find it 😅

nocturne garnet
#

it'll add the animation

long sun
#

what would the tooltip code for a specific Tarot card be?

onyx sonnet
#

pretty sure dollars = in return does that too

#

but they're trying to set the value in the return

hushed field
next timber
#

this code in my edition doesn't work because the config hasn't been copied over to the card yet, is there any way i can make this code run after the edition ability has been set? (also the x_mult doesn't seem to actually be doing anything but thats another issue)

thin anchor
onyx sonnet
#

this way it should only be checking the consumable slot?

#

i havent messed with cardareas much tho

thin anchor
faint yacht
# thin anchor this?

return { dollars = card.ability.extra.money } or move the ease_dollars outside the return.

daring fern
nocturne garnet
#

just call the function

#

and you cant return twice in one function call

thin anchor
#

oh

daring fern
#

Also how does one make the info queue for negative say +1 consumable slot instead of joker slot like perkeo?

onyx sonnet
frosty dock
#

consumeables

thin anchor
#

ok so it gives the money but not the chips

onyx sonnet
thin anchor
#

it also give 15 dollars even though its 20

onyx sonnet
#

one day i will learn how to spell

frosty dock
#

no you spelled it correctly

#

but thunk didn't balatrojoker

#

greetings from caino and gluttenous joker

daring fern
onyx sonnet
#

even with the changed spelling?

daring fern
onyx sonnet
#

hm

frosty dock
#

check card.area instead of context.cardarea i guess

nocturne garnet
frosty dock
#

but i don't see how the calculate hook is necessary

#

you could use context.other_voucher

#

similarly to how observatory is reworked in smods

onyx sonnet
#

aure, do custom badges for cards belonging to a mod need to be manually added to every single script?

daring fern
tall wharf
#

aure how are you doing today 😭

nocturne garnet
onyx sonnet
#

well if there's another method i wouldnt mind it

thin anchor
#

what rarity should this man have

next timber
#

balala

daring fern
#

How do I make every voucher trigger more times if there are more than one of Vouchero?

frosty dock
frosty dock
long sun
tall wharf
#

now i am a bit mad but dw

long sun
#

it's a bit much

#

i see this as Uncommon

tall wharf
#

might be cooking

thin anchor
#

ah

twilit cargo
#

Evil ass joker

daring fern
warped marsh
#

id maybe only give $10 bucks

shell tangle
#

I have a deck that's making jokers give mult, and it's functional, but message_card isn't changing the location of the message, and it's instead stuck to the deck, any ideas?

        if context.other_joker then
            if context.other_joker.ability.hod_training then
                return {
                    mult = context.other_joker.ability.hod_training[1],
                    message = localize { type = 'variable', key = 'a_mult', vars = { context.other_joker.ability.hod_training[1] } },
                    message_card = context.other_joker,
                }
            end
        end
tall wharf
nocturne garnet
long sun
#

i'd give $2, if anything. i don't think it needs any cash prize

twilit cargo
daring fern
tall wharf
#

jenku draw me or something idk

long sun
#

goes insanely hard with Stuntman / Wee / Square / Runner

#

/ Castle

twilit cargo
tall wharf
#

look at my fuckin art bruh

twilit cargo
thin anchor
tall wharf
#

NO

thin anchor
#

buzz buzz

twilit cargo
warped marsh
long sun
#

anyway, question. how do i show the tooltips for these two Tarots?

zealous glen
#

Why can I hear the mouse clicks

twilit cargo
daring fern
tall wharf
#

why does everyone use this placeholder art

zealous glen
#

@stray terrace code what

twilit cargo
zealous glen
tall wharf
#

and like not just have a blank

zealous glen
#

Idk where people got it from

daring fern
#

I borrowed it from Cryptid.

warped marsh
#

i just use old textures

long sun
#

i also use blank cards

zealous glen
#

My placeholder

twilit cargo
#

i give everything the same sprite and fix it later

stray terrace
zealous glen
# stray terrace oh, the multiple layers of souls

For now it’s slightly hardcoded since it’s only for a few specific Jokers, but you can add a new soul sprite with set_sprites. If you also want custom movement, you can pass a new draw method via soul_pos.draw, although that has a small bug where two sprites are drawn, which can be solved by telling SMODS not to automatically draw the key corresponding to your extra layer

marble flint
#

i use 0.5, 0.5 in my atlas to make it obvious what it is and strongly incentivize myself to make real art

zealous glen
#

I referenced Cryptid, although it was slightly outdated at the time

stray terrace
#

thank you!

zealous glen
#

They do have a scalable system for this though

zealous glen
#

I wonder if people can spot it

zealous glen
zealous glen
long sun
zealous glen
thin anchor
marble flint
long sun
#

ohhhh i see

#

so- ya was gonna say ^^

#

info_queue[#info_queue+1] = G.P_CENTERS.c_devil

#

grand

#

thanks!! :D

zealous glen
#

Yeah

#

I didn’t remember the table

#

Even though I used it recently

long sun
#

as if Hearts weren't strong enough already :)))))

zealous glen
#

Spades gets the xMult synergy and Hearts gets Mult

#

But Heart gets Glass while Spades gets Steel

long sun
#

i thought it was Chips for Spades, XMult for Hearts, Mult for Clubs?

#

(Arrowhead, Bloodstone, Onyx Agate respectively)

zealous glen
#

I didn’t say what vanilla does

#

I said what I’m doing

long sun
#

right

#

i mean if you wanna give Mult to Hearts, you could give it Empress and it'd be perfectly strong :D

warped marsh
#
    calculate = function(self, card, context)
        if context.cardarea == G.play and context.repetition then
            if (next(context.poker_hands['Three of a Kind'])) and SMODS.has_enhancement(scoring_hand, 'm_lucky') then
                return {
                    message = 'Again!',
                    repetitions = card.ability.extra.repetitions,
                    card = context.other_card
                }  
            end
        end
    end
``` Can someone help me with this, it feels like I'm missing one piece (omg) of the puzzle. I want it to only retrigger when the scored hand is lucky and a three of a kind
zealous glen
#

Thunk was incorrect 😈

zealous glen
#

Steel pairs with Gold and Glass pairs with Lucky

#

Bonus with Mult

#

Wild with Stone

quartz ravine
#

Did anyone figure out a way to not need to have the saml HSL and dissolve_mask functions in every shader?

In c# I would just put that in a base type but shaders in lua have defied my expectations so far

long sun
#

ah i see ^^

#

make new Suits then :3

zealous glen
#

There’s a Joker idea in there somewhere 💔

long sun
#

ah i see ^^

quartz ravine
#

ohh it does support object inheritance

marble flint
warped marsh
#

i tried to put other things in has_enhancement like other_card, etc

zealous glen
warped marsh
#

but then it wouldnt work

zealous glen
#

also why “copy of”

quartz ravine
#

There are a bunch of unused tarot from the larger set. I used one in my own mod

zealous glen
warped marsh
#

oh you are right i think

long sun
zealous glen
#

I know the song

quartz ravine
#

Like the Sword, the Raven, the Crow

long sun
warped marsh
#

i keep forgetting about these small things

zealous glen
#

I meant to ask why The Chariot

warped marsh
long sun
quartz ravine
#

oh I forgot to put something for Ether I just realized

long sun
#

also possibly to represent the guy who was playing against the Devil

zealous glen
#

I guess

#

It’s a bit weird to me

zealous glen
hushed field
#

has anyone here set up talisman compatibility for their mod?

quartz ravine
long sun
#

might fix that later

warped marsh
zealous glen
long sun
#

oop uhm, is there a tooltip for Negative? i can only find everything but

long sun
warped marsh
#

    calculate = function(self, card, context)
        if context.cardarea == G.play and context.repetition then
            if (next(context.poker_hands['Three of a Kind'])) and SMODS.has_enhancement(context.scoring_hand, 'm_lucky') then
                return {
                    message = 'Again!',
                    repetitions = card.ability.extra.repetitions,
                    card = context.other_card
                }  
            end
        end
    end``` but i have config as 1?
long sun
#

i'm happy to lighten it

quartz ravine
long sun
zealous glen
daring fern
zealous glen
#

That other one

long sun
#

right

warped marsh
#

that was just done there

#

by mistake

long sun
#

hmm, weird, e_negative isn't showing up in my intellisense completion list

zealous glen
long sun
#

the game doesn't have any Jokers that do that, no

#

but

#

ack i know there's a card that does that

#

trying to find it

warped marsh
#

yeah the game spits out the same error hm

zealous glen
long sun
#

no

quartz ravine
zealous glen
faint yacht
#

Marble Joker "adds" Stone Cards upon Blind start.

long sun
#

idk it's probably correct

zealous glen
#

Are Editions centers?

#

I think it shouldn’t be called a “copy” because not only it’s not copying anything, it would also prevent you from getting more instances of it AFAIK

quartz ravine
zealous glen
#

So it’s like the game only has one of each card

zealous glen
#

Also if it’s playing cards it shouldn’t use the Joker tooltip

long sun
#

wait it might be blue seal

#

hold on

#

nah it's not

#

i know that there's a card that says that though

zealous glen
#

Like DNA and Fool

long sun
#

but anyway, regardless, i think "get" is clumsier and less intuitive

#

just my personal opinion

zealous glen
long sun
#

aware

zealous glen
#

I just said to not use “copy”

long sun
#

but like, how else do i say that?

zealous glen
#

Create The Devil

stiff locust
#

(must have room)

long sun
#

Creates The Heirophant or Temperance doesn't feel as readable as Creates a copy of The Heirophant or Temperance

#

at least, to me, so that's the wording i'm using

zealous glen
#

If I have one of these, I can’t find another in the shop or a pack

long sun
#

it doesn't mean to literally copy

zealous glen
#

So it’s like the game has a tarot deck you’re drawing from, and returning cards to

long sun
#

ya well i know that, but like

#

you can have multiple

#

it can create two Chariots in a row

zealous glen
#

But you can’t find it in the shop

long sun
#

so?

zealous glen
#

So it’s not “a copy”, it’s the Chariot the game has

long sun
#

idk i've argued about this before

zealous glen
#

And so the game can’t sell it to you because you already have it

long sun
#

it's the wording i settled on, and people seem to understand what it means, so i'm sticking with it

stiff locust
zealous glen
modern kindle
#

At the end of the day it's their mod, if they want it then it's not a big deal it's just text that can be changed later

stiff locust
#

on my way to localize their mod to "british english" where i update that wording and change ize to ise

long sun
#

:)))

zealous glen
long sun
#

tempted to make two versions if i have the zed / ess problem

zealous glen
#

We used it in Cosmos

#

And Streamers didn’t get it

stiff locust
#

creates a planet card of the last played poker hand isnt it

modern kindle
zealous glen
#

on my way to add a mod compat layer to their mod where I reword everything

#

/j

long sun
#

you do you ^^

#

i literally don't mind, it's open source

zealous glen
long sun
#

ya but streamers

zealous glen
#

So they know the game inside and out

modern kindle
#

Yea i was just poking fun at streamers being incapable of reading shit and just doing shit

zealous glen
#

I think the issue was that thunk chose bad wording

long sun
#

if roffle won't get it then it's too complicated :))) /j/j/j

stiff locust
#

are there any streamers who stream dimserene's modpack

zealous glen
#

“final hand of round” and “final poker hand of round” and I think a third one

#

And they’re all different

long sun
#

ya that is an issue

zealous glen
long sun
#

while the wording is understandable, it needs to be more rigorous

zealous glen
#

I don’t think it needs to be more rigorous

#

I do think it needs to be clear and somewhat consistent

long sun
#

...so, rigorous :3

zealous glen
quartz ravine
#

Hi folks, does someone have a simple example of a custom planet card to level a custom hand? The SMODs docs don't really cover this

zealous glen
#

So not rigorous

long sun
#

but like. that's what that word means??

#

careful, thought out

zealous glen
#

I see “rigorous” as adhering to a consistent template

#

While brevity and clarity want to deviate from a template

long sun
#

also, consistency is its own clarity

#

by being consistent, you're making your abilities more clear

zealous glen
#

That is true, somewhat, but only for people deep into the game

#

I think clarity is better as grokkability

long sun
#

ugh i don't wanna argue with you, i could be doing other things

zealous glen
#

Someone reading the effect for the first time intuitively understanding it

modern kindle
#

Frankly just live life like I be and don't be reading that way you can't misunderstand it

zealous glen
#

-# I saw it more as a conversation than an argument 🤔

glad osprey
modern kindle
#

What doesn't balatro have to do with it

long sun
quartz ravine
#

Mom and dad,. stop fighting!

modern kindle
#

U taught me a new word today vic

long sun
#

i presume it was named after that word

zealous glen
long sun
#

i remind myself of my dad when i argue 😭😭😭

glad osprey
# zealous glen

so twitters ai is named after the exact opposite of twitter gotcha

zealous glen
#

I dont even think I’m fighting

#

I’m just vibing

modern kindle
#

I think we should all be extremely aggressive

zealous glen
#

My autocorrect doesn’t want me to vibe

quartz ravine
#

Back on topic : me asking for help while contributing nothing

long sun
#

i've got a constructive question! :D

glad osprey
long sun
#

what's the name of the centre for seals?

zealous glen
zealous glen
long sun
#

ah no i mean like

zealous glen
#

The pool?

long sun
#

G.P_CENTERS.?

quartz ravine
#

anyone see why, if I have more than one '2' in my hand, instead of the animation proccing for each '2', it procs x times for the final in the hand?

elseif context.destroy_card and context.cardarea == G.play then
      --it was a  high card, we will eat 2's

    if context.destroy_card:get_id() == 2 then
      sendInfoMessage("This is a 2 " .. context.destroy_card:get_id(), self.key)

      card.ability.extra = card.ability.extra + card.ability.extraGrowthRate
      G.E_MANAGER:add_event(Event({
          trigger = 'after',
          delay = 0.45,
          func = function()
              play_sound("Fox_yoshiEat", 1.05)
              context.destroy_card:juice_up(0.3, 0.3);
              return { remove = true, card=context.destroy_card }
          end
      }))
      sendInfoMessage("we are going to destroy this card", self.key)

      return { remove = true,card=context.destroy_card }
  end
end
long sun
#

i wanna add a tooltip for Purple Seals

zealous glen
#

I think there’s a P_SEALS

long sun
#

not seeing it

#

but will test

onyx sonnet
zealous glen
#

That doesn’t help your problem

hushed field
#

Grok's a word coined by Heinlein, the author of ' i have no mouth and i must scream', which makes Grok being named after a fun reference to Elon Musk being an idiot that doesn't understand the fiction he worships. It's also, through that, a reference to fucking Rocco's Basilisk, because he's a nerd that doesn't understand philsophy at all, haha

zealous glen
#

But I do recommend it

zealous glen
hushed field
#

I have insanely strong opinions on it, but I'll refrain from shouting here because I don't wanna saddle the mods with giving me deserved warnings about the words I'd spout, haha

zealous glen
long sun
#

bingo :D

zealous glen
#

Also the Event can just return true

hushed field
quartz ravine
#

Weird...for some reason, when I broke my .lua files out into separate files instead of one huge essay, some process is loading them twice