#💻・modding-dev

1 messages · Page 645 of 1

pulsar hawk
#

4? Handy's got like, x512. it go nyoom

hallow moat
#

no. I do x512 on handy and talisman + handy animation skip and it still takes forever. Talisman and handy combined max out at about 300 triggers per second

faint yacht
#

...x512 is safe max.

hallow moat
#

but still. I'd need to go at about 50,000x speed for it to even be as fast as I want it to

faint yacht
#

Plus, the only real way to speed up such calculation is to multithread the calculation, but that is not as easy as it sounds - much like IDE vs SATA, where former had to make sure the "pipes" were in sync, but latter just had a faster pipe throughput.

hallow moat
#

I assume you're pretty knowledgable with coding, meanwhile I rely on chatgpt so... XD

faint yacht
#

Alternatively, think many small pipes splitting and reconverging vs one huge pipe.

wanton jolt
#

i do that for my sourcemod texture generation

grizzled tide
#

i was looking through the vanilla remade script and saw:
SMODS.poll_seal({ mod = 10 })

what does mod mean in this context?

hallow moat
#

I got my mod to work! The calculation time for any amount of reserved parking, mimes, and hand size is now instant!

grizzled tide
daring fern
grizzled tide
#

sick

#

thank you

wild patrol
#

Using attention_text is there a way to add a limit on text before it starts a new line?

hallow moat
#

guys I think that perkeo maxes out after a couple hundred negative spectral cards...
so now I have to make a mod for that too

slim ferry
#

it definitely does not do that

grizzled tide
#

how do i go about looping through G.pack_cards.cards? it seems open_booster doesnt wait for the pack to fully open

subtle hawk
#

What exactly are you doing anyway?

grizzled tide
subtle hawk
#

I think you would have to loop through G for that? Maybe? Not sure?

grizzled tide
#

er-

faint yacht
#

Make an event that checks if that exists.

grizzled tide
#

how would i make the card still give messages if its through an event?

faint yacht
#

Just simply call the message causing functions on the wanted cards if the area exists and actually has cards in it.

grizzled tide
faint yacht
#

SMODS.calculate_effect{ message = 'farts' }, card, where card is the card you want to do it on.

grizzled tide
#

sick, thank you

#

how do I pass the card itself to the event?

slim ferry
#

You dont need to, the card variable will still exist

grizzled tide
#

huh- maybe ive overwritten card then

subtle hawk
grizzled tide
#

ofc

subtle hawk
#

Ah!

#

SMODS.calculate_effect({message = message}, card)

#

I think

slim ferry
#

Yeah

subtle hawk
#

The ()

faint yacht
#

-# That's on me, sorry, was writing on mobile.

grizzled tide
#

Oop- thats also my bad

#

thx

subtle hawk
#

@grizzled tide forget what I said about multiple cardareas that's bullshit

grizzled tide
#

all good 😭

junior tapir
#

Does anyone know how make a new line in main_start?

grizzled tide
#

why does shop not save changes made to it with modify_shop_card 😭

#

ok

#

so

#

it doesnt save if you put set_seal in an event

#

for some reason-

hallow moat
#

I released my instant reserved parking mod haha. It's not much, and it's incredibly niche, but it's something

grizzled tide
#

anyone have any idea why this closes out balatro

daring fern
grizzled tide
#

ah

#

is there a context for launching the game? whenever i destroy the card in modify_shop_card then leave and reenter the run, it reappears

stiff locust
#

is there a way i could patch every instance of a piece of code (and is it a good idea to do so)

stiff locust
#

should I do it anyway

lyric wadi
#

how doyou do info queue again

#

i thought i learnt this and i keep find out i actually never learnt it

slim ferry
stiff locust
#

you can also do G.P_CENTERS.j_splash instead of ["j_splash"] both are the same

warped ocean
#

yo trying to do smth rn ! the card does do the part where it scales the mult but it doesnt use said mult when it comes to joker.main

warped ocean
#

fixed it! had to put the context.joker_main before the context.before lol

slim ferry
#

im pretty sure the joker_main was inside of the before check

#

which was probably the issue

#

though its hard to see because the indentation is off

#

visualized

#

its probably messed up because it looks like you forgot an end after the jack check

wild patrol
#

is there a version of Font:getWrap for balatro

#

trying to use it but says it's a nil value

#

when trying to use it

faint yacht
wild patrol
#

yeah trying to use that

#

attempt to call method 'getWrap' a nil value

faint yacht
#

You use that on a Font object created by love.graphics.newFont or love.graphics.newImageFont and the like.

#

You also could get current Font object by love.graphics.getFont().

wild patrol
#

I just need a word wrap for the text already in-game

#
    if not whitelist[user:lower()] then return end
    if is_on_cooldown() then return end
    if not text_to_show or text_to_show == "" then text_to_show = "Hello!" end

-- we still need a better way to scale and wrap text

    local screen_h = love.graphics.getHeight()
    local target_h = screen_h 
    local scale_factor = target_h / 64
    local holdtime = text_to_show:len() / 10
    attention_text({
        text = text_to_show, 
        scale = 0.8,
        maxw = scale_factor,
        hold = holdtime,
        align = 'cm',
        colour = G.C.WHITE,
        major = G.play
    })
    play_sound('voice1', 0.8, 0.5)
end```
#

I've got most everything from scaling to time on screen

#

but need a wordwrap so text doesn't get so small it's unreadable or text so long it bleeds off screen

wild patrol
faint yacht
wild patrol
#

is m6x11plus.ttf the default font already or do i need to set that

faint yacht
#

Think so.

wild patrol
#

apparently file 6x11plut.tff doens't exist

#

oh typo

#

that's why

#

even when typo is fix says the file doesn't exists

#

weird shouldn't it be in balatros files already?

#

now I got a local node a number value error lol

#

man I love lua

wild patrol
# faint yacht Think so.
    if not whitelist[user:lower()] then return end
    if is_on_cooldown() then return end
    if not text_to_show or text_to_show == "" then text_to_show = "Hello!" end

-- we still need a better way to scale and wrap text

    local screen_h = love.graphics.getHeight()
    local target_h = screen_h 
    local scale_factor = target_h / 64
    local holdtime = text_to_show:len() / 10
    attention_text({
        text = text_to_show, 
        scale = 0.8,
        maxw = scale_factor,
        hold = holdtime,
        align = 'cm',
        colour = G.C.WHITE,
        major = G.play
    })
    play_sound('voice1', 0.8, 0.5)
end




chat_commands.text2 = function(_, user, text_to_show)
    if not whitelist[user:lower()] then return end
    if is_on_cooldown() then return end
    if not text_to_show or text_to_show == "" then text_to_show = "Hello!" end
    local screen_h = love.graphics.getHeight()
    local target_h = screen_h 
    local scale_factor = target_h / 64
    local holdtime = text_to_show:len() / 10
    Font = love.graphics.newFont ("/resources/fonts/m6x11plus.ttf", 60)
    love.graphics.setFont(Font)
    attention_text({
        text = love.graphics.printf(text_to_show, 12, 12, 60, "center"),
        hold = holdtime,
    })
    play_sound('voice1', 0.8, 0.5)
end```
#

