#💻・modding-dev

1 messages · Page 386 of 1

red flower
#

hii

rapid stag
#

ok so interestingly negative playing cards don't show in the deck OkuuThink is that... normal or

marsh turtle
#

erm actually its n'

lament sparrow
#

Can someone help me with this please?

red flower
lament sparrow
# red flower how does your json look
  "id": "GaffMod",
  "name": "GaffMod",
  "display_name": "GaffMod",
  "author": ["CallOn84"],
  "description": "Adds five consumables inspired by gaff cards and decks used for magic tricks",
  "prefix": "gaff",
  "main_file": "GaffMod.lua",
  "priority": 0,
  "badge_colour": "F4A6C7",
  "version": "0.0.1",
  "dependencies": ["Steamodded (>1.0.0~ALPHA-1319c-STEAMODDED)"]
}```
rapid stag
# red flower no

strange, might be an issue specific to me, what i'm running, i guess

wheat jewel
#

It still only triggers the spade part when using smeared joker

red flower
#

can i see how the code looks now

wheat jewel
red flower
#

yeah i edited it after but your variable is extra.Xmult not xmult

lament sparrow
wheat jewel
#

It works!!

#

gonna do the diamonds portion now

red flower
lament sparrow
hoary stream
#

howmany times do you need to trigger gamers until they explode

#

like irl

odd shadow
#

does anyone know why my mod folder doesnt show up in game (other mods will work, just not mine)

red flower
#

not without more info

rapid stag
#

what's the standard hand size? OkuuThink

red flower
#

8

rapid stag
#

does using G.hand:change_size() not revert after the end of the blind? cirDerp

red flower
#

no

rapid stag
lament sparrow
#

is there a placeholder image for assets?

red flower
#

most smods objects use the default atlas for their type

outer basalt
#

How would I go about having a joker swap places with another card. Like moving 1 slot to the left or right?

odd shadow
#

are there any good tutorials on making jokers/consumables

outer basalt
#

theres an example mod on steam modded that goes through it, other than that I've been scraping by by looking at other code 😭

hoary stream
#

i just look at source code and other mods

#

also the smods wiki thing

odd shadow
#

ok

#

will do

#

man i try too hard

shut crater
#

not made by the smods folks but made by people that know what they're doing

#

and much more thorough

manic rune
#

the keyboard controller mod from example mod is a good example for learning how to do configs tho

#

:p

high sinew
#

is there a set u need to put in for create card if a consumable makes a playing card or nil

shut crater
#

I think you don't use create card for playing cards

#

I think there's another function for that, create_playing_card maybe? Should be on the wiki

odd shadow
#

im having way too much trouble with making a single joker

shut crater
#

What's going on

odd shadow
#

Many code ive tried just doesnt do anything within the mod

shut crater
#

Does your mod show up in the mods menu?

odd shadow
#

yeah

shut crater
#

Does your joker show up

odd shadow
#

no

shut crater
#

Can you show your code

odd shadow
#

yeah hold on a sec

#

the function hasnt been coded, but it doesnt show up anyway

shut crater
#

And it doesn't even show up in the collection?

odd shadow
#

no

shut crater
#

It's strange that your mod is being detected but your joker isn't

#

Did you set up a metadata file or did you use a mod header

unborn bay
#

you used parentheses for defining the atlas

#

not brackets

odd shadow
odd shadow
#

eh, still doesnt show up anyway

odd shadow
shut crater
#

Yeah they're not even using the atlas so that shouldn't be the main issue

tall jewel
#

it's a little hacky but it works™️

tall jewel
hoary stream
manic rune
hoary stream
#

?

sleek siren
#

How do I get a table of my played hands?

tall jewel
#

(is what I'm using it for, but it also works for the side-tooltips on card hovers)

manic rune
#

mm i see

shut crater
manic rune
#

whats the difference between just using info_queue and that tho

hoary stream
#

so it will just use jimbo?

tall jewel
#

info_queue doesn't work on decks Cirno_wink

shut crater
manic rune
#

fair

tall jewel
#

(i was using The Head tooltip for testing, ill make a proper testing screen soontm)

manic rune
#

oh

#

isnt that just {T:}

#

🤔

tall jewel
#

yeah but for custom hover tooltips you'd need to do some weird stuff to get it working

#

this just standardizes it a bit

manic rune
#

i see

tall jewel
#

create a translation key -> add translation to P_CENTERS or P_TAGS -> use tooltip

odd shadow
shut crater
#

the json method would just be its own file

hoary stream
#

#G.jokers.cards is howmany jokers you own right

manic rune
#

yes

odd shadow
#

what does conflicts do

manic rune
#

conflicts

#

if the player has mods in the conlicts, it warns you

shut crater
#

basically a list of mods that your mod does not enjoy being around and will cause crashes

turbid maple
#

has anyone here added their own ambient sounds before or do i need to figure this out myself

shut crater
#

you don't need to worry about that

odd shadow
#

ok

#

whats dependencies

turbid maple
#

mods that your mod depends on to run

odd shadow
#

oh

#

ok

#

got that

#

ight my json is finished

hoary stream
#
        local random_trig = math.random(1,(#G.jokers.cards))
        local ret = SMODS.blueprint_effect(card, G.jokers.cards[random_trig], context)
            if ret then
                ret.colour = G.C.RED
            end
            return ret
    end```
does this work
#

wait wtf

manic rune
#

main menu -> continue run strat goes so hard tho

shut crater
#

use one of the pseudorandom methods

