diff --git a/Cryptid.json b/Cryptid.json index bd2b37197..a2f08152a 100644 --- a/Cryptid.json +++ b/Cryptid.json @@ -9,7 +9,7 @@ "priority": 114, "badge_colour": "708b91", "badge_text_colour": "FFFFFF", - "version": "0.5.10", + "version": "0.5.10~dev", "dependencies": [ "Talisman (>=2.2.0a)", "Steamodded (>=1.0.0~BETA-0614a)" diff --git a/Cryptid.lua b/Cryptid.lua index 34b9ec323..0e832f95d 100644 --- a/Cryptid.lua +++ b/Cryptid.lua @@ -226,25 +226,7 @@ function SMODS.injectItems(...) G.P_CENTERS.j_burnt.immutable = true G.P_CENTERS.j_chicot.immutable = true G.P_CENTERS.j_perkeo.immutable = true - G.P_CENTERS.j_hanging_chad.misprintize_caps = { extra = 40 } - G.P_CENTERS.c_high_priestess.misprintize_caps = { planets = 100 } - G.P_CENTERS.c_emperor.misprintize_caps = { tarots = 100 } - G.P_CENTERS.c_familiar.misprintize_caps = { extra = 100 } - G.P_CENTERS.c_grim.misprintize_caps = { extra = 100 } - G.P_CENTERS.c_incantation.misprintize_caps = { extra = 100 } - G.P_CENTERS.c_immolate.misprintize_caps = { destroy = 1e300 } - G.P_CENTERS.c_cryptid.misprintize_caps = { extra = 100, max_highlighted = 100 } - G.P_CENTERS.c_immolate.misprintize_caps = { destroy = 1e300 } Cryptid.inject_pointer_aliases() - - --this has to be here because the colors dont exist earlier then this - Cryptid.circus_rarities["rare"] = { rarity = 3, base_mult = 2, order = 1, colour = G.C.RARITY.Rare } - Cryptid.circus_rarities["epic"] = { rarity = "cry_epic", base_mult = 3, order = 2, colour = G.C.RARITY.cry_epic } - Cryptid.circus_rarities["legendary"] = { rarity = 4, base_mult = 4, order = 3, colour = G.C.RARITY.Legendary } - Cryptid.circus_rarities["exotic"] = - { rarity = "cry_exotic", base_mult = 20, order = 4, colour = G.C.RARITY.cry_exotic } - - Cryptid.reload_localization() end local old_repitions = SMODS.calculate_repetitions diff --git a/assets/1x/atlasnotjokers.png b/assets/1x/atlasnotjokers.png index 4570f9b27..b4f0f9b24 100644 Binary files a/assets/1x/atlasnotjokers.png and b/assets/1x/atlasnotjokers.png differ diff --git a/assets/1x/atlasone.png b/assets/1x/atlasone.png index 7a5381492..ba2659e56 100644 Binary files a/assets/1x/atlasone.png and b/assets/1x/atlasone.png differ diff --git a/assets/1x/atlasspooky.png b/assets/1x/atlasspooky.png index 02731910c..025b1234a 100644 Binary files a/assets/1x/atlasspooky.png and b/assets/1x/atlasspooky.png differ diff --git a/assets/1x/bl_cry_two.png b/assets/1x/bl_cry_two.png deleted file mode 100644 index 2025ee811..000000000 Binary files a/assets/1x/bl_cry_two.png and /dev/null differ diff --git a/assets/1x/intercept_sprite.aseprite b/assets/1x/intercept_sprite.aseprite deleted file mode 100644 index 5182d11b7..000000000 Binary files a/assets/1x/intercept_sprite.aseprite and /dev/null differ diff --git a/assets/1x/intercept_sprite.png b/assets/1x/intercept_sprite.png deleted file mode 100644 index e02c8eca5..000000000 Binary files a/assets/1x/intercept_sprite.png and /dev/null differ diff --git a/assets/1x/shinyc.png b/assets/1x/shinyc.png index 7966d513f..79e02711f 100644 Binary files a/assets/1x/shinyc.png and b/assets/1x/shinyc.png differ diff --git a/assets/1x/tag_cry.png b/assets/1x/tag_cry.png index 6ae3ea5fe..d7da3ba0f 100644 Binary files a/assets/1x/tag_cry.png and b/assets/1x/tag_cry.png differ diff --git a/assets/2x/atlasnotjokers.png b/assets/2x/atlasnotjokers.png index d43713af2..0db754f56 100644 Binary files a/assets/2x/atlasnotjokers.png and b/assets/2x/atlasnotjokers.png differ diff --git a/assets/2x/atlasone.png b/assets/2x/atlasone.png index 82f93103f..3f2b8a73d 100644 Binary files a/assets/2x/atlasone.png and b/assets/2x/atlasone.png differ diff --git a/assets/2x/atlasspooky.png b/assets/2x/atlasspooky.png index c693f74b4..4372dcf14 100644 Binary files a/assets/2x/atlasspooky.png and b/assets/2x/atlasspooky.png differ diff --git a/assets/2x/bl_cry_two.png b/assets/2x/bl_cry_two.png deleted file mode 100644 index c7c0aa83a..000000000 Binary files a/assets/2x/bl_cry_two.png and /dev/null differ diff --git a/assets/2x/intercept_sprite.aseprite b/assets/2x/intercept_sprite.aseprite deleted file mode 100644 index 61b64321c..000000000 Binary files a/assets/2x/intercept_sprite.aseprite and /dev/null differ diff --git a/assets/2x/intercept_sprite.png b/assets/2x/intercept_sprite.png deleted file mode 100644 index c215870b7..000000000 Binary files a/assets/2x/intercept_sprite.png and /dev/null differ diff --git a/assets/2x/shinyc.png b/assets/2x/shinyc.png index 5988a7909..2515d04b1 100644 Binary files a/assets/2x/shinyc.png and b/assets/2x/shinyc.png differ diff --git a/assets/2x/tag_cry.png b/assets/2x/tag_cry.png index a3fa98b4a..d7c0e162c 100644 Binary files a/assets/2x/tag_cry.png and b/assets/2x/tag_cry.png differ diff --git a/assets/shaders/astral.fs b/assets/shaders/astral.fs index 1fe4e2d97..ea106c195 100644 --- a/assets/shaders/astral.fs +++ b/assets/shaders/astral.fs @@ -12,9 +12,6 @@ extern MY_HIGHP_OR_MEDIUMP vec2 image_details; extern bool shadow; extern MY_HIGHP_OR_MEDIUMP vec4 burn_colour_1; extern MY_HIGHP_OR_MEDIUMP vec4 burn_colour_2; -extern MY_HIGHP_OR_MEDIUMP vec2 mouse_screen_pos; -extern MY_HIGHP_OR_MEDIUMP float hovering; -extern MY_HIGHP_OR_MEDIUMP float screen_scale; vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) { @@ -97,144 +94,20 @@ vec4 HSL(vec4 c) return hsl; } -vec4 RGBtoHSV(vec4 rgb) -{ - vec4 hsv; - float minVal = min(min(rgb.r, rgb.g), rgb.b); - float maxVal = max(max(rgb.r, rgb.g), rgb.b); - float delta = maxVal - minVal; - - // Value - hsv.z = maxVal; - - // Saturation - if (maxVal != 0.0) - hsv.y = delta / maxVal; - else { - // r = g = b = 0, s = 0, v is undefined - hsv.y = 0.0; - hsv.x = -1.0; - return hsv; - } - - // Hue - if (rgb.r == maxVal) - hsv.x = (rgb.g - rgb.b) / delta; // between yellow & magenta - else if (rgb.g == maxVal) - hsv.x = 2.0 + (rgb.b - rgb.r) / delta; // between cyan & yellow - else - hsv.x = 4.0 + (rgb.r - rgb.g) / delta; // between magenta & cyan - - hsv.x = hsv.x * (1.0 / 6.0); - if (hsv.x < 0.0) - hsv.x += 1.0; - - // Alpha - hsv.w = rgb.a; - - return hsv; -} - -vec4 HSVtoRGB(vec4 hsv) { - vec4 rgb; - - float h = hsv.x * 6.0; - float c = hsv.z * hsv.y; - float x = c * (1.0 - abs(mod(h, 2.0) - 1.0)); - float m = hsv.z - c; - - if (h < 1.0) { - rgb = vec4(c, x, 0.0, hsv.a); - } else if (h < 2.0) { - rgb = vec4(x, c, 0.0, hsv.a); - } else if (h < 3.0) { - rgb = vec4(0.0, c, x, hsv.a); - } else if (h < 4.0) { - rgb = vec4(0.0, x, c, hsv.a); - } else if (h < 5.0) { - rgb = vec4(x, 0.0, c, hsv.a); - } else { - rgb = vec4(c, 0.0, x, hsv.a); - } - - rgb.rgb += m; - - return rgb; -} - -float bitxor(float val1, float val2) -{ - float outp = 0; - for(int i = 1; i < 9; i++) outp += floor(mod(mod(floor(val1*pow(2,-i)),pow(2,i))+mod(floor(val2*pow(2,-i)),pow(2,i)),2))*pow(2,i); - return outp/256; -} - -float mod2(float val1, float mod1) -{ - val1 /= mod1; - val1 -= floor(val1); - return(mod1 * val1); -} - -#define PI 3.14159265358979323846 - -float rand(vec2 c){ - return fract(sin(dot(c.xy ,vec2(12.9898,78.233))) * 43758.5453); -} - -float noise(vec2 p, float freq ){ - float unit = 1/freq; - vec2 ij = floor(p/unit); - vec2 xy = mod(p,unit)/unit; - //xy = 3.*xy*xy-2.*xy*xy*xy; - xy = .5*(1.-cos(PI*xy)); - float a = rand((ij+vec2(0.,0.))); - float b = rand((ij+vec2(1.,0.))); - float c = rand((ij+vec2(0.,1.))); - float d = rand((ij+vec2(1.,1.))); - float x1 = mix(a, b, xy.x); - float x2 = mix(c, d, xy.x); - return mix(x1, x2, xy.y); -} - -float pNoise(vec2 p, int res){ - float persistance = .5; - float n = 0.; - float normK = 0.; - float f = 4.; - float amp = 1.; - int iCount = 0; - for (int i = 0; i<50; i++){ - n+=amp*noise(p, f); - f*=2.; - normK+=amp; - amp*=persistance; - if (iCount == res) break; - iCount++; - } - float nf = n/normK; - return nf*nf*nf*nf; -} - vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) { vec4 tex = Texel(texture, texture_coords); vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; - // Dummy, doesn't do anything but at least it makes the shader useable - if (uv.x > uv.x * 2.){ - uv = astral; - } - - float mod = astral.r * 1.0; - number low = min(tex.r, min(tex.g, tex.b)); number high = max(tex.r, max(tex.g, tex.b)); number delta = high - low; - //vec4 hsl = HSL(vec4(tex.r, tex.g, tex.b, tex.a)); + number saturation_fac = 1. - max(0., 0.05*(1.1-delta)); - float t = astral.y*2.221 + time; + vec4 hsl = HSL(vec4(tex.r*saturation_fac, tex.g*saturation_fac, tex.b, tex.a)); + + float t = astral.y*2.221 + mod(time,1.); vec2 floored_uv = (floor((uv*texture_details.ba)))/texture_details.ba; vec2 uv_scaled_centered = (floored_uv - 0.5) * 50.; @@ -246,48 +119,22 @@ vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; - - vec4 pixel = Texel(texture, texture_coords); - - float cx = uv_scaled_centered.x * 1; - float cy = uv_scaled_centered.y * 1; - - - - vec4 hsl = HSL(vec4(tex.r, tex.g, tex.b, tex.a)); - - - // |y| = 50, |x| = 50 - - tex.rgb = RGB(hsl).rgb; - - vec2 mouse_offset = (screen_coords.xy - mouse_screen_pos.xy)/screen_scale; - - float scaled_uvy = (uv.y +mouse_offset.y -0.5)*5*1.338; - float scaled_uvx = (uv.x +mouse_offset.x -0.5)*5; - float norm_uv = sqrt(scaled_uvx*scaled_uvx + scaled_uvy*scaled_uvy); - - pixel = vec4(pixel.rgb * 0.0 + tex.rgb * tex.a, pixel.a); - float res = (.5 + .5* cos( (astral.x) * 2.612 + ( field + -.5 ) *3.14)); - vec4 textp = RGB(hsl); - tex.rgb = textp.rgb; - - float stars = ((pNoise(uv*10 + t/15.0, 10)*pNoise(uv*10 + t/15.0, 10)+1.5)/1+0.15 + ((pNoise(uv*12 + t/15.0, 10)+1.2)/1+0.3))/2.2+0.05 + 0.007*norm_uv * 1.1; - - float clusters = (pNoise(uv*10.0-t/15.0, 10)+1.5)/1.5-0.25 + 0.007*norm_uv; + hsl.x = .8; + hsl.y = hsl.y * 0.8; + hsl.z = hsl.z * 0.2 + 0.6 * sin(hsl.z/2.5 - res/4. + sin(astral.y)/8. + 0.5)/1.4; - float super_clusters = (pNoise(uv/15.0, 10)+0.1)/2+0.3 - 0.008*norm_uv; - - clusters *= clusters * clusters * clusters * 0.4; - stars *= stars * stars; - super_clusters *= super_clusters * super_clusters; - - colour.rgb = vec3(0.6, 0.45, 1) * (((clusters + stars + super_clusters)+0.1)) * 0.285; + tex.rgb = RGB(hsl).rgb; + if (tex[3] < 0.7) + tex[3] = tex[3]/3.; return dissolve_mask(tex*colour, texture_coords, uv); } +extern MY_HIGHP_OR_MEDIUMP vec2 mouse_screen_pos; +extern MY_HIGHP_OR_MEDIUMP float hovering; +extern MY_HIGHP_OR_MEDIUMP float screen_scale; + #ifdef VERTEX vec4 position( mat4 transform_projection, vec4 vertex_position ) { diff --git a/items/blind.lua b/items/blind.lua index 99be5b2d3..2a8a34d04 100644 --- a/items/blind.lua +++ b/items/blind.lua @@ -624,7 +624,6 @@ local pin = { card.config.center.rarity == 4 or card.config.center.rarity == "cry_epic" or card.config.center.rarity == "cry_exotic" - or Cryptid.pin_debuff[card.config.center.rarity] ) then return true @@ -766,7 +765,7 @@ local decision = { max = 666666, }, atlas = "blinds", - order = 23, + order = 22, boss_colour = HEX("474931"), get_loc_debuff_text = function(self) return localize("cry_blind_baneful_pack") @@ -832,128 +831,6 @@ local decision = { G.GAME.cry_fastened = nil end, } - -local repulsor = { - dependencies = { - items = { - "set_cry_blind", - }, - }, - mult = 2, - object_type = "Blind", - name = "cry-repulsor", - key = "repulsor", - pos = { x = 0, y = 0 }, - dollars = 5, - boss = { - min = 4, - max = 666666, - }, - atlas = "blinds_two", - order = 24, - boss_colour = HEX("7c5798"), - calculate = function(self, blind, context) - if not G.GAME.blind.disabled then - if context.before then - for i, v in pairs(G.jokers.cards) do - if v ~= G.jokers.cards[1] and v ~= G.jokers.cards[#G.jokers.cards] then - if not v.debuff then - G.GAME.blind.triggered = true - v.debuff = true - v.debuff_from_repulsor = true - end - end - end - end - if context.retrigger_joker_check and not context.retrigger_joker then - if context.other_card == G.jokers.cards[1] or context.other_card == G.jokers.cards[#G.jokers.cards] then - return { - repetitions = 1, - } - end - end - if context.after then - for i, v in pairs(G.jokers.cards) do - if v.debuff_from_repulsor then - v.debuff = nil - v.debuff_from_repulsor = true - end - end - end - end - end, -} - -local chromatic = { - dependencies = { - items = { - "set_cry_blind", - }, - }, - mult = 2, - object_type = "Blind", - name = "cry-chromatic", - key = "chromatic", - pos = { x = 0, y = 1 }, - dollars = 5, - boss = { - min = 1, - max = 666666, - }, - atlas = "blinds_two", - order = 25, - boss_colour = HEX("a34f98"), - cry_modify_score = function(self, score) - if math.floor(G.GAME.current_round.hands_played + 1) % 2 == 1 then - return score * -1 - else - return score - end - end, -} - -local landlord = { - dependencies = { - items = { - "set_cry_blind", - }, - }, - mult = 2, - object_type = "Blind", - name = "cry-landlord", - key = "landlord", - pos = { x = 0, y = 2 }, - dollars = 5, - boss = { - min = 1, - max = 666666, - }, - atlas = "blinds_two", - order = 26, - boss_colour = HEX("c89f13"), - calculate = function(self, blind, context) - if context.after then - local jokers = {} - for i, v in pairs(G.jokers.cards) do - if not v.ability.rental then - jokers[#jokers + 1] = v - end - end - if #jokers > 0 then - G.E_MANAGER:add_event(Event({ - func = function() - local joker = pseudorandom_element(jokers, pseudoseed("cry_landlord")) - joker.ability.rental = true - joker:juice_up() - return true - end, - })) - end - G.GAME.blind.triggered = true - end - end, -} - --It seems Showdown blind order is seperate from normal blind collection order? convenient for me at least --Nvm they changed it local lavender_loop = { @@ -1731,7 +1608,6 @@ local items_togo = { pin, scorch, greed, - repulsor, vermillion_virus, tornado, sapphire_stamp, @@ -1740,7 +1616,5 @@ local items_togo = { lavender_loop, trophy, decision, - chromatic, - landlord, } return { name = "Blinds", items = items_togo } diff --git a/items/challenge.lua b/items/challenge.lua index c8be43e38..05a754002 100644 --- a/items/challenge.lua +++ b/items/challenge.lua @@ -486,17 +486,6 @@ function Game:start_run(args) if G.GAME.modifiers.cry_no_consumables then G.GAME.joker_rate = 1e300 end - for i, v in pairs(G.handlist) do - if v == "cry_Declare0" then - d0 = true - end - end - if not d0 then - table.insert(G.handlist, 1, "cry_Declare0") - table.insert(G.handlist, 1, "cry_Declare1") - table.insert(G.handlist, 1, "cry_Declare2") - end - Cryptid.base_values = {} end local challenges = { sticker_sheet, diff --git a/items/code.lua b/items/code.lua index fd7a1155d..ef53c59e5 100644 --- a/items/code.lua +++ b/items/code.lua @@ -1036,20 +1036,277 @@ local exploit = { return true end, use = function(self, card, area, copier) - -- Un-use the card (re-use code is in lib/misc.lua) - if not card.ability.cry_multiuse or to_big(card.ability.cry_multiuse) <= to_big(1) then - G.GAME.CODE_DESTROY_CARD = copy_card(card) - G.consumeables:emplace(G.GAME.CODE_DESTROY_CARD) - G.GAME.CODE_DESTROY_CARD.ability.cry_multiuse = nil + G.GAME.USING_CODE = true + G.ENTERED_HAND = "" + G.CHOOSE_HAND = UIBox({ + definition = create_UIBox_exploit(card), + config = { + align = "cm", + offset = { x = 0, y = 10 }, + major = G.ROOM_ATTACH, + bond = "Weak", + instance_type = "POPUP", + }, + }) + G.CHOOSE_HAND.alignment.offset.y = 0 + G.ROOM.jiggle = G.ROOM.jiggle + 1 + G.CHOOSE_HAND:align_to_major() + end, + init = function(self) + function create_UIBox_exploit(card) + G.E_MANAGER:add_event(Event({ + blockable = false, + func = function() + G.REFRESH_ALERTS = true + return true + end, + })) + local t = create_UIBox_generic_options({ + no_back = true, + colour = HEX("04200c"), + outline_colour = G.C.SECONDARY_SET.Code, + contents = { + { + n = G.UIT.R, + nodes = { + create_text_input({ + colour = G.C.SET.Code, + hooked_colour = darken(copy_table(G.C.SET.Code), 0.3), + w = 4.5, + h = 1, + max_length = 24, + extended_corpus = true, + prompt_text = localize("cry_code_hand"), + ref_table = G, + ref_value = "ENTERED_HAND", + keyboard_offset = 1, + }), + }, + }, + { + n = G.UIT.R, + nodes = { + UIBox_button({ + colour = G.C.SET.Code, + button = "exploit_apply", + label = { localize("cry_code_exploit") }, + minw = 4.5, + focus_args = { snap_to = true }, + }), + }, + }, + { + n = G.UIT.R, + nodes = { + UIBox_button({ + colour = G.C.RED, + button = "exploit_apply_previous", + label = { localize("cry_code_exploit_previous") }, + minw = 4.5, + focus_args = { snap_to = true }, + }), + }, + }, + { + n = G.UIT.R, + nodes = { + UIBox_button({ + colour = G.C.RED, + button = "exploit_cancel", + label = { localize("cry_code_cancel") }, + minw = 4.5, + focus_args = { snap_to = true }, + }), + }, + }, + }, + }) + return t + end + G.FUNCS.exploit_apply_previous = function() + if G.PREVIOUS_ENTERED_HAND then + G.ENTERED_HAND = G.PREVIOUS_ENTERED_HAND or "" + end + G.FUNCS.exploit_apply() + end + G.FUNCS.exploit_apply = function() + local hand_table = { + ["High Card"] = { + "high card", + "high", + "1oak", + "1 of a kind", + "haha one", + }, + ["Pair"] = { + "pair", + "2oak", + "2 of a kind", + "m", + "window", + }, + ["Two Pair"] = { + "two pair", + "2 pair", + "mm", + "pairpair", + "pair of a kind", + }, + ["Three of a Kind"] = { + "three of a kind", + "3 of a kind", + "3oak", + "trips", + "triangle", + }, + ["Straight"] = { + "straight", + "lesbian", + "gay", + "bisexual", + "asexual", + "staircase", + }, + ["Flush"] = { + "flush", + "skibidi", + "toilet", + "floosh", + "monotone", + }, + ["Full House"] = { + "full house", + "full", + "that 70s show", + "modern family", + "family matters", + "the middle", + }, + ["Four of a Kind"] = { + "four of a kind", + "4 of a kind", + "4oak", + "22oakoak", + "quads", + "four to the floor", + }, + ["Straight Flush"] = { + "straight flush", + "strush", + "slush", + "slushie", + "slushy", + "monotone staircase", + }, + ["Five of a Kind"] = { + "five of a kind", + "5 of a kind", + "5oak", + "quints", + }, + ["Flush House"] = { + "flush house", + "flouse", + "outhouse", + "monotone house", + "the grey house", + }, + ["Flush Five"] = { + "flush five", + "fish", + "you know what that means", + "five of a flush", + "monotone fish", + }, + ["cry_Bulwark"] = { + "bulwark", + "flush rock", + "stoned", + "stone flush", + "flush stone", + "rock and stone", + }, + ["cry_Clusterfuck"] = { + "clusterfuck", + "fuck", + "wtf", + "cluster", + "what", + }, + ["cry_UltPair"] = { + "ultimate pair", + "ultpair", + "ult pair", + "pairpairpair", + "flush pair of a kind of a kind", + "2f2oakoak", + "two flush two of a kind of a kind", + }, + ["cry_WholeDeck"] = { + "the entire fucking deck", + "deck", + "tefd", + "fifty-two", + "you are fuck deck", + "deck of a kind", + "the entire deck", + "everything of a kind", + "everything", + "wholedeck", + }, + } + local current_hand = nil + for k, v in pairs(SMODS.PokerHands) do + local index = v.key + local current_name = G.localization.misc.poker_hands[index] + if not hand_table[v.key] then + hand_table[v.key] = { current_name } + end + end + for i, v in pairs(hand_table) do + for j, k in pairs(v) do + if string.lower(G.ENTERED_HAND) == string.lower(k) then + current_hand = i + end + end + end + if current_hand and G.GAME.hands[current_hand].visible then + G.PREVIOUS_ENTERED_HAND = G.ENTERED_HAND + G.GAME.cry_exploit_override = current_hand + G.FUNCS.exploit_cancel() + return + end end - if card.ability.cry_multiuse then - card.ability.cry_multiuse = card.ability.cry_multiuse + 1 + G.FUNCS.exploit_cancel = function() + G.CHOOSE_HAND:remove() + G.GAME.USING_CODE = false + end + -- mess with poker hand evaluation + local evaluate_poker_hand_ref = evaluate_poker_hand + function evaluate_poker_hand(hand) + local results = evaluate_poker_hand_ref(hand) + if G.GAME.cry_exploit_override then + if not results[G.GAME.cry_exploit_override][1] then + for _, v in ipairs(G.handlist) do + if results[v][1] then + results[G.GAME.cry_exploit_override] = results[v] + break + end + end + end + end + return results + end + local htuis = G.FUNCS.hand_text_UI_set + G.FUNCS.hand_text_UI_set = function(e) + htuis(e) + if G.GAME.cry_exploit_override then + e.config.object.colours = { G.C.SECONDARY_SET.Code } + else + e.config.object.colours = { G.C.UI.TEXT_LIGHT } + end + e.config.object:update_text() end - - G.GAME.USING_CODE = true - G.GAME.USING_EXPLOIT = true - G.GAME.ACTIVE_CODE_CARD = G.GAME.CODE_DESTROY_CARD or card - G.FUNCS.overlay_menu({ definition = G.UIDEF.exploit_menu() }) end, } -- ://Malware @@ -1800,6 +2057,7 @@ local machinecode = { config = { object = DynaText({ string = arr, + colours = { G.C.BLACK }, pop_in_rate = 9999999, silent = true, random_element = true, @@ -2823,20 +3081,37 @@ local run = { self:use(card, area) end, } +-- ://Class +-- Change a selected card's enhancement to one of your choosing (or nil) --- ://Declare --- Create a new Poker hand from selected cards -local declare = { +local enh_table = { + m_bonus = { "bonus" }, + m_mult = { "mult", "red" }, + m_wild = { "wild", "suit" }, + m_glass = { "glass", "xmult" }, + m_steel = { "steel", "metal", "grey" }, + m_stone = { "stone", "chip", "chips" }, + m_gold = { "gold", "money", "yellow" }, + m_lucky = { "lucky", "rng" }, + m_cry_echo = { "echo", "retrigger", "retriggers" }, + m_cry_abstract = { "abstract", "abstracted", "tadc", "theamazingdigitalcircus", "kaufumo" }, --why him? he was the first person we see get abstracted + m_cry_light = { "light" }, + ccd = { "ccd" }, + null = { "nil" }, +} + +Cryptid.load_enhancement_aliases(enh_table) + +local class = { cry_credits = { idea = { - "Ronnec", - "cassknows", + "HexaCryonic", }, art = { - "lord.ruby", + "HexaCryonic", }, code = { - "lord.ruby", + "Math", }, }, dependencies = { @@ -2846,38 +3121,21 @@ local declare = { }, object_type = "Consumable", set = "Code", - name = "cry-Declare", - key = "declare", - pos = { x = 6, y = 4 }, - cost = 4, + key = "class", + name = "cry-Class", atlas = "atlasnotjokers", - order = 420.5, - loc_vars = function(self, q, card) - return { - vars = { - localize( - ({ - "Straight", - "Flush", - "Full House", - "Full House", - })[(G.GAME.DECLARE_USED or 0) + 1], - "poker_hands" - ), - number_format(3 - (G.GAME.DECLARE_USED or 0)), - }, - } - end, - can_use = function(self, card) - G.GAME.DECLARE_USED = G.GAME.DECLARE_USED or 0 - return (G.GAME.DECLARE_USED or 0) < 3 + pos = { x = 11, y = 1 }, + cost = 4, + order = 421, + config = { max_highlighted = 1, extra = { enteredrank = "" } }, + loc_vars = function(self, info_queue, card) + return { vars = { Cryptid.safe_get(card, "ability", "max_highlighted") or self.config.max_highlighted } } end, use = function(self, card, area, copier) G.GAME.USING_CODE = true - G.GAME.USING_DECLARE = true - G.ENTERED_CARD = "" - G.CHOOSE_CARD = UIBox({ - definition = create_UIBox_declare(card), + G.ENTERED_ENH = "" + G.CHOOSE_ENH = UIBox({ + definition = create_UIBox_class(card), config = { align = "cm", offset = { x = 0, y = 10 }, @@ -2886,12 +3144,13 @@ local declare = { instance_type = "POPUP", }, }) - G.CHOOSE_CARD.alignment.offset.y = 0 + G.CODE_MAX_HIGHLIGHT = card.ability.max_highlighted + G.CHOOSE_ENH.alignment.offset.y = 0 G.ROOM.jiggle = G.ROOM.jiggle + 1 - G.CHOOSE_CARD:align_to_major() + G.CHOOSE_ENH:align_to_major() end, - init = function() - function create_UIBox_declare(card) + init = function(self) + function create_UIBox_class(card) G.E_MANAGER:add_event(Event({ blockable = false, func = function() @@ -2912,23 +3171,21 @@ local declare = { hooked_colour = darken(copy_table(G.C.SET.Code), 0.3), w = 4.5, h = 1, - max_length = 100, - extended_corpus = true, - prompt_text = localize("cry_code_enter_hand"), + max_length = 16, + prompt_text = localize("cry_code_enh"), ref_table = G, - ref_value = "ENTERED_CARD", + ref_value = "ENTERED_ENH", keyboard_offset = 1, }), }, }, { n = G.UIT.R, - config = { align = "cm" }, nodes = { UIBox_button({ colour = G.C.SET.Code, - button = "declare_apply", - label = { localize("cry_code_with_suits") }, + button = "class_apply", + label = { localize("cry_code_apply") }, minw = 4.5, focus_args = { snap_to = true }, }), @@ -2936,12 +3193,11 @@ local declare = { }, { n = G.UIT.R, - config = { align = "cm" }, nodes = { UIBox_button({ - colour = G.C.SET.Code, - button = "declare_apply_suitless", - label = { localize("cry_code_without_suits") }, + colour = G.C.RED, + button = "class_apply_previous", + label = { localize("cry_code_apply_previous") }, minw = 4.5, focus_args = { snap_to = true }, }), @@ -2949,11 +3205,10 @@ local declare = { }, { n = G.UIT.R, - config = { align = "cm" }, nodes = { UIBox_button({ colour = G.C.RED, - button = "declare_cancel", + button = "class_cancel", label = { localize("cry_code_cancel") }, minw = 4.5, focus_args = { snap_to = true }, @@ -2964,230 +3219,181 @@ local declare = { }) return t end - G.FUNCS.declare_cancel = function() - if G.CHOOSE_CARD then - G.CHOOSE_CARD:remove() - end - G.GAME.USING_CODE = false - G.GAME.USING_DECLARE = false - end - G.FUNCS.declare_apply = function() - G.GAME.hands["cry_Declare" .. tostring(G.GAME.DECLARE_USED or 0)] = - Cryptid.create_declare_hand(G.hand.highlighted, G.ENTERED_CARD) - G.GAME.DECLARE_USED = (G.GAME.DECLARE_USED or 0) + 1 - G.FUNCS.declare_cancel() - end - G.FUNCS.declare_apply_suitless = function() - G.GAME.hands["cry_Declare" .. tostring(G.GAME.DECLARE_USED or 0)] = - Cryptid.create_declare_hand(G.hand.highlighted, G.ENTERED_CARD, true) - G.GAME.DECLARE_USED = (G.GAME.DECLARE_USED or 0) + 1 - G.FUNCS.declare_cancel() - end - Cryptid.create_declare_hand = function(cards, name, suitless) - if G.ENTERED_CARD == "" then - G.ENTERED_CARD = "cry_Declare" .. tostring(G.GAME.DECLARE_USED or 0) - end - local complexity = #cards - local ranks = {} - local suits = {} - for i, v in pairs(cards) do - if not ranks[v.base.value] then - ranks[v.base.value] = true - end - end - for i, v in pairs(cards) do - if not suits[v.base.suit] and not suitless then - suits[v.base.suit] = true - end - end - local s = #suits - 1 - local r = #ranks - 1 - local mult = math.floor((complexity / 1.41428) ^ 2.25 + s + r) - if mult < 1 then - mult = 1 - end - local chips = math.floor(mult * 9.55) - local l_chips = chips * 0.25 - local l_mult = mult * 0.25 - local declare_cards = {} - for i, v in pairs(cards) do - local card = { - rank = v:get_id() > 0 and v:get_id() or "rankless", - suit = not suitless and (SMODS.has_no_suit(v) and "suitless" or v.base.suit), - } - declare_cards[#declare_cards + 1] = card - end - for i, v in pairs(G.GAME.hands) do - v.order = (v.order or 0) + 1 - end - return { - order = 1, - l_mult = l_mult, - l_chips = l_chips, - mult = mult, - chips = chips, - example = Cryptid.create_declare_example(cards, suitless), - visible = true, - played = 0, - _saved_d_v = true, - played_this_round = 0, - s_mult = mult, - s_chips = chips, - from_declare = true, - declare_cards = declare_cards, - declare_name = G.ENTERED_CARD, - level = 1, - index = G.GAME.DECLARE_USED or 0, - suitless = suitless, - } - end - local localize_ref = localize - function localize(first, second, ...) - if second == "poker_hands" then - if G and G.GAME and G.GAME.hands[first] and G.GAME.hands[first].declare_name then - return G.GAME.hands[first].declare_name - end - end - if second == "poker_hand_descriptions" then - if G and G.GAME and G.GAME.hands[first] and G.GAME.hands[first].suitless then - return localize_ref(first .. "_suitless", second, ...) - end - end - return localize_ref(first, second, ...) - end - local is_visibleref = SMODS.is_poker_hand_visible - function SMODS.is_poker_hand_visible(handname) - if not SMODS.PokerHands[handname] then - return G.GAME.hands[handname] and G.GAME.hands[handname].visible - end - return is_visibleref(handname) - end - function Cryptid.create_declare_example(cards, suitless) - local c = {} - for i, v in pairs(cards) do - local key = SMODS.Suits[v.base.suit].card_key .. "_" .. SMODS.Ranks[v.base.value].card_key - local enhancement = (SMODS.has_no_suit(v) and "m_stone") or (suitless and "m_wild") or nil - c[#c + 1] = { key, true, enhancement = enhancement } - end - return c - end - end, -} --- ://Class --- Change a selected card's enhancement to one of your choosing (or nil) + G.FUNCS.class_apply_previous = function() + if G.PREVIOUS_ENTERED_ENH then + G.ENTERED_ENH = G.PREVIOUS_ENTERED_ENH or "" + end + G.FUNCS.class_apply() + end + --todo: mod support + G.FUNCS.class_apply = function() + -- local enh_table = { + -- m_bonus = { "bonus" }, + -- m_mult = { "mult", "red" }, + -- m_wild = { "wild", "suit" }, + -- m_glass = { "glass", "xmult" }, + -- m_steel = { "steel", "metal", "grey" }, + -- m_stone = { "stone", "chip", "chips" }, + -- m_gold = { "gold", "money", "yellow" }, + -- m_lucky = { "lucky", "rng" }, + -- m_cry_echo = { "echo", "retrigger", "retriggers" }, + -- m_cry_abstract = { "abstract", "abstracted", "tadc", "theamazingdigitalcircus", "kaufumo" }, --why him? he was the first person we see get abstracted + -- m_cry_light = { "light" }, + -- ccd = { "ccd" }, + -- null = { "nil" }, + -- } + local enh_table = Cryptid.enhancement_alias_list -local enh_table = { - m_bonus = { "bonus" }, - m_mult = { "mult", "red" }, - m_wild = { "wild", "suit" }, - m_glass = { "glass", "xmult" }, - m_steel = { "steel", "metal", "grey" }, - m_stone = { "stone", "chip", "chips" }, - m_gold = { "gold", "money", "yellow" }, - m_lucky = { "lucky", "rng" }, - m_cry_echo = { "echo", "retrigger", "retriggers" }, - m_cry_abstract = { "abstract", "abstracted", "tadc", "theamazingdigitalcircus", "kaufumo" }, --why him? he was the first person we see get abstracted - m_cry_light = { "light" }, - ccd = { "ccd" }, - null = { "nil" }, -} + local enh_suffix = nil -Cryptid.load_enhancement_aliases(enh_table) + for i, v in pairs(enh_table) do + for j, k in pairs(v) do + if string.lower(G.ENTERED_ENH) == string.lower(k) then + enh_suffix = i + end + end + end -local class = { - cry_credits = { - idea = { - "HexaCryonic", - }, - art = { - "HexaCryonic", - }, - code = { - "Math", - }, - }, - dependencies = { - items = { - "set_cry_code", - }, - }, - object_type = "Consumable", - set = "Code", - key = "class", - name = "cry-Class", - atlas = "atlasnotjokers", - pos = { x = 11, y = 1 }, - cost = 4, - order = 421, - config = { max_highlighted = 1, extra = { enteredrank = "" } }, - loc_vars = function(self, info_queue, card) - return { vars = { Cryptid.safe_get(card, "ability", "max_highlighted") or self.config.max_highlighted } } - end, - use = function(self, card, area, copier) - -- Un-use the card - if not card.ability.cry_multiuse or to_big(card.ability.cry_multiuse) <= to_big(1) then - G.GAME.CODE_DESTROY_CARD = copy_card(card) - G.consumeables:emplace(G.GAME.CODE_DESTROY_CARD) - G.GAME.CODE_DESTROY_CARD.ability.cry_multiuse = nil - end - if card.ability.cry_multiuse then - card.ability.cry_multiuse = card.ability.cry_multiuse + 1 - end - G.GAME.USING_CODE = true - G.GAME.USING_CLASS = card.ability.max_highlighted - G.GAME.ACTIVE_CODE_CARD = G.GAME.CODE_DESTROY_CARD or card - G.FUNCS.overlay_menu({ definition = create_UIBox_class() }) - end, - init = function(self) - local ccl = Card.click - function Card:click() - if G.GAME.USING_CLASS then - if not self.debuff then - G.FUNCS.exit_overlay_menu_code() - delay(3) - local cards = Cryptid.get_highlighted_cards({ G.hand }, {}, 1, G.GAME.USING_CLASS or 1) - for i, v in pairs(cards) do - v:flip() + if enh_suffix then + local TempCard = {} + local cards = Cryptid.get_highlighted_cards({ G.hand }, {}, 1, G.CODE_MAX_HIGHLIGHT) + for i = 1, #cards do + TempCard[i] = cards[i] + end + G.PREVIOUS_ENTERED_ENH = G.ENTERED_ENH + G.GAME.USING_CODE = false + if enh_suffix == "ccd" then + check_for_unlock({ type = "cheat_used" }) + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.4, + func = function() + play_sound("tarot1") + return true + end, + })) + for i = 1, #TempCard do + local percent = 1.15 - (i - 0.999) / (#G.hand.highlighted - 0.998) * 0.3 + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.15, + func = function() + TempCard[i]:flip() + play_sound("card1", percent) + TempCard[i]:juice_up(0.3, 0.3) + return true + end, + })) + delay(0.2) end - delay(1) - for i, v in pairs(cards) do - v:set_ability(G.P_CENTERS[self.config.center.key]) + for i = 1, #TempCard do + local CARD = TempCard[i] + local percent = 0.85 + (i - 0.999) / (#G.hand.highlighted - 0.998) * 0.3 + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.15, + func = function() + CARD:flip() + CARD:set_ability(Cryptid.random_consumable("cry_class"), true, nil) + play_sound("tarot2", percent) + CARD:juice_up(0.3, 0.3) + return true + end, + })) end - delay(1) - for i, v in pairs(cards) do - v:flip() + elseif enh_suffix == "null" then + local destroyed_cards = {} + check_for_unlock({ type = "cheat_used" }) + for i = #TempCard, 1, -1 do + local card = TempCard[i] + if not card.ability.eternal then + destroyed_cards[#destroyed_cards + 1] = TempCard[i] + if card.ability.name == "Glass Card" then + card:shatter() + else + card:start_dissolve(nil, i == #TempCard) + end + end end - G.hand:unhighlight_all() - ccl(self) - -- Re-use the card - if G.GAME.ACTIVE_CODE_CARD then - if - not G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse - or to_big(G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse) <= to_big(1) - then - G.GAME.ACTIVE_CODE_CARD:start_dissolve() - else - G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse = - lenient_bignum(to_big(G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse) - to_big(1)) + if destroyed_cards[1] then + for j = 1, #G.jokers.cards do + eval_card( + G.jokers.cards[j], + { cardarea = G.jokers, remove_playing_cards = true, removed = destroyed_cards } + ) end end - G.GAME.ACTIVE_CODE_CARD = nil + G.CHOOSE_ENH:remove() + return + else + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.4, + func = function() + play_sound("tarot1") + return true + end, + })) + for i = 1, #TempCard do + local percent = 1.15 - (i - 0.999) / (#TempCard - 0.998) * 0.3 + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.15, + func = function() + TempCard[i]:flip() + play_sound("card1", percent) + TempCard[i]:juice_up(0.3, 0.3) + return true + end, + })) + end + delay(0.2) + for i = 1, #TempCard do + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.1, + func = function() + TempCard[i]:set_ability(G.P_CENTERS[enh_suffix]) + return true + end, + })) + end + for i = 1, #TempCard do + local percent = 0.85 + (i - 0.999) / (#TempCard - 0.998) * 0.3 + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.15, + func = function() + TempCard[i]:flip() + play_sound("tarot2", percent, 0.6) + TempCard[i]:juice_up(0.3, 0.3) + return true + end, + })) + end end - else - ccl(self) + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.2, + func = function() + G.hand:unhighlight_all() + return true + end, + })) + delay(0.5) + if G.CHOOSE_ENH then + G.CHOOSE_ENH:remove() + end + G.CODE_MAX_HIGHLIGHT = nil end end - local emplace_ref = CardArea.emplace - function CardArea:emplace(card, ...) - if G.GAME.USING_CLASS or G.GAME.POINTER_SUBMENU == "Enhancement" then - local c = card.config.center - --no class is exclusive to class and no code is just a generic code cards cant create this thing - if c.hidden or c.noe_doe or c.no_collection or c.no_class or c.no_code then - card.debuff = true - end + + G.FUNCS.class_cancel = function() + G.GAME.USING_CODE = false + if G.CHOOSE_ENH then + G.CHOOSE_ENH:remove() end - return emplace_ref(self, card, ...) end end, demicoloncompat = true, @@ -3206,9 +3412,9 @@ local class = { "light", "abstract", } - for i, v in pairs(Cryptid.get_highlighted_cards({ G.hand }, {}, 1, card.ability.max_highlighted or 1)) do - v:set_ability(pseudorandom_element(choices, pseudoseed("forceclass"))) - end + G.ENTERED_ENH = pseudorandom_element(choices, pseudoseed("forceclass")) + G.FUNCS.class_cancel() + G.FUNCS.class_apply() end, } -- ://Global @@ -3364,118 +3570,10 @@ local variable = { return { vars = { Cryptid.safe_get(card, "ability", "max_highlighted") or self.config.max_highlighted } } end, use = function(self, card, area, copier) - -- Un-use the card - if not card.ability.cry_multiuse or to_big(card.ability.cry_multiuse) <= to_big(1) then - G.GAME.CODE_DESTROY_CARD = copy_card(card) - G.consumeables:emplace(G.GAME.CODE_DESTROY_CARD) - G.GAME.CODE_DESTROY_CARD.ability.cry_multiuse = nil - end - if card.ability.cry_multiuse then - card.ability.cry_multiuse = card.ability.cry_multiuse + 1 - end - G.GAME.USING_CODE = true - G.GAME.USING_VARIABLE = card.ability.max_highlighted - G.GAME.ACTIVE_CODE_CARD = G.GAME.CODE_DESTROY_CARD or card - G.FUNCS.overlay_menu({ definition = create_UIBox_variable_code() }) - end, - init = function(self) - local ccl = Card.click - function Card:click() - if G.GAME.USING_VARIABLE then - if not self.debuff then - G.FUNCS.exit_overlay_menu_code() - delay(3) - local cards = Cryptid.get_highlighted_cards({ G.hand }, {}, 1, G.GAME.USING_VARIABLE or 1) - for i, v in pairs(cards) do - v:flip() - end - delay(1) - for i, v in pairs(cards) do - SMODS.change_base(v, v.base.suit, self.base.value) - end - delay(1) - for i, v in pairs(cards) do - v:flip() - end - G.hand:unhighlight_all() - ccl(self) - -- Re-use the card - if G.GAME.ACTIVE_CODE_CARD then - if - not G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse - or to_big(G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse) <= to_big(1) - then - G.GAME.ACTIVE_CODE_CARD:start_dissolve() - else - G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse = - lenient_bignum(to_big(G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse) - to_big(1)) - end - end - G.GAME.ACTIVE_CODE_CARD = nil - end - else - ccl(self) - end - end - local emplace_ref = CardArea.emplace - function CardArea:emplace(card, ...) - if G.GAME.USING_VARIABLE or G.GAME.POINTER_SUBMENU == "Rank" then - local c = SMODS.Ranks[card.base.value] or {} - if c.hidden or c.noe_doe or c.no_collection or c.no_variable or c.no_code then - card.debuff = true - end - end - return emplace_ref(self, card, ...) - end - end, - demicoloncompat = true, - force_use = function(self, card, area) - local choices = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" } - for i, v in pairs(Cryptid.get_highlighted_cards({ G.hand }, {}, 1, card.ability.max_highlighted or 2)) do - SMODS.change_base(v, v.base.suit, pseudorandom_element(choices, pseudoseed("forcevariable"))) - end - end, -} --- ://Log --- View one of: --- Next ante's blinds/vouchers, --- next 5 cards/packs in shop, --- draw order for current blind (if in blind), --- Multi-use 2 -local log = { - cry_credits = { - idea = { - "HexaCryonic", - }, - art = { - "HexaCryonic", - }, - code = { - "lord.ruby", - }, - }, - dependencies = { - items = { - "set_cry_code", - }, - }, - object_type = "Consumable", - set = "Code", - name = "cry-Log", - key = "log", - pos = { x = 12, y = 4 }, - cost = 4, - atlas = "atlasnotjokers", - order = 424, - can_use = function(self, card) - return true - end, - use = function(self, card, area, copier) - G.GAME.USING_LOG = true - G.GAME.USING_CODE = true - G.CHOOSE_CARD = UIBox({ - definition = create_UIBox_log_opts(), + G.ENTERED_RANK = "" + G.CHOOSE_RANK = UIBox({ + definition = create_UIBox_variable(card), config = { align = "cm", offset = { x = 0, y = 10 }, @@ -3484,9 +3582,10 @@ local log = { instance_type = "POPUP", }, }) - G.CHOOSE_CARD.alignment.offset.y = 0 + G.CODE_MAX_HIGHLIGHT = card.ability.max_highlighted + G.CHOOSE_RANK.alignment.offset.y = 0 G.ROOM.jiggle = G.ROOM.jiggle + 1 - G.CHOOSE_CARD:align_to_major() + G.CHOOSE_RANK:align_to_major() end, init = function() local get_voucherref = SMODS.get_next_vouchers @@ -3632,25 +3731,28 @@ local log = { contents = { { n = G.UIT.R, - config = { align = "cm" }, nodes = { - UIBox_button({ - colour = G.C.SECONDARY_SET.Code, - button = "log_antevoucher", - label = { localize("cry_code_antevoucher") }, - minw = 4.5, - focus_args = { snap_to = true }, + create_text_input({ + colour = G.C.SET.Code, + hooked_colour = darken(copy_table(G.C.SET.Code), 0.3), + w = 4.5, + h = 1, + max_length = 16, + extended_corpus = true, + prompt_text = localize("cry_code_rank"), + ref_table = G, + ref_value = "ENTERED_RANK", + keyboard_offset = 1, }), }, }, { n = G.UIT.R, - config = { align = "cm" }, nodes = { UIBox_button({ - colour = G.C.SECONDARY_SET.Code, - button = "log_nextjokers", - label = { localize("cry_code_nextjokers") }, + colour = G.C.SET.Code, + button = "variable_apply", + label = { localize("cry_code_apply") }, minw = 4.5, focus_args = { snap_to = true }, }), @@ -3658,25 +3760,23 @@ local log = { }, G.GAME.blind and G.GAME.blind.in_blind and G.deck and #(G.deck.cards or {}) > 0 and { n = G.UIT.R, - config = { align = "cm" }, nodes = { UIBox_button({ - colour = G.C.SECONDARY_SET.Code, - button = "log_nextcards", - label = { localize("cry_code_nextcards") }, + colour = G.C.RED, + button = "variable_apply_previous", + label = { localize("cry_code_apply_previous") }, minw = 4.5, focus_args = { snap_to = true }, }), }, - } or nil, + }, { n = G.UIT.R, - config = { align = "cm" }, nodes = { UIBox_button({ colour = G.C.RED, - button = "log_cancel", - label = { localize("cry_code_exit") }, + button = "variable_cancel", + label = { localize("cry_code_cancel") }, minw = 4.5, focus_args = { snap_to = true }, }), @@ -3686,81 +3786,244 @@ local log = { }) return t end - function create_UIBox_log(options, mtype) - G.E_MANAGER:add_event(Event({ - blockable = false, - func = function() - G.REFRESH_ALERTS = true - return true - end, - })) - local contents = {} - contents[#contents + 1] = { - n = G.UIT.R, - config = { align = "cm" }, - nodes = { - { - n = G.UIT.T, - config = { - text = mtype, - lang = G.LANGUAGES["en-us"], - scale = 0.45, - colour = G.C.WHITE, - shadow = true, - }, - }, - }, - } - for i, v in pairs(options) do - contents[#contents + 1] = { - n = G.UIT.R, - config = { align = "cm" }, - nodes = { - { - n = G.UIT.T, - config = { - text = v, - lang = G.LANGUAGES["en-us"], - scale = 0.45, - colour = G.C.WHITE, - shadow = true, - }, - }, - }, - } + + G.FUNCS.variable_apply_previous = function() + if G.PREVIOUS_ENTERED_RANK then + G.ENTERED_RANK = G.PREVIOUS_ENTERED_RANK or "" end - contents[#contents + 1] = { - n = G.UIT.R, - config = { align = "cm" }, - nodes = { - UIBox_button({ - colour = G.C.RED, - button = "log_cancel", - label = { localize("cry_code_exit") }, - minw = 4.5, - focus_args = { snap_to = true }, - }), - }, + G.FUNCS.variable_apply() + end + + G.FUNCS.variable_apply = function() + local rank_table = { + {}, + { "2", "Two", "II" }, + { "3", "Three", "III" }, + { "4", "Four", "IV" }, + { "5", "Five", "V" }, + { "6", "Six", "VI" }, + { "7", "Seven", "VII" }, + { "8", "Eight", "VIII" }, + { "9", "Nine", "IX" }, + { "10", "1O", "Ten", "X", "T" }, + { "J", "Jack" }, + { "Q", "Queen" }, + { "K", "King" }, + { "A", "Ace", "One", "1", "I" }, + { "M" }, + { "nil" }, } - local t = create_UIBox_generic_options({ - no_back = true, - colour = HEX("04200c"), - outline_colour = G.C.SECONDARY_SET.Code, - contents = contents, - }) - return t + + local rank_suffix = nil + + for i, v in pairs(rank_table) do + for j, k in pairs(v) do + if string.lower(G.ENTERED_RANK) == string.lower(k) then + rank_suffix = i + end + end + end + + if rank_suffix then + local TempCard = {} + local cards = Cryptid.get_highlighted_cards({ G.hand }, {}, 1, G.CODE_MAX_HIGHLIGHT) + for i = 1, #cards do + TempCard[i] = cards[i] + end + G.PREVIOUS_ENTERED_RANK = G.ENTERED_RANK + G.GAME.USING_CODE = false + if rank_suffix == 15 then + check_for_unlock({ type = "cheat_used" }) + local card = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_jolly") + card:add_to_deck() + G.jokers:emplace(card) + elseif rank_suffix == 16 then + check_for_unlock({ type = "cheat_used" }) + local card = create_card("Code", G.consumeables, nil, nil, nil, nil, "c_cry_crash") + card:add_to_deck() + G.consumeables:emplace(card) + elseif rank_suffix == 17 then + check_for_unlock({ type = "cheat_used" }) + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.4, + func = function() + play_sound("tarot1") + return true + end, + })) + for i = 1, #TempCard do + local percent = 1.15 - (i - 0.999) / (#G.hand.highlighted - 0.998) * 0.3 + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.15, + func = function() + TempCard[i]:flip() + play_sound("card1", percent) + TempCard[i]:juice_up(0.3, 0.3) + return true + end, + })) + end + delay(0.2) + for i = 1, #TempCard do + local CARD = TempCard[i] + local percent = 0.85 + (i - 0.999) / (#TempCard - 0.998) * 0.3 + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.15, + func = function() + CARD:flip() + CARD:set_ability( + G.P_CENTERS[pseudorandom_element( + G.P_CENTER_POOLS.Consumeables, + pseudoseed("cry_variable") + ).key], + true, + nil + ) + play_sound("tarot2", percent) + CARD:juice_up(0.3, 0.3) + return true + end, + })) + end + else + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.4, + func = function() + play_sound("tarot1") + return true + end, + })) + for i = 1, #TempCard do + local percent = 1.15 - (i - 0.999) / (#TempCard - 0.998) * 0.3 + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.15, + func = function() + TempCard[i]:flip() + play_sound("card1", percent) + TempCard[i]:juice_up(0.3, 0.3) + return true + end, + })) + end + delay(0.2) + for i = 1, #TempCard do + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.1, + func = function() + local card = TempCard[i] + local suit_prefix = string.sub(card.base.suit, 1, 1) .. "_" + local r2suffix = nil + if rank_suffix < 10 then + r2suffix = tostring(rank_suffix) + elseif rank_suffix == 10 then + r2suffix = "T" + elseif rank_suffix == 11 then + r2suffix = "J" + elseif rank_suffix == 12 then + r2suffix = "Q" + elseif rank_suffix == 13 then + r2suffix = "K" + elseif rank_suffix == 14 then + r2suffix = "A" + end + card:set_base(G.P_CARDS[suit_prefix .. r2suffix]) + return true + end, + })) + end + for i = 1, #TempCard do + local percent = 0.85 + (i - 0.999) / (#TempCard - 0.998) * 0.3 + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.15, + func = function() + TempCard[i]:flip() + play_sound("tarot2", percent, 0.6) + TempCard[i]:juice_up(0.3, 0.3) + return true + end, + })) + end + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.2, + func = function() + G.hand:unhighlight_all() + return true + end, + })) + delay(0.5) + end + if G.CHOOSE_RANK then + G.CHOOSE_RANK:remove() + end + G.CODE_MAX_HIGHLIGHT = nil + end end - G.FUNCS.log_cancel = function() - if G.CHOOSE_CARD then - G.CHOOSE_CARD:remove() + + G.FUNCS.variable_cancel = function() + if G.CHOOSE_RANK then + G.CHOOSE_RANK:remove() end G.GAME.USING_CODE = false end end, + demicoloncompat = true, + force_use = function(self, card, area) + G.CODE_MAX_HIGHLIGHT = card.ability.max_highlighted + local choices = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" } + G.ENTERED_RANK = pseudorandom_element(choices, pseudoseed("forceclass")) + G.FUNCS.variable_cancel() + G.FUNCS.variable_apply() + end, +} +-- ://Log +-- View one of: +-- Next ante's blinds/vouchers, +-- next 5 cards/packs in shop, +-- draw order for current blind (if in blind), +-- Multi-use 2 +local crylog = { + cry_credits = { + idea = { + "HexaCryonic", + }, + art = { + "HexaCryonic", + }, + code = { + "Nova", + }, + }, + dependencies = { + items = { + "set_cry_code", + }, + }, + object_type = "Consumable", + set = "Code", + name = "cry-Log", + key = "crylog", + pos = { x = 12, y = 4 }, + cost = 4, + atlas = "atlasnotjokers", + order = 424, + can_use = function(self, card) + return false + end, + -- use = function(self, card, area, copier) + + -- end, -- bulk_use = function(self, card, area, copier, number) -- end, -} +} -- UNIMPLEMENTED -- ://Quantify -- Jokerize! an object local quantify = { @@ -4327,7 +4590,7 @@ local ctrl_v = { return true end, })) - elseif cards[1].area == G.pack_cards then + elseif cards[1].area == G.pacl_cards then G.E_MANAGER:add_event(Event({ func = function() local card = copy_card(cards[1]) @@ -4562,7 +4825,6 @@ local automaton = { key = "automaton", pos = { x = 12, y = 1 }, config = { create = 1 }, - misprintize_caps = { create = 100 }, order = 602, atlas = "atlasnotjokers", loc_vars = function(self, info_queue, card) @@ -4889,14 +5151,11 @@ local copypaste = { cost = 14, blueprint_compat = true, loc_vars = function(self, info_queue, card) + local num, denom = SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or 2) return { vars = { - card and cry_prob( - math.min(card.ability.extra.odds / 2, card.ability.cry_prob or 1), - card.ability.extra.odds, - card.ability.cry_rigged - ) or 1, - card and card.ability.extra.odds or 2, + num, + denom, }, -- this effectively prevents a copypaste from ever initially misprinting at above 50% odds. still allows rigging/oops key = Cryptid.gameset_loc(self, { madness = "madness", exp_modest = "modest" }), } @@ -4936,13 +5195,12 @@ local copypaste = { then if #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit then if - pseudorandom("cry_copypaste_joker") - < cry_prob( - math.min(card.ability.extra.odds / 2, card.ability.cry_prob), - card.ability.extra.odds, - card.ability.cry_rigged - ) - / card.ability.extra.odds + SMODS.pseudorandom_probability( + card, + "cry_copypaste_joker", + 1, + card and card.ability.extra.odds or 2 + ) then G.E_MANAGER:add_event(Event({ func = function() @@ -5273,6 +5531,7 @@ local code_cards = { seed, rigged, patch, + -- cryupdate, -- WIP: no effect hook, hooked, oboe, @@ -5282,12 +5541,11 @@ local code_cards = { cryfunction, function_sticker, run, - declare, class, global, global_sticker, variable, - log, + -- crylog, -- this will be implemented later on quantify, divide, multiply, diff --git a/items/enhanced.lua b/items/enhanced.lua index cde615127..45d82396c 100644 --- a/items/enhanced.lua +++ b/items/enhanced.lua @@ -325,6 +325,21 @@ return { init = function() local sa = Card.set_ability function Card:set_ability(center, y, z) + G.P_CENTERS.j_hanging_chad.misprintize_caps = { extra = 40 } + G.P_CENTERS.c_high_priestess.misprintize_caps = { planets = 100 } + G.P_CENTERS.c_emperor.misprintize_caps = { tarots = 100 } + if G.P_CENTERS.c_cry_automaton then + G.P_CENTERS.c_cry_automaton.misprintize_caps = { create = 100 } + end + G.P_CENTERS.c_familiar.misprintize_caps = { extra = 100 } + G.P_CENTERS.c_grim.misprintize_caps = { extra = 100 } + G.P_CENTERS.c_incantation.misprintize_caps = { extra = 100 } + G.P_CENTERS.c_immolate.misprintize_caps = { destroy = 1e300 } + G.P_CENTERS.c_cryptid.misprintize_caps = { extra = 100, max_highlighted = 100 } + G.P_CENTERS.c_immolate.misprintize_caps = { destroy = 1e300 } + if G.P_CENTERS.c_cry_chambered then + G.P_CENTERS.c_cry_chambered.misprintize_caps = { extra = { num_copies = 100 } } + end if not G.SETTINGS.paused and Cryptid.safe_get(center, "name") == "Default Base" then -- scuffed return sa( self, diff --git a/items/epic.lua b/items/epic.lua index 7a98c6b23..781f2d4e2 100644 --- a/items/epic.lua +++ b/items/epic.lua @@ -211,10 +211,12 @@ local googol_play = { atlas = "atlasepic", soul_pos = { x = 10, y = 0, extra = { x = 4, y = 0 } }, loc_vars = function(self, info_queue, card) + local num, denom = + SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds) return { vars = { - cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), - card.ability.extra.odds, + num, + denom, number_format(card.ability.extra.Xmult), }, } @@ -222,8 +224,12 @@ local googol_play = { calculate = function(self, card, context) if context.joker_main - and pseudorandom("cry_googol_play") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds + and SMODS.pseudorandom_element( + card, + "cry_googol_play", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) then return { message = localize({ @@ -877,10 +883,12 @@ local boredom = { cost = 14, blueprint_compat = true, loc_vars = function(self, info_queue, card) + local num, denom = + SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds) return { vars = { - cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), - card.ability.extra.odds, + num, + denom, }, } end, @@ -892,9 +900,12 @@ local boredom = { and not (context.other_card.ability and context.other_card.ability.name == "cry-Boredom") then if - pseudorandom("cry_boredom_joker") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) - / card.ability.extra.odds + SMODS.pseudorandom_element( + card, + "cry_boredom_joker", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) then return { message = localize("k_again_ex"), @@ -908,8 +919,12 @@ local boredom = { if context.repetition and context.cardarea == G.play - and pseudorandom("cry_boredom_card") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds + and SMODS.pseudorandom_element( + card, + "cry_boredom_card", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) then return { message = localize("k_again_ex"), @@ -1121,7 +1136,22 @@ local circus = { name = "cry-circus", key = "circus", pos = { x = 4, y = 4 }, - config = {}, + config = { + extra = { + rare_mult_mod = 2, + epic_mult_mod = 3, + legend_mult_mod = 4, + exotic_mult_mod = 20, + }, + immutable = { + rarity_map = { + [3] = "rare_mult_mod", + [4] = "legend_mult_mod", + ["cry_epic"] = "epic_mult_mod", + ["cry_exotic"] = "exotic_mult_mod", + }, + }, + }, dependencies = { items = { "set_cry_epic", @@ -1129,89 +1159,56 @@ local circus = { }, atlas = "atlasepic", order = 33, - loc_vars = function(self, info_queue, center) - local extra_rarities = {} - local mults = {} - Cryptid.circus_rarities["exotic"].colour = G.C.CRY_EXOTIC - for i, v in pairs(Cryptid.circus_rarities) do - extra_rarities[#extra_rarities + 1] = v - end - table.sort(extra_rarities, function(a, b) - return a.order < b.order - end) - mults.colours = {} - for i, v in pairs(extra_rarities) do - if not v.hidden then - mults[#mults + 1] = number_format(center.ability.extra[tostring(v.rarity) .. "_mult_mod"]) - mults.colours[#mults.colours + 1] = v.colour - end - end return { - vars = mults, + vars = { + number_format(center.ability.extra.rare_mult_mod), + number_format(center.ability.extra.epic_mult_mod), + number_format(center.ability.extra.legend_mult_mod), + number_format(center.ability.extra.exotic_mult_mod), + }, } end, - set_ability = function(self, center) - local extra_rarities = {} - local mults = {} - local mult_numbers = {} - for i, v in pairs(Cryptid.circus_rarities) do - extra_rarities[#extra_rarities + 1] = v - end - table.sort(extra_rarities, function(a, b) - return a.order < b.order - end) - for i, v in pairs(extra_rarities) do - mult_numbers[tostring(v.rarity) .. "_mult_mod"] = v.base_mult - mults[v.rarity] = tostring(v.rarity) .. "_mult_mod" - end - if not self.config.extra then - self.config.extra = mult_numbers - center.ability.extra = mult_numbers - self.config.immutable = { - rarity_map = mults, - } - center.ability.immutable = { - rarity_map = mults, - } - end - end, rarity = "cry_epic", cost = 16, blueprint_compat = true, demicoloncompat = true, calculate = function(self, card, context) + local function calculate_xmult(mult_mod) + if not Talisman.config_file.disable_anims then + G.E_MANAGER:add_event(Event({ + func = function() + context.other_joker:juice_up(0.5, 0.5) + return true + end, + })) + end + + local xmult = lenient_bignum(math.max(1, to_big(card.ability.extra.Xmult)) * to_big(mult_mod)) + return { + message = localize({ + type = "variable", + key = "a_xmult", + vars = { number_format(xmult) }, + }), + Xmult_mod = xmult, + } + end + if context.other_joker and card ~= context.other_joker then local mod_key = card.ability.immutable.rarity_map[context.other_joker.config.center.rarity] - if mod_key and card.ability.extra[mod_key] and to_big(card.ability.extra[mod_key]) > to_big(1) then - if not Talisman.config_file.disable_anims then - G.E_MANAGER:add_event(Event({ - func = function() - context.other_joker:juice_up(0.5, 0.5) - return true - end, - })) - end - local xmult = card.ability.extra[mod_key] - return { - message = localize({ - type = "variable", - key = "a_xmult", - vars = { number_format(xmult) }, - }), - Xmult_mod = xmult, - } + if mod_key then + return calculate_xmult(card.ability.extra[mod_key]) end end if context.forcetrigger then - local total = 1 - for i, v in pairs(card.ability.extra) do - if type(v) == "number" or (type(v) == "table" and v.tetrate) then - total = total * v - end - end return { - Xmult_mod = total, + Xmult_mod = ( + card.ability.extra.rare_mult_mod + * card.ability.extra.epic_mult_mod + * card.ability.extra.legend_mult_mod + * card.ability.extra.exotic_mult_mod + ), } end end, @@ -1472,7 +1469,7 @@ local bonusjoker = { odds = 8, add = 1, }, - immutable = { check = 0, max = 100 }, + immutable = { check = 0 }, }, dependencies = { items = { @@ -1488,11 +1485,13 @@ local bonusjoker = { enhancement_gate = "m_bonus", loc_vars = function(self, info_queue, card) info_queue[#info_queue + 1] = G.P_CENTERS.m_bonus + local num, denom = + SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds) return { vars = { - cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), - card.ability.extra.odds, - number_format(math.min(card.ability.extra.add, card.ability.immutable.max)), + num, + denom, + number_format(card.ability.extra.add), }, } end, @@ -1501,8 +1500,12 @@ local bonusjoker = { if context.individual and context.cardarea == G.play then if SMODS.has_enhancement(context.other_card, "m_bonus") then if - pseudorandom("bonusjoker") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds + SMODS.pseudorandom_probability( + card, + "bonusjoker", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) and card.ability.immutable.check < 2 and not context.retrigger_joker then @@ -1511,17 +1514,13 @@ local bonusjoker = { if not context.blueprint then card.ability.immutable.check = lenient_bignum(card.ability.immutable.check + 1) end - G.jokers.config.card_limit = lenient_bignum( - G.jokers.config.card_limit + math.min(card.ability.extra.add, card.ability.immutable.max) - ) + G.jokers.config.card_limit = lenient_bignum(G.jokers.config.card_limit + card.ability.extra.add) else if not context.blueprint then card.ability.immutable.check = lenient_bignum(card.ability.immutable.check + 1) end - G.consumeables.config.card_limit = lenient_bignum( - G.consumeables.config.card_limit - + to_big(math.min(card.ability.extra.add, card.ability.immutable.max)) - ) + G.consumeables.config.card_limit = + lenient_bignum(G.consumeables.config.card_limit + to_big(card.ability.extra.add)) end return { extra = { focus = card, message = localize("k_upgrade_ex") }, @@ -1551,17 +1550,13 @@ local bonusjoker = { if not context.blueprint then card.ability.immutable.check = lenient_bignum(card.ability.immutable.check + 1) end - G.jokers.config.card_limit = lenient_bignum( - G.jokers.config.card_limit + cmath.min(card.ability.extra.add, card.ability.immutable.max) - ) + G.jokers.config.card_limit = lenient_bignum(G.jokers.config.card_limit + card.ability.extra.add) else if not context.blueprint then card.ability.immutable.check = lenient_bignum(card.ability.immutable.check + 1) end - G.consumeables.config.card_limit = lenient_bignum( - G.consumeables.config.card_limit - + to_big(math.min(card.ability.extra.add, card.ability.immutable.max)) - ) + G.consumeables.config.card_limit = + lenient_bignum(G.consumeables.config.card_limit + to_big(card.ability.extra.add)) end return { extra = { focus = card, message = localize("k_upgrade_ex") }, @@ -1605,10 +1600,12 @@ local multjoker = { loc_vars = function(self, info_queue, card) info_queue[#info_queue + 1] = G.P_CENTERS.m_mult info_queue[#info_queue + 1] = G.P_CENTERS.c_cryptid + local num, denom = + SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds) return { vars = { - cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), - card.ability.extra.odds, + num, + denom, }, } end, @@ -1620,9 +1617,12 @@ local multjoker = { and #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit then if - pseudorandom("multjoker") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) - / card.ability.extra.odds + SMODS.pseudorandom_probability( + card, + "multjoker", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) then G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1 G.E_MANAGER:add_event(Event({ @@ -2385,7 +2385,7 @@ local demicolon = { cost = 14, order = 299, blueprint_compat = false, - demicoloncompat = true, + demicoloncompat = false, atlas = "atlasepic", pos = { x = 3, y = 5 }, config = { check = nil }, @@ -2455,7 +2455,7 @@ local demicolon = { end end, calculate = function(self, card, context) - if context.joker_main and not context.blueprint then + if context.joker_main and not context.blueprint and not context.forcetrigger then for i = 1, #G.jokers.cards do if G.jokers.cards[i] == card then if Cryptid.demicolonGetTriggerable(G.jokers.cards[i + 1])[1] then @@ -2495,14 +2495,14 @@ local starfruit = { rarity = "cry_epic", cost = 14, order = 300, - blueprint_compat = true, - demicoloncompat = true, + blueprint_compat = false, + demicoloncompat = false, atlas = "atlasepic", pos = { x = 4, y = 5 }, config = { emult = 2, emult_mod = 0.2 }, pools = { ["Food"] = true }, calculate = function(self, card, context) - if context.joker_main or context.forcetrigger then + if context.joker_main then return { message = localize({ type = "variable", @@ -2515,7 +2515,7 @@ local starfruit = { colour = G.C.DARK_EDITION, } end - if context.reroll_shop or context.forcetrigger then + if context.reroll_shop then card.ability.emult = card.ability.emult - card.ability.emult_mod --floating point precision can kiss my ass istg if to_number(card.ability.emult) <= 1.00000001 then diff --git a/items/m.lua b/items/m.lua index 4dbd62e9e..5c38770b1 100644 --- a/items/m.lua +++ b/items/m.lua @@ -538,10 +538,12 @@ local notebook = { demicoloncompat = true, loc_vars = function(self, info_queue, card) info_queue[#info_queue + 1] = G.P_CENTERS.j_jolly + local num, denom = + SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds) return { vars = { - cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), - card.ability.extra.odds, + num, + denom, number_format(card.ability.immutable.slots), number_format(card.ability.extra.active), number_format(card.ability.extra.jollies), @@ -565,8 +567,12 @@ local notebook = { end if to_number(jollycount) >= to_number(card.ability.extra.jollies) --if there are 5 or more jolly jokers - or pseudorandom("cry_notebook") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds + or SMODS.pseudorandom_element( + card, + "cry_notebook", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) then card.ability.immutable.slots = to_number( math.min( @@ -831,10 +837,12 @@ local scrabble = { if Cryptid.enabled("e_cry_m") == true then info_queue[#info_queue + 1] = G.P_CENTERS.e_cry_m end + local num, denom = + SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds) return { vars = { - cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), - card.ability.extra.odds, + num, + denom, }, } end, @@ -842,9 +850,12 @@ local scrabble = { if context.cardarea == G.jokers and context.before and not context.retrigger_joker then local check = false if - pseudorandom("scrabbleother") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) - / card.ability.extra.odds + SMODS.pseudorandom_element( + card, + "scrabbleother", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) then check = true local card = create_card("Joker", G.jokers, nil, 0.9, nil, nil, nil, "scrabbletile") diff --git a/items/misc.lua b/items/misc.lua index 06113088a..2df313f67 100644 --- a/items/misc.lua +++ b/items/misc.lua @@ -24,19 +24,19 @@ local echo = { pos = { x = 2, y = 0 }, config = { retriggers = 2, extra = 2 }, loc_vars = function(self, info_queue, card) + local num, denom = SMODS.get_probability_vars(card, 1, card and card.ability.extra or self.config.extra) return { vars = { card and card.ability.retriggers or self.config.retriggers, - card and cry_prob(card.ability.cry_prob or 1, card.ability.extra, card.ability.cry_rigged) or 1, - card and card.ability.extra or self.config.extra, + num, + denom, }, - } -- note that the check for (card.ability.cry_prob or 1) is probably unnecessary due to cards being initialised with ability.cry_prob + } end, calculate = function(self, card, context) if context.repetition - and pseudorandom("echo") - < cry_prob(card.ability.cry_prob or 1, card.ability.extra or 2, card.ability.cry_rigged) / (card.ability.extra or 2) + and SMODS.pseudorandom_element(card, "cry_echo", 1, card and card.ability.extra or self.config.extra) then return { message = localize("k_again_ex"), @@ -210,13 +210,23 @@ local abstract = { config = { extra = { Emult = 1.15, odds_after_play = 2, odds_after_round = 4, marked = false, survive = false } }, --#1# emult, #2# in #3# chance card is destroyed after play, #4# in #5$ chance card is destroyed at end of round (even discarded or in deck) loc_vars = function(self, info_queue, card) + local num1, denom1 = SMODS.get_probability_vars( + card, + 1, + card and card.ability.extra.odds_after_play or self.config.extra.odds_after_play + ) + local num2, denom2 = SMODS.get_probability_vars( + card, + 1, + card and card.ability.extra.odds_after_round or self.config.extra.odds_after_round + ) return { vars = { card.ability.extra.Emult, - cry_prob(card.ability.cry_prob, card.ability.extra.odds_after_play, card.ability.cry_rigged), - card.ability.extra.odds_after_play, - cry_prob(card.ability.cry_prob, card.ability.extra.odds_after_round, card.ability.cry_rigged), - card.ability.extra.odds_after_round, + num1, + denom1, + num2, + denom2, }, } end, @@ -228,8 +238,12 @@ local abstract = { and not card.ability.extra.marked and not card.ability.eternal and not card.ability.extra.survive --this presvents repitition of shatter chance by shutting it out once it confirms to "survive" - and pseudorandom("cry_abstract_destroy") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds_after_play, card.ability.cry_rigged) / card.ability.extra.odds_after_play + and SMODS.pseudorandom_probability( + card, + "cry_abstract_destroy", + 1, + card and card.ability.extra.odds_after_play or self.config.extra.odds_after_play + ) then -- the 'card.area' part makes sure the card has a chance to survive if in the play area card.ability.extra.marked = true elseif context.cardarea == G.play and not card.ability.extra.marked then @@ -1147,10 +1161,6 @@ local astral = { code = { "Math", }, - art = { - "lord.ruby", - "Oiiman", - }, }, object_type = "Edition", dependencies = { @@ -1701,7 +1711,7 @@ local jollyedition = { and context.cardarea == G.play ) then - return { mult = card and card.edition and card.edition.mult or self.config.mult } -- updated value + return { card and card.edition and card.edition.mult or self.config.mult } -- updated value end if context.joker_main then card.config.trigger = true -- context.edition triggers twice, this makes it only trigger once (only for jonklers) @@ -2542,9 +2552,12 @@ return { function Card:calculate_abstract_break() if self.config.center_key == "m_cry_abstract" and not self.ability.extra.marked then if - pseudorandom("cry_abstract_destroy2") - < cry_prob(self.ability.cry_prob, self.ability.extra.odds_after_round, self.ability.cry_rigged) - / self.ability.extra.odds_after_round + SMODS.pseudorandom_probability( + card, + "cry_abstract_destroy2", + 1, + card and card.ability.extra.odds_after_round or self.config.extra.odds_after_round + ) then self.ability.extra.marked = true --KUFMO HAS abstract!!!!111!!! diff --git a/items/misc_joker.lua b/items/misc_joker.lua index 4e685f856..6c054f3d5 100644 --- a/items/misc_joker.lua +++ b/items/misc_joker.lua @@ -1,13 +1,3 @@ ---[[ -gameset_config = { - modest = {extra = {chips = 1}, center = {rarity = 1, blueprint_compat = false, immutable = true, no_dbl = false}}, - mainline = {center = {rarity = 2, blueprint_compat = true, immutable = true, no_dbl = true}}, - madness = {extra = {chips = 100}, center = {rarity = 3}}, - cryptid_in_2025 = {extra = {chips = 1e308}, center = {rarity = "cry_exotic"}}, - }, -]] --- --- Card.get_gameset(card) ~= "modest" local dropshot = { object_type = "Joker", dependencies = { @@ -24,14 +14,6 @@ local dropshot = { x_mult = 1, }, }, - gameset_config = { - modest = { - extra = { - Xmult_mod = 0.1, - x_mult = 1, - }, - }, - }, pos = { x = 5, y = 0 }, rarity = 3, cost = 8, @@ -486,14 +468,6 @@ local wee_fib = { mult_mod = 3, }, }, - gameset_config = { - modest = { - extra = { - mult = 0, - mult_mod = 1, - }, - }, - }, pos = { x = 1, y = 5 }, display_size = { w = 0.7 * 71, h = 0.7 * 95 }, rarity = 3, @@ -576,14 +550,6 @@ local whip = { x_mult = 1, }, }, - gameset_config = { - modest = { - extra = { - Xmult_mod = 0.1, - x_mult = 1, - }, - }, - }, rarity = 2, cost = 8, order = 15, @@ -706,13 +672,6 @@ local lucky_joker = { name = "cry-Lucky Joker", key = "lucky_joker", config = { extra = { dollars = 5 } }, - gameset_config = { - modest = { - extra = { - dollars = 4, - }, - }, - }, pos = { x = 4, y = 3 }, rarity = 1, cost = 4, @@ -768,14 +727,6 @@ local cursor = { name = "cry-Cursor", key = "cursor", config = { extra = { chips = 0, chip_mod = 8 } }, - gameset_config = { - modest = { - extra = { - chips = 0, - chip_mod = 4, - }, - }, - }, pos = { x = 4, y = 1 }, rarity = 1, cost = 5, @@ -1128,15 +1079,6 @@ local chili_pepper = { rounds_remaining = 8, }, }, - gameset_config = { - modest = { - extra = { - Xmult = 1, - Xmult_mod = 0.5, - rounds_remaining = 5, - }, - }, - }, pos = { x = 0, y = 1 }, rarity = 2, cost = 6, @@ -1315,13 +1257,6 @@ local big_cube = { key = "big_cube", joker_gate = "cry-Cube", config = { extra = { x_chips = 6 }, override_x_chips_check = true }, - gameset_config = { - modest = { - extra = { - x_chips = 3, - }, - }, - }, pos = { x = 4, y = 4 }, rarity = 1, order = 105, @@ -1372,7 +1307,7 @@ local eternalflame = { pos = { x = 0, y = 4 }, config = { extra = { - extra = 0.1, + extra = 0.2, x_mult = 1, }, }, @@ -1404,7 +1339,7 @@ local eternalflame = { } elseif context.selling_card - and (context.card.sell_cost >= 2 or Card.get_gameset(card) ~= "modest") + and (context.card.sell_cost >= 3 or Card.get_gameset(card) ~= "modest") and not context.blueprint then card.ability.extra.x_mult = lenient_bignum(to_big(card.ability.extra.x_mult) + card.ability.extra.extra) @@ -1456,13 +1391,6 @@ local nice = { chips = 420, }, }, - gameset_config = { - modest = { - extra = { - chips = 200, - }, - }, - }, pos = { x = 2, y = 3 }, pools = { ["Meme"] = true }, rarity = 3, @@ -2281,11 +2209,6 @@ local lightupthenight = { name = "cry-lightupthenight", key = "lightupthenight", config = { extra = { xmult = 1.5 } }, - gameset_config = { - modest = { - cost = 9, - }, - }, pos = { x = 1, y = 1 }, atlas = "atlasone", rarity = 3, @@ -2560,14 +2483,6 @@ local redbloon = { rounds_remaining = 2, }, }, - gameset_config = { - modest = { - extra = { - money = 20, - rounds_remaining = 3, - }, - }, - }, pos = { x = 5, y = 1 }, rarity = 1, cost = 4, @@ -2729,6 +2644,24 @@ local maze = { order = 61, immutable = true, atlas = "atlastwo", + update = function(self, card, dt) + if G.STAGE == G.STAGES.RUN then + if G.GAME.current_round.hands_played > 0 then + G.GAME.current_round.hands_played = 0 + end + if G.GAME.current_round.discards_used > 0 then + G.GAME.current_round.discards_used = 0 + end + end + end, + add_to_deck = function(self, card, from_debuff) + if G.GAME.current_round.hands_played > 0 then + G.GAME.current_round.hands_played = 0 + end + if G.GAME.current_round.discards_used > 0 then + G.GAME.current_round.discards_used = 0 + end + end, cry_credits = { idea = { "zy-b-org", @@ -2806,15 +2739,6 @@ local magnet = { slots = 4, }, }, - gameset_config = { - modest = { - extra = { - money = 2, - Xmoney = 3, - slots = 3, - }, - }, - }, rarity = 1, cost = 6, order = 96, @@ -3518,11 +3442,6 @@ local happy = { pos = { x = 2, y = 1 }, rarity = 1, cost = 2, - gameset_config = { - modest = { - cost = 5, - }, - }, order = 63, immutable = true, blueprint_compat = true, @@ -3915,18 +3834,15 @@ local rnjoker = { config = {}, order = 59, loc_vars = function(self, info_queue, card) + local num, denom = SMODS.get_probability_vars(card, 1, card and card.ability.extra.cond_value or 0) local vars = { vars = { (card.ability.extra and card.ability.extra.value_mod and card.ability.extra.value) or 0, (card.ability.extra and card.ability.extra.value and card.ability.extra.value_mod) or (card.ability.extra and card.ability.extra.value) or 0, - card.ability.extra and card.ability.extra.cond_value or 0, - cry_prob( - card.ability.cry_prob, - card.ability.extra and card.ability.extra.cond_value or 0, - card.ability.cry_rigged - ), + denom, + num, }, } if card.ability.extra and card.ability.extra.color then @@ -4156,13 +4072,11 @@ local rnjoker = { end elseif j.cond == "odds" then if - pseudorandom("rnj") - < ( - cry_prob( - card.ability.cry_prob, - card.ability.extra.cond_value, - card.ability.cry_rigged - ) / card.ability.extra.cond_value + SMODS.pseudorandom_probability( + card, + "rnj", + 1, + card and card.ability.extra.cond_value or 0 ) then cond_passed = true @@ -4445,13 +4359,10 @@ local rnjoker = { end elseif j.cond == "odds" then if - pseudorandom("rnj") - < ( - cry_prob( - card.ability.cry_prob, - card.ability.extra.cond_value, - card.ability.cry_rigged - ) / card.ability.extra.cond_value + SMODS.pseudorandom_element( + card, + 1, + card and card.ability.extra.odds or self.config.extra.odds ) then cond_passed = true @@ -4535,13 +4446,11 @@ local rnjoker = { end elseif j.cond == "odds" then if - pseudorandom("rnj") - < ( - cry_prob( - card.ability.cry_prob, - card.ability.extra.cond_value, - card.ability.cry_rigged - ) / card.ability.extra.cond_value + SMODS.pseudorandom_probability( + card, + "rnj", + 1, + card and card.ability.extra.cond_value or 0 ) then cond_passed = true @@ -7538,20 +7447,14 @@ local coin = { return { vars = { number_format(center.ability.extra.money), - number_format( - center.ability.extra.money - * (Card.get_gameset(card) ~= "modest" and center.ability.immutable.money_mod or 4) - ), + number_format(center.ability.extra.money * center.ability.immutable.money_mod), }, } end, atlas = "atlasthree", calculate = function(self, card, context) if (context.selling_card and context.card.ability.set == "Joker") or context.forcetrigger then - local mod = math.floor( - pseudorandom(pseudoseed("coin")) - * (Card.get_gameset(card) ~= "modest" and card.ability.immutable.money_mod or 4) - ) + 1 + local mod = math.floor(pseudorandom(pseudoseed("coin")) * card.ability.immutable.money_mod) + 1 local option = lenient_bignum(to_big(card.ability.extra.money) * mod) ease_dollars(option) card_eval_status_text( @@ -7719,10 +7622,12 @@ local oldblueprint = { }, } end + local num, denom = + SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds) return { vars = { - cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), - card.ability.extra.odds, + num, + denom, }, main_end = main_end, } @@ -7782,13 +7687,6 @@ local night = { name = "cry-night", key = "night", config = { extra = { mult = 3 } }, - gameset_config = { - modest = { - extra = { - mult = 2, - }, - }, - }, pos = { x = 3, y = 1 }, rarity = 3, cost = 6, @@ -7922,14 +7820,15 @@ local busdriver = { blueprint_compat = true, demicoloncompat = true, loc_vars = function(self, info_queue, card) - local prob = cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) - local oddy = math.max(1, card.ability.extra.odds) + local num, denom = + SMODS.get_probability_vars(card, 3, card and card.ability.extra.odds or self.config.extra.odds) + local num2 = denom - num return { vars = { - (oddy - 1 / prob), + num, number_format(card.ability.extra.mult), - oddy, - (1 / prob), + denom, + num2, }, } end, @@ -7937,9 +7836,12 @@ local busdriver = { if context.joker_main and (to_big(card.ability.extra.mult) > to_big(0)) then local oddy = math.max(1, card.ability.extra.odds) if - pseudorandom("busdriver") - < 1 - - (1 / (cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) * oddy)) + SMODS.pseudorandom_element( + card, + "cry_busdriver", + 3, + card and card.ability.extra.odds or self.config.extra.odds + ) then return { message = localize({ @@ -8060,14 +7962,6 @@ local morse = { money = 1, }, }, - gameset_config = { - modest = { - extra = { - bonus = 1, - money = 1, - }, - }, - }, rarity = 1, cost = 5, order = 57, @@ -8688,13 +8582,6 @@ local kidnap = { config = { extra = { money = 4 }, }, - gameset_config = { - modest = { - extra = { - money = 1, - }, - }, - }, rarity = 1, cost = 4, blueprint_compat = false, @@ -9483,8 +9370,9 @@ local digitalhallucinations = { order = 130, config = { odds = 2 }, loc_vars = function(self, info_queue, card) + local num, denom = SMODS.get_probability_vars(card, 1, card and card.ability.odds or self.config.odds) return { - vars = { cry_prob(card.ability.cry_prob, card.ability.odds, card.ability.cry_rigged), card.ability.odds }, + vars = { num, denom }, } end, atlas = "atlasthree", @@ -9497,10 +9385,7 @@ local digitalhallucinations = { if context.open_booster - and ( - pseudorandom("digi") - < cry_prob(card.ability.cry_prob, card.ability.odds, card.ability.cry_rigged) / card.ability.odds - ) + and (SMODS.pseudorandom_element(card, "digi", 1, card and card.ability.odds or self.config.odds)) then local boosty = context.card -- finally mod compat? @@ -10205,14 +10090,6 @@ local brokenhome = { -- X11.4 Mult, 1 in 4 chance to self-destruct at end of rou eternal_compat = false, demicoloncompat = true, config = { extra = { Xmult = 11.4, odds = 4 } }, - gameset_config = { - modest = { - extra = { - Xmult = 3, - odds = 4, - }, - }, - }, loc_vars = function(self, info_queue, card) -- the humble cavendish example mod: return { vars = { card.ability.extra.Xmult, (G.GAME.probabilities.normal or 1), card.ability.extra.odds } } end, @@ -10365,7 +10242,7 @@ local yarnball = { -- +1 to all listed probabilities for the highest cat tag lev end, } -local pizza = { +local pizza = { -- +1 to all listed probabilities for the highest cat tag level cry_credits = { idea = { "Enemui", @@ -10425,12 +10302,7 @@ local pizza = { end if context.selling_self or context.forcetrigger then if to_big(card.ability.extra.rounds_left) <= to_big(0) or context.forcetrigger then - for i = 1, to_number( - math.min( - math.min(card.ability.extra.slices, card.ability.immutable.max_spawn), - G.jokers.config.card_limit - #G.jokers.cards + 1 - ) - ) do + for i = 1, to_number(math.min(card.ability.extra.slices, card.ability.immutable.max_spawn)), G.jokers.config.card_limit - #G.jokers.cards do SMODS.add_card({ key = "j_cry_pizza_slice", area = G.jokers, @@ -10441,7 +10313,7 @@ local pizza = { end, } -local pizza_slice = { +local pizza_slice = { -- +1 to all listed probabilities for the highest cat tag level cry_credits = { idea = { "Enemui", @@ -10470,24 +10342,13 @@ local pizza_slice = { in_pool = function() return false end, - demicoloncompat = true, + demicoloncompat = false, config = { extra = { xmult = 1, xmult_mod = 0.5 } }, loc_vars = function(self, info_queue, card) return { vars = { number_format(card.ability.extra.xmult_mod), number_format(card.ability.extra.xmult) } } end, calculate = function(self, card, context) - if context.selling_card and context.card and context.card.config.center.key == "j_cry_pizza_slice" then - if context.card ~= card then - card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.xmult_mod - if not context.forcetrigger then - return { - message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.xmult } }), - colour = G.C.FILTER, - } - end - end - end - if context.joker_main or context.forcetrigger then + if context.joker_main then return { message = localize({ type = "variable", @@ -10497,176 +10358,15 @@ local pizza_slice = { Xmult_mod = lenient_bignum(card.ability.extra.xmult), } end - end, -} - -local paved_joker = { -- +1 to all listed probabilities for the highest cat tag level - cry_credits = { - idea = { - "InspectorB", - }, - art = { - "gemstonez", - }, - code = { - "lord.ruby", - }, - }, - object_type = "Joker", - dependencies = { - items = { - "set_cry_misc_joker", - }, - }, - name = "cry-paved_joker", - key = "paved_joker", - atlas = "atlasone", - pos = { x = 1, y = 6 }, - rarity = 1, - cost = 4, - order = 142, - config = { extra = 1 }, - loc_vars = function(self, info_queue, card) - return { vars = { number_format(math.floor(card.ability.extra)) } } - end, -} - -local fading_joker = { -- +1 to all listed probabilities for the highest cat tag level - cry_credits = { - idea = { - "DoNotSus", - }, - art = { - "lord.ruby", - }, - code = { - "lord.ruby", - }, - }, - object_type = "Joker", - dependencies = { - items = { - "set_cry_misc_joker", - }, - }, - name = "cry-paved_joker", - key = "fading_joker", - atlas = "atlasone", - pos = { x = 2, y = 6 }, - rarity = 2, - cost = 6, - order = 143, - demicoloncompat = true, - blueprint_compat = true, - config = { extra = { xmult = 1, xmult_mod = 1 } }, - loc_vars = function(self, info_queue, card) - return { vars = { number_format(card.ability.extra.xmult_mod), number_format(card.ability.extra.xmult) } } - end, - calculate = function(self, card, context) - if context.perishable_debuffed or context.forcetrigger then - card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.xmult_mod - if not context.forcetrigger then + if context.selling_card and context.card and context.card.config.center.key == "j_cry_pizza_slice" then + if context.card ~= card then + card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.xmult_mod return { message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.xmult } }), colour = G.C.FILTER, } end end - if context.joker_main or context.forcetrigger then - return { - message = localize({ - type = "variable", - key = "a_xmult", - vars = { number_format(card.ability.extra.xmult) }, - }), - Xmult_mod = lenient_bignum(card.ability.extra.xmult), - } - end - end, - in_pool = function() - for i, v in pairs(G.I.CARD) do - if v.perishable and v.perish_tally and to_big(v.perish_tally) > to_big(0) then - return true - end - end - end, - init = function() - local calcuate_parishable_ref = Card.calculate_perishable - function Card:calculate_perishable(...) - if self.ability.perish_tally == 1 then - SMODS.calculate_context({ perishable_debuffed = true, other_card = self, cardarea = self.area }) - end - return calcuate_parishable_ref(self, ...) - end - end, -} - -local poor_joker = { -- +1 to all listed probabilities for the highest cat tag level - cry_credits = { - idea = { - "DoNotSus", - }, - art = { - "Darren_the_frog", - }, - code = { - "lord.ruby", - }, - }, - object_type = "Joker", - dependencies = { - items = { - "set_cry_misc_joker", - }, - }, - name = "cry-poor_joker", - key = "poor_joker", - atlas = "atlasone", - pos = { x = 3, y = 6 }, - rarity = 2, - cost = 6, - order = 144, - demicoloncompat = true, - blueprint_compat = true, - config = { extra = { mult = 0, mult_mod = 4 } }, - loc_vars = function(self, info_queue, card) - return { vars = { number_format(card.ability.extra.mult_mod), number_format(card.ability.extra.mult) } } - end, - calculate = function(self, card, context) - if context.rental or context.forcetrigger then - card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.mult_mod - if not context.forcetrigger then - return { - message = localize({ type = "variable", key = "a_mult", vars = { card.ability.extra.mult } }), - colour = G.C.FILTER, - } - end - end - if context.joker_main or context.forcetrigger then - return { - message = localize({ - type = "variable", - key = "a_mult", - vars = { number_format(card.ability.extra.mult) }, - }), - mult_mod = lenient_bignum(card.ability.extra.mult), - } - end - end, - in_pool = function() - for i, v in pairs(G.I.CARD) do - if v.rental then - return true - end - end - end, - init = function() - local calcuate_rental_ref = Card.calculate_rental - function Card:calculate_rental(...) - local ret = calcuate_rental_ref(self, ...) - SMODS.calculate_context({ rental = true, other_card = self, cardarea = self.area }) - return ret - end end, } @@ -10798,11 +10498,7 @@ local miscitems = { --yarnball, pizza, pizza_slice, - paved_joker, - fading_joker, - poor_joker, } - return { name = "Misc. Jokers", init = function() diff --git a/items/planet.lua b/items/planet.lua index 1de047218..48504322b 100644 --- a/items/planet.lua +++ b/items/planet.lua @@ -313,10 +313,12 @@ local planetlua = { atlas = "atlasnotjokers", order = 101, loc_vars = function(self, info_queue, card) + local num, denom = + SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds) return { vars = { - card and cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) or 1, - card and card.ability.extra.odds or self.config.extra.odds, + num, + denom, }, } end, @@ -326,9 +328,12 @@ local planetlua = { use = function(self, card, area, copier) local used_consumable = copier or card if - pseudorandom("planetlua") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) - / card.ability.extra.odds + SMODS.pseudorandom_probability( + card, + "planetlua", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) then --Code "borrowed" from black hole update_hand_text( { sound = "button", volume = 0.7, pitch = 0.8, delay = 0.3 }, @@ -473,8 +478,12 @@ local planetlua = { for i = 1, number do quota = quota + ( - pseudorandom("planetlua") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds + SMODS.pseudorandom_probability( + card, + "planetlua", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) and 1 or 0 ) @@ -577,9 +586,12 @@ local planetlua = { G.GAME.used_vouchers.v_observatory and context.joker_main and ( - pseudorandom("nstar") - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) - / card.ability.extra.odds + SMODS.pseudorandom_probability( + card, + "nstar", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) ) then local value = G.P_CENTERS.v_observatory.config.extra @@ -1365,134 +1377,6 @@ local kaikki = { end, } -- order 166 reserved for suit planet of TEFD, None and Sol -local voxel = { - cry_credits = { - idea = { - "HexaCryonic", - }, - art = { - "HexaCryonic", - "Icyethics", - }, - code = { - "lord.ruby", - }, - }, - dependencies = { - items = { - "set_cry_planet", - "set_cry_code", - "c_cry_declare", - }, - }, - object_type = "Consumable", - set = "Planet", - name = "cry-Voxel", - key = "voxel", - pos = { x = 1, y = 6 }, - config = { hand_types = { "cry_Declare0", "cry_Declare1", "cry_Declare2" }, softlock = true }, - cost = 4, - aurinko = true, - atlas = "atlasnotjokers", - order = 167, - can_use = function(self, card) - return true - end, - loc_vars = function(self, info_queue, center) - local levelone = G.GAME.hands["cry_Declare0"] and G.GAME.hands["cry_Declare0"].level or 1 - local leveltwo = G.GAME.hands["cry_Declare1"] and G.GAME.hands["cry_Declare1"].level or 1 - local levelthree = G.GAME.hands["cry_Declare2"] and G.GAME.hands["cry_Declare2"].level or 1 - local planetcolourone = G.C.HAND_LEVELS[math.min(levelone, 7)] - local planetcolourtwo = G.C.HAND_LEVELS[math.min(leveltwo, 7)] - local planetcolourthree = G.C.HAND_LEVELS[math.min(levelthree, 7)] - - return { - vars = { - G.GAME.hands["cry_Declare0"] and G.GAME.hands["cry_Declare0"].declare_cards and localize( - "cry_Declare0", - "poker_hands" - ) or localize("cry_code_empty"), - G.GAME.hands["cry_Declare1"] and G.GAME.hands["cry_Declare1"].declare_cards and localize( - "cry_Declare1", - "poker_hands" - ) or localize("cry_code_empty"), - G.GAME.hands["cry_Declare2"] and G.GAME.hands["cry_Declare2"].declare_cards and localize( - "cry_Declare2", - "poker_hands" - ) or localize("cry_code_empty"), - G.GAME.hands["cry_Declare0"] and G.GAME.hands["cry_Declare0"].level or 1, - G.GAME.hands["cry_Declare1"] and G.GAME.hands["cry_Declare1"].level or 1, - G.GAME.hands["cry_Declare2"] and G.GAME.hands["cry_Declare2"].level or 1, - colours = { - ( - to_big(G.GAME.hands["cry_Declare0"] and G.GAME.hands["cry_Declare0"].level or 1) - == to_big(1) - and G.C.UI.TEXT_DARK - or G.C.HAND_LEVELS[to_number( - math.min(7, G.GAME.hands["cry_Declare0"] and G.GAME.hands["cry_Declare0"].level or 1) - )] - ), - ( - to_big(G.GAME.hands["cry_Declare1"] and G.GAME.hands["cry_Declare1"].level or 1) - == to_big(1) - and G.C.UI.TEXT_DARK - or G.C.HAND_LEVELS[to_number( - math.min(7, G.GAME.hands["cry_Declare1"] and G.GAME.hands["cry_Declare1"].level or 1) - )] - ), - ( - to_big(G.GAME.hands["cry_Declare2"] and G.GAME.hands["cry_Declare2"].level or 1) - == to_big(1) - and G.C.UI.TEXT_DARK - or G.C.HAND_LEVELS[to_number( - math.min(7, G.GAME.hands["cry_Declare2"] and G.GAME.hands["cry_Declare2"].level or 1) - )] - ), - }, - }, - } - end, - use = function(self, card, area, copier) - local hand_types = { - G.GAME.hands.cry_Declare0 and G.GAME.hands.cry_Declare0.declare_cards and "cry_Declare0", - G.GAME.hands.cry_Declare1 and G.GAME.hands.cry_Declare1.declare_cards and "cry_Declare1", - G.GAME.hands.cry_Declare2 and G.GAME.hands.cry_Declare2.declare_cards and "cry_Declare2", - } - Cryptid.suit_level_up(card, copier, 1, hand_types) - end, - bulk_use = function(self, card, area, copier, number) - local hand_types = { - G.GAME.hands.cry_Declare0 and G.GAME.hands.cry_Declare0.declare_cards and "cry_Declare0", - G.GAME.hands.cry_Declare1 and G.GAME.hands.cry_Declare1.declare_cards and "cry_Declare1", - G.GAME.hands.cry_Declare2 and G.GAME.hands.cry_Declare2.declare_cards and "cry_Declare2", - } - Cryptid.suit_level_up(card, copier, number, hand_types) - end, - calculate = function(self, card, context) - if - G.GAME.used_vouchers.v_observatory - and context.joker_main - and ( - context.scoring_name == "cry_Declare0" - or context.scoring_name == "cry_Declare1" - or context.scoring_name == "cry_Declare2" - ) - then - local value = G.P_CENTERS.v_observatory.config.extra - if Overflow then - value = value ^ to_big(card.ability.immutable and card.ability.immutable.overflow_amount or 1) - end - return { - message = localize({ type = "variable", key = "a_xmult", vars = { value } }), - Xmult_mod = value, - } - end - end, - demicoloncompat = true, - force_use = function(self, card, area) - card:use_consumeable(area) - end, -} function Cryptid.suit_level_up(card, copier, number, poker_hands, message) local used_consumable = copier or card @@ -1544,7 +1428,6 @@ local planet_cards = { pata, kaikki, -- reserved for tefd/none/sol suit planet - voxel, } return { name = "Planets", diff --git a/items/pointer.lua b/items/pointer.lua index 60689252d..ecf74d951 100644 --- a/items/pointer.lua +++ b/items/pointer.lua @@ -29,137 +29,25 @@ local pointer = { return true end, use = function(self, card, area, copier) - if not card.ability.cry_multiuse or to_big(card.ability.cry_multiuse) <= to_big(1) then - G.GAME.CODE_DESTROY_CARD = copy_card(card) - G.consumeables:emplace(G.GAME.CODE_DESTROY_CARD) - else - card.ability.cry_multiuse = card.ability.cry_multiuse + 1 - end G.GAME.USING_CODE = true - G.E_MANAGER:add_event(Event({ - func = function() - G.GAME.USING_POINTER = true - G.FUNCS.overlay_menu({ definition = create_UIBox_your_collection() }) - return true - end, - })) - G.GAME.POINTER_SUBMENU = nil + G.GAME.USING_POINTER = true + G.ENTERED_CARD = "" + G.CHOOSE_CARD = UIBox({ + definition = create_UIBox_pointer(card), + config = { + align = "cm", + offset = { x = 0, y = 10 }, + major = G.ROOM_ATTACH, + bond = "Weak", + instance_type = "POPUP", + }, + }) + G.CHOOSE_CARD.alignment.offset.y = 0 + G.ROOM.jiggle = G.ROOM.jiggle + 1 + G.CHOOSE_CARD:align_to_major() + check_for_unlock({ cry_used_consumable = "c_cry_pointer" }) end, init = function(self) - local ccl = Card.click - function Card:click() - if G.GAME.USING_POINTER then - if not self.debuff then - if self.config.center.consumeable then - local copy = copy_card(self) - copy:add_to_deck() - G.consumeables:emplace(copy) - G.FUNCS.exit_overlay_menu_code() - ccl(self) - if G.GAME.CODE_DESTROY_CARD then - G.GAME.CODE_DESTROY_CARD:start_dissolve() - G.GAME.CODE_DESTROY_CARD = nil - end - elseif self.config.center.set == "Booster" then - G.FUNCS.exit_overlay_menu_code() - local card = copy_card(self) - card.cost = 0 - card.from_tag = true - G.FUNCS.use_card({ config = { ref_table = card } }) - card:start_materialize() - created = true - ccl(self) - if G.GAME.CODE_DESTROY_CARD then - G.GAME.CODE_DESTROY_CARD:start_dissolve() - G.GAME.CODE_DESTROY_CARD = nil - end - elseif - self.config.center.key == "c_base" - or self.config.center.set == "Enhanced" - or self.edition - or G.GAME.POINTER_SUBMENU == "Edition" - then - --submenu stuff - if G.GAME.POINTER_SUBMENU == "Rank" then - G.GAME.POINTER_PLAYING.rank = self.base.value - G.FUNCS.overlay_menu({ - definition = create_UIBox_pointer_suit(), - }) - elseif G.GAME.POINTER_SUBMENU == "Suit" then - G.GAME.POINTER_PLAYING.suit = self.base.suit - G.FUNCS.overlay_menu({ - definition = create_UIBox_pointer_enhancement(), - }) - elseif G.GAME.POINTER_SUBMENU == "Enhancement" then - G.GAME.POINTER_PLAYING.center = self.config.center.key - G.FUNCS.overlay_menu({ - definition = create_UIBox_pointer_edition(), - }) - elseif G.GAME.POINTER_SUBMENU == "Edition" then - if self.edition then - G.GAME.POINTER_PLAYING.edition = self.edition.key - end - G.FUNCS.overlay_menu({ - definition = create_UIBox_pointer_seal(), - }) - elseif G.GAME.POINTER_SUBMENU == "Seal" then - G.GAME.POINTER_PLAYING.seal = self.seal - local card = SMODS.create_card({ - key = G.GAME.POINTER_PLAYING.center, - rank = G.GAME.POINTER_PLAYING.rank, - suit = G.GAME.POINTER_PLAYING.suit, - }) - card:set_ability(G.P_CENTERS[G.GAME.POINTER_PLAYING.center]) - if G.GAME.POINTER_PLAYING.seal then - card:set_seal(G.GAME.POINTER_PLAYING.seal) - end - if G.GAME.POINTER_PLAYING.edition then - card:set_edition(G.GAME.POINTER_PLAYING.edition) - end - if G.STATE == G.STATES.SELECTING_HAND then - G.hand:emplace(card) - else - G.deck:emplace(card) - end - table.insert(G.playing_cards, card) - G.FUNCS.exit_overlay_menu_code() - G.GAME.POINTER_PLAYING = nil - if G.GAME.CODE_DESTROY_CARD then - G.GAME.CODE_DESTROY_CARD:start_dissolve() - G.GAME.CODE_DESTROY_CARD = nil - end - end - else - G.ENTERED_CARD = self.config.center.key - local ret = G.FUNCS.pointer_apply() - G.FUNCS.pointer_cancel() - if ret then - G.FUNCS.exit_overlay_menu_code() - ccl(self) - if G.GAME.CODE_DESTROY_CARD then - G.GAME.CODE_DESTROY_CARD:start_dissolve() - G.GAME.CODE_DESTROY_CARD = nil - end - else - G.GAME.USING_CODE = true - G.GAME.USING_POINTER = true - end - end - end - else - ccl(self) - end - end - local emplace_ref = CardArea.emplace - function CardArea:emplace(card, ...) - if G.GAME.USING_POINTER then - if Cryptid.pointergetblist(card.config.center.key)[1] then - card.debuff = true - end - end - return emplace_ref(self, card, ...) - end - function create_UIBox_pointer(card) G.E_MANAGER:add_event(Event({ blockable = false, @@ -247,9 +135,7 @@ local pointer = { return t end G.FUNCS.pointer_cancel = function() - if G.CHOOSE_CARD then - G.CHOOSE_CARD:remove() - end + G.CHOOSE_CARD:remove() G.GAME.USING_CODE = false G.GAME.USING_POINTER = false G.DEBUG_POINTER = false @@ -364,13 +250,11 @@ local pointer = { created = true end if created then - if G.CHOOSE_CARD then - G.CHOOSE_CARD:remove() - end + G.CHOOSE_CARD:remove() G.GAME.USING_CODE = false G.GAME.USING_POINTER = false G.DEBUG_POINTER = false - return true + return end end diff --git a/items/spectral.lua b/items/spectral.lua index ecf3b3a53..3c8f28d92 100644 --- a/items/spectral.lua +++ b/items/spectral.lua @@ -812,7 +812,6 @@ local chambered = { key = "chambered", pos = { x = 5, y = 0 }, config = { extra = { num_copies = 3 } }, - misprintize_caps = { extra = { num_copies = 100 } }, loc_vars = function(self, info_queue, card) info_queue[#info_queue + 1] = { key = "e_negative_consumable", set = "Edition", config = { extra = 1 } } return { vars = { card.ability.extra.num_copies } } diff --git a/items/spooky.lua b/items/spooky.lua index 53ed99cf3..f0872c23a 100644 --- a/items/spooky.lua +++ b/items/spooky.lua @@ -854,13 +854,12 @@ local trick_or_treat = { calculate = function(self, card, context) if context.selling_self then if - pseudorandom(pseudoseed("cry_trick_or_treat")) - < cry_prob( - card.ability.cry_prob * card.ability.immutable.prob_mod, - card.ability.extra.odds, - card.ability.cry_rigged - ) - / card.ability.extra.odds + SMODS.pseudorandom_probability( + card, + "cry_trick_or_treat", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) then local spawn_num = to_number(math.min(card.ability.immutable.max_candies, card.ability.extra.num_candies)) @@ -887,14 +886,12 @@ local trick_or_treat = { end end, loc_vars = function(self, info_queue, center) + local num, denom = + SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds) return { vars = { - cry_prob( - center.ability.cry_prob * center.ability.immutable.prob_mod, - center.ability.extra.odds, - center.ability.cry_rigged - ), - center.ability.extra.odds, + num, + denom, number_format(center.ability.extra.num_candies), }, } @@ -1109,13 +1106,12 @@ local ghost = { and not context.retrigger_joker then if - pseudorandom(pseudoseed("cry_ghost_destroy")) - < cry_prob( - card.ability.cry_prob, - card.ability.extra.odds * card.ability.extra.destroy_rate, - card.ability.cry_rigged - ) - / (card.ability.extra.odds * card.ability.extra.destroy_rate) + SMODS.pseudorandom_probability( + card, + "cry_ghost_destroy", + 1, + (card and card.ability.extra.odds or self.config.extra.odds) * card.ability.extra.destroy_rate + ) then G.E_MANAGER:add_event(Event({ func = function() @@ -1136,13 +1132,12 @@ local ghost = { end --todo: let multiple ghosts possess multiple jokers if - pseudorandom(pseudoseed("cry_ghost_possess")) - < cry_prob( - card.ability.cry_prob, - card.ability.extra.odds * card.ability.extra.possess_rate, - card.ability.cry_rigged - ) - / (card.ability.extra.odds * card.ability.extra.possess_rate) + SMODS.pseudorandom_probability( + card, + "planetlua", + 1, + (card and card.ability.extra.odds or self.config.extra.odds) * card.ability.extra.possess_rate + ) then for i = 1, #G.jokers.cards do G.jokers.cards[i].ability.cry_possessed = nil @@ -1163,20 +1158,22 @@ local ghost = { end, loc_vars = function(self, info_queue, card) info_queue[#info_queue + 1] = { set = "Other", key = "cry_possessed" } + local num, denom = SMODS.get_probability_vars( + card, + 1, + (card and card.ability.extra.odds or self.config.extra.odds) * card.ability.extra.destroy_rate + ) + local num2, denom2 = SMODS.get_probability_vars( + card, + 1, + (card and card.ability.extra.odds or self.config.extra.odds) * card.ability.extra.possess_rate + ) return { vars = { - cry_prob( - card.ability.cry_prob, - card.ability.extra.odds * card.ability.extra.possess_rate, - card.ability.cry_rigged - ), - cry_prob( - card.ability.cry_prob, - card.ability.extra.odds * card.ability.extra.destroy_rate, - card.ability.cry_rigged - ), - card.ability.extra.odds * card.ability.extra.possess_rate, - card.ability.extra.odds * card.ability.extra.destroy_rate, + num2, + num1, + denom2, + denom1, }, } end, @@ -1195,103 +1192,6 @@ local possessed = { no_sticker_sheet = true, badge_colour = HEX("aaaaaa"), } - -local rotten_egg = { - object_type = "Joker", - dependencies = { - items = { - "set_cry_cursed", - }, - }, - key = "rotten_egg", - pos = { x = 3, y = 3 }, - config = { - extra = { - starting_money = 1, - lose_money = 1, - needed_money = 10, - left_money = 10, - }, - }, - rarity = "cry_cursed", - cost = 0, - order = 136.1, --gross but cryptid doesnt partition orderings and im not shifting everything - atlas = "atlasspooky", - blueprint_compat = false, - eternal_compat = false, - perishable_compat = false, - demicoloncompat = true, - no_dbl = true, - add_to_deck = function(self, card, from_debuff) - G.GAME.cry_rotten_amount = card.ability.extra.starting_money - for i, v in pairs(G.jokers.cards) do - v:set_cost() - end - end, - remove_from_deck = function() - G.GAME.cry_rotten_amount = nil - for i, v in pairs(G.jokers.cards) do - v:set_cost() - end - end, - calculate = function(self, card, context) - if - context.end_of_round - and not context.blueprint - and not context.individual - and not context.repetition - and not context.retrigger_joker - then - for i, v in pairs(G.jokers.cards) do - v.sell_cost = v.sell_cost - 1 - end - return { - message = localize("k_downgraded_ex"), - } - end - if - context.selling_card - and context.card.ability.set == "Joker" - and context.card - and context.card.sell_cost ~= 0 - then - card.ability.extra.left_money = card.ability.extra.left_money - context.card.sell_cost - if to_big(card.ability.extra.left_money) <= to_big(0) then - G.E_MANAGER:add_event(Event({ - func = function() - card:start_dissolve() - return true - end, - })) - else - return { - message = number_format(card.ability.extra.needed_money - card.ability.extra.left_money) - .. "/" - .. number_format(card.ability.extra.needed_money), - } - end - end - if context.forcetrigger then - G.E_MANAGER:add_event(Event({ - func = function() - card:start_dissolve() - return true - end, - })) - end - end, - loc_vars = function(self, info_queue, card) - return { - vars = { - number_format(card.ability.extra.starting_money), - number_format(card.ability.extra.lose_money), - number_format(card.ability.extra.needed_money), - number_format(card.ability.extra.left_money), - }, - } - end, -} - local spookydeck = { object_type = "Back", dependencies = { @@ -1868,9 +1768,12 @@ local monopoly_money = { and not (context.card == card) then if - pseudorandom(pseudoseed("cry_monopoly")) - < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) - / card.ability.extra.odds + SMODS.pseudorandom_probability( + card, + "cry_monopoly", + 1, + card and card.ability.extra.odds or self.config.extra.odds + ) then G.E_MANAGER:add_event(Event({ func = function() @@ -1904,10 +1807,12 @@ local monopoly_money = { end end, loc_vars = function(self, info_queue, card) + local num, denom = + SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds) return { vars = { - cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), - card.ability.extra.odds, + num, + denom, }, } end, @@ -2180,7 +2085,6 @@ items = { trick_or_treat, candy_basket, blacklist, - rotten_egg, --ghost, --possessed, spookydeck, diff --git a/items/tag.lua b/items/tag.lua index 6077764f0..37a828bf1 100644 --- a/items/tag.lua +++ b/items/tag.lua @@ -1416,257 +1416,6 @@ local booster = { end end, } - -local clone = { - cry_credits = { - idea = { - "Squiddy", - }, - art = { - "lord.ruby", - }, - code = { - "lord.ruby", - }, - }, - object_type = "Tag", - dependencies = { - items = { - "set_cry_tag", - }, - }, - name = "cry-Clone Tag", - order = 29, - atlas = "tag_cry", - pos = { x = 6, y = 3 }, - config = { type = "item_bought", cost_fac = 1.5 }, - key = "clone", - loc_vars = function(self, info_queue) - return { vars = { self.config.cost_fac } } - end, - min_ante = 4, - apply = function(self, tag, context) - if context.type == "item_bought" then - local lock = tag.ID - G.CONTROLLER.locks[lock] = true - tag:yep("+", G.C.BLUE, function() - local copy = copy_card(context.card) - if context.card.area then - context.card.area:emplace(copy) - else - G.consumeables:emplace(copy) - end - G.E_MANAGER:add_event(Event({ - func = function() - for i, v in pairs(G.I.CARD) do - if v.set_cost then - v:set_cost() - end - end - return true - end, - })) - G.CONTROLLER.locks[lock] = nil - return true - end) - tag.triggered = true - return true - end - end, - init = function() - local buy_ref = G.FUNCS.buy_from_shop - G.FUNCS.buy_from_shop = function(e) - local r = buy_ref(e) - if r ~= false then - for i = 1, #G.GAME.tags do - G.GAME.tags[i]:apply_to_run({ type = "item_bought", card = e.config.ref_table }) - end - end - return r - end - local set_costref = Card.set_cost - function Card:set_cost(...) - local c = set_costref(self, ...) - local has - for i = 1, #G.GAME.tags do - if G.GAME.tags[i].key == "tag_cry_clone" then - has = true - break - end - end - if has then - self.cost = self.cost * 1.5 - end - end - end, -} - -local lens = { - cry_credits = { - idea = { - "Squiddy", - }, - art = { - "lord.ruby", - }, - code = { - "lord.ruby", - }, - }, - object_type = "Tag", - dependencies = { - items = { - "set_cry_tag", - }, - }, - name = "cry-Lens Tag", - order = 30, - atlas = "tag_cry", - pos = { x = 7, y = 3 }, - config = { type = "immediate", negatives = 2 }, - key = "lens", - loc_vars = function(self, info_queue) - info_queue[#info_queue + 1] = G.P_CENTERS.e_negative - return { vars = { self.config.negatives } } - end, - min_ante = 4, - apply = function(self, tag, context) - if context.type == "immediate" then - local c = {} - for i, v in pairs(G.consumeables.cards) do - if not v.edition or not v.edition.negative then - if not v.will_be_editioned then - c[#c + 1] = v - end - end - end - if #c > 0 then - local lock = tag.ID - G.CONTROLLER.locks[lock] = true - local card = pseudorandom_element(c, pseudoseed("cry_lens_tag")) - card.will_be_editioned = true - local card2 = pseudorandom_element(c, pseudoseed("cry_lens_tag")) - if card2 then - card2.will_be_editioned = true - end - tag:yep("+", G.C.BLUE, function() - card:set_edition("e_negative") - G.CONTROLLER.locks[lock] = nil - card.will_be_editioned = nil - if card2 then - card2:set_edition("e_negative") - card2.will_be_editioned = nil - end - return true - end) - else - tag:nope() - end - tag.triggered = true - return true - end - end, -} - -local palette_cleanser = { - cry_credits = { - idea = { - "Squiddy", - }, - art = { - "lord.ruby", - }, - code = { - "lord.ruby", - }, - }, - object_type = "Tag", - dependencies = { - items = { - "set_cry_tag", - }, - }, - name = "cry-Palette Cleanser Tag", - order = 30, - atlas = "tag_cry", - pos = { x = 0, y = 4 }, - config = { type = "immediate" }, - key = "palette_cleanser", - loc_vars = function(self, info_queue) - return { vars = {} } - end, - min_ante = 4, - apply = function(self, tag, context) - if context.type == "immediate" then - local c = {} - for i, v in pairs(G.jokers.cards) do - if v:has_stickers() then - if not v.will_be_cleansed then - c[#c + 1] = v - end - end - end - for i, v in pairs(G.deck.cards) do - if v:has_stickers() then - if not v.will_be_cleansed then - c[#c + 1] = v - end - end - end - for i, v in pairs(G.hand.cards) do - if v:has_stickers() then - if not v.will_be_cleansed then - c[#c + 1] = v - end - end - end - if #c > 0 then - local lock = tag.ID - G.CONTROLLER.locks[lock] = true - local card = pseudorandom_element(c, pseudoseed("cry_palette_cleanser_tag")) - card.will_be_cleansed = true - tag:yep("+", G.C.BLUE, function() - card:remove_random_sticker("cry_palette_cleanser_sticker") - G.CONTROLLER.locks[lock] = nil - card.will_be_cleansed = nil - return true - end) - else - tag:nope() - end - tag.triggered = true - return true - end - end, - in_pool = function() - local c = {} - if G.jokers then - for i, v in pairs(G.jokers.cards) do - if not v:has_stickers() then - if not v.will_be_cleansed then - c[#c + 1] = v - end - end - end - for i, v in pairs(G.deck.cards) do - if not v:has_stickers() then - if not v.will_be_cleansed then - c[#c + 1] = v - end - end - end - for i, v in pairs(G.hand.cards) do - if not v:has_stickers() then - if not v.will_be_cleansed then - c[#c + 1] = v - end - end - end - end - return #c > 0 - end, -} - local tagitems = { cat, empoweredPack, @@ -1690,9 +1439,6 @@ local tagitems = { blur_tag, astral_tag, loss, - clone, - lens, - palette_cleanser, m_tag, double_m_tag, } diff --git a/lib/ascended.lua b/lib/ascended.lua index ac695a11b..d27fdeeb3 100644 --- a/lib/ascended.lua +++ b/lib/ascended.lua @@ -134,37 +134,24 @@ function G.FUNCS.get_poker_hand_info(_cards) ["cry_Clusterfuck"] = 8, ["cry_UltPair"] = 8, ["cry_WholeDeck"] = 52, - ["cry_Declare0"] = G.GAME.hands.cry_Declare0 - and G.GAME.hands.cry_Declare0.declare_cards - and #G.GAME.hands.cry_Declare0.declare_cards, - ["cry_Declare1"] = G.GAME.hands.cry_Declare1 - and G.GAME.hands.cry_Declare1.declare_cards - and #G.GAME.hands.cry_Declare1.declare_cards, - ["cry_Declare2"] = G.GAME.hands.cry_Declare2 - and G.GAME.hands.cry_Declare2.declare_cards - and #G.GAME.hands.cry_Declare2.declare_cards, } + -- Change mult and chips colors if hand is ascended + if hand_table[text] and next(scoring_hand) and #scoring_hand > hand_table[text] and not hidden then + ease_colour(G.C.UI_CHIPS, copy_table(G.C.GOLD), 0.3) + ease_colour(G.C.UI_MULT, copy_table(G.C.GOLD), 0.3) + else + ease_colour(G.C.UI_CHIPS, G.C.BLUE, 0.3) + ease_colour(G.C.UI_MULT, G.C.RED, 0.3) + end -- this is where all the logic for asc hands is. currently it's very simple but if you want more complex logic, here's the place to do it if hand_table[text] and Cryptid.enabled("set_cry_poker_hand_stuff") == true then G.GAME.current_round.current_hand.cry_asc_num = G.GAME.used_vouchers.v_cry_hyperspacetether and #_cards - hand_table[text] or #scoring_hand - hand_table[text] - - if G.GAME.hands[text] and G.GAME.hands[text].declare_cards then - G.GAME.current_round.current_hand.cry_asc_num = G.GAME.current_round.current_hand.cry_asc_num - + (Cryptid.declare_hand_ascended_counter(_cards, G.GAME.hands[text]) - #scoring_hand) - end else G.GAME.current_round.current_hand.cry_asc_num = 0 end - -- Change mult and chips colors if hand is ascended - if G.GAME.current_round.current_hand.cry_asc_num > 0 and not hidden then - ease_colour(G.C.UI_CHIPS, copy_table(G.C.GOLD), 0.3) - ease_colour(G.C.UI_MULT, copy_table(G.C.GOLD), 0.3) - else - ease_colour(G.C.UI_CHIPS, G.C.BLUE, 0.3) - ease_colour(G.C.UI_MULT, G.C.RED, 0.3) - end + G.GAME.current_round.current_hand.cry_asc_num = math.max(0, G.GAME.current_round.current_hand.cry_asc_num) if G.GAME.cry_exploit_override then G.GAME.current_round.current_hand.cry_asc_num = G.GAME.current_round.current_hand.cry_asc_num + 1 diff --git a/lib/calculate.lua b/lib/calculate.lua index c2505936a..1e397e537 100644 --- a/lib/calculate.lua +++ b/lib/calculate.lua @@ -14,15 +14,7 @@ function eval_card(card, context) if card.will_shatter then return {}, {} end - -- Store old probability for later reference - local ggpn = G.GAME.probabilities.normal - if card.ability.cry_rigged then - G.GAME.probabilities.normal = 1e9 - end local ret, post = ec(card, context) - if card.ability.cry_rigged then - G.GAME.probabilities.normal = ggpn - end return ret, post end @@ -367,12 +359,6 @@ function Card:cry_double_scale_calc(orig_ability, in_context_scaling) local obj = G.jokers.cards[i].config.center -- found one! if obj.cry_scale_mod and type(obj.cry_scale_mod) == "function" then - -- rig the probabilities in case that matters for the joker's scaling function - local ggpn = G.GAME.probabilities.normal - if G.jokers.cards[i].ability.cry_rigged then - G.GAME.probabilities.normal = 1e9 - end - -- 'o' will be the new factor that the joker should scale by next time local o = obj:cry_scale_mod( G.jokers.cards[i], @@ -383,11 +369,6 @@ function Card:cry_double_scale_calc(orig_ability, in_context_scaling) new_scale_base ) - -- return probabilities to normal - if G.jokers.cards[i].ability.cry_rigged then - G.GAME.probabilities.normal = ggpn - end - -- the function returned a value, do the scale setting with it if o then -- set the scale factor field to 'o' @@ -421,18 +402,11 @@ function Card:cry_double_scale_calc(orig_ability, in_context_scaling) -- now, let's check for repetitions on the scale-affecting jokers local reps = {} for j = 1, #G.jokers.cards do - local ggpn = G.GAME.probabilities.normal - if G.jokers.cards[j].ability.cry_rigged then - G.GAME.probabilities.normal = 1e9 - end -- check if another joker is retriggering our scale-affecting joker local check = cj( G.jokers.cards[j], { retrigger_joker_check = true, other_card = G.jokers.cards[i] } ) - if G.jokers.cards[j].ability.cry_rigged then - G.GAME.probabilities.normal = ggpn - end -- keep track of which joker retriggers the scale-joker if type(check) == "table" then reps[j] = check and check.repetitions and check or 0 @@ -460,11 +434,6 @@ function Card:cry_double_scale_calc(orig_ability, in_context_scaling) if (type(rep) == "table") and rep.repetitions and (rep.repetitions > 0) then for r = 1, rep.repetitions do card_eval_status_text(rep.card, "jokers", nil, nil, nil, rep) - -- now, same thing as before, apply the scale-joker - local ggpn = G.GAME.probabilities.normal - if G.jokers.cards[i].ability.cry_rigged then - G.GAME.probabilities.normal = 1e9 - end local o = obj:cry_scale_mod( G.jokers.cards[i], self, @@ -473,10 +442,6 @@ function Card:cry_double_scale_calc(orig_ability, in_context_scaling) orig_scale_base, new_scale_base ) - if G.jokers.cards[i].ability.cry_rigged then - G.GAME.probabilities.normal = ggpn - end - if o then if #dbl_info.scaler[info_i] == 2 then if @@ -598,13 +563,9 @@ function Card:calculate_joker(context) if not active_side or active_side.will_shatter then return end - local ggpn = G.GAME.probabilities.normal if not G.GAME.cry_double_scale then G.GAME.cry_double_scale = { double_scale = true } --doesn't really matter what's in here as long as there's something end - if active_side.ability.cry_rigged then - G.GAME.probabilities.normal = 1e9 - end local orig_ability = copy_table(active_side.ability) local in_context_scaling = false local callback = context.callback @@ -682,9 +643,6 @@ function Card:calculate_joker(context) in_context_scaling = true end end - if active_side.ability.cry_rigged then - G.GAME.probabilities.normal = ggpn - end if next(find_joker("cry-Scalae")) or next(find_joker("cry-Double Scale")) then active_side:cry_double_scale_calc(orig_ability, in_context_scaling) end @@ -728,10 +686,6 @@ function Cryptid.apply_scale_mod(jkr, orig_scale_scale, orig_scale_base, new_sca for i = 1, #G.jokers.cards do local obj = G.jokers.cards[i].config.center if obj.cry_scale_mod and type(obj.cry_scale_mod) == "function" then - local ggpn = G.GAME.probabilities.normal - if G.jokers.cards[i].ability.cry_rigged then - G.GAME.probabilities.normal = 1e9 - end local o = obj:cry_scale_mod( G.jokers.cards[i], jkr, @@ -740,9 +694,6 @@ function Cryptid.apply_scale_mod(jkr, orig_scale_scale, orig_scale_base, new_sca orig_scale_base, new_scale_base ) - if G.jokers.cards[i].ability.cry_rigged then - G.GAME.probabilities.normal = ggpn - end if o then if #dbl_info.scaler[info_i] == 2 then if @@ -772,15 +723,8 @@ function Cryptid.apply_scale_mod(jkr, orig_scale_scale, orig_scale_base, new_sca local reps = {} for j = 1, #G.jokers.cards do - local ggpn = G.GAME.probabilities.normal - if G.jokers.cards[j].ability.cry_rigged then - G.GAME.probabilities.normal = 1e9 - end local check = cj(G.jokers.cards[j], { retrigger_joker_check = true, other_card = G.jokers.cards[i] }) - if G.jokers.cards[j].ability.cry_rigged then - G.GAME.probabilities.normal = ggpn - end if type(check) == "table" then reps[j] = check and check.repetitions and check or 0 else @@ -803,10 +747,6 @@ function Cryptid.apply_scale_mod(jkr, orig_scale_scale, orig_scale_base, new_sca if (type(rep) == "table") and rep.repetitions and (rep.repetitions > 0) then for r = 1, rep.repetitions do card_eval_status_text(rep.card, "jokers", nil, nil, nil, rep) - local ggpn = G.GAME.probabilities.normal - if G.jokers.cards[i].ability.cry_rigged then - G.GAME.probabilities.normal = 1e9 - end local o = obj:cry_scale_mod( G.jokers.cards[i], jkr, @@ -815,10 +755,6 @@ function Cryptid.apply_scale_mod(jkr, orig_scale_scale, orig_scale_base, new_sca orig_scale_base, new_scale_base ) - if G.jokers.cards[i].ability.cry_rigged then - G.GAME.probabilities.normal = ggpn - end - if o then if #dbl_info.scaler[info_i] == 2 then if diff --git a/lib/content.lua b/lib/content.lua index 9c2ee3714..8ea596fc1 100644 --- a/lib/content.lua +++ b/lib/content.lua @@ -286,49 +286,6 @@ SMODS.PokerHand({ end, }) -SMODS.PokerHand({ - key = "Declare0", - visible = false, - chips = 0, - mult = 0, - l_chips = 0, - l_mult = 0, - example = {}, - atlas = "poker_hands", - pos = { x = 0, y = 0 }, - above_hand = "cry_UltPair", - order_offset = 1000, - evaluate = function(parts, hand) end, -}) -SMODS.PokerHand({ - key = "Declare1", - visible = false, - chips = 0, - mult = 0, - l_chips = 0, - l_mult = 0, - example = {}, - atlas = "poker_hands", - pos = { x = 0, y = 0 }, - above_hand = "cry_UltPair", - order_offset = 1001, - evaluate = function(parts, hand) end, -}) -SMODS.PokerHand({ - key = "Declare2", - visible = false, - chips = 0, - mult = 0, - l_chips = 0, - l_mult = 0, - example = {}, - atlas = "poker_hands", - pos = { x = 0, y = 0 }, - above_hand = "cry_UltPair", - order_offset = 1002, - evaluate = function(parts, hand) end, -}) - SMODS.Rarity({ key = "exotic", loc_txt = {}, @@ -740,7 +697,7 @@ SMODS.UndiscoveredSprite({ key = "Code", atlas = "atlasnotjokers", path = "atlasnotjokers.png", - pos = { x = 12, y = 6 }, + pos = { x = 9, y = 5 }, px = 71, py = 95, }) @@ -760,15 +717,6 @@ SMODS.Atlas({ py = 34, frames = 21, }) ---splitting these up because like more than 20 on one atlas is a crime -SMODS.Atlas({ - key = "blinds_two", - atlas_table = "ANIMATION_ATLAS", - path = "bl_cry_two.png", - px = 34, - py = 34, - frames = 21, -}) SMODS.Atlas({ key = "nostalgia", atlas_table = "ANIMATION_ATLAS", @@ -790,14 +738,6 @@ SMODS.Atlas({ px = 73, py = 95, }) - --- CCD Clarifier Sprite -SMODS.Atlas({ - key = "cry_clarifier", - path = "intercept_sprite.png", - px = 71, - py = 95, -}) SMODS.Atlas({ key = "glowingSleeve", path = "sleeve_cry_glowing.png", diff --git a/lib/forcetrigger.lua b/lib/forcetrigger.lua index ed7b606f0..62b1058f9 100644 --- a/lib/forcetrigger.lua +++ b/lib/forcetrigger.lua @@ -4,11 +4,7 @@ function Cryptid.demicolonGetTriggerable(card) if not card then return n end - if - Card.no(card, "demicoloncompat", true) - or Card.no(card, "demicolon_compat", true) - or Cryptid.forcetriggerVanillaCheck(card) - then + if Card.no(card, "demicoloncompat", true) or Cryptid.forcetriggerVanillaCheck(card) then n[1] = true else n[1] = false diff --git a/lib/misc.lua b/lib/misc.lua index a034f4302..afc5a7c08 100644 --- a/lib/misc.lua +++ b/lib/misc.lua @@ -220,9 +220,6 @@ function Cryptid.pluralize(str, vars) table.sort(keys, function(a, b) return a < b end) - if not (tonumber(num) or is_number(num)) then - num = 1 - end for _, k in ipairs(keys) do if fch(checks[k], "=") then if to_big(math.abs(num - k)) < to_big(0.001) then @@ -624,9 +621,6 @@ end function Blind:cry_cap_score(score) if not self.disabled then local obj = self.config.blind - if obj.cry_modify_score and type(obj.cry_modify_score) == "function" then - score = obj:cry_modify_score(score) - end if obj.cry_cap_score and type(obj.cry_cap_score) == "function" then return obj:cry_cap_score(score) end @@ -738,11 +732,8 @@ end -- For resetting localization on the fly for family friendly toggle function Cryptid.reload_localization() SMODS.handle_loc_file(Cryptid.path) - Cryptid.handle_other_localizations() return init_localization() end --- Purely for crossmod purposes -function Cryptid.handle_other_localizations() end -- Checks if all jokers in shop will have editions (via Curate, Edition Decks, etc.) -- Will cause edition tags to Nope! @@ -1010,438 +1001,22 @@ function Cryptid.table_merge(t1, t2) return tbl end -function Cryptid.get_circus_description() - local desc = {} - local ind = 1 - local extra_rarities = {} - for i, v in pairs(Cryptid.circus_rarities) do - if not v.hidden then - extra_rarities[#extra_rarities + 1] = v - end - end - table.sort(extra_rarities, function(a, b) - return a.order < b.order - end) - for i, v in pairs(extra_rarities) do - local rarity = v.rarity - rarity = localize(({ - [1] = "k_common", - [2] = "k_uncommon", - [3] = "k_rare", - [4] = "k_legendary", - })[rarity] or "k_" .. rarity) - local orig = localize("cry_circus_generic") - orig = string.gsub(orig, "#1#", ind) - orig = string.gsub(orig, "#2#", rarity) - orig = string.gsub(orig, "#3#", "#" .. tostring(ind) .. "#") - desc[#desc + 1] = orig - ind = ind + 1 - end - return desc -end - -function Cryptid.add_circus_rarity(rarity, dontreload) - Cryptid.circus_rarities[rarity.rarity] = rarity - if not dontreload then - Cryptid.reload_localization() - end -end - -function Cryptid.get_paved_joker() - if G.hand then - local total = 0 - for i, v in pairs(SMODS.find_card("j_cry_paved_joker")) do - total = total + v.ability.extra - end - local stones = 0 - for i, v in pairs(G.hand.highlighted) do - if v.config.center.key == "m_stone" then - stones = stones + 1 - end - end - for i, v in pairs(G.play.cards) do - if v.config.center.key == "m_stone" then - stones = stones + 1 - end - end - total = math.min(stones, total) - return total +local get_prob_vars_ref = SMODS.get_probability_vars +function SMODS.get_probability_vars(trigger_obj, base_numerator, base_denominator) + local mod = trigger_obj and trigger_obj.ability and trigger_obj.ability.cry_prob or 1 + local numerator = base_numerator * mod + if trigger_obj and trigger_obj.ability and trigger_obj.ability.cry_rigged then + numerator = base_denominator end - return 0 -end - -function Card:has_stickers() - for i, v in pairs(SMODS.Sticker.obj_table) do - if self.ability[i] then - return true - end - end -end -function Card:remove_random_sticker(seed) - local s = {} - for i, v in pairs(SMODS.Sticker.obj_table) do - if not v.hidden and i ~= "cry_absolute" and self.ability[i] then - s[#s + 1] = i - end - end - if #s > 0 then - local sticker = pseudorandom_element(s, pseudoseed(seed)) - self.ability[sticker] = nil - if sticker == "perishable" then - self.ability.perish_tally = nil - end - end -end - -function create_UIBox_class() - return SMODS.card_collection_UIBox(G.P_CENTER_POOLS.Enhanced, { 4, 4 }, { - no_materialize = true, - snap_back = true, - h_mod = 1.03, - --infotip = localize('ml_edition_seal_enhancement_explanation'), - hide_single_page = true, - back_func = "exit_overlay_menu_code", - }) + return get_prob_vars_ref(trigger_obj, numerator, base_denominator) end -function create_UIBox_variable_code() - local cards = {} - local ranks = {} - for i, v in pairs(SMODS.Ranks) do - cards[#cards + 1] = G.P_CENTERS.c_base - ranks[#ranks + 1] = i - end - table.sort(ranks, function(a, b) - return SMODS.Ranks[a].id < SMODS.Ranks[b].id - end) - return SMODS.card_collection_UIBox(cards, { 5, 5, 5 }, { - no_materialize = true, - snap_back = true, - h_mod = 1.03, - --infotip = localize('ml_edition_seal_enhancement_explanation'), - hide_single_page = true, - back_func = "exit_overlay_menu_code", - modify_card = function(card, center, i, j) - SMODS.change_base(card, "Spades", ranks[(j - 1) * 5 + i]) - end, - }) -end - -function create_UIBox_exploit() - local cards = {} - local ranks = {} - for i, v in pairs(G.P_CENTER_POOLS.Planet) do - if v.config.handname then - cards[#cards + 1] = v - end - end - table.sort(ranks, function(a, b) - return G.GAME.hands[a.config.handname].order < G.GAME.hands[b.config.handname] - end) - return SMODS.card_collection_UIBox(cards, { 5, 5, 5 }, { - no_materialize = true, - snap_back = true, - h_mod = 1.03, - --infotip = localize('ml_edition_seal_enhancement_explanation'), - hide_single_page = true, - back_func = "exit_overlay_menu_code", - }) -end - -G.FUNCS.exit_overlay_menu_code = function(e) - G.FUNCS.exit_overlay_menu(e) - G.GAME.USING_CLASS = nil - G.GAME.USING_CODE = nil - G.GAME.USING_VARIABLE = nil - G.GAME.USING_EXPLOIT_HAND = nil - G.GAME.USING_EXPLOIT = nil - G.GAME.USING_POINTER = nil - G.GAME.POINTER_SUBMENU = nil - G.GAME.POINTER_PLAYING = nil - G.GAME.POINTER_COLLECTION = nil - if - G.GAME.CODE_DESTROY_CARD - and G.GAME.CODE_DESTROY_CARD.ability - and G.GAME.CODE_DESTROY_CARD.ability.cry_multiuse - then - G.GAME.CODE_DESTROY_CARD.ability.cry_multiuse = G.GAME.CODE_DESTROY_CARD.ability.cry_multiuse - 1 - end - G.GAME.CODE_DESTROY_CARD = nil -end - -function G.UIDEF.exploit_menu() - return create_UIBox_generic_options({ - contents = { - create_tabs({ - tabs = { - { - label = localize("b_poker_hands"), - chosen = true, - tab_definition_function = create_UIBox_current_hands_exploit, - }, - }, - tab_h = 8, - snap_to_nav = true, - }), - }, - }) -end - -function create_UIBox_current_hands_exploit(simple) - local ref = create_UIBox_current_hand_row - local ret = create_UIBox_current_hands(simple) - create_UIBox_current_hand_row = ref - return ret -end - -local htref = create_UIBox_hand_tip -function create_UIBox_hand_tip(handname) - if G.GAME.USING_EXPLOIT then - G.GAME.USING_EXPLOIT_HAND = handname - end - return htref(handname) -end - -local lcpref = Controller.L_cursor_press -function Controller:L_cursor_press(x, y) - lcpref(self, x, y) - if G and G.GAME and G.GAME.hands and G.GAME.USING_EXPLOIT_HAND then - if - G.CONTROLLER.cursor_hover - and G.CONTROLLER.cursor_hover.target - and G.CONTROLLER.cursor_hover.target.config - and G.CONTROLLER.cursor_hover.target.config.on_demand_tooltip - and G.CONTROLLER.cursor_hover.target.config.on_demand_tooltip.filler - and G.CONTROLLER.cursor_hover.target.config.on_demand_tooltip.filler.args - and G.GAME.hands[G.CONTROLLER.cursor_hover.target.config.on_demand_tooltip.filler.args] - then - -- Re-use the Exploit card - if G.GAME.ACTIVE_CODE_CARD then - if - not G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse - or to_big(G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse) <= to_big(1) - then - G.GAME.ACTIVE_CODE_CARD:start_dissolve() - else - G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse = - lenient_bignum(to_big(G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse) - to_big(1)) - end - end - G.GAME.ACTIVE_CODE_CARD = nil - G.GAME.cry_exploit_override = G.GAME.USING_EXPLOIT_HAND - G.FUNCS.exit_overlay_menu_code() - end - end -end - -function create_UIBox_pointer_rank() - G.GAME.POINTER_SUBMENU = "Rank" - G.GAME.POINTER_PLAYING = {} - local cards = {} - local ranks = {} - for i, v in pairs(SMODS.Ranks) do - cards[#cards + 1] = G.P_CENTERS.c_base - ranks[#ranks + 1] = i - end - table.sort(ranks, function(a, b) - return SMODS.Ranks[a].id < SMODS.Ranks[b].id - end) - return SMODS.card_collection_UIBox(cards, { 5, 5, 5 }, { - no_materialize = true, - snap_back = true, - h_mod = 1.03, - --infotip = localize('ml_edition_seal_enhancement_explanation'), - hide_single_page = true, - back_func = "your_collection", - modify_card = function(card, center, i, j) - SMODS.change_base(card, "Spades", ranks[(j - 1) * 5 + i]) - if - center.hidden - or center.no_noe - or center.no_pointer - or center.no_code - or center.no_variable - or center.no_class - then - card.deuff = true - end - end, - }) -end - -function create_UIBox_pointer_suit() - G.GAME.POINTER_SUBMENU = "Suit" - local cards = {} - local suits = {} - for i, v in pairs(SMODS.Suits) do - cards[#cards + 1] = G.P_CENTERS.c_base - suits[#suits + 1] = i - end - table.sort(suits, function(a, b) - return SMODS.Suits[a].suit_nominal < SMODS.Suits[b].suit_nominal - end) - return SMODS.card_collection_UIBox(cards, { 4, 4, 4 }, { - no_materialize = true, - snap_back = true, - h_mod = 1.03, - --infotip = localize('ml_edition_seal_enhancement_explanation'), - hide_single_page = true, - back_func = "your_collection", - modify_card = function(card, center, i, j) - SMODS.change_base(card, suits[(j - 1) * 4 + i], G.GAME.POINTER_PLAYING.rank) - if - center.hidden - or center.no_noe - or center.no_pointer - or center.no_code - or center.no_variable - or center.no_class - then - card.deuff = true - end - end, - }) -end - -function create_UIBox_pointer_enhancement() - G.GAME.POINTER_SUBMENU = "Enhancement" - return create_UIBox_your_collection_enhancements_pointer() -end - -function create_UIBox_pointer_edition() - G.GAME.POINTER_SUBMENU = "Edition" - return create_UIBox_your_collection_editions_pointer() -end - -function create_UIBox_pointer_seal() - G.GAME.POINTER_SUBMENU = "Seal" - return create_UIBox_your_collection_seals_pointer() -end - -G.FUNCS.your_collection_create_card_rank = function(e) - G.SETTINGS.paused = true - G.FUNCS.overlay_menu({ - definition = create_UIBox_pointer_rank(), - }) -end - -create_UIBox_your_collection_enhancements_pointer = function() - local cards = { - G.P_CENTERS.c_base, - } - for i, v in pairs(G.P_CENTER_POOLS.Enhanced) do - cards[#cards + 1] = v - end - return SMODS.card_collection_UIBox(cards, { 4, 4 }, { - no_materialize = true, - snap_back = true, - h_mod = 1.03, - hide_single_page = true, - modify_card = function(card, center) - SMODS.change_base(card, G.GAME.POINTER_PLAYING.suit, G.GAME.POINTER_PLAYING.rank) - if - center.hidden - or center.no_noe - or center.no_pointer - or center.no_code - or center.no_variable - or center.no_class - then - card.deuff = true - end - end, - }) -end - -create_UIBox_your_collection_editions_pointer = function() - return SMODS.card_collection_UIBox(G.P_CENTER_POOLS.Edition, { 5, 5 }, { - snap_back = true, - h_mod = 1.03, - hide_single_page = true, - collapse_single_page = true, - modify_card = function(card, center) - if center.discovered then - card:set_edition(center.key, true, true) - SMODS.change_base(card, G.GAME.POINTER_PLAYING.suit, G.GAME.POINTER_PLAYING.rank) - card:set_ability(G.P_CENTERS[G.GAME.POINTER_PLAYING.center]) - if - center.hidden - or center.no_noe - or center.no_pointer - or center.no_code - or center.no_variable - or center.no_class - then - card.deuff = true - end - end - end, - }) -end - -create_UIBox_your_collection_seals_pointer = function() - local cards = { - { key = nil }, - } - for i, v in pairs(G.P_CENTER_POOLS.Seal) do - cards[#cards + 1] = v - end - return SMODS.card_collection_UIBox(cards, { 5, 5 }, { - snap_back = true, - hide_single_page = true, - collapse_single_page = true, - center = "c_base", - h_mod = 1.03, - modify_card = function(card, center) - card:set_seal(center.key, true) - SMODS.change_base(card, G.GAME.POINTER_PLAYING.suit, G.GAME.POINTER_PLAYING.rank) - card:set_ability(G.P_CENTERS[G.GAME.POINTER_PLAYING.center]) - card:set_edition(G.GAME.POINTER_PLAYING.edition, true, true) - if - center.hidden - or center.no_noe - or center.no_pointer - or center.no_code - or center.no_variable - or center.no_class - then - card.deuff = true - end - end, - }) -end - -function Cryptid.declare_hand_ascended_counter(hand, declarehand) - local total = 0 - for i, v in pairs(declarehand.declare_cards or {}) do - local how_many_fit = 0 - local suit - local rank - for i2, v2 in pairs(hand) do - if not v2.marked then - if SMODS.has_no_rank(v2) and v.rank == "rankless" or v2:get_id() == v.rank then - rank = true - end - if v2:is_suit(v.suit) or (v.suit == "suitless" and SMODS.has_no_suit(v2)) or not v.suit then - suit = true - end - if not (suit and rank) then - suit = false - rank = false - end - if suit and rank then - how_many_fit = how_many_fit + 1 - v2.marked = true - end - end - end - if not rank or not suit then - how_many_fit = 0 - end - total = total + how_many_fit - end - for i2, v2 in pairs(hand) do - v2.marked = nil +local pseudorandom_probability_ref = SMODS.pseudorandom_probability +function SMODS.pseudorandom_probability(trigger_obj, seed, base_numerator, base_denominator) + local mod = trigger_obj and trigger_obj.ability and trigger_obj.ability.cry_prob or 1 + local numerator = base_numerator * mod + if trigger_obj and trigger_obj.ability and trigger_obj.ability.cry_rigged then + return true end - return total + return pseudorandom_probability_ref(trigger_obj, seed, numerator, base_denominator) end diff --git a/lib/misprintize.lua b/lib/misprintize.lua index b3aa39afb..aa20504d7 100644 --- a/lib/misprintize.lua +++ b/lib/misprintize.lua @@ -109,10 +109,17 @@ function Cryptid.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stac if not Cryptid.base_values[name] then Cryptid.base_values[name] = {} end - if not Cryptid.base_values[name][k .. ref_value] then - Cryptid.base_values[name][k .. ref_value] = tbl[k] + if not Cryptid.base_values[name][k] then + if G.P_CENTERS[name] and G.P_CENTERS[name].config[k] then + Cryptid.base_values[name][k] = G.P_CENTERS[name].config[k] + elseif k == "cry_prob" then + Cryptid.base_values[name][k] = 1 + else + Cryptid.base_values[name][k] = tbl[k] + end end - local initial = (stack and tbl[k] or Cryptid.base_values[name][k .. ref_value]) + + local initial = (stack and tbl[k] or Cryptid.base_values[name][k]) local min = override and override.min or G.GAME.modifiers.cry_misprint_min local max = override and override.max or G.GAME.modifiers.cry_misprint_max @@ -130,13 +137,13 @@ function Cryptid.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stac ) ) and num_too_big(initial, min, max, prob_max) then - initial = Cryptid.base_values[name][k .. ref_value] * prob_max + initial = Cryptid.base_values[name][k] * prob_max min = 1 max = 1 end tbl[k] = Cryptid.sanity_check( - clear and Cryptid.base_values[name][k .. ref_value] + clear and Cryptid.base_values[name][k] or cry_format(Cryptid.calculate_misprint(initial, min, max, grow_type, pow_level), "%.2g"), big ) @@ -147,24 +154,27 @@ function Cryptid.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stac if not Cryptid.base_values[name] then Cryptid.base_values[name] = {} end - if not Cryptid.base_values[name][_k .. k] then + if not Cryptid.base_values[name][k] then + Cryptid.base_values[name][k] = {} + end + if not Cryptid.base_values[name][k][_k] then if G.P_CENTERS[name] and type(G.P_CENTERS[name].config[k]) == "table" and G.P_CENTERS[name].config[k][_k] then - Cryptid.base_values[name][_k .. k] = G.P_CENTERS[name].config[k][_k] + Cryptid.base_values[name][k][_k] = G.P_CENTERS[name].config[k][_k] else - Cryptid.base_values[name][_k .. k] = tbl[k][_k] + Cryptid.base_values[name][k][_k] = tbl[k][_k] end end - local initial = (stack and tbl[k][_k] or Cryptid.base_values[name][_k .. k]) + local initial = (stack and tbl[k][_k] or Cryptid.base_values[name][k][_k]) local min = override and override.min or G.GAME.modifiers.cry_misprint_min local max = override and override.max or G.GAME.modifiers.cry_misprint_max if (_k == "odds") and num_too_big(initial, min, max, prob_max) then - initial = Cryptid.base_values[name][_k .. k] * prob_max + initial = Cryptid.base_values[name][k][_k] * prob_max min = 1 max = 1 end @@ -188,7 +198,7 @@ function Cryptid.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stac end tbl[k][_k] = Cryptid.sanity_check( - clear and Cryptid.base_values[name][_k .. k] + clear and Cryptid.base_values[name][k][_k] or cry_format( Cryptid.calculate_misprint(initial, min, max, grow_type, pow_level), "%.2g" @@ -391,8 +401,8 @@ function Cryptid.manipulate(card, args) if not Card.no(card, "immutable", true) or (args and args.bypass_checks) then if not args then return Cryptid.manipulate(card, { - min = (G.GAME.modifiers.cry_misprint_min or 1) * (G.GAME.modifiers.cry_jkr_misprint_mod or 1), - max = (G.GAME.modifiers.cry_misprint_max or 1) * (G.GAME.modifiers.cry_jkr_misprint_mod or 1), + min = G.GAME.modifiers.cry_misprint_min, + max = G.GAME.modifiers.cry_misprint_max, type = "X", dont_stack = true, no_deck_effects = true, @@ -445,18 +455,6 @@ function Cryptid.manipulate(card, args) end end local config = copy_table(card.config.center.config) - if not Cryptid.base_values[card.config.center.key] then - Cryptid.base_values[card.config.center.key] = {} - for i, v in pairs(config) do - if (type(v) == "table" and v.tetrate) or type(v) == "number" and to_big(v) ~= to_big(0) then - Cryptid.base_values[card.config.center.key][i .. "ability"] = v - elseif type(v) == "table" then - for i2, v2 in pairs(v) do - Cryptid.base_values[card.config.center.key][i2 .. i] = v2 - end - end - end - end if not args.bypass_checks and not args.no_deck_effects then Cryptid.with_deck_effects(card, func) else @@ -469,6 +467,18 @@ function Cryptid.manipulate(card, args) end --ew ew ew ew G.P_CENTERS[card.config.center.key].config = config + if not Cryptid.base_values[card.config.center.key] then + Cryptid.base_values[card.config.center.key] = {} + for i, v in pairs(config) do + if (type(v) == "table" and v.tetrate) or type(v) == "number" and to_big(v) ~= to_big(0) then + Cryptid.base_values[card.config.center.key][i .. "ability"] = v + elseif type(v) == "table" then + for i2, v2 in pairs(v) do + Cryptid.base_values[card.config.center.key][i2 .. i] = v2 + end + end + end + end end return true end @@ -522,16 +532,14 @@ function Cryptid.manipulate_value(num, args, is_big, name) ) if args.type == "+" then if to_big(num) ~= to_big(0) and to_big(num) ~= to_big(1) then - num = num + new_value + num = to_big(num) + to_big(new_value) end elseif args.type == "X" then if to_big(num) ~= to_big(0) and (to_big(num) ~= to_big(1) or (name ~= "x_chips" and name ~= "x_mult")) then - num = num * new_value + num = to_big(num) * to_big(new_value) end - elseif args.type == "^" then - num = to_big(num) ^ new_value elseif args.type == "hyper" then if to_big(num) ~= to_big(0) and to_big(num) ~= to_big(1) then num = to_big(num):arrow(args.value.arrows, to_big(new_value)) @@ -539,17 +547,13 @@ function Cryptid.manipulate_value(num, args, is_big, name) end elseif args.value then if args.type == "+" then - if to_big(num) ~= to_big(0) and to_big(num) ~= to_big(1) then - num = num + to_big(args.value) - end + num = to_big(num) + to_big(args.value) elseif args.type == "X" then if to_big(num) ~= to_big(0) and (to_big(num) ~= to_big(1) or (name ~= "x_chips" and name ~= "x_mult")) then - num = num * args.value + num = to_big(num) * to_big(args.value) end - elseif args.type == "^" then - num = to_big(num) ^ args.value elseif args.type == "hyper" then num = to_big(num):arrow(args.value.arrows, to_big(args.value.height)) end diff --git a/lib/overrides.lua b/lib/overrides.lua index a302e47b9..b0218779a 100644 --- a/lib/overrides.lua +++ b/lib/overrides.lua @@ -407,9 +407,22 @@ function Game:update(dt) v.children.back:set_sprite_pos(G.P_CENTERS.b_cry_glowing.pos or G.P_CENTERS["b_red"].pos) end end - if not G.OVERLAY_MENU and G.GAME.CODE_DESTROY_CARD then - G.FUNCS.exit_overlay_menu_code() + if not G.OVERLAY_MENU and not G.CHOOSE_CARD and G.GAME.USING_POINTER then + G.CHOOSE_CARD = UIBox({ + definition = create_UIBox_pointer(card), + config = { + align = "cm", + offset = { x = 0, y = 10 }, + major = G.ROOM_ATTACH, + bond = "Weak", + instance_type = "POPUP", + }, + }) + G.CHOOSE_CARD.alignment.offset.y = 0 + G.ROOM.jiggle = G.ROOM.jiggle + 1 + G.CHOOSE_CARD:align_to_major() end + --Increase the blind size for The Clock and Lavender Loop local choices = { "Small", "Big", "Boss" } G.GAME.CRY_BLINDS = G.GAME.CRY_BLINDS or {} @@ -522,6 +535,7 @@ end local sc = Card.set_cost function Card:set_cost() -- Makes the edition cost increase usually present not apply if this variable is true + -- Used for some of the Jen's almanac edition decks because having the price increase apply was "unfun" if self.edition and G.GAME.modifiers.cry_no_edition_price then local m = Cryptid.deep_copy(self.edition) self.edition = nil @@ -566,10 +580,6 @@ function Card:set_cost() if self.config and self.config.center and self.config.center.rarity == "cry_cursed" then self.sell_cost = 0 self.sell_cost_label = 0 - --Rotten Egg - elseif G.GAME.cry_rotten_amount then - self.sell_cost = G.GAME.cry_rotten_amount - self.sell_cost_label = self.facing == "back" and "?" or number_format(self.sell_cost) end end @@ -815,7 +825,7 @@ function calculate_reroll_cost(skip_increment) + G.GAME.current_round.reroll_cost_increase end -local create_card_ref = create_card +-- We're modifying so much of this for Brown and Yellow Stake, Equilibrium Deck, etc. that it's fine to override... function create_card(_type, area, legendary, _rarity, skip_materialize, soulable, forced_key, key_append) local area = area or G.jokers local pseudo = function(x) @@ -828,6 +838,7 @@ function create_card(_type, area, legendary, _rarity, skip_materialize, soulable end ps = Cryptid.predict_pseudoseed end + local center = G.P_CENTERS.b_red if (_type == "Joker" or _type == "Meme") and G.GAME and G.GAME.modifiers and G.GAME.modifiers.all_rnj then forced_key = "j_cry_rnjoker" end @@ -852,18 +863,67 @@ function create_card(_type, area, legendary, _rarity, skip_materialize, soulable forced_key = G.P_CENTER_POOLS["Joker"][aeqactive].key end end + --should pool be skipped with a forced key + if not forced_key and soulable and not G.GAME.banned_keys["c_soul"] then + for _, v in ipairs(SMODS.Consumable.legendaries) do + if + (_type == v.type.key or _type == v.soul_set) + and not (G.GAME.used_jokers[v.key] and not next(find_joker("Showman")) and not v.can_repeat_soul) + then + if pseudo("soul_" .. v.key .. _type .. G.GAME.round_resets.ante) > (1 - v.soul_rate) then + forced_key = v.key + end + end + end + if + (_type == "Tarot" or _type == "Spectral" or _type == "Tarot_Planet") + and not (G.GAME.used_jokers["c_soul"] and not next(find_joker("Showman"))) + then + if pseudo("soul_" .. _type .. G.GAME.round_resets.ante) > 0.997 then + forced_key = "c_soul" + end + end + if + (_type == "Planet" or _type == "Spectral") + and not (G.GAME.used_jokers["c_black_hole"] and not next(find_joker("Showman"))) + then + if pseudo("soul_" .. _type .. G.GAME.round_resets.ante) > 0.997 then + forced_key = "c_black_hole" + end + end + end + if _type == "Base" then forced_key = "c_base" end - if forced_key and not G.GAME.banned_keys[forced_key] then - _type = (G.P_CENTERS[forced_key].set ~= "Default" and G.P_CENTERS[forced_key].set or _type) + if forced_key then --vanilla behavior change, mainly for M Joker reasons + center = G.P_CENTERS[forced_key] + _type = (center.set ~= "Default" and center.set or _type) + else + gcparea = area + local _pool, _pool_key = get_current_pool(_type, _rarity, legendary, key_append) + gcparea = nil + center = pseudorandom_element(_pool, ps(_pool_key)) + local it = 1 + while center == "UNAVAILABLE" do + it = it + 1 + center = pseudorandom_element(_pool, ps(_pool_key .. "_resample" .. it)) + end + + center = G.P_CENTERS[center] end - local front = (SMODS.set_create_card_front and (_type == "Base" or _type == "Enhanced")) or nil + local front = ( + (_type == "Base" or _type == "Enhanced") + and ( + pseudorandom_element(G.P_CARDS, ps("front" .. (key_append or "") .. G.GAME.round_resets.ante)) + or G.P_CARDS["S_T"] + ) + ) or nil if area == "ERROR" then - local ret = (front or G.P_CENTERS[forced_key] or G.P_CENTERS.b_red) + local ret = (front or center) if not ret.config then ret.config = {} end @@ -879,8 +939,28 @@ function create_card(_type, area, legendary, _rarity, skip_materialize, soulable return ret --the config.center.key stuff prevents a crash with Jen's Almanac hook end - local card = create_card_ref(_type, area, legendary, _rarity, skip_materialize, soulable, forced_key, key_append) - local center = card and card.config and card.config.center or {} + local card = Card( + area and (area.T.x + area.T.w / 2) or 0, + area and area.T.y or 0, + G.CARD_W * (center and center.set == "Booster" and 1.27 or 1), + G.CARD_H * (center and center.set == "Booster" and 1.27 or 1), + front, + center, + { + bypass_discovery_center = area == G.shop_jokers + or area == G.pack_cards + or area == G.shop_vouchers + or (G.shop_demo and area == G.shop_demo) + or area == G.jokers + or area == G.consumeables, + bypass_discovery_ui = area == G.shop_jokers + or area == G.pack_cards + or area == G.shop_vouchers + or (G.shop_demo and area == G.shop_demo), + discover = area == G.jokers or area == G.consumeables, + bypass_back = G.GAME.selected_back.pos, + } + ) if front and G.GAME.modifiers.cry_force_suit then card:change_suit(G.GAME.modifiers.cry_force_suit) end @@ -889,11 +969,23 @@ function create_card(_type, area, legendary, _rarity, skip_materialize, soulable end if front and G.GAME.modifiers.cry_force_edition then card:set_edition({ [G.GAME.modifiers.cry_force_edition] = true }, true, true) - card:add_to_deck() end if front and G.GAME.modifiers.cry_force_seal then card:set_seal(G.GAME.modifiers.cry_force_seal) end + if card.ability.consumeable and not skip_materialize then + card:start_materialize() + end + for k, v in ipairs(SMODS.Sticker.obj_buffer) do + local sticker = SMODS.Stickers[v] + if + sticker.should_apply + and type(sticker.should_apply) == "function" + and sticker:should_apply(card, center, area) + then + sticker:apply(card, true) + end + end if G.GAME.modifiers.cry_force_sticker == "eternal" or ( @@ -1041,6 +1133,11 @@ function create_card(_type, area, legendary, _rarity, skip_materialize, soulable card.cry_flipped = true end end + if _type == "Joker" and not G.GAME.modifiers.cry_force_edition then + local edition = poll_edition("edi" .. (key_append or "") .. G.GAME.round_resets.ante) + card:set_edition(edition) + check_for_unlock({ type = "have_edition" }) + end end if (card.ability.set == "Code") and G.GAME.used_vouchers.v_cry_quantum_computing then local tot = 0 @@ -1797,12 +1894,8 @@ function end_round() then G.PROFILES[G.SETTINGS.profile].cry_none = true end - if not Cryptid.enabled("set_cry_poker_hand_stuff") then - end_roundref() - end - else - end_roundref() end + end_roundref() G.E_MANAGER:add_event(Event({ trigger = "after", func = function() @@ -1871,11 +1964,6 @@ end local discard_ref = G.FUNCS.discard_cards_from_highlighted G.FUNCS.discard_cards_from_highlighted = function(e, hook) - --Labyrinth: set current_round_discards_used to 0 for effects - G.GAME.current_round.discards_used2 = G.GAME.current_round.discards_used - if next(find_joker("cry-maze")) then - G.GAME.current_round.discards_used = 0 - end discard_ref(e, hook) local highlighted_count = math.min(#G.hand.highlighted, G.discard.config.card_limit - #G.play.cards) if highlighted_count <= 0 then @@ -1911,22 +1999,9 @@ G.FUNCS.discard_cards_from_highlighted = function(e, hook) end, })) end - --Labyrinth: return current_round_discards_used back to the amount it is supposed to be after - G.GAME.current_round.discards_used = G.GAME.current_round.discards_used2 + 1 end local play_ref = G.FUNCS.play_cards_from_highlighted G.FUNCS.play_cards_from_highlighted = function(e) - --Labyrinth: set current_round_hands played to 0 for effects - G.E_MANAGER:add_event(Event({ - trigger = "immediate", - func = function() - G.GAME.current_round.hands_played2 = G.GAME.current_round.hands_played - if next(find_joker("cry-maze")) then - G.GAME.current_round.hands_played = 0 - end - return true - end, - })) G.GAME.before_play_buffer = true -- None Stuff if G.GAME.stamp_mod and not G.PROFILES[G.SETTINGS.profile].cry_none and #G.hand.highlighted == 1 then @@ -1940,21 +2015,6 @@ G.FUNCS.play_cards_from_highlighted = function(e) --Add blind context for Just before cards are played G.GAME.blind:cry_before_play() play_ref(e) - --Labyrinth: return current_round_hands played to the amount it is supposed to be at after - G.E_MANAGER:add_event(Event({ - trigger = "immediate", - func = function() - G.E_MANAGER:add_event(Event({ - trigger = "after", - delay = 0.1, - func = function() - G.GAME.current_round.hands_played = G.GAME.current_round.hands_played2 + 1 - return true - end, - })) - return true - end, - })) G.GAME.before_play_buffer = nil end @@ -1988,138 +2048,3 @@ function CardArea:shuffle(_seed) SMODS.calculate_context({ cry_shuffling_area = true, cardarea = self, cry_post_shuffle = true }) end - -local smods_four_fingers = SMODS.four_fingers -function SMODS.four_fingers() - return smods_four_fingers() - Cryptid.get_paved_joker() -end - -function Cryptid.create_dummy_from_stone(rank) - local r = rank - rank = tonumber(rank) or ({ - Ace = 14, - King = 13, - Queen = 12, - Jack = 11, - })[rank] or rank - return { - get_id = function() - return rank - end, - config = { - center = {}, - }, - base = { - id = rank, - value = rank >= 11 and "Queen" or "10", - }, - } -end -function Cryptid.next_ranks(key, start, recurse) - key = ({ - ["14"] = "Ace", - ["13"] = "King", - ["12"] = "Queen", - ["11"] = "Jack", - })[tostring(key)] or key - local rank = SMODS.Ranks[tostring(key)] - local ret = {} - if not rank or (not start and not wrap and rank.straight_edge) then - return ret - end - for _, v in ipairs(rank.next) do - ret[#ret + 1] = v - local curr = #ret - if recurse and recurse > 0 then - for i, v in pairs(Cryptid.next_ranks(ret[#ret], start, recurse - 1)) do - ret[#ret + 1] = v - end - end - end - return ret -end - -local function append(t, new) - local clone = {} - for _, item in ipairs(t) do - clone[#clone + 1] = item - end - clone[#clone + 1] = new - return clone -end - -function Cryptid.unique_combinations(tbl, sub, min) - sub = sub or {} - min = min or 1 - local wrap, yield = coroutine.wrap, coroutine.yield - return wrap(function() - if #sub > 0 then - yield(sub) -- yield short combination. - end - if #sub < #tbl then - for i = min, #tbl do -- iterate over longer combinations. - for combo in Cryptid.unique_combinations(tbl, append(sub, tbl[i]), i + 1) do - yield(combo) - end - end - end - end) -end -get_straight_ref = get_straight -function get_straight(hand, min_length, skip, wrap) - local permutations = {} - local ranks = {} - local cards = {} - local stones = Cryptid.get_paved_joker() - if stones > 0 then - for i, v in pairs(hand) do - if v.config.center.key ~= "m_stone" then - cards[#cards + 1] = v - for i, v in pairs(Cryptid.next_ranks(v:get_id(), nil, stones)) do --this means its inaccurate in some situations like K S S S S but its fine there isnt a better way - ranks[v] = true - end - end - if v:get_id() >= 11 then - new_ranks = { - "Ace", - "King", - "Queen", - "Jack", - 10, - } - for i, v in pairs(new_ranks) do - ranks[v] = true - end - end - end - local rranks = {} - for i, v in pairs(ranks) do - rranks[#rranks + 1] = i - end - for i, v in Cryptid.unique_combinations(rranks) do - if #i == stones then - permutations[#permutations + 1] = i - end - end - for i, v in ipairs(permutations) do - local actual = {} - local ranks = {} - for i, v in pairs(cards) do - actual[#actual + 1] = v - ranks[v:get_id()] = true - end - for i, p in pairs(v) do - local d = Cryptid.create_dummy_from_stone(p) - if not ranks[d:get_id()] then - actual[#actual + 1] = d - end - end - local ret = get_straight_ref(actual, min_length + stones, skip, true) - if ret and #ret > 0 then - return ret - end - end - end - - return get_straight_ref(hand, min_length + stones, skip, wrap) -end diff --git a/lib/ui.lua b/lib/ui.lua index 212b69de0..283eca9dc 100644 --- a/lib/ui.lua +++ b/lib/ui.lua @@ -228,22 +228,6 @@ SMODS.DrawStep({ }) SMODS.draw_ignore_keys.floating_sprite2 = true --- CCD Drawstep -local interceptorSprite = nil -SMODS.DrawStep({ - key = "ccd_interceptor", - order = -5, - func = function(self) - local card_type = self.ability.set or "None" - if card_type ~= "Default" and card_type ~= "Enhanced" and self.playing_card then - interceptorSprite = interceptorSprite - or Sprite(0, 0, G.CARD_W, G.CARD_H, G.ASSET_ATLAS["cry_clarifier"], { x = 0, y = 0 }) - interceptorSprite.role.draw_major = self - interceptorSprite:draw_shader("dissolve", nil, nil, nil, self.children.center) - end - end, -}) - -- Make hover UI collidable - so we can detect collision and display tooltips local m = Card.move function Card:move(dt) diff --git a/localization/de.lua b/localization/de.lua index 23e390501..a98888d40 100644 --- a/localization/de.lua +++ b/localization/de.lua @@ -408,30 +408,6 @@ return { "pro $#1# wenn ausgewählt", }, }, - bl_cry_repulsor = { - name = "Der Abstoßer", - text = { - "Löse den Joker ganz rechts und", - "ganz links erneut aus, alle anderen", - "Joker werden nicht ausgelöst", - }, - }, - bl_cry_chromatic = { - name = "Die Chromatik", - text = { - "Punktzahl wird", - "subtrahiert bei", - "ungerader Anzahl von Händen", - }, - }, - bl_cry_landlord = { - name = "Der Vermieter", - text = { - "Fuegt Gemietet einem", - "zufälligen Joker hinzu", - "wenn Hand gespielt wird", - }, - }, bl_cry_pinkbow = { name = "Pinke Schleife", text = { @@ -690,22 +666,18 @@ return { "zu einem {C:cry_code}gewählten{} Rang", }, }, - c_cry_log = { + c_cry_crylog = { name = "://LOG", text = { - "{C:cry_code}Anzeige{} von einer dieser Optionen: ", - "{C:attention}Boss-Blind{} der {C:attention}nächsten{} Ante und {C:attention}Gutscheine{},", - "die nächsten {C:attention}5{} {C:attention}Joker{} im Shop, oder", - "die nächsten {C:attention}10{} zu {C:attention}ziehenden{} Spielkarten", - "{C:inactive}(Falls in einem Blind){}", + "Kommt in einem", + "zukünftigen {C:cry_code}Update{}", }, }, c_cry_quantify = { name = "://QUANTIFY", - text = { - "Verschiebe {C:attention}#1#{} gewählte", - "{C:attention}Karte#1#{}, oder {C:attention}Booster{}", - "in die {C:attention}Joker{}-Ablage", + text = { -- "{C:cry_code}J{C:cry_exotic}o{C:legendary}k{C:cry_epic}e{C:cry_candy}r{C:rare}i{C:uncommon}z{C:common}e{C:dark_edition}!{} an object", --o.o + "Kommt in einem", + "zukünftigen {C:cry_code}Update{}", }, }, c_cry_divide = { @@ -761,15 +733,6 @@ return { "{C:cry_code}ohne{} Preisgeld zu bekommen", }, }, - c_cry_declare = { - name = "://DECLARE", - text = { - "Die {C:attention}aktuell{} gewählten Spielkarten", - "werden zu einer {C:cry_code}neuen{} Pokerhand, welche", - "gewertet wird, als würde sie ein {C:attention}#1#{} enthalten", - "Es können bis zu {C:attention}3{} {C:inactive}[#2#]{} Hände erzeugt werden", - }, - }, }, ["Content Set"] = { set_cry_blind = { @@ -1141,16 +1104,6 @@ return { "{C:inactive,s:0.8}Rang ändert sich nicht", }, }, - j_cry_rotten_egg = { - name = "Faules Ei", - text = { - "Setzt bei Erhalt den Verkaufswert", - "aller aktueller und zukünfitger Joker auf {C:attention}$#1#{}", - "Reduziert den Verkaufswert aller {C:attention}Joker{} um {C:attention}$#2#{}", - "am Ende der Runde, nach Erhalt von {C:attention}$#3#{} {C:inactive}[#4#]{}", - "durch den Verkauf von {C:attention}Jokern{}, {C:red}Zerstört sich selbst{}", - }, - }, j_cry_blender = { name = "Blender", text = { @@ -1367,7 +1320,12 @@ return { }, j_cry_circus = { name = "Zirkus", - text = Cryptid.get_circus_description(), --for translaters: this is automatically localized you can copy it over as long as cry_circus_generic is translated too + text = { + "{C:red}Seltene{} Joker geben {X:mult,C:white} X#1# {} Mult", + "{C:cry_epic}Epische{} Joker geben {X:mult,C:white} X#2# {} Mult", + "{C:legendary}Legendäre{} Joker geben {X:mult,C:white} X#3# {} Mult", + "{C:cry_exotic}Exotische{} Joker geben {X:mult,C:white} X#4# {} Mult", + }, unlock = { "Erhalten einen {C:red}Seltenen{},", "{C:cry_epic}Epischen{} und {C:legendary}Legendären{}", @@ -1829,7 +1787,7 @@ return { name = "Formidiulosus", text = { "Wenn ein {X:cry_cursed,C:white}Verfluchter{} Joker erhalten wird, zerstöre ihn,", - "Erstelle {C:attention}#1#{} {C:dark_edition}Negative {C:cry_candy}Süßigkeit#1#{} am Ende des Shops,", + "eErstelle {C:attention}#1#{} {C:dark_edition}Negative {C:cry_candy}Süßigkeit#1#{} am Ende des Shops,", "{X:dark_edition,C:white}+^#2#{} Mult für jeden {C:cry_candy}Süßigkeiten-Joker{} den du besitzt", "{C:inactive}(Aktuell {X:dark_edition,C:white}^#3#{C:inactive} Mult)", }, @@ -2744,36 +2702,10 @@ return { name = "Pizzastück", text = { "Dieser Joker erhält {X:mult,C:white}X#1#{} Mult", - "wenn ein {C:attention}Pizzastück{} verkauft wird", + "wenn ein {C:attention}Pizza Slice{} verkauft wird", "{C:inactive}(Aktuell{} {X:mult,C:white}X#2#{}{C:inactive} Mult){}", }, }, - j_cry_paved_joker = { - name = "Gepflasteter Joker", - text = { - "Steinkarten könen Lücken", --TODO: Steinkarten oder Stein-Karten? - "von {C:attention}#1#{} in", - "{C:attention}Straights{} and {C:attention}Flushes{} auffüllen", - }, - }, - j_cry_fading_joker = { - name = "Verschwindender Joker", - text = { - "Diese Joker erhält", - "{X:mult,C:white}X#1#{} Mult wenn", - "eine {C:attention}Verderbliche{} Karte geschwächt wird", - "{C:inactive}(Aktuell{} {X:mult,C:white}X#2#{} {C:inactive}Mult){}", - }, - }, - j_cry_poor_joker = { - name = "Armer Joker", - text = { - "Diese Joker erhält", - "{C:mult}+#1#{} Mult wenn", - "eine {C:attention}Gemietete{} Karte Geld nimmt", - "{C:inactive}(Aktuell{} {C:mult}+#2#{} {C:inactive}Mult){}", - }, - }, j_cry_spaceglobe = { name = "Himmelsglobus", text = { @@ -3270,16 +3202,6 @@ return { "und {C:attention}#3#{}", }, }, - c_cry_voxel = { - name = "Voxel", - text = { - "({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})", - "Aufwertung für", - "{C:attention}#1#{},", - "{C:attention}#2#{},", - "und {C:attention}#3#{}", - }, - }, }, Sleeve = { sleeve_cry_beige_sleeve = { @@ -3591,7 +3513,6 @@ return { }, }, Stake = { - -- TODO translate colours... stake_cry_pink = { name = "Pinker Einsatz", colour = "Pink", --this is used for auto-generated sticker localization @@ -3602,7 +3523,7 @@ return { }, stake_cry_brown = { name = "Brauner Einsatz", - colour = "Braun", + colour = "Brown", text = { "Alle {C:attention}Sticker{} sind", "gegenseitig Kompatibel", @@ -3610,7 +3531,7 @@ return { }, stake_cry_yellow = { name = "Gelber Einsatz", - colour = "Gelb", + colour = "Yellow", text = { "{C:attention}Sticker{} können auf", "allen kaufbaren Gegenständen erscheinen", @@ -3633,28 +3554,28 @@ return { }, stake_cry_gray = { name = "Grauer Einsatz", - colour = "Grau", + colour = "Gray", text = { "Aktualisierungen erhöhen sich um {C:attention}$2{}", }, }, stake_cry_crimson = { name = "Karmesin Einsatz", - colour = "Karmesin", + colour = "Crimson", text = { "Gutscheine füllen sich auf allen {C:attention}geraden{} Antes auf", }, }, stake_cry_diamond = { name = "Diamant Einsatz", - colour = "Diamant", + colour = "Diamond", text = { "Zum Gewinnen must du Ante {C:attention}10{} besiegen", }, }, stake_cry_amber = { name = "Bernstein Einsatz", - colour = "Bernstein", + colour = "Amber", text = { "{C:attention}-1{} Booster Paket Slots", }, @@ -3676,7 +3597,7 @@ return { }, stake_cry_ruby = { name = "Rubin Einsatz", - colour = "Rubin", + colour = "Ruby", text = { "{C:attention}Big{} Blinds können", "{C:attention}Boss{} Blinds werden", @@ -3691,7 +3612,7 @@ return { }, stake_cry_sapphire = { name = "Saphir Einsatz", - colour = "Saphir", + colour = "Sapphire", text = { "Verliere {C:attention}25%{} deines momentanen Geldes", "am Ende der Ante", @@ -3700,7 +3621,7 @@ return { }, stake_cry_emerald = { name = "Smaragd Einsatz", - colour = "Smaragd", + colour = "Emerald", text = { "Karten, Pakete und Gutscheine", "können mit {C:attention}Gesicht nach unten{} sein", @@ -3709,14 +3630,14 @@ return { }, stake_cry_platinum = { name = "Platin Einsatz", - colour = "Platin", + colour = "Platinum", text = { "Small Blinds sind {C:attention}entfernt{}", }, }, stake_cry_twilight = { name = "Zwielichtiger Einsatz", - colour = "Zwielichtig", + colour = "Twilight", text = { "Karten können {C:attention}Banane{} sein", "{s:0.8,C:inactive}(Chance von 1 zu 10, dass die Karte am Ende der Runde zerstört wird){}", @@ -3724,7 +3645,7 @@ return { }, stake_cry_verdant = { name = "Grasgrüner Einsatz", - colour = "Grasgrüner", + colour = "Verdant", text = { "Benötigte Punktzahl skaliert", "schneller für jede {C:attention}Ante", @@ -3732,14 +3653,14 @@ return { }, stake_cry_ember = { name = "Glühender Einsatz", - colour = "Glühend", + colour = "Ember", text = { "Alle Gegenstände geben beim Verkaufen kein Geld", }, }, stake_cry_dawn = { name = "Dämmernder Einsatz", - colour = "Dämmernd", + colour = "Dawn", text = { "Tarot- und Geister-Karten beeinflussen", "{C:attention}1{} Karte weniger", @@ -3748,7 +3669,7 @@ return { }, stake_cry_horizon = { name = "Horizont Einsatz", - colour = "Horizont", + colour = "Horizon", text = { "Wenn Blind ausgewählt ist, füge eine", "{C:attention}zufällige Karte{} zum Deck hinzu", @@ -3756,7 +3677,7 @@ return { }, stake_cry_blossom = { name = "Blühender Einsatz", - colour = "Blühend", + colour = "Blossom", text = { "{C:attention}Letzte{} Boss Blinds können nun", "in {C:attention}allen{} Antes auftauchen", @@ -3764,7 +3685,7 @@ return { }, stake_cry_azure = { name = "Azurblauer Einsatz", - colour = "Azurblauer", + colour = "Azure", text = { "Werte auf Jokern sind", "um {C:attention}20%{} reduziert", @@ -3772,7 +3693,7 @@ return { }, stake_cry_ascendant = { name = "Aufgestiegener Einsatz", - colour = "Aufgestiegen", + colour = "Ascendant", text = { "{C:attention}-1{} Shop Slots", }, @@ -3991,30 +3912,6 @@ return { "{s:0.8,C:inactive}Kopierende Tags ausgenommen", }, }, - tag_cry_clone = { - name = "Klon-Tag", - text = { - "Gegenstände im Shop kosten {C:attention}X#1#{}", - "so viel, Erhalte eine {C:attention}Kopie{}", - "der als nächstes gekauften Karte", - }, - }, - tag_cry_lens = { - name = "Linsen-Tag", - text = { - "Füge {C:dark_edition}Negativ{}", - "zu {C:attention}#1#{} zufälligen", - "Verbrauchsgegen#1# hinzu", - }, - }, - tag_cry_palette_cleanser = { --beautiful phrase that unfortunately doesnt have a german equivalent :( - name = "Reinigungs-Tag", - text = { - "Entfernt einen {C:attention}zufälligen{}", - "Sticker von einem {C:attention}zufälligen{}", - "Joker oder Spielkarte", - }, - }, }, Tarot = { c_cry_automaton = { @@ -4864,17 +4761,6 @@ return { ["cry_WholeDeck"] = Cryptid_config.family_mode and "Das Ganze Deck" or "Das Ganze Verfickte Deck", ["cry-Cluster Bulwark"] = "Clusterwark", ["cry_None"] = "Nichts", - - ["cry_Declare0"] = { "Wird immer als Straight gewertet" }, - ["cry_Declare1"] = { "Wird immer als Flush gewertet" }, - ["cry_Declare2"] = { "Wird immer als Full House gewertet" }, - - ["cry_Declare0_suitless"] = { "Wird immer als Straight gewertet", "Hand benötigt keine bestimmten Farben" }, - ["cry_Declare1_suitless"] = { "Wird immer als Flush gewertet", "Hand benötigt keine bestimmten Farben" }, - ["cry_Declare2_suitless"] = { - "Wird immer als Full House gewertet", - "Hand benötigt keine bestimmten Farben", - }, }, poker_hand_descriptions = { ["cry_Bulwark"] = { @@ -5040,7 +4926,6 @@ return { b_code_cards = "Code Karten", b_unique_cards = "Einzigartige Karten", b_pull = "PULL", - b_playing_cards = "Spielkarten", cry_hooked_ex = "Verhackt!", k_end_blind = "Beende Blind", k_cry_shiny = "Shiny", @@ -5057,15 +4942,6 @@ return { cry_code_create_previous = "VORHERIGES ERSTELLEN", cry_code_execute = "AUSFÜHREN", cry_code_cancel = "ABBRECHEN", - cry_code_enter_hand = "NAME DER POKERHAND EINGEBEN", - cry_code_with_suits = "INKLUSIVE FARBE", - cry_code_without_suits = "IGNORIERE FARBE", - cry_code_suitless = "Hand benötigt keine bestimmte Farbe", - cry_code_empty = "[Declare Hand]", --TODO context? - cry_code_exit = "SCHLIESSEN", - cry_code_antevoucher = "Nächster Boss Blind and Gutschein", - cry_code_nextjokers = "Nächste Joker im Shop", - cry_code_nextcards = "Nächste Spielkarten", b_flip = "UMDREHEN", b_merge = "KOMBINIEREN", @@ -5109,8 +4985,6 @@ return { cry_candy = "Süßigkeit", cry_cursed = "Verflucht", - k_downgraded_ex = "Downgraded!", - k_planet_disc = "Kreisstellare Scheibe", k_planet_satellite = "Natürliche Satelliten", k_planet_universe = Cryptid_config.family_mode and "Universum" or "Das Tatsächliche Verfickte Universum", @@ -5145,8 +5019,6 @@ return { b_reset_gameset_modest = "Setzt Gameset Konfiguration zurück (Modest)", b_reset_gameset_mainline = "Setzt Gameset Konfiguration zurück (Mainline)", b_reset_gameset_madness = "Setzt Gameset Konfiguration zurück (Madness)", - - cry_circus_generic = "{V:#1#}#2#{} Joker geben je {X:mult,C:white} X#3# {} Mult", }, labels = { food_jokers = "Essen-Joker", diff --git a/localization/en-us.lua b/localization/en-us.lua index e44b35330..e8d90c4e8 100644 --- a/localization/en-us.lua +++ b/localization/en-us.lua @@ -405,30 +405,6 @@ return { "per $#1# when selected", }, }, - bl_cry_repulsor = { - name = "The Repulsor", - text = { - "Retrigger rightmost and", - "leftmost Jokers, all other", - "Jokers do not trigger", - }, - }, - bl_cry_chromatic = { - name = "The Chromatic", - text = { - "Hand score is", - "subtracted on", - "odd numbered hands", - }, - }, - bl_cry_landlord = { - name = "The Landlord", - text = { - "Apply rental to", - "a random Joker", - "when hand is played", - }, - }, bl_cry_pinkbow = { name = "Pink Bow", text = { @@ -687,14 +663,11 @@ return { "to a {C:cry_code}chosen{} rank", }, }, - c_cry_log = { + c_cry_crylog = { name = "://LOG", text = { - "Show a {C:cry_code}readout{} of either: ", - "{C:attention}next{} antes {C:attention}Boss-Blind{} and {C:attention}Voucher{},", - "the next {C:attention}5{} {C:attention}Jokers{} from the shop, or", - "the next {C:attention}10{} playing cards to be {C:attention}drawn{}", - "{C:inactive}(If in a Blind){}", + "To Be {C:cry_code}Implemented{}", + "in a future {C:cry_code}update{}", }, }, c_cry_quantify = { @@ -758,15 +731,6 @@ return { "{C:cry_code}without{} cashing out", }, }, - c_cry_declare = { - name = "://DECLARE", - text = { - "Your {C:attention}currently{} selected cards", - "become a {C:cry_code}new{} Poker hand which is", - "considered to contain a {C:attention}#1#{}", - "You may create up to {C:attention}3{} {C:inactive}[#2#]{} Hands", - }, - }, }, ["Content Set"] = { set_cry_blind = { @@ -1139,16 +1103,6 @@ return { "{C:inactive,s:0.8}Rank does not change", }, }, - j_cry_rotten_egg = { - name = "Rotten Egg", - text = { - "When obtained, set sell value of", - "all current and future Jokers to {C:attention}$#1#{}", - "Reduce sell value of all {C:attention}Jokers{} by {C:attention}$#2#{}", - "At end of round, after gaining {C:attention}$#3#{} {C:inactive}[#4#]{}", - "from selling {C:attention}Jokers{}, {C:red}Self-destruct{}", - }, - }, j_cry_blender = { name = "Blender", text = { @@ -1365,7 +1319,12 @@ return { }, j_cry_circus = { name = "Circus", - text = Cryptid.get_circus_description(), --for translaters: this is automatically localized you can copy it over as long as cry_circus_generic is translated too + text = { + "{C:red}Rare{} Jokers each give {X:mult,C:white} X#1# {} Mult", + "{C:cry_epic}Epic{} Jokers each give {X:mult,C:white} X#2# {} Mult", + "{C:legendary}Legendary{} Jokers each give {X:mult,C:white} X#3# {} Mult", + "{C:cry_exotic}Exotic{} Jokers each give {X:mult,C:white} X#4# {} Mult", + }, unlock = { "Obtain a {C:red}Rare{},", "{C:cry_epic}Epic{} and {C:legendary}Legendary{}", @@ -2740,32 +2699,6 @@ return { "{C:inactive}(Currently{} {X:mult,C:white}X#2#{}{C:inactive} Mult){}", }, }, - j_cry_paved_joker = { - name = "Paved Joker", - text = { - "Stone Cards may fill", - "gaps of {C:attention}#1#{} in", - "{C:attention}Straights{} and {C:attention}Flushes{}", - }, - }, - j_cry_fading_joker = { - name = "Fading Joker", - text = { - "This Joker Gains", - "{X:mult,C:white}X#1#{} Mult whenever", - "a {C:attention}Perishable{} card is debuffed", - "{C:inactive}(Currently{} {X:mult,C:white}X#2#{} {C:inactive}Mult){}", - }, - }, - j_cry_poor_joker = { - name = "Poor Joker", - text = { - "This Joker gains", - "{C:mult}+#1#{} Mult whenever", - "a {C:attention}Rental{} card takes money", - "{C:inactive}(Currently{} {C:mult}+#2#{} {C:inactive}Mult){}", - }, - }, j_cry_spaceglobe = { name = "Celestial Globe", text = { @@ -3266,16 +3199,6 @@ return { "and {C:attention}#3#{}", }, }, - c_cry_voxel = { - name = "Voxel", - text = { - "({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})", - "Level up", - "{C:attention}#1#{},", - "{C:attention}#2#{},", - "and {C:attention}#3#{}", - }, - }, }, Sleeve = { sleeve_cry_beige_sleeve = { @@ -3981,30 +3904,6 @@ return { "{s:0.8,C:inactive}Copying Tags excluded", }, }, - tag_cry_clone = { - name = "Clone Tag", - text = { - "Shop Items cost {C:attention}X#1#{}", - "as much, obtain a {C:attention}Copy{}", - "of the next bought card", - }, - }, - tag_cry_lens = { - name = "Lens Tag", - text = { - "Apply {C:dark_edition}Negative{}", - "to {C:attention}#1#{} random", - "consumable#1#", - }, - }, - tag_cry_palette_cleanser = { - name = "Palette Cleanser Tag", - text = { - "Remove a {C:attention}random{}", - "sticker from a {C:attention}random{}", - "Joker or playing card", - }, - }, }, Tarot = { c_cry_automaton = { @@ -4884,14 +4783,6 @@ return { "Are you insane?", }, ["cry_None"] = { "A hand containing 0 cards" }, - - ["cry_Declare0"] = { "Always counts as a Straight" }, - ["cry_Declare1"] = { "Always counts as a Flush" }, - ["cry_Declare2"] = { "Always counts as a Full House" }, - - ["cry_Declare0_suitless"] = { "Always counts as a Straight", "Hand does not need specific suits" }, - ["cry_Declare1_suitless"] = { "Always counts as a Flush", "Hand does not need specific suits" }, - ["cry_Declare2_suitless"] = { "Always counts as a Full House", "Hand does not need specific suits" }, }, achievement_names = { ach_cry_ace_in_crash = "Pocket ACE", @@ -5040,7 +4931,6 @@ return { b_code_cards = "Code Cards", b_unique_cards = "Unique Cards", b_pull = "PULL", - b_playing_cards = "Playing Cards", cry_hooked_ex = "Hooked!", k_end_blind = "End Blind", k_cry_shiny = "Shiny", @@ -5057,15 +4947,6 @@ return { cry_code_create_previous = "CREATE PREVIOUS", cry_code_execute = "EXECUTE", cry_code_cancel = "CANCEL", - cry_code_enter_hand = "ENTER POKER HAND NAME", - cry_code_with_suits = "INCLUDE SUITS", - cry_code_without_suits = "IGNORE SUITS", - cry_code_suitless = "Hand does not require specific suits", - cry_code_empty = "[Declare Hand]", - cry_code_exit = "EXIT", - cry_code_antevoucher = "Next Boss Blind and Voucher", - cry_code_nextjokers = "Next Shop Jokers", - cry_code_nextcards = "Next Drawn Cards", b_flip = "FLIP", b_merge = "MERGE", @@ -5109,8 +4990,6 @@ return { k_cry_candy = "Candy", k_cry_cursed = "Cursed", - k_downgraded_ex = "Downgraded!", - k_planet_disc = "Circumstellar Disc", k_planet_satellite = "Natural Satellites", k_planet_universe = Cryptid_config.family_mode and "Universe" or "The Actual Fucking Universe", @@ -5144,8 +5023,6 @@ return { b_reset_gameset_modest = "Reset Gameset Config (Modest)", b_reset_gameset_mainline = "Reset Gameset Config (Mainline)", b_reset_gameset_madness = "Reset Gameset Config (Madness)", - - cry_circus_generic = "{V:#1#}#2#{} Jokers each give {X:mult,C:white} X#3# {} Mult", }, labels = { food_jokers = "Food Jokers", diff --git a/localization/es_ES.lua b/localization/es_ES.lua index 6d9aaf517..d0e5ac02b 100644 --- a/localization/es_ES.lua +++ b/localization/es_ES.lua @@ -406,7 +406,7 @@ return { }, }, c_cry_crash = { - name = "://CRASH", + name = "://CHOQUE", text = { "{C:cry_code,E:1}No.", }, @@ -800,16 +800,6 @@ return { "{C:inactive}(Actual: {X:mult,C:white}X#2#{C:inactive} multi)", }, }, - m_cry_abstract = { - name = "Carta abstracta", - text = { - "{X:dark_edition,C:white}^#1#{} multi,", - "Cuenta como su {C:attention}propio{} rango y palo", - "Chance de {C:green}#4# en #5#{} de que", - "{C:red,E:2}se destruya{} la carta al tenerla en la mano al", - "{C:attention}final de la ronda{} o al {C:attention}jugar una mano{}", - }, - }, }, Joker = { j_cry_test_modest = { @@ -935,15 +925,6 @@ return { "{C:inactive,s:0.8}La categoría no cambia", }, }, - j_cry_highfive = { - name = "Choca esos cinco", - text = { - "Si la carta {C:attention}puntuada más alta{}", - "es {C:attention}5{}, convierte {C:attention}todas{} las cartas que puntúan", - "en {C:attention}5{}s", - "{s:0.8,C:inactive}Se considera a los Aces como 1", - }, - }, j_cry_blender = { name = "Blender", text = { @@ -1168,18 +1149,6 @@ return { "una {E:1,C:attention}Pareja suprema", }, }, - j_cry_the = { - name = "El", - text = { - "{X:mult,C:white} X#1# {} multi si la mano", - "jugada es {C:attention}#2#", - }, - unlock = { - "Gana una partida con", - "tu última mano siendo", - "una {E:1,C:attention}None", --queda None por traducir, revisar el discord si alguien lo solucionó - }, - }, j_cry_clicked_cookie = { name = "Galleta clickeada", text = { @@ -1332,21 +1301,6 @@ return { "de su respectivo {C:attention}tipo{}", }, }, - j_cry_starfruit = { - name = "Carambola", - text = { - "{X:dark_edition,C:white}^#1#{} multi,", - "pierde {X:dark_edition,C:white}^#2#{} multi por cada", - "{C:attention}renovación{} en la tienda", - }, - }, - j_cry_demicolon = { - name = "Demicolon", - text = { - "{C:attention}Activa por la fuerza{} al Comodín", - "a la derecha", - }, - }, j_cry_discreet = { name = "Comodín discreto", text = { @@ -1508,15 +1462,6 @@ return { "{C:attention}#2#{} o menos veces", }, }, - j_cry_familiar_currency = { - name = "Moneda familiar", - text = { - "Crea un {C:attention}comodín meme{}", - "al final de la ronda", - "por {C:money}$#1#{} {C:inactive}(si es posible)", - "{C:inactive}(Debe haber espacio)", - }, - }, j_cry_filler = { name = "El relleno", text = { @@ -1569,13 +1514,6 @@ return { "un {C:attention}#2#", }, }, - j_cry_undefined = { - name = "Comodín indefinido", - text = { - "{C:red}+#1#{} multi si la mano", - "jugada es {C:attention}#2#", - }, - }, j_cry_formidiulosus = { name = "Formidiulosus", text = { @@ -1680,7 +1618,7 @@ return { "{X:dark_edition,C:white}^#1#{} multi sólo después de", "jugar {C:attention}114{} manos{}", "{C:inactive}(Actual: #2#/114){}", - "{C:inactive,s:0.8}¡No hay lugar como el hogar!{}", + "{C:inactive,s:0.8}¡No hay un lugar como el hugar!{}", }, }, j_cry_home = { @@ -1706,7 +1644,7 @@ return { j_cry_huntingseason = { name = "Época de caza", text = { - "Si la mano jugada contiene exactamente {C:attention}3{} cartas,", + "Si la mano jugada contiene exactalemte {C:attention}3{} cartas,", "{C:red}destruye{} la carta {C:attention}central{} después de puntuar", }, }, @@ -1720,7 +1658,7 @@ return { }, }, j_cry_jawbreaker = { - name = "Rompemuelas", + name = "Jawbreaker", text = { "Al derrotar la {C:attention}ciega jefe,", "{C:attention}duplica{} los valores de los comodines adyacentes", @@ -1770,14 +1708,6 @@ return { "o {C:attention}tipo fichas{} es vendido", }, }, - j_cry_kittyprinter = { - name = "Impresora de gatitos", - text = { - "{X:mult,C:white} X#1# {} multi", - "Todas las etiquetas {C:attention}salteadas{}", - "se vuelven {C:attention}etiquetas de gato{}", - }, - }, j_cry_kooky = { name = "Comodín raro", text = { @@ -2372,7 +2302,7 @@ return { }, }, j_cry_scrabble = { - name = "Ficha de Scrabble", + name = "Teja de Scrabble", text = { "{C:green}#1# en #2#{} probabilidades de crear", "un comodín {C:green}inusual{} {C:dark_edition}contento", @@ -2450,22 +2380,7 @@ return { '{C:inactive,s:0.8}"Esta prisión... para mantenerme...?"', }, }, - j_cry_sock_and_sock = { - name = "Calcetín y calcetín", - text = { - "Reactiva todas las cartas", - "{C:attention}abstractas{} jugadas {C:attention}#1#{} vez#1#", - }, - }, - j_cry_brokenhome = { - name = "Hogar roto", - text = { - "{X:mult,C:white} X#1# {} multi", - "{C:green}#2# en #3#{} probabilidades", - "de que la carta se destruya", - "al final de la ronda", - }, - }, + j_cry_spaceglobe = { name = "Esfera celestial", text = { @@ -2616,13 +2531,6 @@ return { "un {C:attention}#2#", }, }, - j_cry_nebulous = { - name = "Comodín Nebuloso", - text = { - "{C:chips}+#1#{} Chip#1# si la mano", - "jugada es {C:attention}#2#", - }, - }, j_cry_trick_or_treat = { name = "Dulce o truco", text = { @@ -4484,7 +4392,7 @@ return { ach_cry_pull_request = "Haz que ://COMMIT haga aparecer el mismo comodín que destruyó", ach_cry_traffic_jam = "Gana todos los desafíos Hora punta", ach_cry_ult_full_skip = "Gana en 1 ronda", - ach_cry_used_crash = "Usa ://CRASH", + ach_cry_used_crash = "Usa ://CHOQUE", ach_cry_what_have_you_done = "Elimina o sacrifica un comodín exótico", ach_cry_pin = "Pierde una partida contra El Alfiler", }, diff --git a/localization/fr.lua b/localization/fr.lua index e6d1b3498..4ba5693f6 100644 --- a/localization/fr.lua +++ b/localization/fr.lua @@ -421,30 +421,6 @@ return { "chaque $#1# lorsqu'elle est sélectionnée", }, }, - bl_cry_repulsor = { - name = "Le Répulseur", - text = { - "Redéclenche les jokers", - "aux extrêmités, tous les autres", - "Jokers ne déclenchent pas", - }, - }, - bl_cry_chromatic = { - name = "Le Chromatisme", - text = { - "Le score de la main", - "est soustrait sur les", - "mains impaires", - }, - }, - bl_cry_landlord = { - name = "Le Locateur", - text = { - "Applique Location à", - "un Joker aléatoire", - "après que la main soit jouée", - }, - }, bl_cry_pinkbow = { name = "Nœud Rose", text = { @@ -568,7 +544,7 @@ return { c_cry_crash = { name = "://CRASH", text = { - "{C:cry_code,E:1}Ne le fais pas.", + "{C:cry_code,E:1}Ne le faites pas.", }, }, c_cry_ctrl_v = { @@ -643,7 +619,7 @@ return { "de cette manière", }, }, - c_cry_log = { + c_cry_crylog = { name = "://LOG", text = { "To Be {C:cry_code}Implemented{}", @@ -707,11 +683,10 @@ return { }, }, c_cry_quantify = { - name = "://QUANTIFIER", - text = { - "Transfère {C:attention}#1#{} {C:attention}Carte#1#{}", - "ou {C:attention}Paquet#1#{} sélectionné#1#", - "dans les emplacements de {C:attention}Jokers{}", + name = "://QUANTIFY", + text = { -- "{C:cry_code}J{C:cry_exotic}o{C:legendary}k{C:cry_epic}e{C:cry_candy}r{C:rare}i{C:uncommon}z{C:common}e{C:dark_edition}!{} an object", + "Oh, tu sais,", + "{C:cry_code}:){}", }, }, c_cry_reboot = { @@ -779,15 +754,6 @@ return { "en un rang {C:cry_code}choisi{}", }, }, - c_cry_declare = { - name = "://DECLARER", - text = { - "Vos {C:attention}cartes sélectionnées{}", - "deviennent une {C:cry_code}nouvelle{} main de Poker", - "qui est considérée comme un {C:attention}#1#{}", - "Un maximum de {C:attention}3{} {C:inactive}[#2#]{} mains peuvent être créées", - }, - }, }, ["Content Set"] = { set_cry_blind = { @@ -1167,16 +1133,6 @@ return { "{C:inactive,s:0.8}Le rang ne change pas", }, }, - j_cry_rotten_egg = { - name = "Œuf pourri", - text = { - "Lorsque obtenu, définit la valeur de vente", - "de tous les Jokers actuels et futurs à {C:attention}$#1#{}", - "Réduit la valeur de vente des {C:attention}Jokers{} de {C:attention}$#2#{}", - "À la fin de la manche, après avoir gagné {C:attention}$#3#{} {C:inactive}[#4#]{}", - "en vendant des {C:attention}Jokers{}, {C:red}s'auto-détruit{}", - }, - }, j_cry_blender = { name = "Blender", text = { @@ -1592,14 +1548,6 @@ return { "à droite de celui-ci", }, }, - j_cry_starfruit = { - name = "Starfruit", - text = { - "{X:dark_edition,C:white}^#1#{} Multi,", - "perd {X:dark_edition,C:white}^#2#{} Multi à chaque", - "{C:attention}réapprovisionnement{} de la boutique", - }, - }, j_cry_digitalhallucinations = { name = "Hallucinations digitales", text = { @@ -2765,48 +2713,6 @@ return { "à toutes les {C:green}probabilités affichées", }, }, - j_cry_pizza = { - name = "Pizza", - text = { - "Après {C:attention}#1#{} {C:inactive}[#2#]{} manche#1#", - "vendre ce Joker crée", - "{C:attention}#3#{} Parts de pizza", - }, - }, - j_cry_pizza_slice = { - name = "Part de pizza", - text = { - "Ce Joker gagne {X:mult,C:white}X#1#{} Multi", - "lorsqu'une {C:attention}Part de pizza{} est vendue", - "{C:inactive}(Actuellement{} {X:mult,C:white}X#2#{}{C:inactive} Multi){}", - }, - }, - j_cry_paved_joker = { - name = "Joker pavé", - text = { - "Les Cartes Pierre peuvent remplir", - "{C:attention}#1#{} trou#1# dans les", - "{C:attention}Quintes{} et {C:attention}Couleurs{}", - }, - }, - j_cry_fading_joker = { - name = "Joker effacé", - text = { - "Ce Joker gagne", - "{X:mult,C:white}X#1#{} Multi lorsqu'une", - "carte {C:attention}Périssable{} est affaiblie", - "{C:inactive}(Actuellement{} {X:mult,C:white}X#2#{} {C:inactive}Multi){}", - }, - }, - j_cry_poor_joker = { - name = "Joker pauvre", - text = { - "Ce Joker gagne", - "{X:mult,C:white}X#1#{} Multi lorsqu'une", - "carte {C:attention}Location{} prend de l'argent", - "{C:inactive}(Actuellement{} {C:mult}+#2#{} {C:inactive}Multi){}", - }, - }, j_cry_spaceglobe = { name = "Globe Céleste", text = { @@ -3187,7 +3093,7 @@ return { }, Planet = { c_cry_Klubi = { - name = "Risti", + name = "Klubi", text = { "({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})", "Améliore", @@ -3197,7 +3103,7 @@ return { }, }, c_cry_Lapio = { - name = "Pata", + name = "Lapio", text = { "({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})", "Améliore", @@ -3216,16 +3122,6 @@ return { "et {C:attention}#3#{}", }, }, - c_cry_voxel = { - name = "Voxel", - text = { - "({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})", - "Améliore", - "{C:attention}#1#{},", - "{C:attention}#2#{},", - "et {C:attention}#3#{}", - }, - }, c_cry_nstar = { name = "Étoile à neutrons", text = { @@ -3247,7 +3143,7 @@ return { }, }, c_cry_Sydan = { - name = "Hertta", + name = "Sydan", text = { "({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})", "Améliore", @@ -3257,7 +3153,7 @@ return { }, }, c_cry_Timantti = { - name = "Ruutu", + name = "Timantti", text = { "({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})", "Améliore", @@ -4036,30 +3932,6 @@ return { "{s:0.8,C:inactive}Badges de Copie exclus", }, }, - tag_cry_clone = { - name = "Badge Clone", - text = { - "Les objets de la boutique coûtent {C:attention}X#1#{}", - "plus cher, octroie une {C:attention}Copie{}", - "de la prochaîne carte achetée", - }, - }, - tag_cry_lens = { - name = "Badge Optique", - text = { - "Applique {C:dark_edition}Négatif{}", - "à {C:attention}#1#{} consommable#1#", - "aléatoire#1#", - }, - }, - tag_cry_palette_cleanser = { - name = "Badge Nettoyant Palette", - text = { - "Enlève un sticker {C:attention}aléatoire{}", - "d'un Joker ou carte à jouer", - "{C:attention}aléatoire{}", - }, - }, }, Tarot = { c_cry_automaton = { @@ -4942,23 +4814,6 @@ return { "Je sais pas quoi dire, mais tu es fou.", }, ["cry_None"] = { "Une main contenant 0 cartes" }, - - ["cry_Declare0"] = { "Compte toujours comme une Quinte" }, - ["cry_Declare1"] = { "Compte toujours comme une Couleur" }, - ["cry_Declare2"] = { "Compte toujours comme un Full" }, - - ["cry_Declare0_suitless"] = { - "Compte toujours comme une Quinte", - "La main n'a pas besoin de couleurs particulières", - }, - ["cry_Declare1_suitless"] = { - "Compte toujours comme une Couleur", - "La main n'a pas besoin de couleurs particulières", - }, - ["cry_Declare2_suitless"] = { - "Compte toujours comme un Full", - "La main n'a pas besoin de couleurs particulières", - }, }, achievement_names = { ach_cry_ace_in_crash = "ACE de poche", diff --git a/localization/zh_CN.lua b/localization/zh_CN.lua index a66502855..dff9624f9 100644 --- a/localization/zh_CN.lua +++ b/localization/zh_CN.lua @@ -7,25 +7,11 @@ return { "每张牌也是一张{C:attention}随机{}消耗牌", "{C:inactive,s:0.8}{C:attention,s:0.8}(Consume Card Deck){C:inactive,s:0.8}", }, - unlock = { - "使用{C:spectral}次元之袋", - }, }, b_cry_antimatter = { name = "反物质牌组", text = { - "拥有{C:attention}所有{}牌组的{C:legendary,E:1}增益效果", - }, - unlock = { - "使用{C:attention}黑色牌组", - "在{C:attention}金注{}中获胜", - }, - }, - b_cry_antimatter_balanced = { - name = "反物质牌组", - text = { - "拥有{C:attention}所有{}在{C:gold}金注{}中获胜过的", - "牌组的{C:legendary,E:1}增益效果", + "拥有{C:legendary,E:1}所有牌组的{}增益效果", }, }, b_cry_beige = { @@ -34,11 +20,6 @@ return { "{C:attention}普通{}小丑具有", "{C:attention}四倍{}的效果", }, - unlock = { - "在收藏中", - "至少发现", - "{C:attention}200{}个项目", - }, }, b_cry_beta = { name = "怀旧牌组", @@ -47,9 +28,6 @@ return { "{C:attention}合并", "boss底注被替换为它们的怀旧版本", }, - unlock = { - "在{C:attention}粉红注{}中获胜", - }, }, b_cry_blank = { name = "空白牌组", @@ -60,13 +38,9 @@ return { b_cry_bountiful = { name = "丰饶牌组", text = { - "每次{C:attention}出牌{}或{C:attention}弃牌{}后", + "每次{C:attention}出牌{} 或 {C:attention}弃牌{}后", "固定抽五张牌", }, - unlock = { - "不使用{C:red}弃牌", - "击败{C:attention}巨蟒", - }, }, b_cry_conveyor = { name = "传送带牌组", @@ -76,9 +50,6 @@ return { "{C:attention}复制{}最右边的小丑牌", "并且{C:attention}销毁{}最左边的小丑牌", }, - unlock = { - "使用{C:spectral}模拟", - }, }, b_cry_critical = { name = "暴击牌组", @@ -87,9 +58,6 @@ return { "{C:green}#1#/4{}几率获得{X:dark_edition,C:white}^2{}倍率", "{C:green}#1#/8{}几率获得{X:dark_edition,C:white}^0.5{}倍率", }, - unlock = { - "拥有一张{C:attention}灌铅{}小丑", - }, }, ["b_cry_cry-Blue_deck"] = { name = "入迷牌组", @@ -126,8 +94,8 @@ return { ["b_cry_cry-bonus_deck"] = { name = "教皇牌组", text = { - "所有的{C:attention}手牌{}", - "都是{C:attention,T:m_bonus}奖励牌{}", + "所有的 {C:attention}手牌{}", + "都是 {C:attention,T:m_bonus}奖励牌{}", "不能更改增强类型", "{s:0.8,C:inactive}", }, @@ -175,8 +143,8 @@ return { ["b_cry_cry-gold_deck"] = { name = "恶魔牌组", text = { - "所有的{C:attention}手牌{}", - "都是{C:attention,T:m_gold}黄金牌{}", + "所有的 {C:attention}手牌{}", + "都是 {C:attention,T:m_gold}黄金牌{}", "不能更改增强类型", "{s:0.8,C:inactive}", }, @@ -200,8 +168,8 @@ return { ["b_cry_cry-lucky_deck"] = { name = "魔术师牌组", text = { - "所有的{C:attention}手牌{}", - "都是{C:attention,T:m_lucky}幸运牌{}", + "所有的 {C:attention}手牌{}", + "都是 {C:attention,T:m_lucky}幸运牌{}", "不能更改增强类型", "{s:0.8,C:inactive}", }, @@ -209,8 +177,8 @@ return { ["b_cry_cry-mult_deck"] = { name = "皇后牌组", text = { - "所有的{C:attention}手牌{}", - "都是{C:attention,T:m_mult}倍率牌{}", + "所有的 {C:attention}手牌{}", + "都是 {C:attention,T:m_mult}倍率牌{}", "不能更改增强类型", "{s:0.8,C:inactive}", }, @@ -255,8 +223,8 @@ return { ["b_cry_cry-steel_deck"] = { name = "战车牌组", text = { - "所有的{C:attention}手牌{}", - "都是{C:attention,T:m_steel}钢铁牌{}", + "所有的 {C:attention}手牌{}", + "都是 {C:attention,T:m_steel}钢铁牌{}", "不能更改增强类型", "{s:0.8,C:inactive}", }, @@ -264,8 +232,8 @@ return { ["b_cry_cry-stone_deck"] = { name = "石头牌组", text = { - "所有的{C:attention}手牌{}", - "都是{C:attention,T:m_stone}石头牌{}", + "所有的 {C:attention}手牌{}", + "都是 {C:attention,T:m_stone}石头牌{}", "不能更改增强类型", "{s:0.8,C:inactive}", }, @@ -273,8 +241,8 @@ return { ["b_cry_cry-wild_deck"] = { name = "爱人牌组", text = { - "所有的{C:attention}手牌{}", - "都是{C:attention,T:m_wild}万能牌{}", + "所有的 {C:attention}手牌{}", + "都是 {C:attention,T:m_wild}万能牌{}", "不能更改增强类型", "{s:0.8,C:inactive}", }, @@ -390,27 +358,12 @@ return { "{s:0.8,C:inactive}", }, }, - b_cry_e_deck = { - name = "版本牌组", - text = { - "所有牌均为{C:dark_edition}#1#{}", - "卡牌无法更改版本", - "{C:inactive}(点击可编辑)", - }, - unlock = { - "发现所有", - "{C:dark_edition}版本", - }, - }, b_cry_encoded = { name = "编码牌组", text = { "以一张{C:cry_code,T:j_cry_CodeJoker}代码小丑{}和一张{C:cry_code,T:j_cry_copypaste}复制/粘贴{}开始", "商店中只出现{C:cry_code}代码牌{}", }, - unlock = { - "使用{C:spectral}://指针", - }, }, b_cry_equilibrium = { name = "均衡牌组", @@ -419,21 +372,6 @@ return { "商店中出现的{C:attention}几率相同{},", "以{C:attention,T:v_overstock_plus}库存过剩加强版{}开始游戏", }, - unlock = { - "同时拥有{C:attention}100个小丑", - "{C:inactive,s:0.7}译者注:解锁条件应该不是这个", - "{C:inactive,s:0.7}虽然英文原文是这么写的", - }, - }, - b_cry_et_deck = { - name = "增强牌组", - text = { - "所有{C:attention}扑克牌{}均为{C:attention}#1#{}", - "{C:inactive}(点击可编辑)", - }, - unlock = { - "使用{C:spectral}虚空", - }, }, b_cry_glowing = { name = "发光牌组", @@ -442,10 +380,6 @@ return { "所有小丑牌的数值乘以{X:dark_edition,C:white}X1.25{}", "{X:cry_jolly,C:white,s:0.8} Jolly#1#Open#1#Winner#1#-#1#wawa#1#person", }, - unlock = { - "使用{C:attention}四重卡组", - "赢一局", - }, }, b_cry_infinite = { name = "无限牌组", @@ -453,21 +387,15 @@ return { "你可以选择{C:attention}任意数量的卡牌{}", "{C:attention}+1{}手牌上限", }, - unlock = { - "打出一手牌至少包含{C:attention}6{}张牌", - }, }, b_cry_legendary = { name = "传奇牌组", text = { - "以一张{C:legendary}传奇{C:legendary}小丑牌开始", + "以一张 {C:legendary}传奇{C:legendary} 小丑牌开始", "击败Boss盲注后", "{C:green}1 / 5{} 几率创建另外一张", "{C:inactive}(必须有空间){}", }, - unlock = { - "同时拥有{C:attention}2个传奇小丑", - }, }, b_cry_misprint = { name = "错版牌组", @@ -475,9 +403,6 @@ return { "卡牌价格,手牌的数值", "都是{C:attention}随机{}数值", }, - unlock = { - "拥有一个{C:dark_edition}故障{C:attention}小丑", - }, }, b_cry_redeemed = { name = "赎回牌组", @@ -485,9 +410,6 @@ return { "购买{C:attention}优惠券{}时,", "获得其{C:attention}额外等级{}", }, - unlock = { - "发现所有{C:attention}优惠券{}", - }, }, b_cry_source_deck = { name = "源代码牌组", @@ -500,44 +422,9 @@ return { b_cry_spooky = { name = "万圣节牌组", text = { - "以一张{C:eternal}永恒{}{C:attention,T:j_cry_chocolate_dice}巧克力骰{}开始", - "每个{C:attention}底注{}结束后", - "创建一个{C:cry_candy}糖果{}或{X:cry_cursed,C:white}诅咒{}", - }, - unlock = { - "拥有一张{C:cry_candy}糖果{C:attention}小丑", - }, - }, - b_cry_sk_deck = { - name = "贴纸牌组", - text = { - "所有牌均为{C:attention}#1#{}", - "{C:inactive}(点击可编辑)", - }, - unlock = { - "使用{C:spectral}锁定", - }, - }, - b_cry_sl_deck = { - name = "蜡封牌组", - text = { - "所有扑克牌均带有{C:dark_edition}#1#{}蜡封", - "卡牌无法更改蜡封", - "{C:inactive}(点击可编辑)", - }, - unlock = { - "使用{C:spectral}台风", - }, - }, - b_cry_st_deck = { - name = "花色牌组", - text = { - "所有扑克牌均为{C:dark_edition}#1#", - "无法更改花色", - "{C:inactive}(点击可编辑)", - }, - unlock = { - "使用{C:spectral}复录", + "以一张{C:eternal}永恒{} {C:attention,T:j_cry_chocolate_dice}巧克力骰{}开始", + "每次{C:attention}底注{}之后 ", + "创建一个{C:cry_candy}糖果{}或 {X:cry_cursed,C:white}诅咒{}", }, }, b_cry_very_fair = { @@ -546,10 +433,6 @@ return { "每回合{C:blue}-2{}手牌,{C:red}-2{}弃牌", "{C:attention}优惠券{}不再出现在商店中", }, - unlock = { - "使用{C:attention}黑色牌组", - "赢一局", - }, }, b_cry_wormhole = { name = "虫洞牌组", @@ -559,9 +442,6 @@ return { "更可能是{C:dark_edition}负片{}", "{C:attention}-2{}小丑牌槽", }, - unlock = { - "拥有一张{C:attention}域外{}小丑", - }, }, }, Blind = { @@ -626,7 +506,7 @@ return { bl_cry_oldflint = { name = "怀旧 燧石", text = { - "包含同花的出牌不计分", + "包含同花顺的出牌不计分", }, }, bl_cry_oldhouse = { @@ -672,40 +552,6 @@ return { "小丑被削弱", }, }, - bl_cry_scorch = { - name = "灼烧", - text = { - "必须出5张牌", - "摧毁打出和弃掉的牌", - }, - }, - bl_cry_greed = { - name = "贪婪", - text = { - "选择时,每$#1#增加#2#盲注要求", - }, - }, - bl_cry_repulsor = { - name = "排斥", - text = { - "重新触发最右侧和最左侧的小丑,", - "其他所有小丑不触发", - }, - }, - bl_cry_chromatic = { - name = "彩色", - text = { - "在出牌次数为奇数次时的打出手牌", - "总分会减去手牌得分", - }, - }, - bl_cry_landlord = { - name = "房东", - text = { - "打出手牌时", - "对随机一个小丑添加租用贴纸", - }, - }, bl_cry_pinkbow = { name = "粉红蝴蝶结", text = { @@ -752,12 +598,6 @@ return { "手中的牌", }, }, - bl_cry_trophy = { - name = "柠檬奖杯", - text = { - "倍率不能超过筹码数", - }, - }, bl_cry_vermillion_virus = { name = "朱红病毒", text = { @@ -770,13 +610,6 @@ return { "削弱所有的罕见小丑", }, }, - bl_cry_decision = { - name = "抉择", - text = { - "出牌或弃牌时固定小丑位置", - "回合结束后打开一个诅咒小丑包", - }, - }, }, Code = { c_cry_alttab = { @@ -789,24 +622,17 @@ return { c_cry_class = { name = "://类别", text = { - "将{C:cry_code}#1#{}选中的牌", - "转换为{C:cry_code}指令{}下的增强", + "将 {C:cry_code}#1#{} 选中的牌", + "转换为 {C:cry_code}指令{} 下的增强", "可用指令:{C:cry_code}bonus{},{C:cry_code}mult{},{C:cry_code}wild{},{C:cry_code}glass{}", "{C:cry_code}steel{},{C:cry_code}stone{},{C:cry_code}gold{},{C:cry_code}lucky{},{C:cry_code}echo{},{C:cry_code}light{}", }, }, - c_cry_global = { - name = "://全局", - text = { - "选择一张扑克牌", - "为其添加{C:cry_code}全局{}贴纸", - }, - }, c_cry_commit = { name = "://提交", text = { - "摧毁一张{C:cry_code}选中的{}小丑牌,", - "创造一张{C:cry_code}新的相同{C:cry_code}稀有度的{}小丑牌", + "摧毁一张 {C:cry_code}选中的{} 小丑牌,", + "创造一张 {C:cry_code}新的相同 {C:cry_code}稀有度的{} 小丑牌", }, }, c_cry_crash = { @@ -815,49 +641,47 @@ return { "{C:cry_code,E:1}警告!使用此牌会导致游戏崩溃!", }, }, - c_cry_keygen = { - name = "://密钥", - text = { - "创建一张随机的{C:cry_code}易腐香蕉{}优惠券,", - "{C:cry_code}摧毁{}此前以此方式创建的优惠券。", - }, - }, c_cry_ctrl_v = { name = "://CTRL+V", text = { - "复制一张{C:cry_code}选择的{}卡牌或消耗牌", + "复制一张 {C:cry_code}选择的{} 卡牌或消耗牌", }, }, c_cry_delete = { name = "://删除", text = { - "{C:cry_code}永久{}移除一个", - "{C:cry_code}选中的{}商店物品", + "{C:cry_code}永久{} 移除一个", + "{C:cry_code}选中的{} 商店物品", "{C:inactive,s:0.8}本次游戏中该物品不会再出现", }, }, c_cry_divide = { name = "://分割", text = { - "{C:cry_code}减半{}当前商店中的", + "{C:cry_code}减半{} 当前商店中的", "所有标价", }, }, c_cry_exploit = { name = "://利用", text = { - "{C:cry_code}下一手牌{}", + "{C:cry_code}下一{} 手牌", + "", "被计算为", - "{C:cry_code}指令{}下的牌型", + "", + "{C:cry_code}指令{} 下的牌型", + "", "{C:inactive,s:0.8}必须是已发现的手牌类型", + "", "可用指令:{C:cry_code}full house(葫芦){},{C:cry_code}flush(同花){},{C:cry_code}straight flush(同花顺){},{C:cry_code}four of a kind(四条){}", + "", "{C:cry_code}three of a kind(三条){},{C:cry_code}pair(对子){},{C:cry_code}two pair(两对){},{C:cry_code}high(高牌){}", }, }, c_cry_hook = { name = "://钩子", text = { - "选择两张小丑牌,使它们{C:cry_code}钩住{}", + "选择两张小丑牌,使它们 {C:cry_code}钩住{}", "{C:inactive,s:0.8}其中一张被触发时,触发另一张(仅当两个效果的触发时机相同时有效)", }, }, @@ -878,72 +702,51 @@ return { c_cry_malware = { name = "://木马", text = { - "给所有的{C:cry_code}无版本手牌{}", - "添加{C:dark_edition}故障{}版本", - }, - }, - c_cry_nperror = { - name = "://NP错误", - text = { - "将{C:cry_code}上一手打出的牌{}", - "返回你的手牌", + "给所有的{C:cry_code}无版本手牌{} ", + "添加 {C:dark_edition}故障{}版本", }, }, c_cry_merge = { name = "://合并", text = { - "将一张{C:cry_code}消耗牌", - "与一张{C:cry_code}手牌{}合并", + "将一张 {C:cry_code}消耗牌", + "与一张 {C:cry_code}手牌{} 合并", }, }, c_cry_multiply = { name = "://乘法", text = { "选择一张牌,使其所有数值{C:cry_code}翻倍{}", - "直到{C:cry_code}回合结束{}", + "直到 {C:cry_code}回合结束{}", }, }, c_cry_oboe = { - name = "://偏差", + name = "://偏差1", text = { - "打开的下一个{C:cry_code}补充包{}有", - "{C:cry_code}#1#{}张额外卡牌和", - "{C:cry_code}#1#{}次额外选择", + "打开的下一个 {C:cry_code}补充包{} 有", + "{C:cry_code}#1#{} 张额外卡牌和", + "{C:cry_code}#1#{} 次额外选择", "{C:inactive}(当前为 {C:cry_code}+#2#{C:inactive})", }, }, - c_cry_assemble = { - name = "://汇编", - text = { - "为{C:cry_code}选中的手牌牌型{}增加{C:cry_code}倍率{},", - "数值等于拥有的小丑数量", - }, - }, c_cry_patch = { name = "://补丁", text = { - "从当前所有可见的物品中移除负面效果", - "{C:cry_code}重置{}商店状态", - }, - }, - c_cry_cryupdate = { - name = "://UPDATE", - text = { - "将在未来的{C:cry_code}更新{}中", - "{C:cry_code}确定{}功能", + "从当前所有可见的物品中移除", + "贴纸和负面效果", }, }, c_cry_payload = { name = "://载荷", text = { "下一个被击败的盲注", - "给予{C:cry_code}X#1#{}利息(乘法叠加)", + "给与 {C:cry_code}X#1#{} 利息(乘法叠加)", }, }, c_cry_reboot = { name = "://重启", text = { - "补充{C:blue}手牌{}和{C:red}弃牌{}次数,", + "补充 {C:blue}手牌{} 和 {C:red}弃牌{} 次数,", "将{C:cry_code}所有{}牌返回牌堆", "并抽取一组{C:cry_code}新的{}手牌", }, @@ -951,23 +754,16 @@ return { c_cry_revert = { name = "://还原", text = { - "将{C:cry_code}游戏状态{}回溯到", + "将 {C:cry_code}游戏状态{} 回溯到", "{C:cry_code}这一底注的开始时{}", }, }, - c_cry_cryfunction = { - name = "函数://", - text = { - "保存最近使用的3个{C:cry_code}消耗牌{}", - "再次使用此卡时,创建第一个的复制并添加{C:cry_code}函数://{}贴纸", - }, - }, c_cry_rework = { name = "://重制", text = { - "摧毁一张{C:cry_code}选中的{}小丑牌,", - "创造该小丑牌的{C:cry_code}重制标签{}并", - "获得一个{C:cry_code}升级的{}版本", + "摧毁一张 {C:cry_code}选中的{} 小丑牌,", + "创造该小丑牌的 {C:cry_code}重制标签{},并", + "获得一个 {C:cry_code}升级的{} 版本", "{C:inactive,s:0.8}版本通过收藏中的顺序升级{}", "{C:inactive,s:0.8}基础,闪箔,镭射,多彩,负片,故障,马赛克,过曝,{}", "{C:inactive,s:0.8}灰质琉璃,鎏金,模糊,噪声,星界,欢愉,双面,基础{}", @@ -976,184 +772,40 @@ return { c_cry_run = { name = "://运行", text = { - "在{C:cry_code}盲注", - "期间拜访{C:cry_code}商店", + "在 {C:cry_code}盲注", + "期间拜访 {C:cry_code}商店", }, }, c_cry_seed = { name = "://种子", text = { "选择一张小丑牌或手牌", - "使它们获得{C:cry_code}灌铅{}效果", + "使它们获得 {C:cry_code}灌铅{}效果", "概率效果必然被触发", }, }, c_cry_semicolon = { name = ";//", text = { - "结束当前非Boss{C:cry_code}盲注{}", + "结束当前非Boss {C:cry_code}盲注{}", "{C:cry_code}不获得金钱{}", }, }, c_cry_spaghetti = { name = "://意面", text = { - "生成一张{C:cry_code}故障版本{}的", + "生成一张 {C:cry_code}故障版本{}的", "食物小丑牌", }, }, c_cry_variable = { name = "://变量", text = { - "将{C:cry_code}#1#{}张选中的牌", - "转换为{C:cry_code}指令{}下的牌型", + "将 {C:cry_code}#1#{} 张选中的牌", + "转换为 {C:cry_code}指令{} 下的牌型", "可用指令:{C:cry_code}1~13,A,J,Q,K{}", }, }, - c_cry_log = { - name = "://日志", - text = { - "显示以下任一{C:cry_code}读数{}的值:", - "{C:attention}下一个{}底注的{C:attention}Boss盲注{}和{C:attention}优惠券{},", - "接下来商店中的{C:attention}5{}个{C:attention}小丑{},或者", - "接下来{C:attention}10{}张将要被{C:attention}抽取{}的手牌", - "{C:inactive}(如果在盲注中){}", - "{C:inactive,S:0.7}(译者注:在0.5.10~dev3版本中,使用第一个选项会导致attempt to index a nil value报错)", - "{C:inactive,S:0.7}(第二个选项看不到小丑,第三个选项看不到花色)", - "{C:inactive,S:0.7}(但是译者不能完全确定,可以尝试一下)", - }, - }, - c_cry_quantify = { - name = "://量化", - text = { - "将{C:attention}#1#{}张选择的", - "{C:attention}手牌{}或{C:attention}补充包{}", - "放到{C:attention}小丑槽{}槽位中", - }, - }, - c_cry_declare = { - name = "://声明", - text = { - "你{C:attention}现在{}选择的手牌", - "变成一张包含{C:attention}#1#{}的{C:cry_code}新的{}牌型", - "你最多可以创造{C:attention}3{}{C:inactive}[#2#]{}种牌型", - }, - }, - }, - ["Content Set"] = { - set_cry_blind = { - name = "盲注集合", - text = { - "包含Cryptid新增的{C:attention}Boss盲注{}", - }, - }, - set_cry_code = { - name = "代码牌集合", - text = { - "包含{C:cry_code}代码牌{}及", - "相关内容", - }, - }, - set_cry_cursed = { - name = "诅咒小丑集合", - text = { - "带有{X:cry_cursed,C:white}诅咒{}稀有度的有害小丑", - }, - }, - set_cry_deck = { - name = "牌组集合", - text = { - "Cryptid新增的{C:attention}牌组{}", - }, - }, - set_cry_epic = { - name = "史诗小丑集合", - text = { - "带有{C:cry_epic}史诗{}稀有度的小丑", - "{C:inactive,s:0.8}(介于稀有和传奇之间)", - }, - }, - set_cry_exotic = { - name = "域外小丑集合", - text = { - "带有{C:cry_exotic}域外{}稀有度的强力小丑", - }, - }, - set_cry_m = { - name = "M小丑集合", - text = { - "与字母{C:attention}M{}相关的小丑,", - "以及{C:attention}开心小丑", - }, - }, - set_cry_meme = { - name = "梗小丑集合", - text = { - "包含多类梗相关内容", - }, - }, - set_cry_misc = { - name = "杂项集合", - text = { - "不适合其他{C:cry_ascendant}主题集合{}的内容", - }, - }, - set_cry_misc_joker = { - name = "杂项小丑集合", - text = { - "不适合其他{C:cry_ascendant}主题集合{}的{C:attention}小丑{}", - }, - }, - set_cry_planet = { - name = "星球牌集合", - text = { - "Cryptid新增的{C:planet}星球{}牌", - }, - }, - set_cry_poker_hand_stuff = { - name = "扑克手牌扩展", - text = { - "新增5种{C:attention}扑克手牌{},", - "并启用{C:attention}晋升手牌", - }, - }, - set_cry_spectral = { - name = "幻灵牌集合", - text = { - "Cryptid新增的{C:spectral}幻灵{}牌", - }, - }, - set_cry_spooky = { - name = "万圣节更新内容", - text = { - "万圣节更新内容", - "包括{C:cry_candy}糖果{}小丑", - }, - }, - set_cry_tag = { - name = "标签集合", - text = { - "Cryptid新增的{C:attention}标签{}", - }, - }, - set_cry_tier3 = { - name = "三阶优惠券", - text = { - "优惠券的额外{C:attention}等级{}", - }, - }, - set_cry_timer = { - name = "计时机制", - text = { - "带有{C:attention}时间相关{}效果的物品及机制", - }, - }, - set_cry_voucher = { - name = "杂项优惠券", - text = { - "Cryptid新增的1阶和2阶{C:attention}优惠券{}", - }, - }, }, Edition = { e_cry_astral = { @@ -1181,7 +833,7 @@ return { label = "易碎", name = "灰质琉璃", text = { - "{C:white,X:mult} X#3# {}倍率", + "{C:white,X:mult} X#3# {} 倍率", "触发时{C:green}#1# / #2#{} 的概率不会被摧毁", }, }, @@ -1210,13 +862,13 @@ return { e_cry_mosaic = { name = "马赛克", text = { - "{X:chips,C:white} X#1# {}筹码", + "{X:chips,C:white} X#1# {} 筹码", }, }, e_cry_noisy = { name = "噪声", text = { - "???", + " ", }, }, e_cry_oversat = { @@ -1233,7 +885,7 @@ return { text = { "当计分时", "{C:green}#2# / #3#{} 几率", - "{C:attention}重新触发{}#1#次", + "{C:attention}重新触发{} #1# 次", }, }, m_cry_light = { @@ -1245,44 +897,8 @@ return { "{C:inactive}(当前 {X:mult,C:white}X#2#{C:inactive} 倍率)", }, }, - m_cry_abstract = { - name = "抽象牌", - text = { - "{X:dark_edition,C:white}^#1#{}倍率,", - "算作{C:attention}自身{}的点数和花色", - "在{C:attention}回合结束{}或{C:attention}出牌{}时", - "有{C:green}#4#/#5#{}概率{C:red,E:2}摧毁{}此牌", - }, - }, }, Joker = { - j_cry_test_modest = { - name = "测试小丑", - text = { - "{C:chips}+#1#{}筹码", - }, - }, - j_cry_test_mainline = { - name = "测试小丑", - text = { - "{C:chips}+#1#{}筹码", - "在{C:attention}盲注{}开始时获得{C:money}+$44{}", - }, - }, - j_cry_test_madness = { - name = "测试小丑", - text = { - "{C:chips}+#1#{}筹码", - "在{C:attention}盲注{}开始时获得{C:money}+$44444{}", - }, - }, - j_cry_test_cryptid_in_2025 = { - name = "测试小丑", - text = { - "{C:chips}+#1#{}筹码", - "在{C:attention}盲注{}开始时获得{C:money}+$44444{}", - }, - }, j_cry_CodeJoker = { name = "代码小丑", text = { @@ -1299,14 +915,6 @@ return { "{C:inactive,s:0.8}(增长为 +1, +2, +3)", }, }, - ["j_cry_Double Scale_modest"] = { - name = "双重天平", - text = { - "成长性{C:attention}小丑{}", - "以{C:attention}两倍{}速度增长", - '{C:inactive,s:0.8}"这叫双重天平,不是平方天平!"', - }, - }, j_cry_M = { name = "M", text = { @@ -1319,8 +927,8 @@ return { name = "M蛋", text = { "出售这张小丑来创造", - "{C:attention}#2#{}张开心小丑", - "在回合结束时增加{C:attention}#1#{}", + "{C:attention}#2#{} 张开心小丑", + "在回合结束时增加 {C:attention}#1#{}", }, }, j_cry_Scalae = { @@ -1345,18 +953,10 @@ return { name = "怀旧 Googol 游戏牌", text = { "出售此牌以复制", - "{C:attention}2{}张最左侧的小丑", + "{C:attention}2{} 张最左侧的小丑", "{C:inactive,s:0.8}不会复制怀旧 Googol 游戏牌{}", }, }, - j_cry_altgoogol_balanced = { - name = "怀旧 Googol 游戏牌", - text = { - "出售此卡以复制最左侧小丑{C:attention}#1#{}次", - "{C:inactive,s:0.8}不复制怀旧谷歌牌{}", - "{C:inactive}(必须有空间)", - }, - }, j_cry_antennastoheaven = { name = "7-4 如指向天堂的天线", text = { @@ -1369,7 +969,7 @@ return { j_cry_apjoker = { name = "AP 弹小丑", text = { - "对boss盲注提供{X:mult,C:white} X#1# {}倍率", + "对boss盲注提供{X:mult,C:white} X#1# {} 倍率", }, }, j_cry_arsonist = { @@ -1379,39 +979,23 @@ return { j_cry_astral_bottle = { name = "瓶中星球", text = { - "当出售时, 应用{C:dark_edition}星界{}", - "和{C:attention}易腐{}到一张", - "随机的{C:attention}小丑牌{}", - }, - }, - j_cry_astral_bottle_mainline = { - name = "瓶中星球", - text = { - "当出售时, 应用{C:dark_edition}星界{}", - "和{C:attention}易腐{}到一张", - "随机的{C:attention}小丑牌{}", - }, - }, - j_cry_astral_bottle_madness = { - name = "瓶中星球", - text = { - "当出售时, 应用{C:dark_edition}星界{}", - "和{C:attention}易腐{}到一张", - "到一张随机的{C:attention}小丑牌{}", + "当出售时, 应用 {C:dark_edition}星界{}", + "和{C:attention}易腐{} 到一张", + "随机的 {C:attention}小丑牌{}", }, }, j_cry_big_cube = { name = "大大方块", text = { - "{X:chips,C:white} X#1# {}筹码", + "{X:chips,C:white} X#1# {} 筹码", }, }, j_cry_biggestm = { name = "超大M", text = { - "{X:mult,C:white} X#1# {}倍率直到本轮结束", - "如果{C:attention}打出牌型{}", - "是一个{C:attention}#2#{}", + "{X:mult,C:white} X#1# {} 倍率直到本轮结束", + "如果 {C:attention}打出牌型{}", + "是一个 {C:attention}#2#{}", "{C:inactive}(当前 {C:attention}#3#{}{C:inactive}){}", "{C:inactive,s:0.8}不是胖,只是骨架大。", }, @@ -1420,7 +1004,7 @@ return { name = "黑名单", text = { "当手牌中有或者打出{C:attention}#1#{}时", - "{C:chips}筹码{}和{C:mult}倍率{}变为0", + "{C:chips}筹码{} 和 {C:mult}倍率{} 变为0", "如果牌组中没有{C:attention}#1#{},自毁", "{C:inactive,s:0.8}不会改变牌型等级", }, @@ -1429,7 +1013,7 @@ return { name = "Blender", text = { "使用{C:cry_code}代码牌{}时", - "获得一张{C:attention}随机{}消耗牌", + "获得一张 {C:attention}随机{}消耗牌", }, }, j_cry_blurred = { @@ -1450,7 +1034,7 @@ return { j_cry_bonkers = { name = "癫狂小丑", text = { - "如果打出的牌中包含", + "如果出的牌中包含", "一个 {C:attention}#2#", "{C:red}+#1#{} 倍率", }, @@ -1467,26 +1051,22 @@ return { j_cry_booster = { name = "补充包小丑", text = { - "商店{C:attention}+#1#{}补充包槽位", + "商店{C:attention}+#1#{} 补充包槽位", }, }, j_cry_boredom = { name = "无聊小丑", text = { "{C:green}#1# / #2#{} 概率", - "重新触发{C:attention}所有小丑牌{}和{C:attention}计分牌{}", + "率重新触发{C:attention}所有小丑牌{}和{C:attention}计分牌{}", "{C:inactive,s:0.8}无法触发{C:attention}无聊小丑{}{}", }, - unlock = { - "在标题界面", - "挂机{C:attention}10分钟", - }, }, j_cry_brittle = { name = "脆脆糖", text = { - "之后{C:attention}#1#{}次出牌,", - "随机添加{C:attention}石头{},{C:attention}黄金{},或{C:attention}钢铁{}增强到最右边的记分牌", + "之后 {C:attention}#1#{} 次出牌,", + "随机添加 {C:attention}石头{}, {C:attention}黄金{}, 或 {C:attention}钢铁{}增强到最右边的记分牌", }, }, j_cry_bubblem = { @@ -1501,49 +1081,42 @@ return { name = "巴士司机", text = { "{C:green}#1# / #3#{} 概率 {C:mult}+#2#{} 倍率", - "或{C:green}#4# / #3#{} 概率 {C:mult}-#2#{} 倍率", - }, - }, - j_cry_buttercup = { - name = "毛茛", - text = { - "可储存{C:attention}#1#{}个选中的商店物品", - "出售时:将储存的物品添加到下一个商店", + "或{C:green}1 /4{} 概率 {C:mult}-#2#{} 倍率", }, }, j_cry_candy_basket = { name = "糖果篮子", text = { - "卖掉这张牌获得{C:attention}#1#{}{C:cry_candy}张糖果", - "每击败{C:attention}2{}个盲注{C:attention}+#2#{}{C:cry_candy}糖果{}", - "击败{C:attention}Boss 盲注{}{C:attention}+#3#{}{C:cry_candy}糖果{}", + "卖掉这张牌获得 {C:attention}#1#{} {C:cry_candy}张糖果", + " 每击败 {C:attention}2{} 个盲注{C:attention}+#2#{} {C:cry_candy}糖果{}", + "击败{C:attention}Boss 盲注{}{C:attention}+#3#{} {C:cry_candy}糖果{}", }, }, j_cry_candy_buttons = { name = "纽扣糖", text = { - "之后的{C:attention}#1#{}次重掷", - "只花{C:money}$1{}", + "之后的 {C:attention}#1#{} 次重掷", + "只花 {C:money}$1{}", }, }, j_cry_candy_cane = { name = "拐杖糖", text = { - "之后{C:attention}#1#{}回合", - "打出的牌被{C:attention}重新触发{}时获得{C:money}$#2#", + "之后 {C:attention}#1#{} 回合", + " 打出的牌被{C:attention}重新触发{}时获得{C:money}$#2#", }, }, j_cry_candy_dagger = { name = "糖果匕首", text = { - "选择{C:attention}盲注{}后", - "摧毁它右边的小丑,创造一张{C:cry_candy}糖果{}小丑", + "选择 {C:attention}盲注{} 后", + "摧毁它左边的小丑,创造一张{C:cry_candy}糖果{}小丑", }, }, j_cry_candy_sticks = { name = "棒棒糖", text = { - "直到你打出{C:attention}#1#{}手牌", + "直到你打出 {C:attention}#1#{} 手牌", "下个Boss盲注的效果失效", }, }, @@ -1553,38 +1126,13 @@ return { "右侧每有一张{C:blue}稀有度高于普通{}的小丑", "所有左侧的小丑{C:attention}重新触发{}{C:attention}一次{}", }, - unlock = { - "在一手牌中", - "重新触发{C:attention}小丑{}", - "{C:attention}114次", - }, - }, - j_cry_canvas_balanced = { - name = "画布", - text = { - "右侧每有一张{C:blue}稀有度高于普通{}的小丑", - "所有左侧的小丑{C:attention}重新触发{}{C:attention}一次{}", - "{C:inactive}(最多2次重新触发)", - }, - unlock = { - "在一手牌中", - "重新触发{C:attention}小丑{}", - "{C:attention}114次", - }, }, j_cry_caramel = { name = "焦糖", text = { "每打出一张牌时", - "在得分时获得{X:mult,C:white}X#1#{}倍率", - "持续{C:attention}#2#{}回合", - }, - }, - j_cry_cat_owl = { - name = "猫头鹰", - text = { - "{C:attention}幸运牌{}同时算作{C:attention}回响牌", - "{C:attention}回响牌{}同时算作{C:attention}幸运牌", + "在得分时获得 {X:mult,C:white}X#1#{} 倍率", + "持续 {C:attention}#2#{} 回合", }, }, j_cry_chad = { @@ -1598,7 +1146,7 @@ return { name = "辣椒", text = { "回合结束时", - "这个小丑获得{X:mult,C:white} X#2# {}倍率", + "这个小丑获得{X:mult,C:white} X#2# {} 倍率", "{C:attention}#3#{}回合后自毁", "(当前{X:mult,C:white} X#1# {C:inactive}倍率)", }, @@ -1607,7 +1155,7 @@ return { name = "巧克力十面骰", text = { "击败Boss盲注后", - "投掷一个{C:green}d10{}的判定", + "投掷一个{C:green}d10{} 的判定", "去开始一个{C:cry_ascendant,E:1}事件{}", "{C:inactive}(当前: #1#)", }, @@ -1616,7 +1164,7 @@ return { name = "环形转轮", text = { "{X:dark_edition,C:white}^#1#{} 筹码, {X:dark_edition,C:white}^#1#{} 倍率", - "如果{C:attention}正好{}剩余#2#", + "如果{C:attention}正好{}剩余 #2#", "手牌", }, }, @@ -1628,72 +1176,20 @@ return { "{C:legendary}传奇{}小丑每个提供 {X:mult,C:white} X#3# {} 倍率", "{C:cry_exotic}域外{}小丑每个提供 {X:mult,C:white} X#4# {} 倍率", }, - unlock = { - "在{C:attention}底注9{}前获得", - "{C:red}稀有{}、{C:cry_epic}史诗{}和{C:legendary}传奇{}小丑", - }, }, j_cry_clash = { name = "冲突", text = { "如果打出的手牌包含", - "一个{C:attention}#2#", - "{X:mult,C:white} X#1# {}倍率", - }, - unlock = { - "赢得一局游戏", - "且最终打出的牌型为", - "{E:1,C:attention}至尊对子", - }, - }, - j_cry_the = { - name = " ", - text = { - "如果打出的手牌是{C:attention}#2#", - "{X:mult,C:white} X#1# {}倍率", - }, - unlock = { - "赢得一局游戏", - "且最终打出的牌型为", - "{E:1,C:attention}None", + "一个 {C:attention}#2#", + "{X:mult,C:white} X#1# {} 倍率", }, }, j_cry_clicked_cookie = { name = "被点击的饼干", text = { "{C:chips}+#1#{} 筹码", - "每次鼠标{C:attention}点击{}后,{C:chips}-#2#{} 筹码", - }, - }, - j_cry_clockwork = { - name = "发条小丑", - text = { - "每打出{C:attention}#9#{}{C:inactive}(#1#){}手牌重新触发持有的钢铁牌", - "每打出{C:attention}#10#{}{C:inactive}(#2#){}手牌获得{X:mult,C:white}X#6#{}(当前X#5#)倍率", - "每打出{C:attention}#11#{}{C:inactive}(#3#){}手牌将第一张打出的牌变为钢铁牌", - "每打出{C:attention}#12#{}{C:inactive}(#4#){}手牌使持有的钢铁牌提供+{X:mult,C:white}X#8#{}(当前X#7#)倍率", - }, - }, - j_cry_CodeJoker = { - name = "代码小丑", - text = { - "选择{C:attention}盲注{}时,", - "创建一张{C:dark_edition}负片{}{C:cry_code}代码牌{}", - }, - unlock = { - "发现所有", - "{C:cry_code}代码牌", - }, - }, - j_cry_CodeJoker_modest = { - name = "代码小丑", - text = { - "选择{C:attention}Boss盲注{}时,", - "创建一张{C:dark_edition}负片{}{C:cry_code}代码牌{}", - }, - unlock = { - "发现所有", - "{C:cry_code}代码牌", + "每当该小丑被{C:attention}点击{}时,{C:chips}-#2#{} 筹码", }, }, j_cry_coin = { @@ -1714,30 +1210,13 @@ return { text = { "使用{C:cry_code}代码牌{}时", "{C:green}#1# / #2#{}概率将其复制回消耗牌槽", - "{C:red}每回合最多一次{}", - "{C:inactive}(必须有空间)", - }, - }, - j_cry_copypaste_modest = { - name = "复制/粘贴", - text = { - "复制拉取的{C:cry_code}代码牌{}", - "{C:inactive}(必须有空间)", - }, - }, - j_cry_copypaste_madness = { - name = "复制/粘贴", - text = { - "使用{C:cry_code}代码牌{}时", - "{C:green}#1# / #2#{}概率将其复制回消耗牌槽", - "{C:inactive}(必须有空间)", }, }, j_cry_cotton_candy = { name = "棉花糖", text = { "出售后相邻的", - "{C:attention}小丑{}变为{C:dark_edition}负片{}", + "{C:attention}小丑{} 变为 {C:dark_edition}负片{}", }, }, j_cry_crustulum = { @@ -1770,10 +1249,6 @@ return { "{C:dark_edition,E:1}你无法逃脱...{}", "{C:inactive}(必须有槽位){}", }, - unlock = { - "获得一个{C:purple}永恒{}的", - "{C:attention}方尖石塔", - }, }, j_cry_cursor = { name = "光标", @@ -1786,37 +1261,23 @@ return { j_cry_cut = { name = "剪切", text = { - "在{C:attention}离开商店{}时", - "这张小丑随机摧毁一张{C:cry_code}代码牌{}", - "并且增加 {X:mult,C:white} X#1# {}倍率", + "在 {C:attention}离开商店{}时", + "这张小丑随机摧毁一张 {C:cry_code}代码牌{}", + "并且增加 {X:mult,C:white} X#1# {} 倍率", "{C:inactive}(当前已提供{X:mult,C:white} X#2# {C:inactive} 倍率)", }, }, j_cry_delirious = { name = "错乱小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:red}+#1#{} 倍率", }, }, - j_cry_demicolon = { - name = "分号", - text = { - "{C:attention}强制触发{}右侧的小丑", - }, - }, - j_cry_digitalhallucinations = { - name = "数字幻觉", - text = { - "打开{C:attention}补充包{}时,", - "有{C:green}#1#/#2#{}概率创建一张", - "与其{C:attention}类型{}对应的随机{C:dark_edition}负片{}牌", - }, - }, j_cry_discreet = { name = "低调小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:chips}+#1#{} 筹码", }, }, @@ -1824,49 +1285,38 @@ return { name = "涂鸦 M", text = { "当{C:attention}选择盲注{}时", - "创造2个随机{C:dark_edition}负片{}{C:attention}消耗牌{}", + "创造2个随机{C:dark_edition}负片{} {C:attention}消耗牌{}", "每有1个{C:attention}开心小丑{}创造1个额外的{C:attention}消耗牌", }, }, j_cry_dropshot = { name = "一杆入洞", text = { - "出牌时,每有一张{C:attention}不计分{}的{V:1}#2#{}牌", - "这张小丑牌增加{X:mult,C:white} X#1# {}倍率", + "出牌时,每有一张 {C:attention}不计分{}的 {V:1}#2#{}牌", + "这张小丑牌增加 {X:mult,C:white} X#1# {} 倍率", "花色每回合改变", "{C:inactive}(当前 {X:mult,C:white} X#3# {C:inactive} 倍率)", }, - unlock = { - "打出一手{C:attention}高牌{},", - "其中包含{C:attention}4张{}", - "同花色的牌", - }, }, j_cry_dubious = { name = "可疑小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:chips}+#1#{} 筹码", }, }, j_cry_duos = { name = "双重奏", text = { - "{X:mult,C:white} X#1# {}倍率如果出牌", + "{X:mult,C:white} X#1# {} 倍率如果出牌", "手牌包含{C:attention}#2#", }, - unlock = { - "赢一局", - "且不打出", - "{C:attention}两对{}", - }, }, j_cry_duplicare = { name = "复制", text = { - "当一张{C:attention}小丑{}或手牌计分时", - "这个小丑获得{X:mult,C:white} X#2# {}倍率", - "{C:inactive}(当前{X:mult,C:white} X#1# {C:inactive}倍率)", + "每张{C:attention}小丑牌{}给予", + "{X:dark_edition,C:white}^#1#{} 倍率", }, }, j_cry_effarcire = { @@ -1891,7 +1341,7 @@ return { name = "王牌均衡", text = { "小丑牌以{C:attention}收藏{}中的顺序出现", - "出牌时创造{C:attention}#1#{}张{C:dark_edition}负片{}小丑", + "出牌时创造{C:attention}#1#{} {C:dark_edition}负片{}小丑", "不会出现{C:cry_exotic,s:0.8}域外{C:inactive,s:0.8}或更稀有的小丑", "{s:0.8}最后生成的小丑: {C:attention,s:0.8}#2#", }, @@ -1905,31 +1355,23 @@ return { j_cry_eternalflame = { name = "永恒之火", text = { - "每{C:attention}出售{}一张售价至少为{C:money}$3{}的牌,", - "这张小丑获得{X:mult,C:white} X#1# {}倍率", - "(当前{X:mult,C:white} X#2# {C:inactive}倍率)", - }, - }, - j_cry_eternalflame2 = { - name = "永恒之火", - text = { - "每{C:attention}出售{}一张牌,", - "这张小丑获得{X:mult,C:white} X#1# {}倍率", + "每出售一张牌,", + "这张小丑获得{X:mult,C:white} X#1# {} 倍率", "(当前{X:mult,C:white} X#2# {C:inactive}倍率)", }, }, j_cry_exoplanet = { name = "系外行星", text = { - "每张{C:dark_edition}镭射{}卡提供{C:mult}+#1#{}倍率", + "每张{C:dark_edition}镭射{}卡提供{C:mult}+#1#{} 倍率", }, }, j_cry_exponentia = { name = "指数", text = { - "触发{X:red,C:white}X倍率{}时", - "这张小丑获得{X:dark_edition,C:white} ^#1# {}倍率", - "{C:inactive}(当前 {X:dark_edition,C:white} ^#2# {C:inactive}倍率)", + "触发 {X:red,C:white} X 倍率 {} 时", + "这张小丑获得 {X:dark_edition,C:white} ^#1# {} 倍率", + "{C:inactive}(当前 {X:dark_edition,C:white} ^#2# {C:inactive} 倍率)", }, }, j_cry_exposed = { @@ -1937,68 +1379,31 @@ return { text = { "重新触发{C:attention}非人头牌{} ", "额外{C:attention}#1#{}次", - "所有{C:attention}人头牌{}都被削弱", - }, - }, - j_cry_eyeofhagane = { - name = "叶钢之眼", - text = { - "所有打出的{C:attention}人头牌{}", - "计分时变为{C:attention}钢铁{}牌", - }, - }, - j_cry_highfive = { - name = "击掌", - text = { - "如果最高{C:attention}计分点数{}是{C:attention}5{},", - "将所有计分牌转换为{C:attention}5{}", - "{s:0.8,C:inactive}A算作1", + "所有 {C:attention}人头牌{} 都被削弱", }, }, j_cry_facile = { name = "简易", text = { - "{C:attention}#2#{}张及以下的牌得分", - "{X:dark_edition,C:white}^#1#{}倍率", + "{C:attention}#2#{} 张及以下的牌得分", + "{X:dark_edition,C:white}^#1#{} 倍率", "(重复触发算作多张)", }, }, - j_cry_fading_joker = { - name = "褪色小丑", - text = { - "当一张{C:attention}易腐{}牌被削弱时,", - "此小丑获得{X:mult,C:white}X#1#{}倍率", - "{C:inactive}(当前{} {X:mult,C:white}X#2#{} {C:inactive}倍率){}", - }, - }, - j_cry_familiar_currency = { - name = "熟悉货币", - text = { - "回合结束时创建一张{C:attention}梗小丑{}", - "消耗{C:money}$#1#{}(如果可能)", - "{C:inactive}(必须有空间)", - }, - }, j_cry_filler = { name = "填充物", text = { "", - "如果打出的牌中包含{C:attention}#2#", - "提供{X:mult,C:white} X#1# {}倍率", - }, - unlock = { - "赢一局", - "且不打出", - "{C:attention}高牌{}", + "如果出的牌中包含{C:attention}#2# 提供{X:mult,C:white} X#1# {} 倍率", }, }, j_cry_fleshpanopticon = { name = "血肉监牢", text = { - "{C:attention}Boss 盲注{}得分需求{C:red}X#1#{}", - "当{C:attention}Boss 盲注{}被击败后,", + "{C:attention}Boss 盲注{} 得分需求 {C:red}X#1#{}", + "当 {C:attention}Boss 盲注{} 被击败后,", "{C:red}自毁{}, 然后创建", - "一张{C:dark_edition}负片{}{C:spectral}真理之门{} ", + "一张 {C:dark_edition}负片{} {C:spectral}真理之门{} ", "{C:inactive,s:0.8}此等监牢……囚禁于吾?", }, }, @@ -2014,7 +1419,7 @@ return { name = "M当劳", text = { "{C:mult}+#1#{} 倍率", - "在 {C:attention}#2#{}回合中{C:red,E:2}自毁{}", + "在 {C:attention}#2#{} 回合中{C:red,E:2}自毁{}", "当{C:attention}开心小丑{}被{C:attention}出售{}时增加{C:attention}#3#{}回合", "{C:inactive,s:0.8}2 双层芝士,2 麦香鸡{}", "{C:inactive,s:0.8}1 大薯条,20 大蛋糕{}", @@ -2024,41 +1429,30 @@ return { name = "鲁莽小丑", text = { "如果打出的手牌包含", - "一个{C:attention}#2#", - "{C:red}+#1#{}倍率", - }, - }, - j_cry_undefined = { - name = "未定义小丑", - text = { - "{C:red}+#1#{}倍率", - "如果出牌是{C:attention}#2#", + "一个 {C:attention}#2#", + "{C:red}+#1#{} 倍率", }, }, j_cry_formidiulosus = { name = "驱邪", text = { - "获得{X:cry_cursed,C:white}诅咒{}小丑时,将其摧毁", - "离开商店时创造{C:attention}#1#{}张{C:dark_edition}负片{C:cry_candy}糖果{} ", - "每有一张{C:cry_candy}糖果{}小丑,{X:dark_edition,C:white}+^#2#{} 倍率", + "获得 {X:cry_cursed,C:white}诅咒{} 小丑时,将其摧毁", + "离开商店时创造 {C:attention}#1#{}张 {C:dark_edition}负片{C:cry_candy}糖果{} ", + "每有一张 {C:cry_candy}糖果{}小丑,{X:dark_edition,C:white}+^#2#{} 倍率", "{C:inactive}(当前 {X:dark_edition,C:white}^#3#{C:inactive} 倍率)", }, }, j_cry_foxy = { name = "奸猾小丑", text = { - "如果打出的牌中包含{C:attention}#2#", - "{C:chips}+#1#{}筹码", + "如果出的牌中包含 {C:attention}#2#", + "{C:chips}+#1#{} 筹码", }, }, j_cry_fractal = { name = "分形手指", text = { - "{C:attention}+#1#{}手牌选择上限", - }, - unlock = { - "打出一手{C:attention}同花顺{}", - "但该{C:attention}顺子{}不是{C:attention}同花", + "{C:attention}+#1#{} 手牌选择上限", }, }, j_cry_fspinner = { @@ -2073,15 +1467,15 @@ return { name = "烂逼小丑", text = { "如果打出的手牌包含", - "一个{C:attention}#2#", + "一个 {C:attention}#2#", "{C:red}+#1#{} 倍率", }, }, j_cry_gardenfork = { name = "7-1 小径分岔的花园", text = { - "打出的{C:attention}A{}和{C:attention}7{}", - "会在被计分时+{C:money}$#1#{}块钱", + "打出的{C:attention} A{} 和{C:attention} 7{}", + "会在被计分时+{C:money}$#1#{} 块钱", "{C:inactive,s:0.8}(一本书名,同时也捏他ultrakill关卡名)", }, }, @@ -2099,14 +1493,14 @@ return { text = { "回合结束后", "{C:green}#1# / #2#{} 几率 ", - "{C:attention}作祟{}一张随机的{C:attention}小丑", - "{C:green}#1# / #3#{} 几率{E:2,C:red}自毁{}", + "{C:attention}作祟{} 一张随机的 {C:attention}小丑", + "{C:green}#1# / #3#{} 几率{E:2,C:red}自毁 {}", }, }, j_cry_giggly = { name = "荒谬小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:red}+#1#{} 倍率", }, }, @@ -2122,11 +1516,7 @@ return { name = "Googol 游戏牌", text = { "{C:green}#1# / #2#{} 概率提供", - "{X:red,C:white} X#3# {}倍率", - }, - unlock = { - "在一次出牌中", - "获得至少{C:attention}1.0e100{}筹码", + "{X:red,C:white} X#3# {} 倍率", }, }, j_cry_happy = { @@ -2142,7 +1532,7 @@ return { name = "快乐之家", text = { "{X:dark_edition,C:white}^#1#{} 倍率当", - " {C:attention}114{}次出牌{}后", + " {C:attention}114{} 次出牌{}后", "{C:inactive}(当前 #2#/114){}", "{C:inactive,s:0.8}没有地方能比得上家!{}", }, @@ -2150,15 +1540,10 @@ return { j_cry_home = { name = "家园", text = { - "{X:mult,C:white} X#1# {}倍率", + "{X:mult,C:white} X#1# {} 倍率", "如果打出的手牌包含", "一个{C:attention}#2#", }, - unlock = { - "赢一局", - "且不打出", - "{C:attention}葫芦{}", - }, }, j_cry_hunger = { name = "消耗之牌", @@ -2167,24 +1552,17 @@ return { "获得{C:money}$#1#{}", }, }, - j_cry_huntingseason = { - name = "狩猎季节", - text = { - "如果打出的手牌正好有{C:attention}3张{}牌,", - "计分后{C:red}摧毁{}中间的牌", - }, - }, j_cry_iterum = { name = "再触", text = { "已经出过的牌重新触发{C:attention}#2#{}次", - "并且每张牌提供{X:mult,C:white} X#1# {}倍率", + "并且每张牌提供{X:mult,C:white} X#1# {} 倍率", }, }, j_cry_jawbreaker = { name = "硬糖", text = { - "击败{C:attention}Boss 盲注后{} ,", + "击败 {C:attention}Boss 盲注后{} ,", "让所有小丑数值变为{C:attention}两倍{} ", "{E:2,C:red}自毁{}", }, @@ -2194,13 +1572,9 @@ return { text = { "{C:attention}连续{}打出", "{C:attention}使用次数最多的牌型{}时", - "获得{X:mult,C:white} X#1# {}倍率", + "获得 {X:mult,C:white} X#1# {} 倍率", "{C:inactive}(当前{X:mult,C:white} X#2# {C:inactive}倍率)", }, - unlock = { - "仅使用{C:attention}单一类型的{}", - "{C:attention}扑克手牌{}赢得一局", - }, }, j_cry_jollysus = { name = "欢愉小丑…吗?", @@ -2211,35 +1585,19 @@ return { "{C:inactive}#1#{}", }, }, - j_cry_jtron = { - name = "吉姆波创9000", - text = { - "每个默认{C:attention}小丑{}使此小丑获得{X:dark_edition,C:white}^#1#{}倍率", - "{C:inactive}(当前{X:dark_edition,C:white}^#2#{}倍率)", - }, - }, j_cry_kidnap = { name = "绑架", text = { "{C:red}Outdated Description{}", "每回合结尾获得{C:money}$#2#{}", - "每卖掉一张不同的{C:attention}倍率{}或者{C:attention}筹码{}小丑时", + "每卖掉一张{C:attention}倍率{}或者{C:attention}筹码{}小丑时", "增加{C:money}$#1#{}", - "{C:inactive}(当前{C:money}$#2#{C:inactive})", - }, - }, - j_cry_kittyprinter = { - name = "猫咪打印机", - text = { - "{X:mult,C:white}X#1#{}倍率", - "所有{C:attention}跳过{}标签", - "变为{C:attention}猫咪标签{}", }, }, j_cry_kooky = { name = "怪诞小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:red}+#1#{} 倍率", }, }, @@ -2257,26 +1615,11 @@ return { "当击败{C:attention}Boss 盲注{}时", "使一张随机{C:attention}小丑{}获得{C:dark_edition}多彩{}版本", }, - unlock = { - "击败一个{C:attention}Boss盲注{}", - "同时拥有{C:attention}5{}张或更多", - "{C:attention}特殊版本卡牌{}或", - "{C:attention}小丑牌{}", - }, - }, - j_cry_lebaron_james = { - name = "勒布朗·詹姆斯", - text = { - "打出并计分的{C:attention}K{}会使本回合", - "手牌上限增加{C:attention}+#1#{}", - "并触发{C:attention}留在手牌中{}的效果", - "{C:inactive}(当前为{}{C:attention}+#2#{}{C:inactive})", - }, }, j_cry_lightupthenight = { name = "7-2 掌灯破暗", text = { - "每张 {C:attention}7{}或{C:attention}2{}", + "每张 {C:attention}7 {}或 {C:attention}2{},", "在计分时提供{X:mult,C:white}X#1#{}倍率", "{C:inactive,s:0.8}(捏他ultrakill关卡名)", }, @@ -2286,7 +1629,7 @@ return { text = { "在回合结束时", "给未来的", - "这张小丑牌{X:mult,C:white}X#1# {}倍率", + "这张小丑牌 {X:mult,C:white}X#1#{} 倍率", "{C:inactive}(当前 {X:mult,C:white}X#2#{C:inactive} 倍率){}", }, }, @@ -2303,22 +1646,22 @@ return { name = "幸运小丑", text = { "{C:attention}幸运牌{}成功触发时", - "+{C:money}$#1#{}", + "+ {C:money}$#1#{}", }, }, j_cry_luigi = { name = "路易吉", text = { "所有小丑提供", - "{X:chips,C:white} X#1# {}筹码", + "{X:chips,C:white} X#1# {} 筹码", }, }, j_cry_m = { name = "m", text = { "当{C:attention}开心小丑{}被售出时", - "这张小丑获得 {X:mult,C:white} X#1# {}倍率", - "{C:inactive}(当前 {X:mult,C:white} X#2# {C:inactive}倍率)", + "这张小丑获得 {X:mult,C:white} X#1# {} 倍率", + "{C:inactive}(当前 {X:mult,C:white} X#2# {C:inactive} 倍率)", }, }, j_cry_macabre = { @@ -2332,14 +1675,14 @@ return { name = "冰箱磁铁", text = { "回合结束时获得{C:money}$#1#{} ", - "如果有少于或等于{C:attention}#3#{}张小丑牌,获得{X:money,C:white} X#2#{}", + "如果有少于或等于{C:attention}#3#{} 张小丑牌,获得 {X:money,C:white} X#2# {}", "", }, }, j_cry_manic = { name = "狂躁小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:red}+#1#{} 倍率", }, }, @@ -2353,19 +1696,15 @@ return { j_cry_mask = { name = "面具", text = { - "{C:attention}人头牌{}额外触发{C:attention}#1#{}次", + "{C:attention}人头牌{}额外触发 {C:attention}#1#{} 次", "所有{C:attention}非人头牌{}被削弱", }, }, j_cry_maximized = { name = "速度拉满", text = { - "所有{C:attention}人头牌{}都当作是{C:attention}K{}", - "所有{C:attention}数字牌{}都当作是{C:attention}10s{}", - }, - unlock = { - "打出一手{C:attention}五张同花{}", - "且都是{C:attention}K{}", + "所有{C:attention}人头牌{}都当作是{C:attention}K{},", + "所有{C:attention}数字牌{}都当作是{C:attention}10s{},", }, }, j_cry_maze = { @@ -2379,33 +1718,24 @@ return { name = "南瓜糖", text = { "卖掉这张牌", - "所有的{C:attention}消耗牌{}售价{C:attention}X#1#倍", + "所有的{C:attention}消耗牌{} 售价 {C:attention}X#1#倍", }, }, j_cry_membershipcard = { name = "会员卡", text = { - "Cryptid Discord{}中的每个成员提供{X:mult,C:white}X#1#{} {C:attention}倍率", - "{C:inactive}(当前{X:mult,C:white}X#2#{C:inactive}倍率)", - "{C:blue,s:0.7}https://discord.gg/cryptid{}", + "Cryptid Discord{}中的每个成员提供{X:mult,C:white}X#1#{} {C:attention}倍率", + "{C:inactive}(当前{X:mult,C:white}X#2#{C:inactive} 倍率)", + "{C:blue,s:0.7}https://discord.gg/unbalanced{}", }, }, j_cry_membershipcardtwo = { - name = "老旧会员卡", --Could probably have a diff Name imo + name = "老旧会员卡", text = { "在{C:attention}Cryptid Discord{}中的每个成员", - "提供{C:chips}+#1#{}筹码", - "{C:inactive}(当前 {C:chips}+#2#{C:inactive}筹码)", - "{C:blue,s:0.7}https://discord.gg/cryptid{}", - }, - }, - j_cry_membershipcardtwo_balanced = { - name = "老旧会员卡", --Could probably have a diff Name imo - text = { - "每有{C:attention}8{}名{C:attention}Cryptid Discord{}成员,", - "获得{C:chips}+#1#{}筹码", - "{C:inactive}(当前为{C:chips}+#2#{C:inactive}筹码)", - "{C:blue,s:0.7}https://discord.gg/cryptid{}", + "提供{C:chips}+#1#{} Chips", + "{C:inactive}(当前 {C:chips}+#2#{C:inactive} 筹码)", + "{C:blue,s:0.7}https://discord.gg/unbalanced{}", }, }, j_cry_meteor = { @@ -2427,8 +1757,8 @@ return { name = "蒙德里安", text = { "若回合结束没有使用弃牌", - "该小丑获得{X:mult,C:white} X#1# {}倍率", - "{C:inactive}(当前{X:mult,C:white} X#2# {C:inactive}倍率)", + "该小丑获得{X:mult,C:white} X#1# {} 倍率", + "{C:inactive}(当前{X:mult,C:white} X#2# {C:inactive} 倍率)", }, }, j_cry_monkey_dagger = { @@ -2446,14 +1776,14 @@ return { text = { "{C:green}#1# / #2#{} 几率", "{C:attention}摧毁{}购买的牌", - "并且售出时{C:attention}金钱减半", + "并且售出时 {C:attention}金钱减半", }, }, j_cry_morse = { name = "摩尔斯电码", text = { - "在回合结尾获得{C:money}$#2#{}", - "每卖掉一张{C:attention}增强卡牌{}增加{C:money}$#1#{}", + "在回合结尾获得 {C:money}$#2#{}", + "每卖掉一张 {C:attention}增强卡牌{}增加 {C:money}$#1#{}", }, }, j_cry_mprime = { @@ -2461,16 +1791,16 @@ return { text = { "每回合结束时", "创造一张{C:attention}M 小丑{}", - "每个{C:attention}开心小丑{}或者{C:attention}M 小丑{}提供{X:dark_edition,C:white}^#1#{}倍率", - "每{C:attention}卖出{}一张{C:attention}开心小丑{}", - "额外提供{X:dark_edition,C:white}^#2#{}倍率", + "每个 {C:attention}开心小丑{}或者{C:attention}M 小丑{} 提供 {X:dark_edition,C:white}^#1#{} 倍率", + "每 {C:attention}卖出{}一张 {C:attention}开心小丑{}", + "额外提供 {X:dark_edition,C:white}^#2#{}倍率", "{C:inactive,s:0.8}(使徒·十三 除外)", }, }, j_cry_mstack = { name = "堆叠 M", text = { - "每出售{C:attention}#2#{}{C:inactive}[#3#]{}张{C:attention}开心小丑{}", + "每出售{C:attention}#2#{} {C:inactive}[#3#]{} {C:attention}开心小丑{}", "重新触发所有已打出的牌", "{C:inactive}(当前{}{C:attention:} #1#{}{C:inactive} 次重新触发){}", }, @@ -2487,21 +1817,21 @@ return { j_cry_necromancer = { name = "死灵法师", text = { - "当{C:attention}售出{}一张小丑且其售价大于{C:attention}$0{}时", - "获得一张{C:attention}本局游戏售出过的{}{C:attention}随机小丑牌{} ", - "并将其{C:attention}售价{}变为{C:attention}$0{}", + "当{C:attention}售出{}一张小丑且其售价大于 {C:attention}$0{} 时", + "获得一张 {C:attention}本局游戏售出过的{} {C:attention}随机小丑牌{} ", + "并将其 {C:attention}售价{} 变为 {C:attention}$0{}", }, }, j_cry_negative = { name = "负片小丑", text = { - "{C:dark_edition}+#1#{C:attention} 小丑{}槽", + "{C:dark_edition}+#1#{C:attention} 小丑{} 槽", }, }, j_cry_nice = { name = "nice", text = { - "如果出牌包含{C:attention}6{}和{C:attention}9{}", + "如果出牌包含 {C:attention}6{} 和 {C:attention}9{}", "筹码{C:chips}+#1#{}", "{C:inactive,s:0.8}nice{}", "", @@ -2533,7 +1863,7 @@ return { j_cry_number_blocks = { name = "数字块", text = { - "在回合结束时获得{C:money}$#1#{}", + "在回合结束时获得 {C:money}$#1#{}", "每持有一张{C:attention}#3#{}手牌", "增加{C:money}$#2#{}的奖励,", "每回合卡牌变化", @@ -2542,20 +1872,15 @@ return { j_cry_nuts = { name = "坚果", text = { - "{X:mult,C:white} X#1# {}倍率如果出牌", + "{X:mult,C:white} X#1# {} 倍率如果出牌", "手牌包含", "一个{C:attention}#2#", }, - unlock = { - "赢得一局游戏", - "且未打出过", - "{E:1,C:attention}同花顺", - }, }, j_cry_nutty = { name = "疯癫小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:red}+#1#{} 倍率", }, }, @@ -2563,7 +1888,7 @@ return { name = "油灯", text = { "回合结束后", - "右边{C:attention}小丑牌{}的数值{C:attention}x#1#{}", + "右边 {C:attention}小丑牌{}的数值 {C:attention}x#1#{}", }, }, j_cry_oldblueprint = { @@ -2578,13 +1903,13 @@ return { name = "怀旧糖果", text = { "售出这张牌可以永久获得", - "{C:attention}+#1#{}手牌上限", + "{C:attention}+#1#{} 手牌上限", }, }, j_cry_oldinvisible = { name = "怀旧隐形小丑", text = { - "每卖出{C:attention} 4 {}张小丑牌,随机复制{C:attention}一张{}小丑牌", + "每卖出 {C:attention} 4 {}张小丑牌,随机复制 {C:attention}一张{}小丑牌", "无法复制{s:0.8}怀旧隐形小丑{}(当前 #1#/4)", "", }, @@ -2595,13 +1920,6 @@ return { "所有出牌都视为本回合{C:attention}最后一次出牌{}", }, }, - j_cry_paved_joker = { - name = "铺路小丑", - text = { - "石头牌可以填补", - "{C:attention}顺子{}和{C:attention}同花{}中{C:attention}#1#{}点的间隔", - }, - }, j_cry_penetrating = { name = "渗透小丑", text = { @@ -2613,8 +1931,8 @@ return { j_cry_pickle = { name = "腌黄瓜", text = { - "当跳过{C:attention}盲注{}时,创造{C:attention}#1#{}个标签", - "当选择{C:attention}盲注{}时,则减少{C:red}#2#{} ", + "当跳过 {C:attention}盲注{} 时,创造{C:attention}#1#{} 个标签", + "当选择 {C:attention}盲注{} 时,则减少{C:red}#2#{} ", }, }, j_cry_pirate_dagger = { @@ -2630,73 +1948,23 @@ return { j_cry_pity_prize = { name = "遗憾奖", text = { - "当你跳过{C:attention}补充包{}时", - "获得一个随机的{C:attention}标签{}", - }, - }, - j_cry_pity_prize_modest = { - name = "遗憾奖", - text = { - "当跳过一个{C:attention}补充包{}时", - "获得一个随机{C:attention}标签{}", - "{C:red,E:2}自毁{}", - }, - }, - j_cry_pizza = { - name = "披萨", - text = { - "在{C:attention}#1#{} {C:inactive}[#2#]{}回合之后,", - "出售这个小丑可以创建{C:attention}#3#{}个披萨片", - }, - }, - j_cry_pizza_slice = { - name = "披萨片", - text = { - "当一个{C:attention}披萨片{}被出售时,", - "这张小丑获得{X:mult,C:white}X#1#{} 倍率", - "{C:inactive}(当前 {X:mult,C:white}X#2#{}{C:inactive} 倍率){}", + "当你跳过 {C:attention}补充包{} 获得一个随机的 {C:attention}标签{}", }, }, j_cry_pot_of_jokes = { name = "小丑之壶", text = { "{C:attention}#1#{}手牌上限,", - "每回合增加{C:blue}#2#{}", - }, - unlock = { - "将你的{C:attention}手牌上限{}", - "提升至{C:attention}12", - }, - }, - j_cry_poor_joker = { - name = "贫穷小丑", - text = { - "当一张{C:attention}租赁{}牌扣除金钱时,", - "此小丑获得{C:mult}+#1#{}倍率", - "{C:inactive}(当前{} {C:mult}+#2#{} {C:inactive}倍率){}", + "每回合增加{C:blue}#2#{} ", }, }, j_cry_primus = { name = "素数", text = { - "这张小丑获得 {X:dark_edition,C:white} ^#1# {}倍率", + "这张小丑获得 {X:dark_edition,C:white} ^#1# {} 倍率", "如果手中打出的所有牌都是", "{C:attention}A{}、{C:attention}2{}、{C:attention}3{}、{C:attention}5{} 或 {C:attention}7{}", - "{C:inactive}(当前 {X:dark_edition,C:white} ^#2# {C:inactive}倍率)", - }, - }, - j_cry_pumpkin = { - name = "南瓜", - text = { - "如果得分筹码至少达到所需筹码的{C:attention}50%{},则不会死亡", - "被{C:red}摧毁{}时变为{C:attention}雕刻南瓜", - }, - }, - j_cry_carved_pumpkin = { - name = "雕刻南瓜", - text = { - "接下来的{C:attention}#1#{}个Boss盲注", - "其能力将被{C:attention}禁用", + "{C:inactive}(当前 {X:dark_edition,C:white} ^#2# {C:inactive} 倍率)", }, }, j_cry_python = { @@ -2718,15 +1986,10 @@ return { j_cry_quintet = { name = "五重奏", text = { - "{X:mult,C:white} X#1# {}倍率如果出牌", + "{X:mult,C:white} X#1# {} 倍率如果出牌", "手牌包含", "一个{C:attention}#2#", }, - unlock = { - "赢得一局游戏", - "且最终打出的牌型为", - "{E:1,C:attention}五条", - }, }, j_cry_redbloon = { name = "红色气球", @@ -2737,8 +2000,8 @@ return { j_cry_redeo = { name = "回溯", text = { - "当花费{C:money}$#2#{}{C:inactive}($#3#){}时", - "{C:attention}-#1#{}底注", + "当花费{C:money}$#2#{} {C:inactive}($#3#){} 时", + "{C:attention}-#1#{} 底注", "每次使用{C:attention,s:0.8}指数增加{}花费", "{C:money,s:0.8}下次增加:{s:1,c:money}$#4#", }, @@ -2767,19 +2030,6 @@ return { text = { "每次{C:attention}底注{}时随机能力", }, - unlock = { - "{C:green}1 / 20{}的概率", - "在{C:attention}游戏结束{}时解锁此卡", - }, - }, - j_cry_rotten_egg = { - name = "臭鸡蛋", - text = { - "获得时,将所有当前和未来小丑的售价设置为{C:attention}$#1#{}", - "所有{C:attention}小丑{}的售价降低{C:attention}$#2#{}", - "回合结束时,从出售{C:attention}小丑{}中获得{C:attention}$#3#{} {C:inactive}[#4#]{}后,", - "{C:red}自毁{}", - }, }, j_cry_sacrifice = { name = "献祭", @@ -2797,13 +2047,13 @@ return { text = { "当{C:attention}#2#{} {C:inactive}[#1#]{} 张{C:attention}增强牌{}计分后", "卖掉此牌", - "以获得一张{C:cry_epic}史诗{}{C:attention}小丑{}", + "以获得一张{C:cry_epic}史诗{} {C:attention}小丑{}", }, }, j_cry_savvy = { name = "精明小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:chips}+#1#{} 筹码", }, }, @@ -2812,7 +2062,7 @@ return { text = { "当打出手牌时,", "会有{C:green}#1#/#2#{}几率生成一张", - "{C:dark_edition}欢愉{C:green}罕见{}小丑", + "{C:dark_edition}欢愉 {C:green}罕见{}小丑", }, }, j_cry_seal_the_deal = { @@ -2825,22 +2075,22 @@ return { j_cry_shrewd = { name = "敏锐小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:chips}+#1#{} 筹码", }, }, j_cry_silly = { name = "傻傻小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:red}+#1#{} 倍率", }, }, j_cry_smallestm = { name = "超小M", text = { - "打出{C:attention}#1#{}时", - "创造一个{C:cry_jolly}M 标签{}", + "打出 {C:attention}#1#{} 时", + "创造一个 {C:cry_jolly}M 标签{}", "{C:inactive,s:0.8}好吧,基本上我很小", }, }, @@ -2852,48 +2102,6 @@ return { "{C:attention}+#1#{} 手牌上限", "{C:attention}+#1#{} 消耗牌槽位", "{C:attention}+#1#{} 商店栏位", - "{C:attention}+#1#{} 优惠券槽位", - }, - unlock = { - "仅使用{C:attention}高牌{}", - "赢得一局游戏", - }, - }, - j_cry_soccer_balanced = { - name = "合众为一", - text = { - "{C:attention}+#1#{} 补充包槽位", - "{C:attention}+#1#{} 手牌上限", - "{C:attention}+#1#{} 消耗牌槽位", - "{C:attention}+#1#{} 商店栏位", - "{C:attention}+#1#{} 优惠券槽位", - }, - unlock = { - "仅使用{C:attention}高牌{}", - "赢得一局游戏", - }, - }, - j_cry_sock_and_sock = { - name = "袜子配袜子", - text = { - "重新触发所有打出的", - "{C:attention}抽象{}牌{C:attention}#1#{}次", - }, - }, - j_cry_brokenhome = { - name = "破碎家园", - text = { - "{X:mult,C:white}X#1#{}倍率", - "回合结束时", - "有{C:green}#2#/#3#{}的概率", - "摧毁此牌", - }, - }, - j_cry_yarnball = { - name = "毛线球", - text = { - "将最高等级{C:attention}猫咪标签{}的等级", - "添加到所有{C:green}列出的概率{}中", }, }, j_cry_spaceglobe = { @@ -2923,7 +2131,7 @@ return { j_cry_spy = { name = "间谍", text = { - "{X:mult,C:white} X#2# {}倍率, {C:dark_edition}+1{C:attention}小丑槽{} ", + "{X:mult,C:white} X#2# {} 倍率, {C:dark_edition}+1{C:attention} 小丑槽{} ", "{C:inactive} #1# 是间谍!", }, }, @@ -2934,19 +2142,12 @@ return { "每张提供{X:mult,C:white}X#1#{} 倍率", }, }, - j_cry_starfruit = { - name = "杨桃", - text = { - "{X:dark_edition,C:white}^#1#{} 倍率,", - "商店中每{C:attention}重掷{}一次,失去{X:dark_edition,C:white}^#2#{} 倍率", - }, - }, j_cry_stella_mortis = { name = "星逝", text = { "{C:attention}商店{}结束时", "摧毁一张随机{C:planet}星球{}牌", - "并在获得 {X:dark_edition,C:white} ^#1# {}倍率", + "并在获得 {X:dark_edition,C:white} ^#1# {} 倍率", "{C:inactive}(当前 {X:dark_edition,C:white} ^#2# {C:inactive} 倍率)", }, }, @@ -2955,18 +2156,13 @@ return { text = { "如果打出的手牌包含", "一个 {C:attention}#2#", - "{X:mult,C:white} X#1# {}倍率", - }, - unlock = { - "赢得一局游戏", - "且最终打出的牌型为", - "{E:1,C:attention}碉堡", + "{X:mult,C:white} X#1# {} 倍率", }, }, j_cry_subtle = { name = "微妙小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:chips}+#1#{} 筹码", }, }, @@ -2978,13 +2174,6 @@ return { "在回合结束时获得 {C:money}$#3#{}", }, }, - j_cry_supercell_balanced = { - name = "Supercell", - text = { - "{X:chips,C:white}X#2#{} 筹码, {X:mult,C:white}X#2#{} 倍率", - "在回合结束时获得 {C:money}$#3#{}", - }, - }, j_cry_sus = { name = "sus小丑", text = { @@ -2996,20 +2185,15 @@ return { j_cry_swarm = { name = "虫群", text = { - "{X:mult,C:white} X#1# {}倍率如果出牌", + "{X:mult,C:white} X#1# {} 倍率如果出牌", "手牌包含", "一个{C:attention}#2#", }, - unlock = { - "赢得一局游戏", - "且最终打出的牌型为", - "{E:1,C:attention}同花五条", - }, }, j_cry_sync_catalyst = { name = "同步催化剂", text = { - "平衡{C:chips}筹码{}和{C:mult}倍率{}", + "平衡 {C:chips}筹码{} 和 {C:mult}倍率{}", "{C:inactive,s:0.8}嘿!我之前见过这个!(等离子牌组效果)", }, }, @@ -3017,15 +2201,15 @@ return { name = "逃税", text = { "回合结束后", - "每有一个{C:attention}租用小丑{}", - "获得{C:attention}$#1#{}", + "每有一个 {C:attention}租用小丑{}", + "获得 {C:attention}$#1#{}", }, }, j_cry_tenebris = { name = "暗黑", text = { - "{C:dark_edition}+#1#{C:attention}小丑{}槽", - "在回合结束时获得{C:money}$#2#{}", + "{C:dark_edition}+#1#{C:attention} 小丑{}槽", + "在回合结束时获得 {C:money}$#2#{}", }, }, j_cry_translucent = { @@ -3040,59 +2224,23 @@ return { name = "诡谲小丑", text = { "如果打出的手牌包含", - "一个{C:attention}#2#", + "一个 {C:attention}#2#", "{C:chips}+#1#{} 筹码", }, }, - j_cry_nebulous = { - name = "朦胧小丑", - text = { - "如果打出的手牌是{C:attention}#2#{}", - "获得{C:chips}+#1#{}筹码", - }, - }, - j_cry_words_cant_even = { - name = "言语甚至无法描述的小丑", - text = { - "如果打出的手牌包含", - "一个{C:attention}#2#{}", - "获得{X:mult,C:white}X#1#{}倍率", - }, - }, - j_cry_many_lost_minds = { - name = "无数人因试图理解他而发狂的小丑", - text = { - "如果打出的手牌包含", - "一个{C:attention}#2#{}", - "获得{C:chips}+#1#{}筹码", - }, - }, - j_cry_annihalation = { - name = "彻底摧毁 Balatro 神圣的终极小丑", - text = { - "如果打出的手牌包含", - "一个{C:attention}#2#{}", - "获得{X:dark_edition,C:white}^#1#{}倍率", - }, - unlock = { - "赢得一局游戏", - "且最终打出的牌型为", - "{E:1,C:attention}#1#", - }, - }, j_cry_trick_or_treat = { name = "不给糖就捣蛋", text = { " {C:attention}出售时{}:", - "{C:green}#1# / #2#{} 几率创建 {C:attention}2{}个{C:cry_candy}糖果", - "否则创建一个{X:cry_cursed,C:white}诅咒小丑{} ", + "{C:green}#1# / #2#{} 几率创建 {C:attention}2{}个 {C:cry_candy}糖果", + "否则 创建一个 {X:cry_cursed,C:white}诅咒小丑{} ", "{C:inactive}(可以溢出)", }, }, j_cry_tricksy = { name = "诡诈小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:chips}+#1#{} 筹码", }, }, @@ -3101,7 +2249,7 @@ return { text = { "计分牌中刚好有", " {C:attention}3 张 3 {}时", - "提供{X:mult,C:white} X#1# {}倍率", + "提供{X:mult,C:white} X#1# {} 倍率", }, }, j_cry_tropical_smoothie = { @@ -3114,28 +2262,23 @@ return { j_cry_unity = { name = "团结", text = { - "{X:mult,C:white} X#1# {}倍率如果出牌", + "{X:mult,C:white} X#1# {} 倍率如果出牌", "手牌包含", "一个{C:attention}#2#", }, - unlock = { - "赢得一局游戏", - "且最终打出的牌型为", - "{E:1,C:attention}同花葫芦", - }, }, j_cry_universe = { name = "宇宙", text = { - "每张{C:dark_edition}星界{}", - "提供{X:dark_edition,C:white}^#1#{} 倍率", + "每张{C:dark_edition}星界{} ", + "提供 {X:dark_edition,C:white}^#1#{} 倍率", }, }, j_cry_universum = { name = "寰宇", text = { "{C:attention}牌型{}升级时获得", - "{X:red,C:white} X#1# {}倍率和{X:blue,C:white} X#1# {}筹码", + "{X:red,C:white} X#1# {} 倍率和 {X:blue,C:white} X#1# {} 筹码", }, }, j_cry_unjust_dagger = { @@ -3153,7 +2296,7 @@ return { text = { "当任何概率", "{C:green}成功{}触发时,", - "这张小丑获得{X:red,C:white}X倍率{}", + "这张小丑获得{X:red,C:white}X 倍率{}", "等于其列出的{C:attention}概率", "{C:inactive}(当前 {X:mult,C:white} X#1# {C:inactive} 倍率)", }, @@ -3161,17 +2304,17 @@ return { j_cry_virgo = { name = "室女座", text = { - "如果{C:attention}果出牌牌型{}包含一个{C:attention}#2#{}", - "该小丑增加{C:money}$#1#{}{C:attention}售价{}", + "如果 {C:attention}果出牌牌型{} 包含一个 {C:attention}#2#{}", + "该小丑增加 {C:money}$#1#{} {C:attention}售价{}", "出售这张牌时", - "每{C:money}$4{}的{C:attention}出售价值{}{C:dark_edition}创造一张多彩{}{C:attention}开心小丑{}", + "每 {C:money}$4{} 的 {C:attention}出售价值{}{C:dark_edition}创造一张多彩{} {C:attention}开心小丑{},", " {C:inactive}(至少 1){}", }, }, j_cry_wacky = { name = "搞怪小丑", text = { - "如果打出的牌中包含{C:attention}#2#", + "如果出的牌中包含 {C:attention}#2#", "{C:red}+#1#{} 倍率", }, }, @@ -3179,7 +2322,7 @@ return { name = "瓦路易吉", text = { "所有小丑提供", - "{X:mult,C:white} X#1# {}倍率", + "{X:mult,C:white} X#1# {} 倍率", }, }, j_cry_wario = { @@ -3193,7 +2336,7 @@ return { name = "微波那契数列", text = { "这个小丑获得", - "{C:mult}+#2#{}倍率,当打出的每张", + "{C:mult}+#2#{} 倍率,当打出的每张", "{C:attention}A{}, {C:attention}2{}, {C:attention}3{}, {C:attention}5{}, 或 {C:attention}8{}", "计分时", "{C:inactive}(当前 {C:mult}+#1#{C:inactive} 倍率)", @@ -3203,38 +2346,31 @@ return { name = "2D", text = { "每张计分的2", - "重新触发{C:attention:}#1#{}次", - "{C:inactive,s:0.8}我们身处游戏中吗{}", + "重新触发 {C:attention:}#1#{} 次", + "{C:inactive,s:0.8}我们身处游戏中吗 {}", }, }, j_cry_wheelhope = { name = "希望之轮", text = { "当{C:attention}命运之轮{}效果失败", - "这张牌获得{X:mult,C:white} X#1# {}倍率", + "这张牌获得{X:mult,C:white} X#1# {} 倍率", "{C:inactive}(当前{X:mult,C:white} X#2# {C:inactive} 倍率)", }, }, j_cry_whip = { name = "长鞭", text = { - "这张小丑获得{X:mult,C:white} X#1# {}倍率", - "如果{C:attention}出牌手牌{}包含", - "不同花色的{C:attention}2{}和{C:attention}7{}", + "这张小丑获得 {X:mult,C:white} X#1# {} 倍率", + "如果 {C:attention}出牌手牌{} 包含", + "不同花色的{C:attention}2{} 和 {C:attention}7{}", "{C:inactive}(当前 {X:mult,C:white} X#2# {C:inactive} 倍率)", }, }, - j_cry_wonka_bar = { - name = "Wonka 巧克力", - text = { - "出售此卡以永久获得", - "{C:attention}+#1#{}卡牌选择上限", - }, - }, j_cry_wrapped = { name = "包裹糖果", text = { - "{C:attention}#1#{}回合后", + "{C:attention}#1#{} 回合后", "创建一个随机的{C:attention}食物小丑{}", "{C:red,E:2}自毁{}", }, @@ -3243,13 +2379,8 @@ return { name = "我操!?", text = { "如果打出的手牌包含", - "一个{C:attention}#2#", - "{X:mult,C:white} X#1# {}倍率", - }, - unlock = { - "赢得一局游戏", - "且最终打出的牌型为", - "{E:1,C:attention}#1#", + "一个 {C:attention}#2#", + "{X:mult,C:white} X#1# {} 倍率", }, }, j_cry_zooble = { @@ -3263,7 +2394,6 @@ return { }, }, Other = { - banana = { name = "香蕉", text = { @@ -3277,20 +2407,12 @@ return { "{C:inactive,s:0.8}我讨厌这张牌- SDM_0, 2024{}", }, }, - cry_absolute = { - name = "绝对", - text = { - "不能出售", - "或被摧毁", - "{C:attention}不可移除{}", - }, - }, cry_azure_seal = { name = "蔚蓝蜡封", text = { "打出附带该蜡封的牌时", "{C:red}摧毁{}这张牌", - "之后创造{C:attention}#1#{}张{C:dark_edition}负片{}{C:planet}对应牌型的星球牌{}", + "之后创造 {C:attention}#1#{} 张 {C:dark_edition}负片{}{C:planet}对应牌型的星球牌{}", }, }, cry_banana_booster = { @@ -3330,43 +2452,21 @@ return { cry_flickering = { name = "闪烁", text = { - "{C:attention}#1#{}次触发后摧毁", + "{C:attention}#1#{} 次触发后摧毁", "{C:inactive}(剩余{C:attention}#2#{C:inactive} 次)", }, }, cry_flickering_desc = { name = "闪烁", text = { - "{C:attention}#1#{}次触发后摧毁", - }, - }, - cry_function_sticker = { - name = "函数://", - text = { - "使用后按顺序依次创建", - "{C:cry_code}#1#{}、{C:cry_code}#2#{}和{C:cry_code}#3#{}", - }, - }, - cry_function_sticker_desc = { - name = "函数://", - text = { - "创建一张", - "带有{C:cry_code}函数://{}贴纸的消耗牌", - "{C:inactive}当前:#1#、#2#和#3#{}", - }, - }, - cry_global_sticker = { - name = "全局", - text = { - "尽可能在其他牌之前", - "{C:cry_code}抽到此卡{}", + "{C:attention}#1#{} 次触发后摧毁", }, }, cry_green_seal = { name = "秩绿蜡封", text = { "仅当被打出且不计分时", - "创造一张{C:cry_code}代码{}卡牌", + "创造一张 {C:cry_code}代码{} 卡牌", "{C:inactive}(必须有空间)", }, }, @@ -3383,12 +2483,6 @@ return { "{C:attention,s:0.7}更新{s:0.7} 默认情况下被禁用 ({C:attention,s:0.7}HTTPS模块{s:0.7})", }, }, - cry_multiuse = { - name = "多次使用", - text = { - "{C:inactive}多次使用: ({C:inactive}剩余{C:cry_code}#1#{C:inactive}次)", - }, - }, cry_perishable_booster = { name = "易腐", text = { @@ -3405,7 +2499,7 @@ return { cry_perishable_voucher = { name = "易腐优惠券", text = { - "{C:attention}#1#{}回合后被削弱", + "{C:attention}#1#{} 回合后被削弱", "{C:inactive}({C:attention}#2#{C:inactive} 剩余)", }, }, @@ -3433,9 +2527,9 @@ return { cry_possessed = { name = "作祟", text = { - "{C:attention}禁用{}此牌效果", + "{C:attention}禁用{} 此牌效果", "如果可能的话{C:attention}反转{}此牌的效果", - "随着{C:attention}幽灵{}的摧毁而摧毁", + "随着 {C:attention}幽灵{}的摧毁而摧毁", }, }, cry_rental_booster = { @@ -3448,13 +2542,13 @@ return { cry_rental_consumeable = { name = "租赁消耗牌", text = { - "回合结束时和使用时失去{C:money}$#1#{}", + "回合结束时和使用时失去 {C:money}$#1#{}", }, }, cry_rental_voucher = { name = "租赁优惠券", text = { - "回合结束时失去{C:money}$#1#{}", + "回合结束时失去 {C:money}$#1#{}", }, }, cry_rigged = { @@ -3464,44 +2558,19 @@ return { "都{C:cry_code}必定触发", }, }, - disabled = { - name = "Disabled", - text = { - "不再在本局游戏中出现", - }, - }, - disabled_card_dependency = { - name = "Disabled", - text = { - "需要{C:attention}#1#", - }, - }, - disabled_mod_dependency = { - name = "Disabled", - text = { - "需要mod: {C:attention}#1#", - }, - }, - disabled_mod_conflict = { - name = "Disabled", - text = { - "与以下mod冲突:", - "{C:attention}#1#", - }, - }, ev_cry_choco0 = { name = "", text = { "激活事件后", - "{C:cry_ascendant,E:1}事件{}的具体信息将会出现", + "{C:cry_ascendant,E:1}事件{} 的具体信息将会出现", }, }, ev_cry_choco1 = { name = "1: 恶灵附身", text = { - "{C:attention}小丑牌{}和打出的牌有", + "{C:attention}小丑牌{} 和打出的牌有", "{C:green}1 / 3{} 几率获得闪烁", - "创造一张{C:attention}幽灵", + "创造一张 {C:attention}幽灵", "{C:inactive,s:0.7}你被幽灵附身了", "{C:inactive,s:0.7}意识时而清醒,时而模糊", }, @@ -3509,9 +2578,9 @@ return { ev_cry_choco10 = { name = "10: 珍贵古董", text = { - "一张售价{C:money}$50{}的{C:legendary}传奇{}{C:attention}小丑{} ", - "出现在商店{C:attention}优惠券{}槽位", - "只有作为商店{C:attention}最后一件物品{}时才能购买", + "一张售价{C:money}$50{}的 {C:legendary}传奇{} {C:attention}小丑{} ", + "出现在商店 {C:attention}优惠券{}槽位", + "只有作为商店 {C:attention}最后一件物品{} 时才能购买", "{C:inactive,s:0.7}你已经引起了遗物之灵的注意,", "{C:inactive,s:0.7}但想要平息它,可没那么简单", }, @@ -3519,9 +2588,9 @@ return { ev_cry_choco2 = { name = "2: 鬼屋", text = { - "不能跳过{C:attention}盲注{}", - "商店中只能{C:attention}重掷{}一次", - "{C:attention}优惠券{}售价翻倍", + "不能跳过 {C:attention}盲注{}", + "商店中只能 {C:attention}重掷{} 一次", + "{C:attention}优惠券{} 售价翻倍", "{C:inactive,s:0.7}幽灵们已经占领这里!", "{C:inactive,s:0.7}千万别碰任何东西,快点逃出去!", }, @@ -3529,9 +2598,9 @@ return { ev_cry_choco3 = { name = "3: 女巫药剂", text = { - "创造3个{C:attention}魔药", + "创造3个 {C:attention}魔药", "在{C:attention}小盲注{}结束前使用其中之一", - "否则{C:attention}所有的{}减益效果都会在这个{C:attention}底注{}生效", + "否则 {C:attention}所有的{} 减益效果都会在这个{C:attention}底注{}生效", "{C:inactive,s:0.7}你被女巫绑架了!", "{C:inactive,s:0.7}她盯着你,递上三瓶药剂", "{C:inactive,s:0.7}选一个吧,不然她可要替你做决定了。", @@ -3540,9 +2609,9 @@ return { ev_cry_choco4 = { name = "4: 月之深渊", text = { - "打出的牌有{C:green}1 / 4{} 几率", - "变为随机的{C:club}梅花{}人头牌", - "将{C:attention}倍率{}除以打出人头牌的数量", + "打出的牌有 {C:green}1 / 4{} 几率", + "变为随机的 {C:club}梅花{} 人头牌", + "将 {C:attention}倍率{} 除以打出人头牌的数量", "{C:inactive,s:0.7}即便是心地善良、", "{C:inactive,s:0.7}夜晚虔诚祈祷之人……", }, @@ -3550,11 +2619,11 @@ return { ev_cry_choco5 = { name = "5: 吸血鬼", text = { - "移除所有打出的牌的{C:attention}增强{} ", + "移除所有打出的牌的 {C:attention}增强{} ", "并有{C:green}1 / 3{} 几率摧毁", - "{C:heart}红桃{}和{C:diamond}方块{}卡牌", + "{C:heart}红桃{} 和 {C:diamond}方块{} 卡牌", "{C:inactive,s:0.7}夜深人静时,你必须更加谨慎,", - "{C:inactive,s:0.7,E:1}因为它们在阴影中{C:inactive,s:0.7}伺机满足自己的饥渴……", + "{C:inactive,s:0.7,E:1}因为它们在阴影中{C:inactive,s:0.7} 伺机满足自己的饥渴……", }, }, ev_cry_choco6 = { @@ -3568,9 +2637,9 @@ return { ev_cry_choco7 = { name = "7: 节日气氛", text = { - "创建三个{C:attention}不给糖就捣蛋{}和一个{C:attention}糖果篮子", - "每回合商店有一个{C:attention}不给糖就捣蛋{}", - "获得{C:cry_candy}糖果{}时,得到{C:money}$3{}", + "创建三个 {C:attention}不给糖就捣蛋{} 和一个 {C:attention}糖果篮子", + "每回合商店有一个 {C:attention}不给糖就捣蛋{}", + "获得{C:cry_candy}糖果{} 时,得到{C:money}$3{}", "{C:inactive,s:0.7}整个社区都为恐怖的盛会装饰一新,", "{C:inactive,s:0.7}快来享受这节日气氛吧!", }, @@ -3578,8 +2647,8 @@ return { ev_cry_choco8 = { name = "8: 糖果雨", text = { - "击败{C:attention}盲注{}后, 每剩余一次出牌获得 1 个{C:cry_candy}糖果{}", - "当获得一个{C:cry_candy}糖果{}后,获得一个{C:attention}食物小丑{}", + "击败 {C:attention}盲注{} 后, 每剩余一次出牌获得 1 个{C:cry_candy}糖果{}", + "当获得一个{C:cry_candy}糖果{}后,获得一个 {C:attention}食物小丑{}", "{C:inactive,s:0.7}糖果从天而降!", "{C:inactive,s:0.7,E:1}快点,抓住你能抓到的所有糖果!", }, @@ -3587,8 +2656,8 @@ return { ev_cry_choco9 = { name = "9: 鬼魅财富", text = { - "获得{C:money}$20", - "所有赚到的{C:money}钱{}都变为{C:attention}双倍", + "获得 {C:money}$20", + "所有赚到的 {C:money}钱{} 都变为 {C:attention}双倍", "{C:inactive,s:0.7}你已故亲戚的幽灵在午夜时分来访!", "{C:inactive,s:0.7}他们默默地将一袋钱放在你的手中,", "{C:inactive,s:0.7}温暖一笑,随即化为虚影消散在空气中~", @@ -3611,70 +2680,61 @@ return { "{s:0.8}玉米片,幽灵可乐,汉堡,披萨", }, }, - p_cry_baneful_1 = { - name = "诅咒小丑包", - text = { - "从最多{C:attention}#2#张{X:cry_cursed,C:white}诅咒{}小丑中", - "选择{C:attention}#1#张{}", - "{C:attention}跳过{}将{C:red}移除{}", - "最右侧拥有的小丑", - }, - }, p_cry_code_jumbo_1 = { name = "巨型代码包", text = { - "选择{C:attention}#1#{}张最多", - "{C:attention}#2#{C:cry_code}代码{}卡牌", + "选择 {C:attention}#1#{} 张最多", + "{C:attention}#2#{C:cry_code} 代码{} 卡牌", }, }, p_cry_code_mega_1 = { name = "超级代码包", text = { - "选择{C:attention}#1#{}张最多", - "{C:attention}#2#{C:cry_code}代码{}卡牌", + "选择 {C:attention}#1#{} 张最多", + "{C:attention}#2#{C:cry_code} 代码{} 卡牌", }, }, p_cry_code_normal_1 = { name = "代码补充包", text = { - "选择{C:attention}#1#{}张最多", - "{C:attention}#2#{C:cry_code}代码{}卡牌", + "选择 {C:attention}#1#{} 张最多", + "{C:attention}#2#{C:cry_code} 代码{} 卡牌", }, }, p_cry_code_normal_2 = { name = "代码补充包", text = { - "选择{C:attention}#1#{}张最多", - "{C:attention}#2#{C:cry_code}代码{}卡牌", + "选择 {C:attention}#1#{} 张最多", + "{C:attention}#2#{C:cry_code} 代码{} 卡牌", }, }, p_cry_empowered = { name = "究极幻灵包", text = { - "选择{C:attention}#1#{}张,最多", - "{C:attention}#2#{C:spectral}幻灵{}牌", + "选择 {C:attention}#1#{} 张,最多", + "{C:attention}#2#{C:spectral} 幻灵{}牌", "{s:0.8,C:inactive}(由强化标签生成)", }, }, p_cry_meme_1 = { name = "玩梗包1", text = { - "选择{C:attention}#1#{}张,最多", - "可达{C:attention}#2#张玩梗的小丑{}", + "选择 {C:attention}#1#{} 张,最多", + "可达 {C:attention}#2# 张玩梗的小丑{}", }, }, p_cry_meme_three = { name = "玩梗包3", text = { - "选择{C:attention}#1#{}张,最多", - "可达{C:attention}#2#张玩梗的小丑{}", + "选择 {C:attention}#1#{} 张,最多", + "可达 {C:attention}#2# 张玩梗的小丑{}", }, }, p_cry_meme_two = { name = "玩梗包2", text = { - "选择{C:attention}#1#{}张,最多", - "可达{C:attention}#2#张玩梗的小丑{}", + "选择 {C:attention}#1#{} 张,最多", + "可达 {C:attention}#2# 张玩梗的小丑{}", }, }, undiscovered_code = { @@ -3698,7 +2758,7 @@ return { c_cry_Kaikki = { name = "Kaikki", text = { - "({V:1}等级#4#{})({V:2}等级#5#{})({V:3}等级#6#{})", + "({V:1}等级.#4#{})({V:2}等级.#5#{})({V:3}等级.#6#{})", "升级", "{C:attention}#1#{},", "{C:attention}#2#{},", @@ -3709,7 +2769,7 @@ return { c_cry_Klubi = { name = "Klubi", text = { - "({V:1}等级#4#{})({V:2}等级#5#{})({V:3}等级#6#{})", + "({V:1}等级.#4#{})({V:2}等级.#5#{})({V:3}等级.#6#{})", "升级", "{C:attention}#1#{},", "{C:attention}#2#{},", @@ -3720,7 +2780,7 @@ return { c_cry_Lapio = { name = "Lapio", text = { - "({V:1}等级#4#{})({V:2}等级#5#{})({V:3}等级#6#{})", + "({V:1}等级.#4#{})({V:2}等级.#5#{})({V:3}等级.#6#{})", "升级", "{C:attention}#1#{},", "{C:attention}#2#{},", @@ -3731,7 +2791,7 @@ return { c_cry_Sydan = { name = "Sydan", text = { - "({V:1}等级#4#{})({V:2}等级#5#{})({V:3}等级#6#{})", + "({V:1}等级.#4#{})({V:2}等级.#5#{})({V:3}等级.#6#{})", "升级", "{C:attention}#1#{},", "{C:attention}#2#{},", @@ -3739,10 +2799,10 @@ return { "(芬兰语Heart)", }, }, - c_cry_Timantii = { - name = "Timantii", + c_cry_Timantti = { + name = "Timantti", text = { - "({V:1}等级#4#{})({V:2}等级#5#{})({V:3}等级#6#{})", + "({V:1}等级.#4#{})({V:2}等级.#5#{})({V:3}等级.#6#{})", "升级", "{C:attention}#1#{},", "{C:attention}#2#{},", @@ -3753,7 +2813,7 @@ return { c_cry_asteroidbelt = { name = "小行星带", text = { - "{S:0.8}({S:0.8,V:1}等级#1#{S:0.8}){} 升级", + "{S:0.8}({S:0.8,V:1}等级.#1#{S:0.8}){} 升级", "{C:attention}#2#", "{C:mult}+#3#{} 倍率和", "{C:chips}+#4#{} 筹码", @@ -3762,7 +2822,7 @@ return { c_cry_marsmoons = { name = "火卫一和土卫二", text = { - "{S:0.8}({S:0.8,V:1}等级#1#{S:0.8}){} 升级", + "{S:0.8}({S:0.8,V:1}等级.#1#{S:0.8}){} 升级", "{C:attention}#2#", "{C:mult}+#3#{} 倍率和", "{C:chips}+#4#{} 筹码", @@ -3777,15 +2837,6 @@ return { "{C:inactive}(当前{C:attention} #1#{C:inactive}){}", }, }, - c_cry_nibiru = { - name = "尼比鲁", - text = { - "{S:0.8}({S:0.8,V:1}等级#1#{S:0.8}){} 升级", - "{C:attention}#2#", - "{C:mult}+#3#{} 倍率和", - "{C:chips}+#4#{} 筹码", - }, - }, c_cry_planetlua = { name = "星球.lua", text = { @@ -3797,7 +2848,7 @@ return { c_cry_universe = { name = "TM的整个宇宙!", text = { - "{S:0.8}({S:0.8,V:1}等级#1#{S:0.8}){} 升级", + "{S:0.8}({S:0.8,V:1}等级.#1#{S:0.8}){} 升级", "{C:attention}#2#", "{C:mult}+#3#{} 倍率和", "{C:chips}+#4#{} 筹码", @@ -3806,27 +2857,16 @@ return { c_cry_void = { name = "虚空", text = { - "{S:0.8}({S:0.8,V:1}等级#1#{S:0.8}){} 升级", + "{S:0.8}({S:0.8,V:1}等级.#1#{S:0.8}){} 升级", "{C:attention}#2#", "{C:mult}+#3#{} 倍率和", "{C:chips}+#4#{} 筹码", }, }, - c_cry_voxel = { - name = "Voxel", - text = { - "({V:1}等级#4#{})({V:2}等级#5#{})({V:3}等级#6#{})", - "升级", - "{C:attention}#1#{},", - "{C:attention}#2#{},", - "以及{C:attention}#3#{}", - "{C:inactive,S:0.8}(译者注:升级的为使用{C:cry_code}://声明{}创建的牌型)", - }, - }, c_cry_sunplanet = { name = "太阳", text = { - "{S:0.8}({S:0.8,V:1}等级#1#{S:0.8}){}", + "{S:0.8}({S:0.8,V:1}等级.#1#{S:0.8}){}", "使{C:attention}晋升{}牌型的指数", "增加{X:gold,C:white}#2#{}", "{C:inactive}(目前指数 {X:gold,C:white}X(#3#^晋升数){C:inactive})", @@ -3834,32 +2874,10 @@ return { }, }, Sleeve = { - sleeve_cry_beige_sleeve = { - name = "四重牌套", - text = { - "{C:attention}普通{}小丑具有", - "{C:attention}四倍{}的效果", - }, - }, - sleeve_cry_beige_sleeve_alt = { - name = "四重牌套", - text = { - "{C:attention}罕见{}小丑具有", - "{C:attention}四倍{}的效果", - }, - }, - sleeve_cry_beta_sleeve = { - name = "怀旧牌套", - text = { - "{C:attention}小丑牌槽{}和{C:attention}消耗牌槽{}", - "{C:attention}合并", - "boss底注被替换为它们的怀旧版本", - }, - }, sleeve_cry_bountiful_sleeve = { name = "丰饶牌套", text = { - "每次{C:attention}出牌{}或{C:attention}弃牌{}后", + "每次{C:attention}出牌{} 或 {C:attention}弃牌{}后", "固定抽五张牌", }, }, @@ -3867,32 +2885,32 @@ return { name = "CCD 牌套", text = { "每张卡牌也是", - "一张{C:attention}随机{}消耗牌", + "一张 {C:attention}随机{} 消耗牌", }, }, sleeve_cry_conveyor_sleeve = { name = "传送带牌套", text = { - "{C:attention}不能{}移动小丑卡", + "{C:attention}不能{} 移动小丑卡", "回合开始时,", - "{C:attention}复制{}最右边的小丑卡", - "并且{C:attention}销毁{}最左边的小丑卡", + "{C:attention}复制{} 最右边的小丑卡", + "并且 {C:attention}销毁{} 最左边的小丑卡", }, }, sleeve_cry_critical_sleeve = { name = "暴击牌套", text = { "每打出一手牌后,", - "{C:green}1/4{}几率获得{X:dark_edition,C:white} ^2 {}倍率", - "{C:green}1/8{}几率获得{X:dark_edition,C:white} ^0.5 {}倍率", + "{C:green}四分之一{} 的几率获得 {X:dark_edition,C:white} ^2 {} 倍", + "{C:green}八分之一{} 的几率获得 {X:dark_edition,C:white} ^0.5 {} 倍", }, }, sleeve_cry_encoded_sleeve = { name = "编码牌套", text = { - "开始时获得一张{C:cry_code,T:j_cry_curse_sob}代码小丑卡{}", - "和一张{C:cry_code,T:j_cry_copypaste}复制/粘贴{}", - "商店中只出现{C:cry_code}代码牌{}", + "开始时获得一张 {C:cry_code,T:j_cry_CodeJoker}代码小丑卡{}", + "和一张 {C:cry_code,T:j_cry_copypaste}复制/粘贴卡{}", + "商店中只出现 {C:cry_code}代码牌{}", }, }, sleeve_cry_equilibrium_sleeve = { @@ -3904,26 +2922,17 @@ return { "{C:attention,T:v_overstock_plus}+2 商店栏位", }, }, - sleeve_cry_glowing_sleeve = { - name = "发光牌组", - text = { - "在击败Boss盲注时,", - "所有小丑牌的数值乘以{X:dark_edition,C:white}X1.25{}", - "{X:cry_jolly,C:white,s:0.8} Jolly#1#Open#1#Winner#1#-#1#wawa#1#person", - }, - }, - sleeve_cry_infinite_sleeve = { name = "无限牌套", text = { - "你可以选择{C:attention}任意数量", + "你可以选择 {C:attention}任意数量", "的卡牌", }, }, sleeve_cry_legendary_sleeve = { name = "传奇牌套", text = { - "以一张{C:legendary}传奇{C:legendary}小丑牌开始", + "以一张 {C:legendary}传奇{C:legendary} 小丑牌开始", "击败Boss盲注后", "{C:green}1 / 5{} 几率创建另外一张", "{C:inactive}(必须有空间){}", @@ -3933,53 +2942,31 @@ return { name = "错印牌套", text = { "卡牌的数值", - "是{C:attention}随机{}的", + "是 {C:attention}随机{} 的", }, }, sleeve_cry_redeemed_sleeve = { name = "赎回牌套", text = { - "当购买{C:attention}优惠券{}时,", - "会获得对应{C:attention}高级{}版", + "当购买{C:attention}优惠券{} 时,", + "会获得对应 {C:attention}高级{} 版", }, }, sleeve_cry_spooky_sleeve = { name = "万圣节牌套", text = { - "以一张{C:eternal}永恒{}{C:attention,T:j_cry_chocolate_dice}巧克力骰{}开始", - "每个{C:attention}底注{}结束后,", - "创建一个{C:cry_candy}糖果{}或{X:cry_cursed,C:white}诅咒{}", - }, - }, - sleeve_cry_very_fair_sleeve = { - name = "超平衡的牌组", - text = { - "每回合{C:blue}-2{}手牌,{C:red}-2{}弃牌", - "{C:attention}优惠券{}不再出现在商店中", + "以一张{C:eternal}永恒{} {C:attention,T:j_cry_chocolate_dice}巧克力骰{}开始", + "每次{C:attention}底注{}之后 ", + "创建一个{C:cry_candy}糖果{}或 {X:cry_cursed,C:white}诅咒{}", }, }, sleeve_cry_wormhole_sleeve = { name = "虫洞牌套", text = { - "开始时获得一张{C:cry_exotic}域外{C:attention}小丑卡", - "小丑牌{C:attention}20倍{}更有可能成为{C:dark_edition}负片{}", - "{C:attention}-2{}小丑牌槽位", - }, - }, - sleeve_cry_antimatter_sleeve = { - name = "反物质牌套", - text = { - "拥有{C:attention}所有{}牌套的", - "{C:attention}增益{}和{C:attention}特殊增益{}效果", - "{C:red}WIP", - }, - }, - sleeve_cry_antimatter_sleeve_balanced = { - name = "Antimatter Sleeve", - text = { - "拥有{C:attention}所有{}在{C:gold}金注{}中获胜过的", - "牌组的{C:attention}增益{}和{C:attention}特殊增益{}效果", - "{C:red}WIP", + "开始时获得一张 {C:cry_exotic}域外{C:attention} 小丑卡", + "小丑卡 {C:attention}20倍{} 更有可能", + "成为 {C:dark_edition}负片{} 卡", + "{C:attention}-2{} 小丑卡插槽", }, }, }, @@ -3987,35 +2974,36 @@ return { c_cry_adversary = { name = "敌手", text = { - "拥有的{C:red}所有{}{C:attention}小丑牌{}变为{C:dark_edition}负片{},", + "拥有的{C:red}所有{} {C:attention}小丑牌{} 变为 {C:dark_edition}负片{},", "本局游戏的小丑牌购买价格{C:red}翻倍{}", }, }, c_cry_analog = { name = "模拟", text = { - "为一个随机{C:attention}小丑{}生成{C:attention}#1#{}张复制", - "摧毁所有其他小丑,{C:attention}+#2#{}底注", + "复制 {C:attention}#1#{} 张", + "随机 {C:attention}小丑{}", + "摧毁所有其他小丑,{C:attention}+#2#{} 底注", }, }, c_cry_chambered = { name = "腔室", text = { - "随机复制{C:attention}#1#{}张{C:dark_edition}负片{}版本", + "随机复制 {C:attention}#1#{}张 {C:dark_edition}负片{}版本", "的{C:attention}持有{}的消耗牌", }, }, c_cry_conduit = { name = "渠道", text = { - "交换两张所选择的小丑或手牌的{C:attention}版本{}", + "交换两张所选择的小丑或手牌的 {C:attention}版本{}", }, }, c_cry_gateway = { name = "真理之门", text = { "生成一张随机的", - "{C:cry_exotic,E:1}域外{C:attention}小丑{}", + "{C:cry_exotic,E:1}域外{C:attention} 小丑{}", "摧毁所有其他小丑", }, }, @@ -4029,16 +3017,16 @@ return { c_cry_lock = { name = "锁定", text = { - "从{C:red}所有{}小丑中,", - "移除{C:red}所有{}贴纸", - "然后随机给一张小丑牌增加{C:purple,E:1}永恒{}贴纸", + "从 {C:red}所有{} 小丑中,", + "移除 {C:red}所有{} 贴纸", + "然后随机给一张小丑牌增加 {C:purple,E:1}永恒{}贴纸", }, }, c_cry_pointer = { name = "://指针", text = { "创造一张", - "任选{C:cry_code}卡牌", + "任选 {C:cry_code}卡牌", "{C:inactive,s:0.8}(域外小丑 #1# 排除)", "(输入对应名字)", }, @@ -4047,91 +3035,85 @@ return { name = "复录", text = { "转换所有手牌", - "为一张{C:attention}随机{}", + "为一张 {C:attention}随机{}", "手牌", }, }, c_cry_ritual = { name = "仪典", text = { - "增强{C:attention}#1#{}张选定的卡牌", - "为{C:dark_edition}负片{}, {C:dark_edition}马赛克{}", - "或{C:dark_edition}星界{}", + "增强 {C:attention}#1#{} 张选定的卡牌", + "为 {C:dark_edition}负片{}, {C:dark_edition}马赛克{}", + "或 {C:dark_edition}星界{} ", }, }, c_cry_source = { name = "源码", text = { - "向你手中的{C:attention}#1#{}张选定的牌", - "添加{C:cry_code}绿色蜡封{}", + "向你手中的", + "{C:attention}#1#{} 选定卡牌", + "添加一个 {C:cry_code}绿色蜡封{}", }, }, c_cry_summoning = { name = "召唤", text = { "创造一张随机的", - "{C:cry_epic}史诗{}{C:joker}小丑{},摧毁", - "一张随机{C:joker}小丑{}", + "{C:cry_epic}史诗{} {C:joker}小丑{},摧毁", + "一张随机 {C:joker}小丑{}", }, }, c_cry_trade = { name = "交易", text = { - "{C:attention}失去{}1张随机优惠券,", - "获得{C:attention}2{}张随机优惠券", + "{C:attention}失去{} 一张随机优惠券,", + "获得 {C:attention}2{} 张随机优惠券", }, }, c_cry_typhoon = { name = "台风", text = { - "向你手中的{C:attention}#1#{}张选定的牌", - "添加{C:cry_azure}蔚蓝蜡封{}", + "向手中 {C:attention}#1#{} 选择的", + "牌中添加 {C:cry_azure}蔚蓝蜡封{}", }, }, c_cry_meld = { name = "融合", text = { - "选择一张{C:attention}小丑{}或", - "{C:attention}扑克牌{}将其变成", - "{C:dark_edition}双面{}", + "选择一张 {C:attention}小丑{} 或", + "{C:attention}扑克牌{} 将其变成", + "{C:dark_edition}双面{} ", }, }, c_cry_vacuum = { name = "虚空", text = { - "从{C:red}所有{}手中的牌,", - "移除{C:red}所有{C:green}修改{}", - "每移除一个{C:green}修改{},获得{C:money}$#1#{}", + "从 {C:red}所有{} 手中的牌,", + "移除 {C:red}所有 {C:green}修改{}", + "每移除一个 {C:green}修改{},获得 {C:money}$#1#{}", "{C:inactive,s:0.7}(例如: 强化、蜡封、版本)", }, }, c_cry_white_hole = { name = "白洞", text = { - "升级{C:legendary,E:1}最常用{}扑克牌型{C:attention}4{}级", - "{C:attention}移除{}所有其他手牌等级", - }, - }, - c_cry_white_hole2 = { - name = "白洞", - text = { - "{C:attention}移除{}所有手牌等级,", - "升级{C:legendary,E:1}最常用{}扑克牌型", + "{C:attention}移除{} 所有手牌等级,", + "升级 {C:legendary,E:1}最常用{} 扑克牌型", "每移除1级,最常用牌型升{C:attention}3{}级", }, }, }, Stake = { stake_cry_amber = { - colour = "琥珀", + colour = "Amber", name = "琥珀注", text = { - "商店的{C:attention}补充包-1{}", + "商店的{C:attention}补充包-1{} ", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_ascendant = { - colour = "飞升", + colour = "Ascendant", name = "飞升注", text = { "商店栏位{C:attention}-1{}", @@ -4139,7 +3121,7 @@ return { }, }, stake_cry_azure = { - colour = "蔚蓝", + colour = "Azure", name = "蔚蓝注", text = { "所有小丑牌的数值降低", @@ -4148,58 +3130,59 @@ return { }, }, stake_cry_blossom = { - colour = "花锦", + colour = "Blossom", name = "花锦注", text = { "{C:attention}最终{}Boss版盲注可以出现在", "{C:attention}任何{}底注中", "{s:0.8,C:inactive}之前所有赌注也都起效{}", + "", }, }, stake_cry_bronze = { - colour = "青铜", + colour = "Bronze", name = "青铜注", text = { - "优惠券价格增加{C:attention}50%{}", + "优惠券价格增加 {C:attention}50%{}", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_brown = { - colour = "棕色", + colour = "Brown", name = "棕色注", text = { - "所有的{C:attention}贴纸(如永恒,易腐,租赁){}互相兼容", + "所有的 {C:attention}贴纸(如永恒,易腐,租赁){} 互相兼容", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_crimson = { - colour = "猩红", + colour = "Crimson", name = "猩红注", text = { - "优惠券只会在{C:attention}双数{}底注时刷新", + "优惠券只会在 {C:attention}双数{} 底注 时刷新", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_cyan = { - colour = "靛青", + colour = "Cyan", name = "靛青注", text = { - "{C:green}罕见{}和{C:red}稀有{}小丑牌出现", - "概率降低", + "{C:green}罕见的{} 和 {C:red}稀有的{} 小丑牌出现概率", + "减少", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_dawn = { - colour = "黎明", + colour = "Dawn", name = "黎明注", text = { - "塔罗牌和幻灵牌的选择目标{C:attention}减 1{}", + "塔罗牌和幻灵牌的选择目标 {C:attention}减 1{}", "{s:0.8,C:inactive}(最少 1 张){}", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_diamond = { - colour = "钻石", + colour = "Diamond", name = "钻石注", text = { "获胜的底注变成{C:attention}10{}", @@ -4207,7 +3190,7 @@ return { }, }, stake_cry_ember = { - colour = "余烬", + colour = "Ember", name = "余烬注", text = { "所有卡牌出售时不再产生金钱", @@ -4215,65 +3198,65 @@ return { }, }, stake_cry_emerald = { - colour = "翡翠", + colour = "Emerald", name = "翡翠注", text = { - "卡牌、包和优惠券可以是{C:attention}面朝下{}的", + "卡牌、包和优惠券可以是 {C:attention}面朝下{} 的", "{s:0.8,C:inactive}(购买前无法查看)", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_glass = { - colour = "玻璃", + colour = "Glass", name = "玻璃注", text = { - "卡牌在得分时可能会被{C:attention}摧毁", + "卡牌在得分时可能会被 {C:attention}摧毁", "{}{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_gray = { - colour = "灰色", + colour = "Gray", name = "灰色注", text = { - "重新投掷的费用每次增加{C:attention}$2{}", + "重新投掷的费用每次增加 {C:attention}$2{}", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_horizon = { - colour = "地平线", + colour = "Horizon", name = "地平线注", text = { "选择盲注时,增加一张", - "{C:attention}随机卡牌{}到牌堆", + "{C:attention}随机卡牌{} 到牌堆", " {s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_jade = { - colour = "碧玉", + colour = "Jade", name = "碧玉注", text = { - "抽取手牌时有概率是{C:attention}面朝下{}的", + "抽取手牌时有概率是 {C:attention}面朝下{} 的", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_pink = { - colour = "粉红", + colour = "Pink", name = "粉红注", text = { - "{C:attention}底注{}提升时,过关需求分数再次增速", + " {C:attention}底注 {}提升时,过关需求分数再次增速", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_platinum = { - colour = "铂金", + colour = "Platinum", name = "铂金注", text = { - "小盲注{C:attention}不会出现{}", + "小盲注 {C:attention}不会出现{}", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_quartz = { - colour = "石英", + colour = "Quartz", name = "石英注", text = { "商店有可能出现{C:attention}固定{}小丑牌", @@ -4282,25 +3265,25 @@ return { }, }, stake_cry_ruby = { - colour = "红玉", + colour = "Ruby", name = "红玉注", text = { - "{C:attention}大{}盲注有可能变为", - "{C:attention}Boss{}盲注", + "{C:attention}大{} 盲注有可能变为", + "{C:attention}Boss{} 盲注", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_sapphire = { - colour = "蓝晶", + colour = "Sapphire", name = "蓝晶注", text = { - "在底注结束时,失去当前总资金的{C:attention}25%{}", - "{s:0.8,C:inactive}(最高失去至$10)", + "在 底注 结束时,失去当前总资金的 {C:attention}25%{} ", + "{s:0.8,C:inactive}(最高失去至 $10)", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_twilight = { - colour = "暮光", + colour = "Twilight", name = "暮光注", text = { "商店有可能出现{C:attention}香蕉{}小丑牌", @@ -4309,15 +3292,15 @@ return { }, }, stake_cry_verdant = { - colour = "翠绿", + colour = "Verdant", name = "翠绿注", text = { - "所需分数会随每个{C:attention}底注加速增加", + "所需分数会随每个 {C:attention}底注加速增加", "{s:0.8,C:inactive}之前所有赌注也都起效{}", }, }, stake_cry_yellow = { - colour = "灿黄", + colour = "Yellow", name = "灿黄注", text = { "{C:attention}永恒,易腐,租赁等贴纸{}", @@ -4331,7 +3314,7 @@ return { name = "星界标签", text = { "下一张在商店里的小丑", - "增加{C:dark_edition}星界版本{}并且免费", + "增加 {C:dark_edition}星界版本{}并且免费", }, }, tag_cry_banana = { @@ -4350,7 +3333,7 @@ return { tag_cry_bettertop_up = { name = "进阶充值标签", text = { - "创造{C:attention}#1#张{C:green}罕见{}小丑", + "创造 {C:attention}#1#张{C:green}罕见{}小丑", "{C:inactive}(必须有空间){}", }, }, @@ -4364,16 +3347,16 @@ return { tag_cry_booster = { name = "增强包标签", text = { - "下一个{C:cry_code}增强包{}有", - "{C:attention}双倍{}卡牌数量", - "{C:attention}双倍{}选择次数", + "下一个 {C:cry_code}增强包{} 有", + "{C:attention}双倍{} 卡牌数量", + "{C:attention}双倍{} 选择次数", }, }, tag_cry_bundle = { name = "组合标签", text = { - "创造一个{C:attention}标准标签{},{C:tarot}吊饰标签{},", - "{C:attention}小丑标签{},和{C:planet}流星标签", + "创造一个 {C:attention}标准标签{},{C:tarot}吊饰标签{},", + "{C:attention}小丑标签{},和 {C:planet}流星标签", }, }, tag_cry_cat = { @@ -4390,24 +3373,17 @@ return { "{C:cry_code}代码包", }, }, - tag_cry_clone = { - name = "克隆标签", - text = { - "商店物品价格为原来的{C:attention}X#1#{}倍,", - "获得下一张购买卡牌的{C:attention}复制{}", - }, - }, tag_cry_double_m = { name = "M标签", text = { - "商店增加一张{C:legendary}M系列小丑{}", + "商店增加一张 {C:legendary}M系列小丑{}", }, }, tag_cry_empowered = { name = "强化标签", text = { - "给予一个{C:spectral}究极幻灵{}包", - "包括{C:legendary,E:1}灵魂{}和{C:cry_exotic,E:1}真理之门{}", + "给予一个 {C:spectral}究极幻灵{} 包", + "包括 {C:legendary,E:1}灵魂{} 和 {C:cry_exotic,E:1}传送门{}", }, }, tag_cry_epic = { @@ -4421,14 +3397,14 @@ return { name = "赌徒标签", text = { "{C:green}#1# / #2#{} 的几率", - "创造一个{C:cry_exotic,E:1}强化{}标签", + "创造一个 {C:cry_exotic,E:1}强化{} 标签", }, }, tag_cry_glass = { name = "琉璃标签", text = { "下一张在商店里的小丑", - "增加{C:dark_edition}灰质琉璃{}版本并且免费", + "增加 {C:dark_edition}灰质琉璃{}版本并且免费", }, }, tag_cry_glitched = { @@ -4442,7 +3418,7 @@ return { name = "鎏金标签", text = { "下一张在商店里的小丑", - "增加{C:dark_edition}鎏金版本{}并且免费", + "增加 {C:dark_edition}鎏金版本{}并且免费", }, }, tag_cry_gourmand = { @@ -4459,25 +3435,18 @@ return { "的{C:cry_ascendant}玩梗{}包", }, }, - tag_cry_lens = { - name = "透镜标签", - text = { - "将{C:dark_edition}负片{}效果", - "添加至{C:attention}#1#{}个随机消耗牌上", - }, - }, tag_cry_m = { name = "欢愉~标签", text = { "下一张在商店里的小丑", - "增加{C:dark_edition}欢愉{}版本并且免费", + "增加 {C:dark_edition}欢愉{}版本并且免费", }, }, tag_cry_memory = { name = "记忆标签", text = { - "创造{C:attention}#1#{}份", - "本局游戏上一次使用的{C:attention}标签{}", + "创造 {C:attention}#1#{} 份", + "本局游戏上一次使用的 {C:attention}标签{}", "{s:0.8,C:inactive}复制类标签除外", "{s:0.8,C:inactive}当前: {s:0.8,C:attention}#2#", }, @@ -4486,36 +3455,29 @@ return { name = "马赛克标签", text = { "下一张在商店里的小丑", - "增加{C:dark_edition}马赛克版本{}并且免费", + "增加 {C:dark_edition}马赛克版本{}并且免费", }, }, tag_cry_oversat = { name = "过曝标签", text = { "下一张在商店里的小丑", - "增加{C:dark_edition}过曝版本{}并且免费", - }, - }, - tag_cry_palette_cleanser = { - name = "清洁标签", - text = { - "从{C:attention}随机{}一个小丑或扑克牌上", - "移除一个{C:attention}随机{}贴纸", + "增加 {C:dark_edition}过曝版本{}并且免费", }, }, tag_cry_quadruple = { name = "四方标签", text = { - "给予{C:attention}#1#{}份", - "下一个选择的{C:attention}标签", + "给予 {C:attention}#1#{} 份", + "下一个选择的 {C:attention}标签", "{s:0.8,C:inactive}复制类标签除外", }, }, tag_cry_quintuple = { name = "五重标签", text = { - "给予{C:attention}#1#{}份", - "下一个选择的{C:attention}标签", + "给予 {C:attention}#1#{} 份", + "下一个选择的 {C:attention}标签", "{s:0.8,C:inactive}复制类标签除外", }, }, @@ -4523,14 +3485,14 @@ return { name = "重制标签", text = { "商店有一张", - "{C:dark_edition}#1#{C:cry_code}#2#", + "{C:dark_edition}#1# {C:cry_code}#2#", }, }, tag_cry_schematic = { name = "原理图标签", text = { "下个商店有一张", - "{C:attention}头脑风暴{}", + "{C:attention}头脑风暴{} ", }, }, tag_cry_scope = { @@ -4543,8 +3505,8 @@ return { tag_cry_triple = { name = "三连标签", text = { - "给予{C:attention}#1#{}份", - "下一个选择的{C:attention}标签", + "给予 {C:attention}#1#{} 份", + "下一个选择的 {C:attention}标签", "{s:0.8,C:inactive}复制类标签除外", }, }, @@ -4553,38 +3515,31 @@ return { c_cry_automaton = { name = "机械人", text = { - "创造{C:attention}#1#", - "随机{C:cry_code}代码{}卡", + "创造 {C:attention}#1#", + "随机 {C:cry_code}代码{} 卡", "{C:inactive}(必须有空间)", }, }, c_cry_eclipse = { name = "日食", text = { - "增强{C:attention}#1#{}张选定的卡牌", - "为{C:attention}回响卡", - }, - }, - c_cry_instability = { - name = "不稳定性", - text = { - "将{C:attention}#1#{}张选定卡牌", - "增强为{C:attention}抽象牌", + "增强 {C:attention}#1#{} 张选定的卡牌", + "为 {C:attention}回响卡", }, }, c_cry_theblessing = { name = "祝福", text = { - "创造{C:attention}1{}", - "随机{C:attention}消耗牌{}", + "创造 {C:attention}1{}", + "随机 {C:attention}消耗牌{}", "{C:inactive}(必须有空间){}", }, }, c_cry_seraph = { name = "六翼天使", text = { - "增强{C:attention}#1#{}张选定的手牌", - "为{C:attention}明亮牌", + "增强 {C:attention}#1#{} 张选定的手牌", + "为 {C:attention}明亮牌", }, }, }, @@ -4592,7 +3547,7 @@ return { c_cry_potion = { name = "魔药", text = { - "使用后获取一种未知的", + "使用后获取一种未知的 ", "{C:attention}魔力{}", "{C:inactive,s:0.7}从巧克力骰子中获取", }, @@ -4602,21 +3557,13 @@ return { v_cry_asteroglyph = { name = "星象文字", text = { - "设置底注为{C:attention}#1#{}", - }, - unlock = { - "到达底注", - "{C:attention}36", + "设置底注为 {C:attention}#1#{}", }, }, v_cry_blankcanvas = { name = "空白画布", text = { - "{C:attention}+#1#{}手牌上限", - }, - unlock = { - "将你的{C:attention}手牌上限", - "降至{C:attention}0", + "{C:attention}+#1#{} 手牌上限", }, }, v_cry_clone_machine = { @@ -4624,13 +3571,13 @@ return { text = { "双倍标签变成", "{C:attention}五重标签{},并且", - " {C:attention}4X{}常见", + " {C:attention}4X{} 常见", }, }, v_cry_command_prompt = { name = "命令提示符", text = { - "{C:cry_code}代码{}牌可以", + "{C:cry_code}代码{} 牌可以", "出现在 {C:attention}商店{}", }, }, @@ -4639,43 +3586,34 @@ return { text = { "双倍标签变成", "{C:attention}三连标签{},并且", - "是 {C:attention}2X{}常见", + "是 {C:attention}2X{} 常见", }, }, v_cry_curate = { name = "策展", text = { "所有牌出现时均", - "带有{C:dark_edition}版本{}", - }, - unlock = { - "发现所有", - "{C:attention}版本", + "带有 {C:dark_edition}版本{}", }, }, v_cry_dexterity = { name = "灵巧", text = { "永久", - "每回合获得{C:blue}+#1#{}出牌", - }, - unlock = { - "累计打出", - "{C:attention}5000张{}", - "{C:attention}扑克牌{}", + "每回合获得 {C:blue}+#1#{} 手牌", }, }, v_cry_double_down = { name = "双倍下注", text = { "每轮之后,", - " {C:dark_edition}双面{}牌背面的所有数值{X:dark_edition,C:white} X1.5 {}", + " {C:dark_edition}双面{} 牌背面的所有数值 {X:dark_edition,C:white} X1.5 {}", }, }, v_cry_double_slit = { name = "成对裂隙", text = { - "{C:attention}融合{}可以", + "{C:attention}融合{} 可以", "出现在商店和", "秘术包中", }, @@ -4683,24 +3621,20 @@ return { v_cry_double_vision = { name = "重影", text = { - "{C:dark_edition}双面{}牌出现", - "{C:attention}4X{}更频繁", + "{C:dark_edition}双面{} 牌出现", + "{C:attention}4X{} 更频繁", }, }, v_cry_fabric = { name = "宇宙结构", text = { - "{C:dark_edition}+#1#{}小丑槽", - }, - unlock = { - "累计兑换{C:dark_edition}反物质{}优惠券", - "{C:attention}10次{}", + "{C:dark_edition}+#1#{} 小丑槽", }, }, v_cry_grapplinghook = { name = "抓钩", text = { - "{C:attention}+#1#{}牌", + "{C:attention}+#1#{} 牌", "选择限制", "{C:inactive,s:0.7}你可以用它做很多事情,比你想象的要多得多。{}", }, @@ -4708,7 +3642,7 @@ return { v_cry_hyperspacetether = { name = "超时空钩锁", text = { - "{C:attention}+#1#{}牌", + "{C:attention}+#1#{} 牌", "选择限制", "{C:inactive,s:0.7}注意:未来会有额外的{}", "{C:inactive,s:0.7}功能{}", @@ -4720,48 +3654,30 @@ return { "商店中的所有牌和包", "费用为 {C:attention}$1{}", }, - unlock = { - "在一局中", - "兑换{C:attention}25个{}", - "{C:attention}优惠券", - }, }, v_cry_moneybean = { name = "金钱魔豆", text = { "提高每轮获得的", - "利息上限至{C:money}$#1#{}", - }, - unlock = { - "在{C:attention}一整局中{}", - "达到{C:attention}利息收益{}上限", + "利息上限至 {C:money}$#1#{}", }, }, v_cry_overstock_multi = { name = "多重库存", text = { - "{C:attention}+#1#{}卡槽和", - "{C:attention}+#1#{}补充包槽", + "{C:attention}+#1#{} 卡槽和", + "{C:attention}+#1#{} 补充包槽", "在商店中可用", }, - unlock = { - "在一局中", - "在商店花费{C:attention}1000$", - }, }, v_cry_pacclimator = { name = "星球适应器", text = { - "{C:planet}星球{}牌出现的概率", - "{C:attention}X#1#{}", + "{C:planet}星球{} 牌出现的概率", + "{C:attention}X#1#{} ", "购买此优惠券后本赛局所有", "{C:planet}星球{}牌都{C:green}免费{}", }, - unlock = { - "在商店中", - "累计购买{C:attention}100张{}", - "{C:planet}星球{}牌", - }, }, v_cry_pairamount_plus = { name = "至高山巅", @@ -4773,40 +3689,35 @@ return { v_cry_pairing = { name = "配对", text = { - "{C:attention}重新触发{}所有 M 小丑", - "如果出牌是{C:attention}对子", + "{C:attention}重新触发{} 所有 M 小丑", + "如果出牌是 {C:attention}一对", }, }, v_cry_quantum_computing = { name = "量子计算", text = { - "{C:cry_code}代码{}牌生成时概率", - "带有{C:dark_edition}负片{}版本", + "{C:cry_code}代码{} 牌生成时概率", + "带有 {C:dark_edition}负片{} 版本", }, }, v_cry_repair_man = { name = "修理工", text = { - "{C:attention}重新触发{}所有 M 小丑", - "如果出牌包含{C:attention}一对", + "{C:attention}重新触发{} 所有 M 小丑", + "如果出牌包含 {C:attention}一对", }, }, v_cry_rerollexchange = { name = "重掷交换", text = { "所有重掷", - "费用{C:attention}$2{}", - }, - unlock = { - "在一局中", - "{C:attention}重掷{}商店", - "共计{C:attention}250次{}", + "费用 {C:attention}$2{}", }, }, v_cry_satellite_uplink = { name = "卫星串联", text = { - "{C:cry_code}代码{}牌可能", + "{C:cry_code}代码{} 牌可能", "出现在任何", "{C:attention}天体包{}中", }, @@ -4814,8 +3725,8 @@ return { v_cry_scope = { name = "银河望远镜", text = { - "为出牌{C:attention}牌型{}", - "创造对应{C:planet}星球牌{}", + "为出牌创造 {C:planet}星球", + "{C:attention}牌型{}", "{C:inactive}(必须有空间){}", }, }, @@ -4823,41 +3734,31 @@ return { name = "粘粘手", text = { "选择限制", - "{C:attention}+#1#{}牌", + "{C:attention}+#1#{} 牌", }, }, v_cry_tacclimator = { name = "塔罗适应器", text = { - "{C:tarot}塔罗{}牌出现的概率", - "{C:attention}X#1#{}", + "{C:tarot}塔罗{} 牌出现的概率", + "{C:attention}X#1#{} ", "购买此优惠券后本赛局所有", "{C:tarot}塔罗{}牌都{C:green}免费{}", }, - unlock = { - "在商店中", - "累计购买{C:attention}100张{}", - "{C:tarot}塔罗{}牌", - }, }, v_cry_tag_printer = { name = "标签打印机", text = { "双倍标签变成", "{C:attention}四方标签{},并且", - " {C:attention}3X{}常见", + " {C:attention}3X{} 常见", }, }, v_cry_threers = { name = "读,写,算", text = { "永久", - "每回合获得{C:red}+#1#{}弃牌", - }, - unlock = { - "累计弃掉", - "{C:attention}5000张{}", - "{C:attention}扑克牌{}", + "每回合获得 {C:red}+#1#{} 弃牌", }, }, }, @@ -4877,7 +3778,7 @@ return { ach_cry_jokes_on_you = "在底注 1上触发笑料boss的效果并赢得比赛", ach_cry_niw_uoy = "达到底注 -8", ach_cry_now_the_fun_begins = "获得画布", - ach_cry_patience_virtue = "在打出第一手牌之前等待薰衣草环2分钟并击败盲注", + ach_cry_patience_virtue = "在打出第一手牌之前等待薰衣草环 2分钟并击败盲注", ach_cry_perfectly_balanced = "使用超平衡牌组击败飞升注", ach_cry_pull_request = "让 ://提交 生成它摧毁的相同小丑", ach_cry_traffic_jam = "击败所有高峰时段挑战", @@ -4925,13 +3826,9 @@ return { b_flip = "翻转", b_merge = "融合", b_pull = "拉取", - b_reset_gameset_modest = "重设游戏集设置(Modest)", - b_reset_gameset_mainline = "重设游戏集设置(Mainline)", - b_reset_gameset_madness = "重设游戏集设置(Madness)", b_unique_cards = "独特牌", cry_active = "激活", cry_again_q = "再来?", - cry_circus_generic = "{V:#1#}#2#{}每个小丑给予{X:mult,C:white} X#3# {}倍率", cry_code_apply = "应用", cry_code_apply_previous = "应用之前的", cry_code_cancel = "取消", @@ -4939,10 +3836,7 @@ return { cry_code_create_previous = "创建之前的", cry_code_enh = "输入增强", cry_code_enter_card = "输入一张牌", - cry_code_enter_hand = "输入扑克牌型", - cry_code_empty = "[声明手牌]", cry_code_execute = "执行", - cry_code_exit = "离开", cry_code_exploit = "利用", cry_code_exploit_previous = "利用之前的", cry_code_hand = "输入扑克手牌", @@ -4982,14 +3876,6 @@ return { cry_feat_tags = "标签", ["cry_feat_timer mechanics"] = "计时器机制", cry_feat_vouchers = "优惠券", - cry_gameset_explanation = { - "选择游戏集配置选项以应用于此卡。", - }, - cry_gameset_disabled = "已禁用", - cry_gameset_exp = "实验性内容", - cry_gameset_exp_modest = "实验性内容(Modest)", - cry_gameset_exp_mainline = "实验性内容(Mainline)", - cry_gameset_exp_madness = "实验性内容(Madness)", cry_gaming = "游戏中", cry_gaming_ex = "开赌!", cry_good_luck_ex = "祝你好运!", @@ -5025,12 +3911,6 @@ return { cry_sobbing = "救救我...", cry_sus_ex = "骗子!", cry_unredeemed = "Unredeemed...", - cry_view_set_contents = "查看集合中的项目", - cry_code_antevoucher = "接下来的Boss盲注和优惠券", - cry_code_nextjokers = "下一个商店的小丑", - cry_code_nextcards = "接下来抽到的牌", - cry_code_with_suits = "包括花色", - cry_code_without_suits = "忽略花色", k_code = "代码", k_cry_candy = "糖果", k_cry_cursed = "诅咒", @@ -5074,94 +3954,24 @@ return { k_cry_exotic = "域外", unique = "独特", }, - tutorial = { - cry_intro_1 = { - "你好,我是{C:attention}约瑟夫·J·小丑{}!", - "欢迎来到{C:cry_exotic,E:1}Cryptid{}!", - }, - cry_intro_2 = { - "看起来你从未在这个存档中", - "玩过{C:cry_exotic,E:1}Cryptid{}。", - "让我来告诉你怎么玩!", - }, - cry_intro_3 = { - "*长出双手*", - }, - cry_intro_4 = { - "用几句话总结这个模组很难,", - "但我能说的是,你即将经历一段{C:cry_exotic,E:1}疯狂{}的旅程!", - "这可不是你熟悉的{C:attention}小丑扑克{}...", - }, - cry_intro_5 = { - "你可能从这些{C:cry_ascendant}游戏集{}中看出来了,我喜欢字母{C:attention}M{}。", - "选择一个游戏集,我来为你解释...", - "{s:0.8}注意:游戏集平衡仍在大力开发中。", - "{s:0.8}预计会频繁更新!", - }, - cry_modest_1 = { - "想体验接近原版的玩法?", - "那么{C:cry_ascendant}Modest{}游戏集适合你!", - }, - cry_modest_2 = { - "不过,还是要小心隐藏在", - "Cryptid中的各种机制!你永远不知道", - "下一轮会遇到什么...", - }, - cry_mainline_1 = { - "想{E:1,C:attention}打破{}游戏?好消息,", - "不用太离谱就能做到!", - }, - cry_mainline_2 = { - "这里的内容仍然很疯狂,但你能有机会", - "体验{C:cry_ascendant}成长{}系统。", - "只是别太放松...", - }, - cry_mainline_3 = { - "因为你会变得更强,但我也设计了一些", - "{E:1,C:dark_edition}Boss{},可能会让你后悔选择这个{C:cry_ascendant}游戏集{}...", - }, - cry_madness_1 = { - "想彻底{C:red,E:1}毁灭{}你的硬盘?", - "太有趣了!{C:cry_ascendant}Madness{}游戏集的口号是:", - "'平衡?{E:1,C:red}那是什么鬼东西!{}'", - }, - cry_madness_2 = { - "我花了数周无眠的、喝着{C:green}Mountain Dew{}的夜晚,", - "确保这个游戏集{C:cry_ascendant}绝对平衡{},只为你!", - }, - cry_madness_3 = { - "你会解锁所有内容,这样就能释放", - "Cryptid的{C:red,E:1}全部力量{}!", - "只是小心别让游戏{C:attention,E:1}崩溃{},", - "因为这可能在你失败前就发生...", - }, - }, poker_hand_descriptions = { - ["cry_Bulwark"] = { + cry_Bulwark = { "5 张无等级,无花色的牌", }, - ["cry_Clusterfuck"] = { + cry_Clusterfuck = { "至少 8 张不包含", "对子、同花或顺子的牌", }, - ["cry_UltPair"] = { + cry_UltPair = { "两个两对,共两种花色", "每对两对是一种花色", "他们之间共有两种花色", }, - ["cry_WholeDeck"] = { + cry_WholeDeck = { "在一次出牌中,包含", "52张牌的牌组中的每一张牌", "你疯了?", }, - ["cry_None"] = { "出牌为 0 张牌" }, - - ["cry_Declare0"] = { "始终算作顺子" }, - ["cry_Declare1"] = { "始终算作同花" }, - ["cry_Declare2"] = { "始终算作葫芦" }, - ["cry_Declare0_suitless"] = { "始终算作顺子", "手牌不需要特定花色" }, - ["cry_Declare1_suitless"] = { "始终算作同花", "手牌不需要特定花色" }, - ["cry_Declare2_suitless"] = { "始终算作葫芦", "手牌不需要特定花色" }, }, poker_hands = { cry_Bulwark = "碉堡", @@ -5172,113 +3982,113 @@ return { rnj_loc_txts = { actions = { add_dollars = { - "获得{C:money}$#2#{}", + "获得 {C:money}$#2#{}", }, make_joker = { - "创造{C:attention}#2#小丑{}牌", + "创造 {C:attention}#2# 小丑{}牌", }, make_planet = { - "创造{C:attention}#2#{C:planet}星球{}牌", + "创造 {C:attention}#2#{C:planet} 星球{} 牌", }, make_spectral = { - "创造{C:attention}#2#{C:spectral}幻灵{}牌", + "创造 {C:attention}#2#{C:spectral} 幻灵{} 牌", }, make_tarot = { - "创造{C:attention}#2#{C:tarot}塔罗{}牌", + "创造 {C:attention}#2#{C:tarot} 塔罗{} 牌", }, }, conds = { big = { - "如果{C:attention}盲注{}是{C:attention}大{C:attention}盲注{}", + "如果 {C:attention}盲注{} 是 {C:attention}大 {C:attention}盲注{}", }, boss = { - "如果{C:attention}盲注{}是{C:attention}Boss{C:attention}盲注{}", + "如果 {C:attention}盲注{} 是 {C:attention}Boss {C:attention}盲注{}", }, buy_common = { - "如果是{C:blue}普通{}{C:attention}小丑{}", + "如果是 {C:blue}普通{} {C:attention}小丑{}", }, buy_uncommon = { - "如果是{C:green}罕见{}{C:attention}小丑{}", + "如果是 {C:green}罕见{} {C:attention}小丑{}", }, common = { - "如果是{C:blue}普通{}{C:attention}小丑{}", + "如果是 {C:blue}普通{} {C:attention}小丑{}", }, discards_left = { - "如果回合结束时剩余{C:red}#3#{}次弃牌", + "如果回合结束时剩余 {C:red}#3#{} 次丢弃", }, face = { - "如果卡牌是{C:attention}人头牌{}", + "如果卡牌是 {C:attention}面{} 卡", }, first = { - "如果是{C:attention}第一次出牌{}", + "如果是 {C:attention}第一次出牌{}", }, first_discard = { - "如果是{C:attention}第一次{C:attention}弃牌{}", + "如果是 {C:attention}第一次 {C:attention}丢弃{}", }, hands_left = { - "如果回合结束时剩余{C:blue}#3#{}手牌", + "如果回合结束时剩余 {C:blue}#3#{} 手牌", }, joker = { - "如果卡牌是{C:attention}小丑{}", + "如果卡牌是 {C:attention}小丑{}", }, last = { - "如果是{C:attention}最后一次{}出牌", + "如果是 {C:attention}最后一次{} 出牌", }, last_discard = { - "如果是{C:attention}最后一次{C:attention}弃牌{}", + "如果是 {C:attention}最后一次 {C:attention}丢弃{}", }, non_boss = { - "如果{C:attention}盲注{}是{C:attention}非Boss{C:attention}盲注{}", + "如果 {C:attention}盲注{} 是 {C:attention}非Boss {C:attention}盲注{}", }, odds = { - "以{C:green}#4# / #3#{}的概率", + "以 {C:green}#4# {C:green}中 {C:green}#3#{} 的几率", }, or_less = { - "如果手牌包含{C:attention}#3#{}张或更少卡牌", + "如果手牌包含 {C:attention}#3#{} 或更少卡牌", }, or_more = { - "如果手牌包含{C:attention}#3#{}张或更多卡牌", + "如果手牌包含 {C:attention}#3#{} 或更多卡牌", }, planet = { - "如果卡牌是{C:planet}星球牌{}", + "如果卡牌是 {C:planet}星球{} 卡", }, poker_hand = { - "如果手牌是{C:attention}#3#{}", + "如果手牌是 {C:attention}#3#{}", }, rank = { - "如果卡牌的等级是{C:attention}#3#{}", + "如果卡牌的等级是 {C:attention}#3#{}", }, rare = { - "如果是{C:red}稀有{}{C:attention}小丑{}", + "如果是 {C:red}稀有{} {C:attention}小丑{}", }, small = { - "如果{C:attention}盲注{}是{C:attention}小{C:attention}盲注{}", + "如果 {C:attention}盲注{} 是 {C:attention}小 {C:attention}盲注{}", }, spectral = { - "如果卡牌是{C:spectral}幻灵牌{}", + "如果卡牌是 {C:spectral}幻灵{} 卡", }, suit = { - "如果卡牌是{V:1}#3#{}", + "如果卡牌是 {V:1}#3#{}", }, tarot = { - "如果卡牌是{C:tarot}塔罗牌{}", + "如果卡牌是 {C:tarot}塔罗{} 卡", }, uncommon = { - "如果是{C:green}罕见{}{C:attention}小丑{}", + "如果是 {C:green}罕见{} {C:attention}小丑{}", }, }, contexts = { after = { - "每次{C:attention}出牌{}后", + "每个 {C:attention}手牌{} 后", }, before = { - "每次{C:attention}出牌{}前", + "每个 {C:attention}手牌{} 前", }, buying_card = { "购买卡牌时", }, debuffed_hand = { - "如果已打出{C:attention}手牌{}被削弱", + "如果已打出 {C:attention}手牌{} 被削弱", }, discard = { "为每张丢弃的卡牌", @@ -5287,7 +4097,7 @@ return { "回合结束时", }, ending_shop = { - "在{C:attention}商店{}结束时", + "在 {C:attention}商店{} 结束时", }, first_hand_drawn = { "回合开始时", @@ -5303,13 +4113,13 @@ return { }, joker_main = {}, open_booster = { - "当{C:attention}补充包{}被打开时", + "当 {C:attention}补充包{} 被打开时", }, other_joker = { - "每个{C:attention}小丑{}", + "每个 {C:attention}小丑{}", }, playing_card_added = { - "每次将{C:attention}手牌{}添加到牌组时", + "每次将 {C:attention}手牌{} 添加到牌组时", }, pre_discard = { "每次丢弃前", @@ -5324,7 +4134,7 @@ return { "重新触发已打出的卡牌", }, reroll_shop = { - "重掷商店", + "重roll商店", }, selling_card = { "出售卡牌时", @@ -5333,30 +4143,30 @@ return { "出售此卡时", }, setting_blind = { - "选择{C:attention}盲注{}时", + "选择 {C:attention}盲注{} 时", }, skip_blind = { - "跳过{C:attention}盲注{}时", + "跳过 {C:attention}盲注{} 时", }, skipping_booster = { - "跳过任何{C:attention}补充包{}时", + "跳过任何 {C:attention}补充包{} 时", }, using_consumeable = { - "使用{C:attention}消耗牌{}卡牌时", + "使用 {C:attention}消耗牌{} 卡牌时", }, }, stats = { h_size = { - "{C:attention}+#2#{}手牌数目", + "{C:attention}+#2#{} 手牌数目", }, money = { - "{C:money}+$#2#{}金钱", + "{C:money}+$#2#{} 金钱", }, plus_chips = { - "{C:blue}+#2#{}筹码", + "{C:blue}+#2#{} 筹码", }, plus_mult = { - "{C:red}+#2#{}增加倍数", + "{C:red}+#2#{} 增加倍数", }, x_chips = { "{X:blue,C:white} X#2#{} 筹码", @@ -5439,8 +4249,8 @@ return { }, cry_sticker_desc = { "使用这张小丑在", - "#2##1##2#注#3#", - "难度下获胜", + "#2#Stake#3# 难度", + "赢得 #2##1#", }, cry_sticker_name = { "#1# 贴纸", @@ -5448,19 +4258,19 @@ return { }, v_text = { ch_c_all_rnj = { - "所有小丑都是{C:attention}随机小丑{}", + "所有小丑都是 {C:attention}RNJoker{}", }, ch_c_cry_all_banana = { - "所有小丑都是{C:eternal}香蕉{}", + "所有小丑都是 {C:eternal}香蕉{}", }, ch_c_cry_all_perishable = { - "所有小丑都是{C:eternal}易腐{}", + "所有小丑都是 {C:eternal}易腐{}", }, ch_c_cry_all_pinned = { - "所有小丑都是{C:eternal}固定{}", + "所有小丑都是 {C:eternal}固定{}", }, ch_c_cry_all_rental = { - "所有小丑都是{C:eternal}租赁{}", + "所有小丑都是 {C:eternal}租赁{}", }, ch_c_cry_no_boosters = { "{C:attention}补充包{}不再出现在商店中", @@ -5469,22 +4279,22 @@ return { "不再出现{C:attention}消耗牌{} ", }, ch_c_cry_no_rerolls = { - "禁止{C:attention}重掷{}", + "禁止 {C:attention}重掷{}", }, ch_c_cry_no_tags = { - "跳过功能已{C:attention}禁用{}", + "跳过功能已 {C:attention}禁用{}", }, ch_c_cry_no_vouchers = { - "{C:attention}优惠券{}不再出现在商店中", + "{C:attention}优惠券{} 不再出现在商店中", }, ch_c_cry_rush_hour = { - "所有Boss 盲注都是{C:attention}时钟{}或{C:attention}薰衣草循环", + "所有 Boss 盲注都是 {C:attention}时钟{} 或 {C:attention}薰衣草循环", }, ch_c_cry_rush_hour_ii = { - "所有盲注都是{C:attention}Boss 盲注{}", + "所有盲注都是 {C:attention}Boss 盲注{}", }, ch_c_cry_rush_hour_iii = { - "{C:attention}时钟{}和{C:attention}薰衣草循环{}的规模是{C:attention}两倍{}快", + "{C:attention}时钟{} 和 {C:attention}薰衣草循环{} 的规模是 {C:attention}两倍{} 快", }, ch_c_cry_sticker_sheet_plus = { "所有可购买的物品都有所有贴纸", diff --git a/lovely/Probability.toml b/lovely/Probability.toml index 27cb8b397..fbfec2875 100644 --- a/lovely/Probability.toml +++ b/lovely/Probability.toml @@ -33,47 +33,6 @@ end ''' match_indent = true -# lucky -[[patches]] -[patches.pattern] -target = "functions/common_events.lua" -pattern = '''elseif _c.effect == 'Lucky Card' then loc_vars = {G.GAME.probabilities.normal, cfg.mult, 5, cfg.p_dollars, 15}''' -position = "at" -payload = ''' -elseif _c.effect == 'Lucky Card' then loc_vars = {cfg.cry_prob and cry_prob(cfg.cry_prob, 15, cfg.cry_rigged) or G.GAME.probabilities.normal, cfg.mult, 5, cfg.p_dollars, 15} -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''if pseudorandom('lucky_money') < G.GAME.probabilities.normal/15 then''' -position = "at" -payload = ''' -if pseudorandom('lucky_money') < cry_prob(self.ability.cry_prob, 15, self.ability.cry_rigged)/15 then -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''if pseudorandom('lucky_mult') < G.GAME.probabilities.normal/5 then''' -position = "at" -payload = ''' -if pseudorandom('lucky_mult') < cry_prob(self.ability.cry_prob, 5, self.ability.cry_rigged)/5 then -''' -match_indent = true - -# glass -[[patches]] -[patches.pattern] -target = "functions/common_events.lua" -pattern = '''elseif _c.effect == 'Glass Card' then loc_vars = {cfg.Xmult, G.GAME.probabilities.normal, cfg.extra}''' -position = "at" -payload = ''' -elseif _c.effect == 'Glass Card' then loc_vars = {cfg.Xmult, cfg.cry_prob and cry_prob(cfg.cry_prob, cfg.extra, cfg.cry_rigged) or G.GAME.probabilities.normal, cfg.extra} -''' -match_indent = true # wow this is a fat line # Yellow Stake - Glass can't destroy Eternals @@ -86,194 +45,8 @@ position = "at" payload = ''' if (SMODS.has_enhancement(scoring_hand[i], 'm_glass') and not scoring_hand[i].debuff - and pseudorandom('glass') < cry_prob( - scoring_hand[i].ability.cry_prob, - scoring_hand[i].ability.extra or G.P_CENTERS.m_glass.config.extra, - scoring_hand[i].ability.cry_rigged - ) / (scoring_hand[i].ability.name == 'Glass Card' - and scoring_hand[i].ability.extra - or G.P_CENTERS.m_glass.config.extra) + and SMODS.pseudorandom_probability(scoring_hand[i], 'glass', 1, scoring_hand[i].ability.extra or G.P_CENTERS.m_glass.config.extra) or (G.GAME.modifiers.cry_shatter_rate and pseudorandom('cry_shatter') < 1 / G.GAME.modifiers.cry_shatter_rate)) and not scoring_hand[i].ability.eternal then''' -match_indent = true - -# wheeeeeeeeeeel -[[patches]] -[patches.pattern] -target = "functions/common_events.lua" -pattern = '''elseif _c.name == "The Wheel of Fortune" then loc_vars = {G.GAME.probabilities.normal, cfg.extra}; info_queue[#info_queue+1] = G.P_CENTERS.e_foil; info_queue[#info_queue+1] = G.P_CENTERS.e_holo; info_queue[#info_queue+1] = G.P_CENTERS.e_polychrome;''' -position = "at" -payload = ''' -elseif _c.name == "The Wheel of Fortune" then loc_vars = {cfg.cry_prob and cry_prob(cfg.cry_prob, cfg.extra, cfg.cry_rigged) or G.GAME.probabilities.normal, cfg.extra}; info_queue[#info_queue+1] = G.P_CENTERS.e_foil; info_queue[#info_queue+1] = G.P_CENTERS.e_holo; info_queue[#info_queue+1] = G.P_CENTERS.e_polychrome; -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''if self.ability.name == 'Ectoplasm' or self.ability.name == 'Hex' or pseudorandom('wheel_of_fortune') < G.GAME.probabilities.normal/self.ability.extra then''' -position = "at" -payload = ''' -if self.ability.name == 'Ectoplasm' or self.ability.name == 'Hex' or pseudorandom('wheel_of_fortune') < cry_prob(self.ability.cry_prob, self.ability.extra, self.ability.cry_rigged)/self.ability.extra then -''' -match_indent = true - -# ok now onto jonklers - -# space -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''elseif self.ability.name == 'Space Joker' then loc_vars = {''..(G.GAME and G.GAME.probabilities.normal or 1), self.ability.extra}''' -position = "at" -payload = ''' -elseif self.ability.name == 'Space Joker' then loc_vars = {cry_prob(self.ability.cry_prob, self.ability.extra, self.ability.cry_rigged), self.ability.extra} -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''if self.ability.name == 'Space Joker' and pseudorandom('space') < G.GAME.probabilities.normal/self.ability.extra then''' -position = "at" -payload = ''' -if self.ability.name == 'Space Joker' and pseudorandom('space') < cry_prob(self.ability.cry_prob, self.ability.extra, self.ability.cry_rigged)/self.ability.extra then -''' -match_indent = true - -# 8ball -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''elseif self.ability.name == '8 Ball' then loc_vars = {''..(G.GAME and G.GAME.probabilities.normal or 1),self.ability.extra}''' -position = "at" -payload = ''' -elseif self.ability.name == '8 Ball' then loc_vars = {cry_prob(self.ability.cry_prob, self.ability.extra, self.ability.cry_rigged),self.ability.extra} -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''if (context.other_card:get_id() == 8) and (pseudorandom('8ball') < G.GAME.probabilities.normal/self.ability.extra) then''' -position = "at" -payload = ''' -if (context.other_card:get_id() == 8) and (pseudorandom('8ball') < cry_prob(self.ability.cry_prob, self.ability.extra, self.ability.cry_rigged)/self.ability.extra) then -''' -match_indent = true - -# business -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''elseif self.ability.name == 'Business Card' then loc_vars = {''..(G.GAME and G.GAME.probabilities.normal or 1), self.ability.extra}''' -position = "at" -payload = ''' -elseif self.ability.name == 'Business Card' then loc_vars = {cry_prob(self.ability.cry_prob, self.ability.extra, self.ability.cry_rigged),self.ability.extra} -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''pseudorandom('business') < G.GAME.probabilities.normal/self.ability.extra then''' -position = "at" -payload = ''' -pseudorandom('business') < cry_prob(self.ability.cry_prob, self.ability.extra, self.ability.cry_rigged)/self.ability.extra then -''' -match_indent = true - -# gros michel + cavendish -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''elseif self.ability.name == 'Gros Michel' then loc_vars = {self.ability.extra.mult, ''..(G.GAME and G.GAME.probabilities.normal or 1), self.ability.extra.odds}''' -position = "at" -payload = ''' -elseif self.ability.name == 'Gros Michel' then loc_vars = {self.ability.extra.mult, cry_prob(self.ability.cry_prob, self.ability.extra.odds, self.ability.cry_rigged), self.ability.extra.odds} -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''elseif self.ability.name == 'Cavendish' then loc_vars = {self.ability.extra.Xmult, ''..(G.GAME and G.GAME.probabilities.normal or 1), self.ability.extra.odds}''' -position = "at" -payload = ''' -elseif self.ability.name == 'Cavendish' then loc_vars = {self.ability.extra.Xmult, cry_prob(self.ability.cry_prob, self.ability.extra.odds, self.ability.cry_rigged), self.ability.extra.odds} -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''if pseudorandom(self.ability.name == 'Cavendish' and 'cavendish' or 'gros_michel') < G.GAME.probabilities.normal/self.ability.extra.odds then''' -position = "at" -payload = ''' -if pseudorandom(self.ability.name == 'Cavendish' and 'cavendish' or 'gros_michel') < cry_prob(self.ability.cry_prob, self.ability.extra.odds, self.ability.cry_rigged)/self.ability.extra.odds then -''' -match_indent = true - -# bloodstone -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''elseif self.ability.name == 'Bloodstone' then loc_vars = {''..(G.GAME and G.GAME.probabilities.normal or 1), self.ability.extra.odds, self.ability.extra.Xmult}''' -position = "at" -payload = ''' -elseif self.ability.name == 'Bloodstone' then loc_vars = {cry_prob(self.ability.cry_prob, self.ability.extra.odds, self.ability.cry_rigged), self.ability.extra.odds, self.ability.extra.Xmult} -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''pseudorandom('bloodstone') < G.GAME.probabilities.normal/self.ability.extra.odds then''' -position = "at" -payload = ''' -pseudorandom('bloodstone') < cry_prob(self.ability.cry_prob, self.ability.extra.odds, self.ability.cry_rigged)/self.ability.extra.odds then -''' -match_indent = true - -# reserved parking -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''elseif self.ability.name == 'Reserved Parking' then loc_vars = {self.ability.extra.dollars, ''..(G.GAME and G.GAME.probabilities.normal or 1), self.ability.extra.odds}''' -position = "at" -payload = ''' -elseif self.ability.name == 'Reserved Parking' then loc_vars = {self.ability.extra.dollars, cry_prob(self.ability.cry_prob, self.ability.extra.odds, self.ability.cry_rigged), self.ability.extra.odds} -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''pseudorandom('parking') < G.GAME.probabilities.normal/self.ability.extra.odds then''' -position = "at" -payload = ''' -pseudorandom('parking') < cry_prob(self.ability.cry_prob, self.ability.extra.odds, self.ability.cry_rigged)/self.ability.extra.odds then -''' -match_indent = true - -# hallucination -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''elseif self.ability.name == 'Hallucination' then loc_vars = {G.GAME.probabilities.normal, self.ability.extra}''' -position = "at" -payload = ''' -elseif self.ability.name == 'Hallucination' then loc_vars = {cry_prob(self.ability.cry_prob, self.ability.extra, self.ability.cry_rigged), self.ability.extra} -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "card.lua" -pattern = '''if pseudorandom('halu'..G.GAME.round_resets.ante) < G.GAME.probabilities.normal/self.ability.extra then''' -position = "at" -payload = ''' -if pseudorandom('halu'..G.GAME.round_resets.ante) < cry_prob(self.ability.cry_prob, self.ability.extra, self.ability.cry_rigged)/self.ability.extra then -''' -match_indent = true +match_indent = true \ No newline at end of file diff --git a/lovely/cat.toml b/lovely/cat.toml index 90b6aa74e..694483059 100644 --- a/lovely/cat.toml +++ b/lovely/cat.toml @@ -22,17 +22,6 @@ pattern = '''tag_sprite.stop_hover = function(_self) _self.hovering = false; Nod position = "after" payload = ''' tag_sprite.click = function(_self) - if G.GAME.USING_POINTER then - local t = G.P_TAGS[self.key] - if not t.no_doe and not t.hidden and not t.no_pointer then - add_tag(self) - G.FUNCS.exit_overlay_menu_code() - if G.GAME.CODE_DESTROY_CARD then - G.GAME.CODE_DESTROY_CARD:start_dissolve() - G.GAME.CODE_DESTROY_CARD = nil - end - end - end if self.key == 'tag_cry_cat' and self.HUD_tag then for i = 1, #G.GAME.tags do local other_cat = G.GAME.tags[i] @@ -205,9 +194,7 @@ position = "at" payload = ''' local tagatlas = G.ASSET_ATLAS[(not self.hide_ability) and G.P_TAGS[self.key].atlas or "tags"] if self.ability.shiny and not self.hide_ability then - if G.P_TAGS[self.key].shiny_atlas then - tagatlas = G.ASSET_ATLAS[G.P_TAGS[self.key].shiny_atlas] - elseif not G.P_TAGS[self.key].atlas then + if not G.P_TAGS[self.key].atlas then tagatlas = G.ASSET_ATLAS['cry_shinyv'] elseif G.P_TAGS[self.key].atlas == 'cry_tag_cry' then tagatlas = G.ASSET_ATLAS['cry_shinyc'] diff --git a/lovely/ccd.toml b/lovely/ccd.toml index 98c0f2e0e..257175899 100644 --- a/lovely/ccd.toml +++ b/lovely/ccd.toml @@ -12,7 +12,7 @@ position = "before" payload = ''' if G.GAME.modifiers.cry_ccd then for k, v in pairs(G.playing_cards) do - v:set_ability(Cryptid.random_consumable('cry_ccd', nil, nil, nil, true), true, nil) + v:set_ability(Cryptid.random_consumable('cry_ccd',{"no_doe", "no_grc"}, nil, nil, true), true, nil) end end ''' diff --git a/lovely/code.toml b/lovely/code.toml index b8998cc75..fd58b3cff 100644 --- a/lovely/code.toml +++ b/lovely/code.toml @@ -569,216 +569,4 @@ for i, v in pairs(G.jokers.cards) do end local text,disp_text,poker_hands,scoring_hand,non_loc_disp_text = G.FUNCS.get_poker_hand_info(Cryptid.table_merge(G.play.cards, tbl)) ''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "functions/UI_definitions.lua" -pattern = "local text = {ref_table = args.ref_table, ref_value = args.ref_value, letters = {}, current_position = string.len(args.ref_table[args.ref_value])}" -position = "at" -payload = ''' -local text = {ref_table = args.ref_table, ref_value = args.ref_value, letters = {}, current_position = string.len(args.ref_table[args.ref_value] or "")} -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "functions/UI_definitions.lua" -pattern = ''' - UIBox_button({button = 'your_collection_enhancements', label = {localize('b_enhanced_cards')}, minw = 5}), - UIBox_button({button = 'your_collection_seals', label = {localize('b_seals')}, minw = 5, id = 'your_collection_seals'}), - UIBox_button({button = 'your_collection_editions', label = {localize('b_editions')}, count = G.DISCOVER_TALLIES.editions, minw = 5, id = 'your_collection_editions'}), -''' -position = "at" -payload = ''' - enhanced, - seals, - editions, -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "functions/UI_definitions.lua" -pattern = ''' - local t = create_UIBox_generic_options({ back_func = G.STAGE == G.STAGES.RUN and 'options' or 'exit_overlay_menu', contents = { -''' -position = "before" -payload = ''' - local use_pointer = G.GAME.USING_POINTER or G.GAME.POINTER_COLLECTION - local enhanced = (not use_pointer and UIBox_button({button = 'your_collection_enhancements', label = {localize('b_enhanced_cards')}, minw = 5})) - or UIBox_button({button = 'your_collection_create_card_rank', label = {localize('b_playing_cards')}, minw = 5, minh = 3.4, id = 'your_collection_create_card'}) - local seals = (not use_pointer and UIBox_button({button = 'your_collection_seals', label = {localize('b_seals')}, minw = 5, id = 'your_collection_seals'})) or nil - local editions = not use_pointer and UIBox_button({button = 'your_collection_editions', label = {localize('b_editions')}, count = G.DISCOVER_TALLIES.editions, minw = 5, id = 'your_collection_editions'}) or nil - - local blinds = UIBox_button({button = 'your_collection_blinds', label = {localize('b_blinds')}, count = G.DISCOVER_TALLIES.blinds, minw = 5, minh = (use_pointer and 2.8 or 2.0), id = 'your_collection_blinds', focus_args = {snap_to = true}}) - local other = not use_pointer and UIBox_button({button = 'your_collection_other_gameobjects', label = {localize('k_other')}, minw = 5, id = 'your_collection_other_gameobjects', focus_args = {snap_to = true}}) or nil - - local decks = not use_pointer and UIBox_button({button = 'your_collection_decks', label = {localize('b_decks')}, count = G.DISCOVER_TALLIES.backs, minw = 5}) or nil - local vouchers = UIBox_button({button = 'your_collection_vouchers', label = {localize('b_vouchers')}, count = G.DISCOVER_TALLIES.vouchers, minw = 5, id = 'your_collection_vouchers', minh = use_pointer and 2.0}) -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "functions/UI_definitions.lua" -pattern = ''' -UIBox_button({button = 'your_collection_blinds', label = {localize('b_blinds')}, count = G.DISCOVER_TALLIES.blinds, minw = 5, minh = 2.0, id = 'your_collection_blinds', focus_args = {snap_to = true}}),UIBox_button({button = 'your_collection_other_gameobjects', label = {localize('k_other')}, minw = 5, id = 'your_collection_other_gameobjects', focus_args = {snap_to = true}}), -''' -position = "at" -payload = ''' - blinds, - other -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = "functions/UI_definitions.lua" -pattern = ''' - UIBox_button({button = 'your_collection_decks', label = {localize('b_decks')}, count = G.DISCOVER_TALLIES.backs, minw = 5}), - UIBox_button({button = 'your_collection_vouchers', label = {localize('b_vouchers')}, count = G.DISCOVER_TALLIES.vouchers, minw = 5, id = 'your_collection_vouchers'}), -''' -position = "at" -payload = ''' - decks, - vouchers, -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = '''=[SMODS _ "src/overrides.lua"]''' -pattern = ''' - if v.discovered and not v.alerted then - blinds_to_be_alerted[#blinds_to_be_alerted + 1] = card - end -''' -position = "at" -payload = ''' - if v.discovered and not v.alerted then - blinds_to_be_alerted[#blinds_to_be_alerted + 1] = card - end - card.click = function() - if G.GAME.USING_POINTER then - local self = v - local b = self - if not b.no_doe and not b.hidden and not b.no_pointer then - local bl = "Boss" - G.GAME.round_resets.blind_choices[bl] = b.key - if G.blind_select or G.GAME.blind_on_deck ~= "Boss" then - if G.blind_select then - G.blind_select:remove() - G.blind_prompt_box:remove() - G.STATE_COMPLETE = false - end - else - G.GAME.blind:disable() - G.GAME.blind:set_blind(G.P_BLINDS[b.key]) - end - G.FUNCS.exit_overlay_menu_code() - if G.GAME.CODE_DESTROY_CARD then - G.GAME.CODE_DESTROY_CARD:start_dissolve() - G.GAME.CODE_DESTROY_CARD = nil - end - end - end - end -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = '''=[SMODS _ "src/overrides.lua"]''' -pattern = ''' - for k, _hand in pairs(SMODS.PokerHands) do - results[k] = _hand.evaluate(parts, hand) or {} - end -''' -position = "after" -payload = ''' - local hands = { - G.GAME.hands.cry_Declare0, - G.GAME.hands.cry_Declare1, - G.GAME.hands.cry_Declare2, - } - for i, v in pairs(hands) do - if v.index then - local is_this_hand = true - local cards = {} - if v.declare_cards then - local satisfied = true - for i, v in pairs(v.declare_cards) do - local rank - local suit - for i2, v2 in pairs(hand) do - if not v2.canfit then - if SMODS.has_no_rank(v2) and v.rank == "rankless" or v2:get_id() == v.rank then - if v2:is_suit(v.suit) or (v.suit == "suitless" and SMODS.has_no_suit(v2)) or not v.suit then - v2.canfit = true - end - end - end - if not v2.marked and not (suit and rank) then - if SMODS.has_no_rank(v2) and v.rank == "rankless" or v2:get_id() == v.rank then rank = true end - if v2:is_suit(v.suit) or (v.suit == "suitless" and SMODS.has_no_suit(v2)) or not v.suit then suit = true end - if not (suit and rank) then - suit = false - rank = false - end - if suit and rank then - cards[#cards+1] = v2 - v2.marked = true - end - end - end - if not rank or not suit then satisfied = false end - end - for i2, v2 in pairs(hand) do - v2.marked = false - if v2.canfit then - cards[#cards+1] = v2 - v2.canfit = nil - end - end - if not satisfied then is_this_hand = false end - end - if is_this_hand then - key = "cry_Declare"..tostring(v.index) - local tbl = {cards} - local skey = ({ - [0] = "Flush", - [1] = "Straight", - [2] = "Full House" - })[v.index] - results[key] = tbl - results[skey] = tbl - if skey == "Full House" then - results["Three of a Kind"] = tbl - results["Two Pair"] = tbl - results["Pair"] = tbl - end - results.top = tbl - else - key = "cry_Declare"..tostring(v.index) - results[key] = {} - end - end - end - if not results["cry_Declare0"] then results["cry_Declare0"] = {} end - if not results["cry_Declare1"] then results["cry_Declare1"] = {} end - if not results["cry_Declare2"] then results["cry_Declare2"] = {} end -''' -match_indent = true - -[[patches]] -[patches.pattern] -target = '''=[SMODS _ "src/overrides.lua"]''' -pattern = ''' -for k, v in pairs(SMODS.PokerHands[key]) do -''' -position = "at" -payload = ''' -for k, v in pairs(SMODS.PokerHands[key] or {}) do -''' match_indent = true \ No newline at end of file diff --git a/lovely/lib_misc.toml b/lovely/lib_misc.toml index ce05a01b8..85ac030a3 100644 --- a/lovely/lib_misc.toml +++ b/lovely/lib_misc.toml @@ -134,12 +134,6 @@ Cryptid.aliases = {} Cryptid.pointerblist = {} Cryptid.pointerblistrarity = {} Cryptid.mod_gameset_whitelist = {} - -Cryptid.pin_debuff = {} -Cryptid.circus_rarities = { - --format {base_mult = ..., loc_key = ..., rarity=..., order=...} -} - function cry_format(...) return ... end diff --git a/lovely/misc_joker.toml b/lovely/misc_joker.toml index 01cd67588..f159ee6d9 100644 --- a/lovely/misc_joker.toml +++ b/lovely/misc_joker.toml @@ -18,4 +18,5 @@ target = "functions/common_events.lua" pattern = "ret.playing_card = {}" position = "at" payload = "ret.playing_card = ret.playing_card or {}" -match_indent = true \ No newline at end of file +match_indent = true + diff --git a/lovely/none.toml b/lovely/none.toml index 430083efe..ec20d31e7 100644 --- a/lovely/none.toml +++ b/lovely/none.toml @@ -285,21 +285,3 @@ if not text or text == "NULL" then end ''' match_indent = true - -[[patches]] -[patches.pattern] -target = "game.lua" -pattern = ''' - if (not G.hand.cards[1]) and G.deck.cards[1] then - G.STATE = G.STATES.DRAW_TO_HAND - G.STATE_COMPLETE = false - else -''' -position = "at" -payload = ''' - if (not G.hand.cards[1]) and G.deck.cards[1] and G.hand.config.card_limit > 0 then - G.STATE = G.STATES.DRAW_TO_HAND - G.STATE_COMPLETE = false - else -''' -match_indent = true diff --git a/lovely/planet.toml b/lovely/planet.toml index 0a790d0f1..8b26260e4 100644 --- a/lovely/planet.toml +++ b/lovely/planet.toml @@ -17,7 +17,7 @@ elseif v.config.hand_type then softlocked = G.GAME.hands[v.config.hand_type].played == 0 elseif v.config.hand_types then for _, h in pairs(v.config.hand_types) do - if (G.GAME.hands[h].played or 0) > 0 then + if G.GAME.hands[h].played > 0 then softlocked = false end end