so both work

#

but the second version only spits out text

#

but the first one spits out the text that comes aftter the !text command

#

not sure what breaks here

#

text_to_show is supposed to spit out the text generated by chat memeber

faint yacht
#

¯_(ツ)_/¯

wild patrol
#

it just breaks

#

this is weird as fuck

#

but it out puts test as the text

#

but there's no mention of test anywhere

wild patrol
#

I found the closes solution

#
        text = {function()
            love.draw()
            love.graphics.printf(text_to_show, 0, 0, 200, "center")
        end},
        hold = holdtime,
        align = 'cm',
        colour = G.C.WHITE,
        major = G.play
    })
    play_sound('voice1', 0.8, 0.5)
end```
#

the only problem is the text to show

#

printtf wasn'ts to read it as a colour table

#

instead of just the " "

#

so not sure what to do here

wanton jolt
#

wtf does this do

stiff locust
#

it can be pulled from like a rarity group, lets you categorise things

#

like food jokers could be a pool

#

that line puts the joker in the specified pool

#

ii think

wanton jolt
#

where would i list all the pools then

stiff locust
#

G.P_CENTERS.pools iirc?

#

idk i forgot everything pool related after making curator

wanton jolt
#

i mean

#

i guess

red flower
#

the pools are in G.P_CENTER_POOLS

wanton jolt
#

no i mean if i had to organize it in its own lua file

red flower
#

what do you mean

wanton jolt
#

like take for example vanillaremade

#

do i need a separate file to make sure pools exist or do they just exist

#

when i list them in a joker

red flower
#

you need to declare an SMODS.ObjectType before making the joker

#

either in that file or in another one that loads first

stiff locust
#

speaking of vanillaremade while ive got you here N i tried to use the VR random voucher code and the g.hand cardarea showed up when i ran it in the shop which blocked like half the shop buttons

#

any idea why it would be doing that

wanton jolt
#

is SMODS.Joker a SMODS.ObjectType then?

red flower
stiff locust
#

no smods.objecttype is its own thing

wanton jolt
#

oh ok

wintry solar
#

It’s 100% a state issue, what’s the code look like?

stiff locust
red flower
#

weird i remember testing it and the area didn't stay

wanton jolt
#

i dont even see objecttype in jokers.lua 😭😭

red flower
wintry solar
#

Oh it’s my code lol

red flower
stiff locust
wanton jolt
#

VR

#

or even mine

#

my jokers work and i did not declare object type

#

aiko neither (atleast idk where)

red flower
#

vremade doesnt use pools

wintry solar
#

It’ll be because of doing it in the shop I think

stiff locust
#

well I kind of need to do it in the shop

wintry solar
#

Although actually redeem is normally called in the shop

stiff locust
#

it might be handy speedup doing it i'll check that

wild patrol
#

I've tried everything I can't get text to wrap in the center

#
    if not whitelist[user:lower()] then return end
    if is_on_cooldown() then return end
    if not text_to_show or text_to_show == love.graphics.printf("", 100, 50, 1, "center") then text_to_show = love.graphics.printf("Hello!", 100, 50, 1, "center") end
    local screen_h = love.graphics.getHeight()
    local target_h = screen_h 
    local scale_factor = target_h / 64
    local holdtime = text_to_show:len() / 10
    Font = love.graphics.newFont ("/resources/fonts/m6x11plus.ttf", 60)
    love.graphics.setFont(Font)
    attention_text({
        text = text_to_show,
        scale = 0.8,
--        maxw = scale_factor,
        hold = holdtime,
        align = 'cm',
        colour = G.C.WHITE,
        major = G.play
    })
    play_sound('voice1', 0.8, 0.5)
end```
red flower
wanton jolt
#

because thats where i got the pool thing from

red flower
#

well you can ignore it if you dont need it

stiff locust
wintry solar
#

I was looking at pools yesterday, I think they will be auto created if there isn’t an object type but I can’t check the code very well right now

stiff locust
#

i set it to 1x and it still happens

wanton jolt
#

i mean i'm gonna make inscryption cards later so i probably would need a pool for the booster to grab from right

stiff locust
#

is there a way I can get rid of the G.hand area manually then

wintry solar
wanton jolt
#

i feel like aiko uses pools as card tags

stiff locust
#

just the area (grey box and 0/8 handsize text)

#

no cards

#

it goes away when exiting the shop

red flower
#

oh yeah the hand does stay

#

this fixes it

#

it will still show the hand but i think you need to hook cardarea draw to stop that

#

im not sure which part of :redeem changes the state but i dont want to investigate

wild patrol
#

is there anything to use in SMOD for text? That might have the ability to wrap text properly in the center

red flower
# primal robin

oh wait i was accidentally checking the vanilla code because it didn't load the lovely patches
thanks

wild patrol
#

is there a setting i can try with the love.graphics. that I probably haven't tried

#

I've tried setting the value for the width and it never wraps back

primal robin
#

mod description definitely have some logic for text wrapping

wild patrol
#
    if not whitelist[user:lower()] then return end
    if is_on_cooldown() then return end
    if not text_to_show or text_to_show == "" then text_to_show = "Hello!" end

-- we still need a better way to scale and wrap text
    local fuck = text_to_show
    local screen_h = love.graphics.getHeight()
    local target_h = screen_h 
    local scale_factor = target_h / 64
    local holdtime = text_to_show:len() / 10
    local count = fuck:gsub("\n", "\n")
    attention_text({
        text = count,
        scale = 0.8,
        maxw = scale_factor,
        hold = holdtime,
        align = 'cm',
        colour = G.C.WHITE,
        major = G.play
    })
    play_sound('voice1', 0.8, 0.5)