manic rune
#
pseudorandom("seed", 1, #G.jokers.cards)

is what you want to use

#

or you can just use pseudorandom_element to pick a random joker instead, actually

hoary stream
#

pseudorandom_element(G.jokers.cards) ?

turbid maple
#

uHHH when the hell do I add to G.ARGS.ambient_sounds

hoary stream
#

pseudorandom_element(jokers, pseudoseed('seed')) this right

next pivot
#

how would I increase the rank of all the cards played before they score

odd shadow
#

would i still use the SMODS wiki for jokers

shut crater
#

the SMODS wiki is the best resource that exists

turbid maple
#

I really don't want to write a lovely patch just to add goddamn sound effects egh

odd shadow
#

alriguty

shut crater
#

it's just VanillaRemade that I suggest

#

and honestly that's not necessarily a replacement of any of the smods stuff, it's just a very helpful additional resource

red flower
#

it's also literally listed on the smods wiki

hoary stream
#

pseudorandom("seed", 1, #G.jokers.cards) has a chance to trigger itself right

shut crater
#

oh whoa I hadn't seen that link

hoary stream
#

how do i make it ignores itself

shut crater
#

use a repeat until loop to make sure the chosen joker isn't itself

high sinew
hoary stream
#

so check if it triggers itself then just loop until it doesnt

odd shadow
#

man i have no idea what any of this means, i hate being new

hoary stream
#

you will get there

turbid maple
#

Note to any future person that wants to add their own ambient sound:

SMODS.Sound {
    key = "ambient_whatever",
    path = "ambient_whatever.wav",
}

local _modulate_sound = modulate_sound
function modulate_sound(dt)
    _modulate_sound(dt)
    G.ARGS.ambient_sounds.MODRPEFIX_KEY = {
        volfunc = function(_prevvolume)
            -- calculate volume of sound for frame and return here
                        return 0
        end,
    }
end

okay FUCK this plays the ambient for a frame when the game first launches maybe you do need to lovely patch

odd shadow
#

wheres the part in the SMODS.joker where it like does the sprites and functions

#

cant din it

shut crater
#

atlas and pos are for sprites, calculate is for joker effects

vale glen
turbid maple
#

no that's supposed to be a placeholder

vale glen
#

Ah

turbid maple
#

SMODS loads your audio files and names it MODPREFIX_KEY so there's no conflict

vale glen
#

Mhm

odd shadow
#

so how would i put these in or use them

shut crater
#

you did already

odd shadow
#

oh

#

right

sleek siren
#

Does anyone know how I can get a table of all played cards this round?

shut crater
#

G.discard I think

#

well G.discard.cards

odd shadow
#

Final question before i sleep - how do I make the joker even show up in the game

sleek siren
#

Sorry, I meant scoring cards mb

shut crater
shut crater
sleek siren
#

Like, the played hand at the given moment

sleek siren
#

nvm, figured it out

manic rune
#

why doesnt this work

#

like

lucid owl
#

i have an enhancement that has a 1 in 5 chance to create a random consumable. before it worked and added the consumable fine, but it did it immediately when the hand is scored. how could i make the consumables only appear when the specific card containing the enhancement is scored? context.other_card == card doesn't work and neither does this variable-based system

manic rune
#

it doesnt print anything at all, even when the glass cards break

shut crater
#

all the calculate code is run instantaneously when you press play, everything that happens afterwards is the result of events that were queued up during the calculation

lucid owl
#

hmm, alright

#

i'll go back to the previous way and do an event

manic rune
#

funnily enough i cant even seem to find this patch anywhere

#

oh wait nvm, thats grim

#

hm

#

so theres nothign else taking ownership of the glass cards, and nothing patching glass cards right now

#

i wonder why it doesnt work

#

OH

#

its fucking m_glass, not glass right??

lucid owl
#

yup lol

manic rune
#

THATS

#

IN THE SMODS FILE

lucid owl
#

hm

#

well that's

#

weird

manic rune
#

😭

shut crater
#

I don't think you need the prefix for take_ownership

manic rune
#

the example above does say you need it though

#

like, the ones commented

#

"m_stone"

manic rune
#

oh nevermind, thats still not it

#

hm

lucid owl
manic rune
#

i tried changing this to both m_glass and keeping it at glass, still no prints

#

although the cards got destroyed

#

weird

shut crater
#

and neither print statement is run?

manic rune
#

mhm

red flower
#

no other mod is taking ownership?

manic rune
#

...well crap, should have accounted for that

#

how do i check if the glass cards are destroyed by their own effects then

#

sob

#

does "glass" and "m_glass" both work actually

red flower
#

isn't there a way to call the previous calculate with take_ownership

manic rune
#

i just noticed that

red flower
#

there should be at least

manic rune
#

dunno, i only know that take_ownership completely overrides stuff

shut crater
red flower
#

maybe if you do local prev_calc = G.P_CENTERS.m_glass.calculate

shut crater
#

oh or you could just hook it yeah

manic rune
manic rune
shut crater
#

that looks right to me

manic rune
#

mmm

#

still dunno how to check when its destroyed from being played tho sob

shut crater
#

although you probably want to call hookTo first and check its return table

manic rune
#

oh, makes sense

shut crater
#

cause the return table will containremove = true if it's destroying itself

manic rune
#

mmm thanks, let me try

turbid maple
#

turns out the game does not like storing inside cards inside jokers

shut crater
#

do you mean specifically saving and reloading a run

manic rune
#

that worked, thanks

shut crater
#

cause yeah it won't serialize tables inside of card.ability.extra

red flower
red flower
#

it doesn't do the recursive ones

turbid maple
#

the last time I tried I got MANUAL_REPLACE all over my joker

shut crater
#

I ran into issues saving a reference to a card

turbid maple
#

wait actually how the hell is this becoming recursive

#

I also get stack overflow errors when I copy it

red flower
#

cards are recursive

turbid maple
#

huh

#

oh

#

cards store their cardarea

#

cardareas store cards

red flower
#

yeah

umbral zodiac
#

is there a way to get the relevant consumable in context.using_consumeable

turbid maple
#

(gif of the crying emoji with two arms raised distingerating in an explosion)

red flower
turbid maple
#
if context.using_consumeable then
{
    cardarea = G.jokers, -- G.hand, (G.deck and G.discard optionally enabled)
    using_consumeable = true,
    consumeable = card, -- the consumable being used
    area = G.consumeables, -- the area the card was used from (could be G.shop_jokers, G.pack_cards)
}
#

the wiki is your friend'

umbral zodiac
#

in my defense the wiki is sometimes unclear so its not my first choicce

turbid maple
#

ughh is there a good way to hold a reference to a joker inside a joker

red flower
#

fun fact: context.area will be G.jokers if you use a Pendulum in JoyousSpring(tm)

manic rune
#

excuse me

shut crater
turbid maple
#

yes

#

I have a microwave

#

I'm putting jokers into a microwave

red flower
shut crater
#

without a cardarea

#

(though maybe a cardarea would've been easier than what I did)

#

(cause what I did was wack)

red flower
manic rune
#

it created two payout uis

hoary stream
manic rune
#

and uhh that

turbid maple
shut crater
turbid maple
#

they have a guid??????

#

what the hell

shut crater
#

that's what I did in the link I sent you

turbid maple
#

ah you added it

#

mm makes sense

red flower
#
G.microwave_area1 = CardArea(...)
card.ability.extra.area = "1"
G["microwave_area"..card.ability.extra.area]:emplace(other_card)
outer basalt
red flower
manic rune
#

thunk

outer basalt
#

The number being where the joker is?

manic rune
#

you might need to use G.jokers:align() or something afterwards too

#

🤔 i forgot name

red flower
#

yes G.jokers.cards is a list of jokers

#

align_cards i think?

outer basalt
#

OMG thank you y'all are life savers 😭

unborn bay
#

thats what i did for photocopier to save the adjacent jokers

#

though normally theyre just used for pinned jokers

hasty mist
#

is there a way to make a mod display a custom crash message if it gets a specific crash

red flower
#

assert(function_that_crashes(), "error message")?

hasty mist
#

my mod needs a very specific version of smods and if you dont have it it gives this

#

and everyone who gets this keeps reporting it

#

so i wanna make it actually tell them what to do

red flower
#

you can also set a dependency for a version of smods or the mod doesn't load

manic rune
#

why cant you just change dependency in the json file

hasty mist
#

i didnt think about that

red flower
manic rune
hasty mist
#

though

manic rune
#

oops wrong channel

hasty mist
#

this version of smods it needs isnt in smods main branch at all

#

its a modified version containing a pull request that still hasnt been merged

manic rune
#

oh, aiko's font addition right

hasty mist
#

yeah

red flower
#

i would recommend having a dev branch in your mod for those cases

hasty mist
#

i really really wish they would merge it

red flower
#

so you can have a version for normal smods and a version for experimental

hasty mist
#

maybe

#

the font stuff is kinda crucial though

red flower
#

because it needed some changes

hasty mist
#

ah

red flower
#

but idk im waiting for it to get merged to do my changes for it

hasty mist
#

mhm

#

it just would not sit right with me omitting the fonts until its merged yknow

#

since its like

#

a MAJOR thematic design in my mod

hoary stream
#
        local my_pos = nil
        local random_trig
        for i = 1, #G.jokers.cards do
            if G.jokers.cards[i] == card then
                my_pos = i
                break
            end
        end
        repeat
            random_trig = pseudorandom("seed", 1, #G.jokers.cards)
        until random_trig ~= my_pos
        local ret = SMODS.blueprint_effect(card, G.jokers.cards[random_trig], context)
            if ret then
                ret.colour = G.C.RED
            end
            return ret
    end```
is there a way to prevent infinite loop
red flower
hoary stream
manic rune
hasty mist
#

that's what I'm currently doing

#

tried implementing it in lovely patches but that was way beyond my abilities

manic rune
# hoary stream ```calculate = function(self, card, context) local my_pos = nil ...
calculate = function(self, card, context)
        local valid_jokers = {}
        for _,v in ipairs(G.jokers.cards) do
          if v ~= card then valid_jokers[#valid_jokers + 1] end
        end
        if #valid_jokers > 0 then
          local rad_joker = pseudorandom_element(valid_jokers, pseudoseed("something here idk"))
          if rad_joker then
            local ret = SMODS.blueprint_effect(card, rad_joker, context)
            if ret then
                ret.colour = G.C.RED
            end
            return ret
          end
        end
    end
#

id probably do smt like this instead

bold gyro
#

hey y'all, i'm trying to check if a playing card was face down before it is scored. what context should i use to do that? (i can't seem to find the right context since cards get flipped face up before scoring)

manic rune
#

probably context.before?

#

idk what other context is before that

bold gyro
#

context.before doesn't work sadly

hoary stream
#

can u explain how can this check for valid joker

        for _,v in ipairs(G.jokers.cards) do
          if v ~= card then valid_jokers[#valid_jokers + 1] 
        end
manic rune
#

a table with all jokers except for itself

#

so theres no need for the finding random position stuff

hoary stream
#

its like continue right

manic rune
#

nope

#

if v ~= card <- if v isn't card

#

but i guess you can see it as that?

#

wait i forgot an end there

#

in my defense i typed that on discord

#

:3

hoary stream
#

so if there isnt any valid jokers it the valid_jokers will have nothing in it

last sentinel
#

what exactly is the result of the ["Straight"] component in evaluate_poker_hand(cards)? Having a hard time parsing the table to understand it

red flower
#

isn't it all the straights contained in the hand?

primal terrace
#

How do I make a global variable increment by one at the end of round instead of randomizing?

last sentinel
#

wait maybe im a fool

red flower
primal terrace
#

Fair

wild escarp
#

I end up getting a crash with this code when playing any card with an edition or seal, anyone know why?

calculate = function(self, card, context)
    if context.before and context.main_eval then
        for k, v in ipairs(context.scoring_hand) do
            if v.enhancement or v.seal or v.edition then
                G.playing_card = (G.playing_card and G.playing_card + 1) or 1
                local card = copy_card(context.scoring_hand[v], nil, nil, G.playing_card)
                card:add_to_deck()
                table.insert(G.playing_cards, card)
                G.hand:emplace(_card)
                card.states.visible = nil

                G.E_MANAGER:add_event(Event({
                    func = function()
                        card:start_materialize()
                        return true
                    end
                })) 
                return {
                    message = localize('k_copied_ex'),
                    colour = G.C.CHIPS,
                    playing_cards_created = {true}
                }
            end
        end
    end
end
last sentinel
#

like, not sure why get_id is nil here

red flower
#

it's a list of hands

#

not a list of cards

#

you need a nested loop

last sentinel
#

thats where I started but that still gave me an error

#

but let me try again

#

oh pshht now it works lmao. thanks!

turbid maple
#

okay turns out I can't just expect the game to instantiate cardareas I made for me when loading them

#

am I understanding this correctly

#

uhh wait

red flower
#

cardareas are saved in G

#

and nowhere else afaik

wild escarp
#

Anyone know how I could change this code to only copy editioned/sealed/enhanced cards, and then destroy those cards?

    if context.before and context.main_eval then
        G.playing_card = (G.playing_card and G.playing_card + 1) or 1
        local copy_card = copy_card(context.full_hand[1], nil, nil, G.playing_card)
        copy_card:add_to_deck()
        G.deck.config.card_limit = G.deck.config.card_limit + 1
        table.insert(G.playing_cards, copy_card)
        G.hand:emplace(copy_card)
        copy_card.states.visible = nil

        G.E_MANAGER:add_event(Event({
            func = function()
                copy_card:start_materialize()
                return true
            end
        }))
        return {
            message = localize('k_copied_ex'),
            colour = G.C.CHIPS,
            func = function() -- This is for timing purposes, it runs after the message
                G.E_MANAGER:add_event(Event({
                    func = function()
                        SMODS.calculate_context({ playing_card_added = true, cards = { copy_card } })
                        return true
                    end
                }))
            end
        }
    end
end
#

And also make two copies of each of those cards.

turbid maple
# red flower cardareas are saved in G

I don't know if I'm being stupid but right now the problem is

  1. I'm making a card area for each instance of the Joker when they need to be accessed
  2. When the game is saved it saves the cardareas in G
  3. but it fails to load it because when the game is loaded the cardareas I made are not instantiated
    so do I need to get to patching the code that loads runs or am I doing something very flawed
red flower
#

why aren't you saving them to G directly

turbid maple
#

they are in G

red flower
#

hmm

#

can i see the code

turbid maple
red flower
#

yeah i dont think that matters

#

it happens to the vanilla areas too

turbid maple
#

it fails to load any cards that were stored inside though

#
    add_to_deck = function(self, card, from_debuff)
        local cae = card.ability.extra
        if not from_debuff then
            print("adding")
            G.supper_microwave_counter = (G.supper_microwave_counter or 0)
            cae.cardarea_name = "supper_microwave_area_" .. tostring(G.supper_microwave_counter)
            G.supper_microwave_counter = (G.supper_microwave_counter or 0) + 1
        end
    end,

    remove_from_deck = function(self, card, from_debuff)
        local cae = card.ability.extra
        if not from_debuff then
            print("remove")
            G[cae.cardarea_name]:remove()
            G[cae.cardarea_name] = nil
        end
    end,

    supper_get_owned_cardarea = function(card)
        local cae = card.ability.extra
        if not card or not cae.cardarea_name then return nil end

        if not G[cae.cardarea_name] then
            G[cae.cardarea_name] = CardArea(0, 0, 1, 1, {
                card_limit = 1,
                type = "joker",
            })
            G[cae.cardarea_name].states.visible = false
        end
        return G[cae.cardarea_name]
    end,

relevant portion of the code

red flower
#

what if you instantiate it in load()

turbid maple
#

oh that's a thing I see

red flower
#

idk if card.ability exists in load tho

#

or if the cardareas are loaded first

turbid maple
#

card.ability doesn't exist in load

red flower
#

hmm i saw other mods do similar things i wonder how they did it

turbid maple
#

hmm what

red flower
#

the only thing i can think of is patching before the cardareas get loaded and saving all the area keys to G.GAME (which gets loaded first)

turbid maple
#

... if the card area isn't instantiated at the item of loading it stores the load data somewhere else and you can grab it later

#

¯_(ツ)_/¯

sweet onyx
#

I did not know about the lovely/dump folder, this is the greatest thing ever

turbid maple
#

its cool you can actually find what code runs instead of guessing

sweet onyx
#

I dont have to scour the source files with 7zip for an hour to find 1 thing lol

vale glen
#

Dunno what text editors can reload the files silently when the game is restarted, like with DebugPlus. Kinda wanna avoid VS Code or VS Codium due to bloat.

turbid maple
red flower
#

tasty joker stencil

vale glen
#

That's so cool

#

Axy wants to do something like that too now

turbid maple
#

now I just gotta properly handle it being duplicated with stuff inside it!!!!!!!!

low parrot
#

Hii, I'm trying to make a joker that has a X2 multiplier and when you one shot a blind it gets a upgrade to that multiplier, and in case you don't one shot the blind then it destroys itself, but i have a error in which it destroys everytime and idk why ;;

        self.mano = G.GAME.current_round.hands_left
    end,

    calculate = function(self, card, context, info_queue)
        
        if context.setting_blind then
            self.mano = G.GAME.current_round.hands_left
        end

        if context.end_of_round then
            if (self.mano - 1) == G.GAME.current_round.hands_left and G.GAME.chips >= G.GAME.blind.chips then
                card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.xgain
                return {
                    message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.xmult } },
                }
            end
        end
        if context.after then
            if G.GAME.chips < G.GAME.blind.chips then
            G.E_MANAGER:add_event(Event({
                    func = function()
                        G.E_MANAGER:add_event(Event({
                            trigger = 'after',
                            delay = 0.3,
                            func = function()
                                card:start_dissolve(nil, self)
                                return true
                            end
                        }))
                        return true
                    end
                }))
            end
        end
        if context.joker_main then
            return{
                Xmult =card.ability.extra.xmult
            }
        end
    end
}```
turbid maple
#

you know what I hate this dumb red message

#

im patching to instantiate it ahead of time and im really not sure why it works like this

lucid owl
#

how are asterisks used in lovely patches?

placid silo
red flower
lucid owl
#

i'm specifically looking to two-birds-with-one-stone these two lines but idk if that's possible

lucid owl
red flower
#

eh personally i would do two patches

lucid owl
#

alright

red flower
#

can't risk someone else doing something that matches the pattern if it's too generic

low parrot
placid silo
#

Also if you use > chips what happens if someone scores exactly the blind amount?

red flower
placid silo
#

I am making a joker but idk if it should be Rare or Legendary.
Medusa:
Add x0.25 mult to this card for each Stone Card in full deck.
Turns scored Face Cards into Stone Cards.

low parrot
#

also thanks for the help ares

#

and i do think medusa should be legendary hahaha

placid silo
#

np, not sure how you need it to work or if any issues will arise but that's what testing is for :3

faint yacht
placid silo
#

splash+Pareidolia+Medusa + Stone Joker + Marble Joker or DNA and you have a fast all stone deck :3

#

Stone joker can be replaced with anything else tbh, blueprint/brainstorm, another Medusa, etc.

placid silo
primal terrace
#

So it will give X13 Mult if your deck has 52 Stone

bold gyro
#

Hey y'all, what does the crash message Cycle detected in table mean?

placid silo
primal terrace
#

If it can only convert the face cards into stone, I think Uncommon works fine for it, because otherwise you would still have the numbered cards

#

If it converted all cards into stone, then it would be worth Rare

placid silo
#

I guess that's what other jokers are for, to have synergy with it

#

x13 mult for a full deck of stone cards seems not too bad tbh

#

Originally was planning on having it turn Mortal Cards into Stone Cards but don't know how the Mortal enhancement will work yet so... this is fine

sweet onyx
#

Can someone help me or tell me where I can find help for the loc_txt when making a joker?

placid silo
zealous glen
#

But what if you want to change the existing UI?

#

You can’t change the existing UI by creating it from scratch

#

That’s just creating a new UI

sweet onyx
#

Is there a way to make my mod changes reflect in realtime as opposed to closing and relaunching whenever I make changes?

turbid maple
#

god i wish

placid silo
#

watch the mods/yourmodfolder/yourmodfile.lua

turbid maple
#

@graceful vapor pinging you here because the other chat is busy with talking not about mods

turbid maple
#

as for using the consumable I believe you describe the behacior you want in the consumable's use method

#

all you want is to make a joker so nothing too fancy just call the creating card function in it and you should be good to go

graceful vapor
#

because ingame it doesnt let me use it

turbid maple
#

where did you get player from

graceful vapor
#

autocompletion lmao

turbid maple
#

you got a chatbot to write it for you?? bro

#

it doesnt know shit about the balatro codebase so it wont be helpful

graceful vapor
#

man i just started a few hours ago, let me be 😔

turbid maple
#

the method should look like use(self, card, area, copier)

i have no idea area means in this context actually (area of the consumable it was in?)

#

hm

daring fern
turbid maple
#

Anyways the create_card function expects a table

#

yeah that too

#

SMODS.add_card {
set = "jokers",
key = enter key of the joker you want here
}
heres the bare minimum of how it should look

sage crater
sweet onyx
#

How do I check if the played hand contains scoring cards of x suit?

#

I looked at the vanilla remade for seeing double to try and get some insight but I've got nothing

graceful vapor
turbid maple
#

when you buy the consumable?

graceful vapor
#

yes

turbid maple
#

wats the crash messahe

graceful vapor
sweet onyx
#

How do I get all of the current jokers?

#

Like a list or smth

daring fern
sweet onyx
#

Thanks

turbid maple
#

im.going to sleep though so you should repost the code here and see if anyone else can help

graceful vapor
turbid maple
#

yeah

graceful vapor
#

thats crazy

graceful vapor
runic pecan
#

Which colour palette looks better?

turbid maple
#

i like the right

#

i mean did you write the consumable by looking at the wiki or did a chatbot generate somsthing for you

#

if the latter it probably has done a bunch of things wrong

graceful vapor
turbid maple
#

oki then

sweet onyx
#

How do I use the add_joker() function to add a negative joker?

daring fern
sweet onyx
#

Ok

#

How would I specify what Joker to add?

zealous glen
#

Use a key instead of a set

#

It’s all in the wiki

sweet onyx
#

There's a wiki?

#

I must be stupid

zealous glen
#

In SMODS’ GitHub

sweet onyx
#

Ohhh

#

that

#

Where is it there?

#

I cant find it?

daring fern
sweet onyx
#

Ohhh

#

there

#

thanks

#

btw

#

how do I get a list of all the jokers like

#

currently owned

#

like in the top bar

#

cause G.jokers.cards doesnt seem to be it

daring fern
daring fern
sweet onyx
daring fern
sweet onyx
#
            if SMODS.seeing_double_check(context.scoring_hand, 'Hearts') and SMODS.seeing_double_check(context.scoring_hand, 'Diamonds') and SMODS.seeing_double_check(context.scoring_hand, 'Clubs') then
                local c = pseudorandom_element(G.jokers.cards, G.SEED)
                while c.ability.name == "Equin" do
                    c = pseudorandom_element(G.jokers.cards, G.SEED)
                end

                SMODS.add_card({set = "Joker", edition = "e_negative", key = c.key})
            end

#

Oop

#

thats not formatted correctly

#

wtv

daring fern
sweet onyx
#

oh

#

Ok

graceful vapor
sweet onyx
#

What context do I use for after scoring is done but before hand is like put away or wtv

dapper sun
#

how do i access loc_vars from in the joker functions?

placid silo
placid silo
daring fern
#

I don't understand what you mean.

dapper sun
#

ty

sweet onyx
#

How do I make my calculate function stop if a condition is met, because right now it seems to simply be running again

placid silo
#

if <card_count = 2> then
return {}, I think?

#

You don't need the brackets

sweet onyx
#

Im using a return, but it doesnt work right

daring fern
sweet onyx
#
            if SMODS.seeing_double_check(context.scoring_hand, 'Hearts') and SMODS.seeing_double_check(context.scoring_hand, 'Diamonds') and SMODS.seeing_double_check(context.scoring_hand, 'Clubs') then
                local c = pseudorandom_element(G.jokers.cards, G.SEED)
                
                if #G.jokers.cards == 1 and G.jokers.cards[1].ability.name == "something" then
                    return
                end

                while c.ability.name == "Equin" do
                    c = pseudorandom_element(G.jokers.cards, G.SEED)
                end

                SMODS.add_card({set = "Joker", edition = "e_negative", key = c.config.center.key})
                card_eval_status_text(context.blueprint_card or card, 'extra', nil, nil, nil, { message = "{C:attention}Copied!{}"})
            end
#

Dont worry about the ability name something

sweet onyx
#

nvm

cursive sentinel
#

looking at aikoyori's code for hibana's joker but i don't understand how it works and how i could change it to instead of drawing cards of a rank, to draw cards played in priority next round for example, does anyone know of another joker / mod that does it so i can look it up too?

dapper sun
#

even though elle_use is a key that exists in the loc_vars return

placid silo
#

I believe the loc_vars return is for setting values within the loc_txt area

dapper sun
#

it does more than that outside of extra

placid silo
#

hmm i'll have to check the docs and your loc_vars section

sweet onyx
#

Im trying to copy a joker, but I dont know how to make sure it doesnt copy itself, how would I do that, ive been trying for an hour and I havent gotten any farther

placid silo
sweet onyx
#

duplication

placid silo
#

what do you currently have for your code?

#

if you don't mind me asking, that is

sweet onyx
# placid silo what do you currently have for your code?
        if context.joker_main then
            if #G.jokers.cards == 1 and G.jokers.cards[1].config.center.key == card.config.center.key then
                return {}
            end

            if SMODS.seeing_double_check(context.scoring_hand, 'Hearts') and SMODS.seeing_double_check(context.scoring_hand, 'Diamonds') and SMODS.seeing_double_check(context.scoring_hand, 'Clubs') then                
                local copy = copy_card(pseudorandom_element(G.jokers.cards, pseudoseed('seed')), nil) 

                copy:set_edition('e_negative', true) 
                copy:add_to_deck()

                G.jokers:emplace(copy)
            end
        end
sage crater
#

Can you make an enhancement/edition that scales on a card?

#

And if so, how

cursive sentinel
#

like the more you play it the more it scales?

#

maybe with perma bonuses?

sage crater
#

Well the exact effect will be an edition given by a joker and if the joker rolls the card again, it stacks the effect

cursive sentinel
#

ahhh

#

im not good enough to help you on that sorry 😔

placid silo
#
for _, joker in pairs(G.jokers.cards) do
if joker ~= copy then
copy:set_edition('e_negative', true) 
copy:add_to_deck()
G.jokers:emplace(copy)
return end
placid silo
sweet onyx
#

?

placid silo
#

this might copy every joker instead of just the one you want

sweet onyx
#

What if I return after the emplace

#

then it wont copy anything else

#

right?

#

Or am I stupid

placid silo
#

Try it out, imo it's all trial and error

sweet onyx
#

Yeah

#

It copied a card, but then copied itself...

#

Before I tried using a while loop like so:

while copy.config.center.key == card.config.center.key do copy = copy_card() end
#

but this didnt work

placid silo
#
if copy ~= self then
copy:set_edition('e_negative', true) 
copy:add_to_deck()
G.jokers:emplace(copy)
end
#

something like this perhaps?

#

although I don't think self would work in this context

sweet onyx
placid silo
#
for _, joker in pairs(G.jokers.cards) do
                local copy = copy_card(pseudorandom_element(G.jokers.cards, pseudoseed('seed')), nil) 
                if copy ~= self then
                copy:set_edition('e_negative', true) 
                copy:add_to_deck()
                G.jokers:emplace(copy)
                return end
                end```
#

formatting is horrible there

#

but that might just work?

hard mica
#

Does anyone know how to fix this error

sweet onyx
hard mica
#

Hi ares

placid silo
#

return card.ability.extra.money, I think instead of GoldSeal.money?

#

I believe GoldSeal adds to the card.ability.extra.money value instead of having its own value, but do not quote me on that.

placid silo
sweet onyx
placid silo
#

Ofc!

hard mica
#

521

placid silo
#

oop

#

my bad

hard mica
#

Yeah lmao

#

Been stuck on making this seal

placid silo
#

card.ability.GoldSeal.isGoldSeal?

#

instead of card.ability.extra.GoldSeal?

hard mica
#

i can show the entire code

placid silo
#

maybe if you change this to
if card.ability.GoldSeal.isGoldSeal == true then
?

#

the screenshot to the text there

hard mica
#

heres the coe if u wanna take a look at it

#

but i will try ur thing

placid silo
#
if card.ability.extra.isGoldSeal == true then```
#

if it doesnt work, try this one?

sweet onyx
#

why does using card_eval_status_text(context.blueprint_card or card, 'extra', nil, nil, nil, { message = localize('k_duplicated_ex') }) (for the perkeo-like: "Duplicated" message) in context.joker_main not trigger immediately?

daring fern
sweet onyx
#

?

daring fern
sweet onyx
daring fern
sweet onyx
#

Where does that go

dapper sun
#

idk

daring fern
daring fern
sweet onyx
runic pecan
#

So I thought badge text of a seal works the same as the ones of stickers...
What is the correct way to do this, though?

daring fern
runic pecan
daring fern
primal robin
#

So in general works fine

placid silo
timid star
#

looks a little scuffed but it works

old bane
#

this looks like a final boss to an rpg

timid star
#

im gonna need a health bar

placid silo
#

thats so cool what

hard mica
timid star
#

of course i haven't implemented the boss blind mechanic yet i wanted to make sure i could add health to boss blinds

#

the asriel boss blind will keep the same health mechanic, needing to always meet the requirement of the score otherwise you score nothing is a good boss mechanic for that blind

#

i'll have to add boss descriptions though

unborn bay
#

why would asriel be in balatro

#

isn't he dead

hard mica
#

how can i check if the playable card is not held in hand?

timid star
unborn bay
#

oh ok that makes sense

old bane
daring fern
hard mica
bold gyro
vocal helm
sage crater
#

how do I get my mod to pick up on a second lua file I make?
I want to categorize each file by what they do. Right now I have one file for jokers and enhancements, and soon I'll add a couple vouchers too, and I want to split them up into different files

misty shoal
dapper sun
sage crater
#

in the main file?

dapper sun
#

yea

sage crater
#

fantastic. thank you

timid star
sage crater
dapper sun
#

the path needs to be a string

sage crater
#

ah, just like every other language. Thank you 🤦‍♂️

#

it works now. thanks :]

misty gorge
#

FIXED IT I THINK, I just didn't return correctly

#

Still experimenting with it though

#

Trying to see if it triggers when I want it to

harsh sonnet
#

hey im getting the feeling im not using SMODS.calculate_context{joker_clicked = true} quite right any1 know more than me?

misty gorge
slow brook
#

is it possible to "freeze" cards in the shop so the same cards come up after a blind?

daring fern
harsh sonnet
#

english pls
im not into lua like that

#

i mean i kinda get it but i dont

daring fern
harsh sonnet
#

ok so im gonna sound like an idiot saying but
i have no idea where to put SMODS.calculate_context{joker_clicked = true}
i mean i want context.joker_clicked to happen whenever.. u guessed it a joker is highlighted (or un-highlighted) so that my nlrg_cost updates not only when partner_click

charred magnet
#

anyone know how to make mods?

misty shoal
#

Guy walks into a bar and asks if anyone likes to drink

harsh sonnet
charred magnet
#

wow

slow brook
harsh sonnet
#

i think

slow brook
#

nope

harsh sonnet
#

dammit gimme a moment

slow brook
#

checked all the jokers and code? cards already

#

unless i cant read and missed them

harsh sonnet
#

its the inverse code card

#

invariant

#

using the invariant sticker

#

@slow brook

slow brook
#

yeah i'm trying to find how it works but they use their own function to get all shop cards so that probably means there's no way to do that without patching

harsh sonnet
#

ew

#

anyways

harsh sonnet
slow brook
placid silo
placid star
charred magnet
#

anyone know why this isnt working

#

(not showing in collection)

maiden phoenix
#

loc_txt + should be loc_txt = and nsmr should be name

charred magnet
#

?

red flower
charred magnet
maiden phoenix
#

You forgot the = for loc_txt

placid silo
#
loc_txt = {
name = "happy joker"
text = "he is happy"
}
charred magnet
#

...

slow brook
charred magnet
#

still not showing...

slow brook
#

download the lua extension for vscode

#

cuz you're missing all the commas

charred magnet
placid star
#

SMODS.Joker should have a capital J no?

charred magnet
slow brook
charred magnet
#

idk

slow brook
charred magnet
#

ok i shoved some comas

charred magnet
#

we good?

slow brook
#

yeah probably

zealous glen
charred magnet
placid star
charred magnet
#

?

slow brook
#

just saw that

charred magnet
#

oh shiii

slow brook
#

i would suggest scrapping that and do it all in a new file called smods.json

charred magnet
#

json

#

isnt this ment to be lua tho

charred magnet
slow brook
#

so without that green header

#

like this

slow brook
placid star
#

bruh can u stop with the huh and the ? when we're explaining things to you

slow brook
placid star
slow brook
#

mod header is outdated, still works but it's better to have a smods.json file

#

that's the only file that's not lua so dw

placid star
charred magnet
slow brook
placid star
harsh sonnet
#

how do i call a list from another file?

slow brook
charred magnet
#

please

#

: )

slow brook
#

I can even write it for you

charred magnet
placid star
harsh sonnet
#

thanks

charred magnet
#

this ok?

#

: )

slow brook
# charred magnet rly?
  "id": "happyjoker",
  "name": "Happy Joker",
  "display_name": "Happy Joker",
  "author": ["I DID SOMETHING"], 
  "description": "he is happy....",
  "prefix": "happy",
  "main_file": "main.lua"
charred magnet
#

uhm

#

something tells me i did something wrong

#

oh wait

slow brook
#

yeah oops i forgot you need to put all this inside brackets {}

charred magnet
#

ye

#

mb

#

boom

#

now

#

same code as before?

#

or something new

slow brook
#

yeah but remember to delete the green stuff you had in main.lua before

charred magnet
#

oo works but my pic isnt there that i made

#

: (

#

oh

#

nvm

#

its cap j not lowercase

#

lol

#

im getting there slowly but surely thanks to u

#

still doesnt work....

slow brook
charred magnet
harsh sonnet
charred magnet
#

lua and json

#

?

slow brook
charred magnet
harsh sonnet
#

why can't i get step by step guides like these 🥀

charred magnet
harsh sonnet
#

im not qwq

slow brook
maiden phoenix
maiden phoenix
#

File loading order matters too tho

harsh sonnet
maiden phoenix
#

Oh sorry

charred magnet
#

dont be rude

maiden phoenix
#
local x = 5
y = 5

here, I can read x wherever it is defined, but y I can read it anywhere else

harsh sonnet
maiden phoenix
#

For example if I set a local variable in a loop I can only read it in said loop or under

slow brook
# charred magnet

you need to set an atlas for the joker, the joker "doesn't know" by default that your atlas is meant for him so you need to specify in his code

charred magnet
#

i dont under stand :/

slow brook
#

write this after loc_txt (the purple '}') and it will work (remember about the comma)

maiden phoenix
maiden phoenix
#

It uses the default vanilla "Jokers" atlas

slow brook
#

really? but that's the vanilla one and what position does it set by default

slow brook
charred magnet
#

not purple

maiden phoenix
#

0, 0, so default jimbo

slow brook
charred magnet
#

ye

slow brook
charred magnet
slow brook
charred magnet
#

oh

#

like this?

maiden phoenix
# slow brook

Weird, that should work, does your mod shows up in game in the mod tab?

maiden phoenix
charred magnet
#

...

maiden phoenix
#

I recreated it like this and it works fine

#

Is your mod loaded in Balatro? Check ingame in the Mods button

hoary stream
#

lua’ing

slow brook
cursive sentinel
#

quick question, does anyone know if i need to do a hook or such to influence shuffle (like to place cards from a table atop), looked at aikoyori stuff but it doesn't seem that similar to what i'm looking for, or i misunderstood it

maiden phoenix
#

I meant ingame, not in the balatro mod manager

harsh sonnet
#

i think im lost
atp i dont even understand my own code anymore

charred magnet
#

he is good

harsh sonnet
#

hell nah

maiden phoenix
charred magnet
#

joker 1/1

maiden phoenix
#

Click on it?

harsh sonnet
#

ai dont work cuz it dont got the libraries

charred magnet
#

shows joker without my png

charred magnet
#

claude does

slow brook
hoary stream
maiden phoenix
#

I think

hoary stream
#

I only ask ai for basic lua stuff since I have no idea about it

maiden phoenix
charred magnet
maiden phoenix
#

Is your asset file named "Joker" and is a png?

slow brook
charred magnet
maiden phoenix
#

Oooh

slow brook
maiden phoenix
#

set the x in pos to 0

charred magnet
#

alr lets see if it works

#

AHHH

#

it does

#

luv u

#

sm

#

ima do some stuff if i run into some error ill see u

hoary stream
#

now can u add joker that pay rent for you

charred magnet
#

@slow brook thoughts?

harsh sonnet
#

whatever i do my ipairs doesnt pull the table
and im not sure if i rly want it global global in my context

maiden phoenix
#

What exactly are you making?

charred magnet
maiden phoenix
#

Dvod

charred magnet
#

big mod

harsh sonnet
#

big mod

#

aka a single partner

#

but its

#

a lot

#

to me at least

charred magnet
harsh sonnet
#

very beautiful

maiden phoenix
charred magnet
#

: )

harsh sonnet
#

i mean it doesnt require a global table
i just want a table
that i write in another file
and call in a loop to go through
cuz im not writing all the different ability paths in my main file

#

i could send the code but thats gonna be a lot

#

(80 lines)

maiden phoenix
#

It's not too bad, you can send the file

#

What effect are you trying to code?

harsh sonnet
#

value multiplication (like cryptids oil lamp)

maiden phoenix
#

Ah

maiden phoenix
harsh sonnet
#

i have to upload as file cuz my broke ass cant type that many symbols

slow brook
#

you could have just sent a screenshot tbh

harsh sonnet
#

right

#

well it doesnt fit on my screen

maiden phoenix
#

Does your partner have a description yet?

harsh sonnet
#

the top one isnt used

maiden phoenix
#

Interesting

harsh sonnet
#

in that code i currently got 2 main problems that im trying to fix
one of them is that nlrg_list i need

maiden phoenix
#

I think your code could be simplified for such an effect. btw it might not work for some vanilla jokers because sometimes their values are hardcoded

#

Which means they can't be modified

harsh sonnet
#

yea idc
i mean currently it looks for allowed paths instead of disallowed

#

after ive heard changing values is like challenging god ive accepted any hardship

#

and telling me it can be simplified is nice but uh
i aint that smart
im trying my best with what i got

maiden phoenix
#

I haven't experimented with partner click, I know one of the vanilla partner do that

#

Yea tbh for something this long and complex I'm not a good teacher

harsh sonnet
#

i mean it works pretty well except for the fact it doesnt update the nlrg_cost at the right times and that list

placid silo
#

I'm attempting to make a global function that when the round ends, checks all cards in your deck for a specific seal, then changes values on said seal(because for some reason seals only run their code if in hand/played and not if discarded or not drawn)

maiden phoenix
#

Like it increments on each use?

red flower
placid silo
#

wdym enabling them---

harsh sonnet
#

it doesnt use it at all
its just what the description uses to show how much its gonna cost

maiden phoenix
#

Oh so it doesn't spend the money?

faint yacht
#

By default, some things are not checked for. You can enable such.
SMODS.current_mod.optional_features

red flower
# placid silo wdym enabling them---

you know how it in the calculate docs says G.deck and G.discard optionally enabled? well those are optional features you have to tell smods to enable

placid silo
#

thats... the issuepl

harsh sonnet
#

the partner appends a new variable to the highlighted joker .ppay which keeps track of the cost for each joker

placid silo
#

Been working on this for hours

#

ty

maiden phoenix
#

Your description doesn't mention anything about joker cost

harsh sonnet
#

bc the cost doubles as the effects of the jokers do

maiden phoenix
#

Oooh you want to double the sell_cost too?

#

Or avoid it?

harsh sonnet
#

avoid that
thats why im using the base_cost as the beginning

#

now that im explaining all this im surprised this server doesnt have any vcs

placid silo
maiden phoenix
#

Here's what you can try to do

local old_extra_value = G.jokers.highlighted[1].ability.extra_value or 0
local mai = SMODS.shallow_copy(G.jokers.highlighted[1].ability)
                        for _, key in ipairs(Nlrg_list) do
                            if mai[key] ~= nil then
                                mai[key] = mai[key] * card.ability.extra.nlrg
                            end
                        end
                        G.jokers.highlighted[1].ability = mai
                        G.jokers.highlighted[1].ability.extra_value = old_extra_value
harsh sonnet
#

i see we've been facing different directions
my current issue is the table that isnt recognised and i crash cuz of nil

maiden phoenix
#

Which table isn't recognized?

harsh sonnet
#

Nlrg_list

slow brook
#

where would a sticker have a localization entry?

maiden phoenix
#

What's Nlrg_list supposed to be?

maiden phoenix
harsh sonnet
#

a table of entries like "mult"
or "extra.mult"
or some like that

#

as a whitelist for what values to multiply

maiden phoenix
#

Try replacing Nlrg_list by G.jokers.highlighted[1].ability?

harsh sonnet
#

that uh
doesnt quite make sense to me

maiden phoenix
#

You're trying to double joker values

#

Just loop over said values

#

You don't even need to copy the joker actually

harsh sonnet
#

yea but i dont wanna double every value

#

and what part is copying the joker qwq

maiden phoenix
#

You want the values in config doubled only?

harsh sonnet
#

gimme a moment to understand what im trying to say

#

ill just give an example of how it currently works/ how i want it to work
using Joker (the jimbo one (like that base joker yk))

i select Joker
i click on the partner
from nlrg_list which has "mult" in it it knows to check for the value mai[key] with mai being G.jokers.highlighted[1].ability and key going over "mult"
in other words mai[key] takes G.jokers.highlighted[1].ability.mult from Joker and multiplies it by card.ability.extra.nlrg aka 2

thats the value doubling done

then it also takes the base_cost of Joker which is 2 and makes that G.jokers.highlighted[1].ability.ppay and multiplies that by strt_cost which is 5
thats what im being charged

on every consecutive use .ppay exists and it uses that as the cost and multiplies it by .rate which is 2

#

does that make sense?

#

and my problem is

maiden phoenix
#

From the code you sent me Nlrg_list isn't set I think

#

What I don't understand is what you want in this Nlrg_list

harsh sonnet
#

the list is over here

maiden phoenix
#

Ok this might not be what you want by why don't you do this for now?

harsh sonnet
#

gimme a sec

#

yea that works but why tf doesnt it pull from enlargements

maiden phoenix
#

Did you load the file?

#

Could always put said list in your main file too, I don't think you need a whole new file just for this

harsh sonnet
#

but i dont want 500 lines of table in my main :(

maiden phoenix
#

Add this at the top of your file if it ain't here
assert(SMODS.load_file("enlargements.lua"))()

#

I think it would be easier and better if you made a blacklist instead of a whitelist imo

harsh sonnet
maiden phoenix
#

Because you didn't load the file lol

harsh sonnet
#

-# no like i tried exactly that before with the assert

maiden phoenix
#

🤷

slow brook
#

how do i write a seal in localization

harsh sonnet
#

-# istg if it was just dyslexia

maiden phoenix
dapper sun
#

how do i highlight a card by code?

maiden phoenix
#
descriptions = {
  Other = {
    sealkey_seal = { ... }
  }
}
daring fern
dapper sun
dapper sun
slow brook
maiden phoenix
#

Writing rules I suppose

harsh sonnet
#

i literally copied from this and just put my own file location

maiden phoenix
#

Did you change the items/common to your file name?

slow brook
hard mica
#

anyone know why this error appears?

harsh sonnet
maiden phoenix
daring fern
hard mica
#

oke

#

lemme try that

slow brook
daring fern
#

Also it seems that you have a header and a JSON?

maiden phoenix
maiden phoenix
slow brook
maiden phoenix
#

Put it in here then, under misc = { labels = {

#

misc is at the same level as descriptions

slow brook
#

so like that?

maiden phoenix
#

That's not your localization file?

slow brook
#

it is, inside descriptions = { Other }

maiden phoenix
#

Is this how you've been doing localization?

slow brook
#

uuh yup, that's how they do it in the documentation

maiden phoenix
#

That's how a localization file looks like

slow brook
#

and that is how it looks like, i just didn't send a screenshot of my whole screen

maiden phoenix
#

At no point they call that SMODS.func, that was way before ago

#

Why are you calling process_loc_text in your localization file?

slow brook
maiden phoenix
#

Yea I sent you that to show you the tree and the key you had to write

hard mica
#

the crash porblem is caused by this function and im not sure why? is there another way of the scored card with the seal to give out the money?

daring fern
hard mica