end

chat_commands.text2 = function(_, user, text_to_show)
    if not whitelist[user:lower()] then return end
    if is_on_cooldown() then return end
    if not text_to_show or text_to_show == love.graphics.printf("", 100, 50, 1, "center") then text_to_show = love.graphics.printf("Hello!", 100, 50, 1, "center") end
    local screen_h = love.graphics.getHeight()
    local target_h = screen_h 
    local scale_factor = target_h / 64
    local holdtime = text_to_show:len() / 10
    Font = love.graphics.newFont ("/resources/fonts/m6x11plus.ttf", 60)
    love.graphics.setFont(Font)
    attention_text({
        text = text_to_show,
        scale = 0.8,
--        maxw = scale_factor,
        hold = holdtime,
        align = 'cm',
        colour = G.C.WHITE,
        major = G.play
    })
    play_sound('voice1', 0.8, 0.5)
end


chat_commands.text3 = function(_, user, text_to_show)
    if not whitelist[user:lower()] then return end
    if is_on_cooldown() then return end
    Font = love.graphics.newFont ("/resources/fonts/m6x11plus.ttf", 1)
    love.graphics.setFont(Font)
    if not text_to_show or text_to_show == love.graphics.newText( Font, "" ) then text_to_show = love.graphics.newText( Font, "Hello!" ) end
    local screen_h = love.graphics.getHeight()
    local target_h = screen_h 
    local scale_factor = target_h / 64
    local holdtime = text_to_show:len() / 10
    Font:getWrap( text_to_show, 64 )
    attention_text({
        text = text_to_show,
        scale = 0.8,
        maxw = scale_factor,
        hold = holdtime,
        align = 'cm',
        colour = G.C.WHITE,
        major = G.play
    })

    play_sound('voice1', 0.8, 0.5)
end```
red flower
#

oh true

wild patrol
#

tried 3 different attempts

#

all them render the text off screen after a certain amount of characters

red flower
#
local function wrapText(text, maxChars)
    local wrappedText = ""
    local currentLineLength = 0

    for word in text:gmatch("%S+") do
        if currentLineLength + #word <= maxChars then
            wrappedText = wrappedText .. word .. ' '
            currentLineLength = currentLineLength + #word + 1
        else
            wrappedText = wrappedText .. '\n' .. word .. ' '
            currentLineLength = #word + 1
        end
    end

    return wrappedText
end
#

thats what the mod desc use

wild patrol
#

i'll slap this in see if it works

stiff locust
#

hoping it gets fixed for next smods version

wild patrol
red flower
#

no?

red flower
#

it will probably look uglier but eh

#

alternatively i can try to figure out how to make G.FUNCS.use_card work

wild patrol
#

It still didn't work

#
    if not whitelist[user:lower()] then return end
    if is_on_cooldown() then return end
    if not text_to_show or text_to_show ==  wrapText("", 30) then text_to_show =  wrapText(text_to_show, "Hello!") end

    local screen_h = love.graphics.getHeight()
    local target_h = screen_h 
    local scale_factor = target_h / 64
    local holdtime = text_to_show:len() / 10
    attention_text({
        text = text_to_show, 
        scale = 0.8,
        vert = true,
        DynaText = true,
--        maxw = scale_factor,
        hold = holdtime,
        align = 'cm',
        colour = G.C.WHITE,
        major = G.play
    })
    play_sound('voice1', 0.8, 0.5)
end```
#

Unless I have it in the wrong location

#

text still works fine

red flower
wild patrol
#

text to show wasn't supposed to go there was supposed to be wrapText("Hello!", 30)

stiff locust
wild patrol
#

that's supposed to be a default if there's no text input after !text command

red flower
#

anyway i dont think attention text supports \n

red flower
stiff locust
#

oh

#

add a comment

red flower
#

i dont think balatro modders know how to read

#

i think use_card can solve the problem but i just lost power so i cant test : )

stiff locust
#

aw man

#

that sucks

red flower
#

its fine its an excuse to not do stuff for work

stiff locust
#

its a reason not an excuse

#

calling it an excuse is admitting it is not good enough to stop you

#

never admit your faults

primal robin
#

That's why every time I check SMODS and game code directly and not rely on docs or wiki

wild patrol
#

even tried changing '\n' to '[s]' see if maybe that would work

red flower
#

what

wild patrol
#

it didn't :(

primal robin
#

Because there's no way all caveats explained on wiki page

red flower
#

caveats of what

#

what are you talking about

wild patrol
#

gonna be honest the wiki hasn't been much help i've gonna better help from the vanilla link people have posted

#

and searching on the love2d forums

primal robin
#

nvm just talking with myself kinda

wild patrol
#

for built in stuff to love engine

#

I think i'm gonna take a break from the text command for now

#

I wonder if I could rework how the text is handle for describing joker abilities

#

and just slap together some Frankenstein code to just work

wintry solar
#

What are you trying to do?

wild patrol
#

@wintry solar get the text to center itself and wrap around in the center instead of going off screen

#

A temp solution has been to just scale down the text base on the length but it becomes unreadable at certain lenghts

wintry solar
#

Don’t you just need to rewrite the function to display multiple nodes rather than a singular one?

wild patrol
#

the text displayed is pulled directly from twitch chat

#

so not sure if that would work but maybe

wintry solar
#

Yeah but you’re plugging it into a system that will only display one line

#

You need to modify the attention_text function to allow for multiple strings and then just do your splitting beforehand

wild patrol
#

i'll give that a shot tomorrow

#

been fiddling with this for 3 hours now

stark geode
#

trying to make a mod again and holy shit im rusty

west monolith
red flower
stiff locust
#

yay

red flower
#

it also does the proper animation of lowering the shop

final jewel
#

Is there a context that trigger things like final_scoring_step but before the joker_main like it make thing not being able to be retrigger

#

I look at the wiki and didnt find one

stiff locust
#

p sure there is

#

idk what it is though

final jewel
#

oh thats helping me a lot

stiff locust
#

well ive seen it before

#

but idk the name

#

ill let you know if i see it again

final jewel
final jewel
#

is it trigger after all card are score normaly

stiff locust
#

does context.after work for what you want

final jewel
sturdy compass
red flower
final jewel
#

oh

#

so no its not that

red flower
#

i dont understand if you want something before joker_main or after

final jewel
#

like between individual and joker_main

red flower
#

pre_joker maybe idk if jokers get that

stiff locust
#

what if you just do individual then put a blockable + blocking event so it happens right after individual

red flower
#

events wont let you score

final jewel
stiff locust
#

untrue

final jewel
#

if nothing exist I'll need to create the context

stiff locust
#

well maybe true ive only ever done like

#

directly modifying the hand chips value

final jewel
frosty rampart
#

this is for your overcharge thing right? custom context seems reasonable

red flower
#

also im pretty sure calculations that dont return dont retrigger

#

you can use joker_main + calculate_effect

#

but idk the context of the effect here

final jewel
stiff locust
#

making new contexts is easy

#

the hard part would be finding the spot where you need to call the context for it to work

final jewel
stiff locust
#

i think its just
SMODS.calculate_context("modprefix_contextname" = true)

#

it has arguments too for like, other stuff the context contains i think? like how context.buying_card has context.card

#

i never used the arguments though

#

the modprefix isnt needed its just etiquette

final jewel
#

So my context will be context.end_scoring

#

or context.scoring_end

#

what is the best name

red flower
#

if you want it before joker_main then neither lol

#

thats the middle of scoring

final jewel
#

so conxtext.before_joker_main

red flower
#

yeah i would still add the mod prefix

final jewel
#

yeah

#

context.giga_before_joker_main its long tho

red flower
#

context.giga_pre_joker?

final jewel
#

oh thats better

rotund sable
stiff locust
red flower
final jewel
#

same

final jewel
#

but where is the function that trigger all calculate ability that calculate everything

red flower
#

what

final jewel
#

uhm mb where should I patch my thing I mean which file should I patch

red flower
#

around here

stark geode
#

Suffering from a lack of practice

#

I've forgotten like

#

Everything

sturdy compass
stark geode
sturdy compass
#

As is to be expected from such a hiatus

wanton jolt
#

ace was printed twice but event played once it seems

final jewel
#

im kinda lost

wanton jolt
#

i saw it debuff twice, but the final one its as if it debuffed once

ripe thicket
#

im trying to level up all hands at once but I have no clue what to do to make it do that 💔
I tried looking at the smods wiki and whatever the black hole spectral did but all it did was just crash my game

red flower
red flower
ripe thicket
wanton jolt
#

oh my god it worked

#

its so scuffed

red flower
#

also card should be a card object not a boolean

ripe thicket
#

oh I see

red flower
#

like the payload? yes

final jewel
#

but like where I did it is before joker_main, no ?

red flower
#

yes but you might as well just use initial_scoring_step if you patch it there

final jewel
#

like after initial scoring step ?

wanton jolt
red flower
#

you want after individual, right?

grizzled tide
wanton jolt
#
SMODS.Joker {
    atlas = 'inscryptionJokers',
    pos = { x = 2, y = 3 },
    soul_pos = {
        x = 2, y = 2, draw = function (card, scale_mod, rotate_mod)
            card.children.floating_sprite:draw_shader('dissolve',0, nil, nil, card.children.center,scale_mod, rotate_mod,0,0 - 0.2,nil, 0.2)
            card.children.floating_sprite:draw_shader('dissolve', nil, nil, nil, card.children.center, scale_mod, rotate_mod,0,0-0.2)
        end
    },
    pools = {["Inscryption"] = true },
    key = "felijo_ins_evgast",
    rarity = 3,
    cost = 8,
    config = { extra = { debuff = 0.01 } },
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.debuff} }
    end,
    calculate = function(self, card, context)
        local event
        event = Event{
            trigger = "ease",
            blocking = true,
            ref_table = G.GAME.blind,
            ref_value = "chip_text",
            ease_to = number_format(G.GAME.blind.chips),
        }
        local aces = 0
        if context.individual and context.cardarea == G.play and context.other_card:get_id() == 14 then
            aces = aces + 1
            G.GAME.blind.chips = math.floor(G.GAME.blind.chips * ( 1 - (card.ability.extra.debuff * aces) ))
            G.E_MANAGER:add_event(event)
            return {}
        
        end
    end,
    blueprint_compat = true,
}
red flower
final jewel
red flower
final jewel
#

so which line

#

Im lost because of my lack of english word known

red flower
final jewel
red flower
#

yeah

final jewel
#

ok so found out it trigger at the right time but 2 times and it trigger 2 additional time after the joker_main

junior tapir
#

How can I change a joker description? Like you know how it changes when a joker is unlocked or not, I want to do something like that where the description completely changes in different scenarios (a joker to imitate another joker before being bought). Any tips?

slim ferry
#

return a key in loc_vars

round lion
#

you know the description thing is a table right?

slim ferry
#

mkaes it use a different description key from the localization

ripe thicket
grizzled tide
#

er

#

this is a bit silly, but why not call it multiple times

red flower
#

there's an amount argument lol

junior tapir
grizzled tide
red flower
slim ferry
#

actually

ripe thicket
#

I've been trying to find something like that in the wiki forever

round lion
slim ferry
#

the text isnt in card.ability

round lion
#

wait i forgot

slim ferry
#

even if it was it would be a table

round lion
#

ANDDD out of the window.

slim ferry
#

plus using the plain string wouldnt format it correctly

round lion
#

i feel like im too stupid to continue work kn lua

violet oasis
#

Is it natively possible to prevent a specific Planet or Tarot from spawning? Or will I have to resort to hooking?

red flower
violet oasis
#

Perfect, thanks!

warped ocean
#

yo yall, how would i go about a joker that changes a card's rank

stiff locust
#

you suffer with smods.change_base

#

i fucking hate smods.change_base

frosty rampart
#

assert(SMODS.change_base(card, nil, "Ace")) changes card's rank to Ace

warped ocean
#

o7

stiff locust
#

except sometimes it just crashes and you have to remove the assert

warped ocean
#

ty boss

stiff locust
#

and then it crashes again and you gotta put it back

warped ocean
#

but wouldnt it be simpler with just putting the id of the rank lmao

stiff locust
#

I don't get it no one else had this problem

#

i will hold this grudge forever

red flower
#

assert wont change if it crashes

frosty rampart
stiff locust
#

it did though

red flower
#

if assert crashes but normally it doesnt then the function didnt work anyway

#

because assert only crashes when the function throws an error

#

idk why im repeating myself we already talked about this lmao

warped ocean
#

also how do u make the joker shake without displaying a message lol

red flower
#

card:juice_up()

warped ocean
#

ty!

red flower
stiff locust
#

removing/adding assert fixed crashes on toaster and rainstorm

#

I remember doing this very clearly because I was pissed about it

red flower
#

youre appeasing the lua gods

stiff locust
#

the lua gods hate me

#

i was only a vessel with which they used to make curator

#

jokebox is an asset of the devil

wanton jolt
#

my game crashed when i tried spawning a second identical custom legendary

#

no logs

#

nevermind the legendary spawning caused the crash

stark geode
#

Once again I'm resisting the urge to make a cli balatro package manager

shell timber
#

it's called git

warped ocean
#

how would i go about implementing a joker that changes face cards that are held in hand

#

(i cant remember if theres an og balatro joker i can look at for that lol)

frosty rampart
#

what change do you want to make

warped ocean
#

change held face cards into queens

stark geode
shell timber
#

that's doable with an is_rank override

#

wait i misunderstood

#

still very doable

#

also another estrogen joker has hit the modding space

frosty rampart
#

loop over G.hand.cards, check if a card is a face and not a queen, and then SMODS.change_base it to a queen if it meets the conditions

rotund sable
warped ocean
#

i just couldnt find how i were to find the cards lol

shell timber
#

i think ouija could be a good starting place to look at

#

for something similarish

slim ferry
#

how does weegee board works?

warped ocean
#

cause there wasnt a context.scored_hand

warped ocean
#

it is far more sinister

#

and probably shouldnt see the light of day outside its community

shell timber
#

do you have a suggestion

slim ferry
#

is it a suggestion

warped ocean
#

didnt work for some reason lmao (if its me being stupid im sorry)

frosty rampart
#

scored_card, not context.other_card

warped ocean
#

yeah but still it didnt print the debug message-

#

ill try it anyways

frosty rampart
#

that one's probably because it's print("something") in lua

shell timber
#

you could also consider flipping the card before and after using events

shell timber
slim ferry
#

wait wtdf

#

wtf

#

since when

warped ocean
#

yeah nah it just straight up didnt work

frosty rampart
#

oh yep then it's the context.cardarea check i think
a joker calculating in context.before will never be in the G.hand cardarea

#

because it's in G.jokers

warped ocean
#

ohhh

#

ic ty <3

tight pumice
#

Anyone able to help with a crash? First time I've had one where I really don't know what the issue could be

sharp arch
#

I need help linking a UIbox to a variable (or in this case a button)

tight pumice
#

Okie dokie then

warped ocean
frosty rampart
#

no, keep the context.before, remove the context.cardarea check

warped ocean
#

alr o7

tight pumice
#

The crash occurs when selecting a blind after using a spectral I created that sets jokers perishable

slim ferry
#

well you have duplicate talisman so thats probably something you should resolve

#

and also show the code of the card

warped ocean
tight pumice
#

The spectral seems to work fine, setting the proper jokers perishable and such, but then the crash happens when a blind is selected

#

I know I was just giving full context first

warped ocean
#

-# lua crash reports arent the nicest lmao

frosty rampart
#

your talisman is also wildly outdated (and you should be using amulet anyway)

tight pumice
#

Too many words at once here

warped ocean
#

all work :D

#

ty mates

#

now to make it look pretty lmao

tight pumice
#

This is the relevant code

slim ferry
#

you should do jokers_to_decay[i]:add_sticker("perishable")

#

so it properly runs the sticker apply

tight pumice
#

Figured that what I was doing wasn't the proper method, I was borrowing my own code from one of the first jokers I programmed

#

Surprised it didn't have an issue with the first one though

slim ferry
#

well perishable normally sets an extra value on the card

sharp arch
#

so I haveth this code here, adn I wanna know how to set it to show up when my custom button is pressed

slim ferry
#

rental and eternal work because they dont use any extra values

tight pumice
#

I have a joker that disables the perishable status of a random joker and this was the code I used to attempt to do that, never seemed to have any issues but is there a more proper way to go about that

#

Maybe I just haven't tested it fully yet and there's issues waiting to crop up

slim ferry
#

there definitely is a better way

#

but

#

i forgot

tight pumice
#

I'll play around with it some more later and if anything explodes I'll give it more time

frosty rampart
#

I'm pretty sure you should be able to do card:remove_sticker("perishable")

warped ocean
slim ferry
#

oh thats a thing

frosty rampart
#

not sure if that works specifically for an already debuffed perishable card but I'm pretty sure that's the function in general

#

worst case you can directly call the sticker's apply function with card, false as the arguments

shell timber
tight pumice
#

should I keep the debuff method the same way?

#

Or is there a cool function for applying/deapplying a debuff

slim ferry
#

the debuff should be removed when perishable gets removed

#

i think

tight pumice
#

I didn't send the full context for the guy but he also is meant to remove a debuff from a joker even if they aren't perishable

#

basically just in the circumstances of like, crimson heart

#

I think it'll be okay like it is but it probably is better with the change to use remove_sticker

#

Thanks for the help

warped ocean
#

oh its just card:flip() lol

#

oop nvm

#

it just stayed flip lol

slim ferry
#

you need to flip it again

warped ocean
#

oh lol it just didnt show that in the remade

dawn granite
frosty rampart
#

you probably need at least one more end

#

or have one too many ends

#

your indentation is wack so i can't tell what the issue is exactly without seeing more of the calculate code

dawn granite
#

here's the calculate code

sharp arch
#
-- Will be called whenever the button is clicked
G.FUNCS.jabong_fishop_click = function(e)
 
  local card = e.config.ref_table 
  if portopen == false then
    portopen = true
    print("Port State is currently Open") --for debugging
  end
  
  
end``` anyone wanna help me link this button to my custom uibox
frosty rampart
frosty rampart
tight pumice
#

Any obvious reason the stickers wouldn't be adding? Thought maybe I could've misspelled something or misplaced something but I don't see anything like that

#

The juice up animation and the tarot sounds are happening so its solely just the sticker adding that's failing

daring fern
tight pumice
#

Thanks figured it was something like that

#

very cursed

#

I was curious if jokers that normally can't spawn perishable would be immune but thankfully they are not

sharp arch
#

ok well now my ui shows up but only in the intro cutscene, what the hell did I do 😭

frosty rampart
#

that would probably have to do with the UIBox code itself

#

if you want it to appear during actual gameplay, you should put it in a Game.start_run hook

sharp arch
#

oh gee whiz taht sounds like fun

#

do i have to put all the uibox code in or just the call

frosty rampart
#

the uibox definition itself, not the G.FUNCS.jabong_fishop_click function

sharp arch
#

this has something to do with the hook

frosty rampart
#

yea show the code

sharp arch
#

function Game.start_run()


   local ret = game_start_run_ref(self)
   
local fop = UIBox({
   definition = Fishingfunction("The Port"),
   config = {type = "cm", }
})
local fishingnode = {n=G.UIT.O, config={object = fop, button = "jabong_fishop_click"}}
    
function Fishingfunction(menu_name)
   return {n=G.UIT.ROOT, config={align = "cm", instance_type = MOVEABLE, juice = true,}, nodes={
      {n=G.UIT.R, config={align = "cm"}, nodes={
         {n=G.UIT.C, config={align = "cm"}, nodes={
            {n=G.UIT.T, config={text = menu_name, colour = G.C.UI.TEXT_LIGHT, scale = 0.5}}
         }},
         {n=G.UIT.C, config={align = "cm"}, nodes={
            -- add the port token count
            {n=G.UIT.T, config={text = "You have [idk] Port Tokens.", colour = G.C.UI.TEXT_LIGHT, scale = 0.5}, }
         }},
         {n=G.UIT.C, config={align = "cm"}, nodes={
            -- i'on even knoe
         }},
         -- Etc...
      }}
   }}

end

    print("please.")

    return ret
   
end
daring fern
frosty rampart
#

it needs to be like this

function Game:start_run(args)
  local ret = game_start_run_ref(self, args)
   -- your UIBox code
  return ret
end
#

the colon adds the self argument

sharp arch
#

and then
local game_start_run_ref = Game:start_run()?

daring fern
sharp arch
#

well now it crashes beacues on that line, a function is expected

#

ist even got the little squiggly

#

wait

frosty rampart
#

that would still be Game.start_run

sharp arch
#

this is also pointing to the actual function code????

#

hol up

#

nevermind i jsut cant read

frosty rampart
#

start_run is a function stored in the Game table. you use a period (.) to access anything stored in a table
you can use a colon (:) specifically when calling a function stored in a table to automatically pass the table itself as the first argument to the function. so Game:start_run(args) is effectively the same as Game.start_run(self, args)

sharp arch
#

yep im just incapable of reading 😭

#

im sorry yall have to put up with this

dawn granite
#

speaking of which

#

the mult isn't resetting properly, in this scenario it resets if a 10 or ace is held in hand, which shouldn't be happening, i tried removing context.cardarea but that made it stop working, what context should i use to make it only reset when played?

frosty rampart
#

unless you set local reset = false above this screenshot, reset is a global variable that stays true across calculate calls

dawn granite
#

ah i see

wintry solar
#

Should I make a flip card util

tidal hemlock
#

the start of a great new font

dawn granite
tidal hemlock
dawn granite
#

what the fu-

tidal hemlock
surreal mason
#

Is this looking ok?

#

@tidal hemlock You familiar with texture pack creation?

slim ferry
surreal mason
#

Ah, so simply rename shit and all's good

slim ferry
#

just make the file name in the code be the actual name of the spritesheet?

surreal mason
#

Yeah, I'm modifying another pack's .lua, but it should be ok?

tidal hemlock
#

i use jokerforge, do you think i have experience with coding

slim ferry
#

this guy loves pinging random people that happen to be online for help

#

dont mind him

tidal hemlock
#

fair

surreal mason
#
--- STEAMODDED HEADER
--- MOD_NAME: Vanilla Decks+
--- MOD_ID: VanDexPlus
--- PREFIX: VNDXPLS
--- MOD_AUTHOR: [NarratorFox]
--- MOD_DESCRIPTION: Subtle changes to base decks.
--- VERSION: 1.0.0
--- DEPENDENCIES: [malverk]

AltTexture{ -- VNDXPLS
    key = 'deck', -- alt_tex key
    set = 'Back', -- set to act upon
    path = 'VDPlus.png', -- path of sprites
    loc_txt = { -- localized name (this isn't used anywhere currently)
        name = 'Vanilla Decks+'
    },
    original_sheet = true
}
TexturePack{ -- VNDXPLS
    key = 'VNDXPLS', -- texpack key
    textures = { -- keys of AltTextures in this TexturePack
        'VNDXPLS_deck'
    },
    loc_txt = { -- localization entry for the TexturePack
        name = "Vanilla Decks+",
        text = {
            'Card back {C:attention}textures',
            'with a few slight tweaksf.'
        }
    }
}
#

How's that?

#

If it helps:

#

Fuck yeah

tidal hemlock
wanton jolt
#

how do i detect if a blind has been disabled

slim ferry
#

blind.disabled

wanton jolt
#

and it would trigger once right

slim ferry
#

What

#

wdym trigger once

#

Its just a check

wanton jolt
#

yeah

#

i'm stupid

#

so context.blind_disabled then

slim ferry
#

Is that a thing

wanton jolt
#

idk

slim ferry
#

What is even the goal

wanton jolt
#

create random joker with random edition on blind disable

slim ferry
#

Hook Blind.disable

#

Unless its the blind itself doing that then just use the disable function

wanton jolt
#

its a joker

hallow moat
#

Well I have accepted the fact that I just need to make custom mods for high performance now lol

#

Reserved parking is done. Next up I'll do my best to fix Yorick mod for stacking jokers. Probably won't work but it's worth a shot.

random basin
#

this has probably been asked a million times but I can't find it in the discord message history how to I get my mod added to the wiki/modloader page?

slim ferry
#

what is the modloader page

#

What mod loader has a page

#

If you mean the mod manager then the answer is brutal torture

#

And wiki is just make a page for your mod yourself

random basin
#

my bad yeah modmanager

red flower
lofty elm
#

hey gang, I'm having an issue where I think consumable.config.hand_type isnt really comparable to context.scoring_nameanyone know what I should be using?

for i, consumable in ipairs(G.consumeables.cards) do
    if consumable.ability.set == 'Planet' and not consumable.getting_sliced then
        if consumable.config.hand_type ~= context.scoring_name then    
            table.insert(destroyable_planets, consumable)
        end
    end
end
#

havnt done this in a while so it might be something obvious

#

I assume consumable.config.hand_type gives a hand type in a different form than context.scoring_name does but I'm not sure how to swap between them

frosty rampart
#

gimme 1 minute to verify something in-game but I probably have an answer for you

lofty elm
#

okie dokie, ty

frosty rampart
#

consumable.ability.hand_type

#

not config.hand_type

lofty elm
#

sweet, ill letcha know if that works

#

yup that worked, tysm!

grizzled tide
#

does anyone know the command to have the game save

red flower
#

save_run()

grizzled tide
#

thx

tidal hemlock
#

anomaly 38

tidal hemlock
#

how busted is this

grizzled tide
#

depends what an anomaly is

tidal hemlock
#

also why does this happen

frosty rampart
#

it's separate localization
jokerforge is probably being lame and not doing it correctly

tidal hemlock
oblique lotus
#

I am having trouble trying to define music for a booster pack. I am getting a thread error with this. Anyone have any clue why this might be?
||SMODS.Sound ({ volume = 1, pitch = 1, key = "music_combo_pack", path = "3_0driverOfTheChillVacation/music_combo_pack.ogg", select_music_track = function(self) return (G.booster_pack and not G.booster_pack.REMOVED and SMODS.OPENED_BOOSTER and SMODS.OPENED_BOOSTER.config.center.kind == "Combo") and 100 end })||

red flower
#

wow my app didn't want to unspoil that for some reason

#

can you post the crash log

oblique lotus
wanton jolt
#

how do i grab scroring_hand[1]'s rank?

red flower
#

and youre sure the file is in the correct place?

oblique lotus
#

I'm pretty sure. The rest of the sounds (granted they are sfx) are stored in the same place and load fine.

red flower
#

hmm no idea, doesnt seem to be a problem with the code

oblique lotus
#

It might be the sound file then. Odd. Thanks

#

Nvm, I accidentally placed it in a duplicated fodler of the mod. My bad.

wanton jolt
#

how do i get a card's suit and rank

oblique lotus
wanton jolt
#

i'm not looking for a specific suit like ancient joker would, im looking to get a card's suit

#

as in i'm merging two cards together

red flower
#

me when i make a wiki for common modding questions

wanton jolt
#

awesome

#

didn't know it had a wiki, i was trying to look for shit in smods wikiù

#

thanks so much

grizzled tide
#

any idea why reloading the game after the joker gets consumed has it returning?

wanton jolt
#

am i even doing this right

#

nah fuck it i'm using card center key

red flower
red flower
normal ridge
grizzled tide
grizzled tide
red flower
#

yes, anything not in an event runs immediately

#

destroy cards and calculate effect are events

red flower
#

the solution is to call save_run in an event too

normal ridge
grizzled tide
#

oop

#

lemme remove delay

#

otherwise like this right?

red flower
#

i would save after the message tho

#

i dont know if that affects anything actually

normal ridge
#

If the events are all of the same priority
Wouldn't affect anything i guess ?

grizzled tide
normal ridge
#

Oh yeah i forgot it's lua

red flower
normal ridge
red flower
normal ridge
red flower
#
func = function()
     save_run()
end
grizzled tide
#

o ok

red flower
#

func = save_run might work as well

#

without the ()

#

but not good practice

grizzled tide
#

o

#

why isnt it good practice?

wanton jolt
#

i want to double the base chips of a new card, how can i do that

red flower
grizzled tide
#

so- now i cant select anything after the cheese is destroyed 😭

red flower
#

sorry it's 12am

#

add return true

grizzled tide
#

thx

#

whatever youd do is way better than what i am doing 💀

red flower
#

that's also why it's bad practice lmao

normal ridge
wanton jolt
#

I basically merge two cards together

#

and its the same two ranks

#

so the new merged card should have double the chips

#

i thought it would be merged_card.chips = merged_card.chips * 2

grizzled tide
normal ridge
#

I guess ?

wanton jolt
#

how do i do that

oblique lotus
#

How can I change the amount of slots given by the negative edition for a certain type of card?

wanton jolt
#

i guess i could assign a perma bonus?

#

like hiker?

normal ridge
wanton jolt
#

no im basically creating one card with 50% chance of suit, edition etc

normal ridge
#

Oh okay :P

wanton jolt
#

i guess it would be merged_card.ability.perma_bonus = rank * 2

#

uhhh fuck

normal ridge
wanton jolt
#

it did the merge but it fucked my card area

normal ridge
#

How are you "adding" the card ?

#

The merged one

wanton jolt
#

i put it in deck

#

the one in the card area isnt the merged card

normal ridge
#

If it causes problems

wanton jolt
#

yeah basically it stays there

#

blocking the view

#

it has been deleted but not from the view

normal ridge
#

-# Also the "Microsoft" way to "fix" this is to redraw the entire graphics to get rid of this x)

#

-# /j

wanton jolt
#

lol

normal ridge
grizzled tide
#

er- could anyone help with this.
im trying to make all debuffed cards held in hand give x2

wanton jolt
#

ok so it left when i clicked the button to go to shop

grizzled tide
#

we LOVE if conditons 🤑 (i copied baron from vanillaremade)

normal ridge
normal ridge
wanton jolt
#

not rly because the cards will still be there on the next merge

red flower
normal ridge
grizzled tide
wanton jolt
#

stone joker doesnt remove cards?

normal ridge
wanton jolt
#

it adds correctly

#

i'm talking about removing the old ones

normal ridge
#

And trading card removes (one)

glass scaffold
#

Is it possible to add a custom description to Challenges?

grizzled tide
#

sure

glass scaffold
red flower
normal ridge
glass scaffold
red flower
# grizzled tide

dont use math.random pls
that's not the problem but you shouldn't use it

normal ridge
red flower
grizzled tide
#

what should i use to get a random card in hand

normal ridge
red flower
normal ridge
grizzled tide
#

still dont know the issue for xmult for in hand

red flower
#

yeah no idea it reads like it should work

lament agate
#

how do you make a joker not appear in the shop again

red flower
lament agate
#

im just gonna shut up and read the wiki

grizzled tide
glass scaffold
#

or something like that

wanton jolt
#

the fucking cards i deleted aren't disappearing waaaaa

red flower
#

it does for baron unless smods is bugged

normal ridge
#

And go to the trading card section

red flower
normal ridge
wanton jolt
lament agate
#

i want it not to appear in shop AND not be able to be created by Judgement

glass scaffold
normal ridge
lament agate
#

OH

#

yeah im kinda fucking dumb

#

thanks

glass scaffold
#

It's the end-all solution.

red flower
normal ridge
wanton jolt
#

ok so start dissolve fixed it

#

LOL

normal ridge
lament agate
#

98%

#

my bad yall

glass scaffold
red flower
#

i think if you don't understand what i wrote then you're dumb /j /j /j

normal ridge
wanton jolt
#

my fault og

normal ridge
grizzled tide
#

ok so testing with this, it does explicitly skip over debuffed cards which is very annoying

red flower
#

can you check if baron also does that

#

if it does then it's a bug

grizzled tide
normal ridge
red flower
normal ridge
red flower
#

i would do it but i need to sleep lol

grizzled tide
#

i dont have vanillaremade currently installed (as im just using it for refrence) but i can check base game real quick

red flower
#

you can also just copy paste the vremade code too

normal ridge
red flower
normal ridge
normal ridge
red flower
#

also you don't need to tell me what vremade has i made it

normal ridge
#

-# i'm eepy sorry D:

red flower
normal ridge
#

Yeah i'm so sorry ;-;

#

Had a hard time understanding D:

#

Should eep

lament agate
#

in other news, its clean now

red flower
#

tangents 2

lament agate
#

never happening

grizzled tide
red flower
grizzled tide
#

er

#

i dont know how to go about this 😭

normal ridge
normal ridge
red flower
grizzled tide
#

i dont know if thats a bug or not is the issue

red flower
#

im turning on my pc : )

normal ridge
lament agate
red flower
#

i dont trust you

normal ridge
normal ridge
lament agate
#

it was like this before

normal ridge
#

D:

lament agate
#

yeah its bad

#

😭

lament agate
normal ridge
#

Now ai crawlers won't touch your codies x)

wanton jolt
lament agate
#

in other words, can someone help me with config stuff?

normal ridge
#

Yuh !

lament agate
#

so i have this mod inside of my mod that changes the background into gm_construct but i want it so that its toggleable but i have no idea how 😭

wanton jolt
#
if wankers and dicks.wanked == 1 then
  return{
    wankers.satisfied = true,        
    }
end
oblique lotus
normal ridge
#

But i imagine you want some silly config tab in your mod's option so here it is !

#

-# When i'm back on my puter i can help ya with that :D

red flower
#

it seems like it got introduced a long time ago too

#

probably shortly after vremade got made

grizzled tide
normal ridge
red flower
#

well it's not normal people want to score debuffed cards

red flower
#

you can probably do something with all the new card slot stuff but idk how any of that works

glass scaffold
#

I copied the same format as SDM_0's Stuff for the challenges, so why is it not working on my end?

normal ridge
#

Check it's description and you will understand D:

#

Waaa,,,

wanton jolt
#

x&x&

glass scaffold
normal ridge
normal ridge
#

-# I always use 'hello' instead of "welcome"
-# For no apparent reason lol
-# It quite literally does the same thing

glass scaffold
normal ridge
#

I did not remember you

#

Nuh nothing

#

The modifiers table being empty does nothing

#

-# Just pass

glass scaffold
normal ridge
glass scaffold
normal ridge
red flower
#

this is what i have

glass scaffold
red flower
#

its missing the c_

wanton jolt
#

the mycologists work

glass scaffold
#

Welp. Where do we go from here?

red flower
#

try removing the ch_c in the challenge

#

leave it in the loc

glass scaffold
#

Now to find out why the other lines aren't showing...

normal ridge
#

Yeah yeah

red flower
#

i feel like it should

glass scaffold
lament agate
#

this cant check inside of a folder?

#

oh wait

#

fuck im dumb

normal ridge
glass scaffold
normal ridge
red flower
#

\n does this lmao

normal ridge
#

It's funny tho

red flower
#

\r doesnt seem to work

normal ridge
red flower
#

what is

normal ridge
#

Uuuuuuuuu
Idk
Back to music

normal ridge
red flower
#

i can assure you balatro ui is not html lol

normal ridge
#

The little texties

#

-# Text based deck building game D:

sturdy compass
red flower
#

multiline strings work but they do that still

sturdy compass
#

oh wtf lol

red flower
#

GOT IT

sturdy compass
#

yo??

red flower
#

this is cursed

normal ridge
normal ridge
sturdy compass
normal ridge
#

-# AND I SAID THE TEXT NOT THE UI

#

Hmm idk my mind is telling me something

red flower
#

the text doesnt take html tags lol

normal ridge
#

Must be the wi

normal ridge
#

Whuh

red flower
normal ridge
#

Html tags ?
Forgot about it it's been months

glass scaffold
red flower
red flower
#

quote fail

normal ridge
#

Actual embed fail

#

**thanks for saving me again little inverted slash**

normal ridge
glass scaffold
lament agate
#

its just that idk how to actually use them

#

checking sane person would enable the background

#

but unchecking it does the same to me so

normal ridge
lament agate
#

yeah im confused too

daring fern
#

final jewel
#

How do I get a random seal like I did a repeat cause I dont think it check if the seal is in_pool

daring fern
hallow moat
#

you guys think it's possible for me to semi fix the yorick mod

#

rn stacked blueprints and brainstorms just dont work lol

daring fern
hallow moat
#

it wouldnt copy burglar or certificate i think

#

and it removes eternal stickers if i merge

daring fern
hallow moat
hallow moat
lament agate
#

how do you make it so that you can select multiple things

daring fern
lament agate
reef belfry
#

how do you make a card count as any suit from a joker

daring fern
daring fern
lament agate
daring fern
foggy ginkgo
#

Niko is back :3

#

Back again

#

Nxkoo back

#

Tell your friends

lament agate
daring fern
lament agate
#

how would i make a consumable that enhances the card

#

looking at vremade, its not clear enough for me

subtle hawk
#

That's all you need

subtle hawk
subtle hawk
#

Isn't that on vremade too

lament agate
#

something like this

subtle hawk
lament agate
#

the text inside of the tooltip i mean

slim ferry
#

YES

lament agate
#

the one describing the effect

subtle hawk
#

????

slim ferry
#

thats already localized

subtle hawk
#

Are we deadass

slim ferry
#

it literally is localized in vanilla

#

which does it in the exact same way

#

why would it need to be different

lament agate
slim ferry
#

ITS LOCALIZATION

#

its

#

the exact same table

lament agate
#

enhanced?

subtle hawk
#

What

#

Ah

#

Yes, Enhanced

lament agate
#

and its my fault for not knowing

#

alright

#

thanks