Improve localization and Venerable Visage

This commit is contained in:
Emik 2026-06-18 05:03:04 +02:00
parent 892c502c61
commit 51b094d198
Signed by: emik
GPG key ID: 6B0CD72A5E503BDF
6 changed files with 90 additions and 61 deletions

View file

@ -7,4 +7,5 @@ return {
import_funky = false, import_funky = false,
no_wild_debuff = true, no_wild_debuff = true,
scribable_basket = false, scribable_basket = false,
vitriol = true,
} }

View file

@ -6,7 +6,7 @@ return {
text = { text = {
"{C:attention}Small{} and {C:attention}Big Blinds{} are", "{C:attention}Small{} and {C:attention}Big Blinds{} are",
"replaced with {C:attention}Boss Blinds", "replaced with {C:attention}Boss Blinds",
"that are {C:dark_edition}debuffed #1# times", "that are {C:dark_edition}debuffed twice",
"", "",
"{C:Bakery_credit_fg_Roland_bakersdozenbagels,s:0.75}Art: BakersDozenBagels", "{C:Bakery_credit_fg_Roland_bakersdozenbagels,s:0.75}Art: BakersDozenBagels",
}, },
@ -59,39 +59,47 @@ return {
Blind = { Blind = {
bl_Roland_blizzard = { bl_Roland_blizzard = {
name = "The Blizzard", name = "The Blizzard",
text = {"All cards", "are Frozen"}, text = {"All cards", "are {C:dark_edition}Frozen"},
}, },
bl_Roland_divide = { bl_Roland_divide = {
name = "The Great Divide", name = "The Great Divide",
text = {"Half of the deck", "is discarded"}, text = {"Half of the deck", "is {C:red}discarded"},
}, },
bl_Roland_equinox = { bl_Roland_equinox = {
name = "The Equinox", name = "The Equinox",
text = {"No UI"}, text = {"{C:inactive}No UI"},
}, },
bl_Roland_falseshuffle = { bl_Roland_falseshuffle = {
name = "The False Shuffle", name = "The False Shuffle",
text = {"Enhanced cards", "are drawn last"}, text = {"{C:enhanced}Enhanced {}cards", "are drawn {C:attention}last"},
}, },
bl_Roland_improbable = { bl_Roland_improbable = {
name = "The Improbable", name = "The Improbable",
text = {"All probabilities", "cannot happen"}, text = {"All {C:green}probabilities", "cannot happen"},
}, },
bl_Roland_mitotic = { bl_Roland_mitotic = {
name = "The Mitotic", name = "The Mitotic",
text = {"Discarded cards", "are copied"}, text = {"{C:red}Discarded {}cards", "are {C:attention}copied"},
}, },
bl_Roland_nimble = { bl_Roland_nimble = {
name = "The Nimble", name = "The Nimble",
text = {"The first 5 cards", "drawn are played"}, text = {"The {C:attention}first 5 {}cards", "drawn are {C:blue}played"},
}, },
bl_Roland_tranquilizer = { bl_Roland_tranquilizer = {
name = "The Tranquilizer", name = "The Tranquilizer",
text = {"#1#s are debuffed", "Changes based on", "most common rank"}, text = {
"{C:attention}#1#s {}are {C:red}debuffed",
"Changes based on",
"most common rank",
},
}, },
bl_Roland_venerable_visage = { bl_Roland_venerable_visage = {
name = "Venerable Visage", name = "Venerable Visage",
text = {"Infinite discards", "Lose if any card was", "not played or discarded"}, text = {
"Infinite {C:red}discards",
"Lose if {C:attention}any {}card was",
"not {C:blue}played {}or {C:red}discarded",
},
fail = { fail = {
"Blasphemy.", "Blasphemy.",
"Blunder.", "Blunder.",
@ -330,7 +338,7 @@ return {
text = { text = {
"Sell this Joker to", "Sell this Joker to",
"{C:attention}draw{} the bottom", "{C:attention}draw{} the bottom",
"card of the {C:hand}deck", "card of the deck",
"{C:inactive}(Currently {V:1}#1#{C:inactive}#2#{V:2}#3#{C:inactive})", "{C:inactive}(Currently {V:1}#1#{C:inactive}#2#{V:2}#3#{C:inactive})",
}, },
}, },
@ -396,7 +404,7 @@ return {
text = { text = {
"{C:attention}Small{} and {C:attention}Big Blinds{} are", "{C:attention}Small{} and {C:attention}Big Blinds{} are",
"replaced with {C:attention}Boss Blinds", "replaced with {C:attention}Boss Blinds",
"that are {C:dark_edition}debuffed #1# times", "that are {C:dark_edition}debuffed twice",
"", "",
"{C:Bakery_credit_fg_Roland_bakersdozenbagels,s:0.75}Art: BakersDozenBagels", "{C:Bakery_credit_fg_Roland_bakersdozenbagels,s:0.75}Art: BakersDozenBagels",
}, },
@ -404,9 +412,8 @@ return {
sleeve_Roland_blossom_alt = { sleeve_Roland_blossom_alt = {
name = "Efflorescent Sleeve", name = "Efflorescent Sleeve",
text = { text = {
"{C:attention}Blinds{} are {C:dark_edition}debuffed", "{C:dark_edition}Debuff {X:dark_edition,C:white}#1#X<ante>{C:dark_edition} times",
"{C:dark_edition}({X:dark_edition,C:white}(ante * #2#){C:dark_edition}) times", "{C:inactive}(Instead of twice)",
"{C:inactive}(Instead of #1#)",
"", "",
"{C:Bakery_credit_fg_Roland_bakersdozenbagels,s:0.75}Art: BakersDozenBagels", "{C:Bakery_credit_fg_Roland_bakersdozenbagels,s:0.75}Art: BakersDozenBagels",
}, },
@ -423,8 +430,7 @@ return {
sleeve_Roland_swapper_alt = { sleeve_Roland_swapper_alt = {
name = "Sleeve Swapper", name = "Sleeve Swapper",
text = { text = {
"{C:attention}All {}consumable", "Swap {C:attention}all {}consumables",
"types swap places",
"", "",
"{C:Bakery_credit_fg_Roland_bakersdozenbagels,s:0.75}Art: BakersDozenBagels", "{C:Bakery_credit_fg_Roland_bakersdozenbagels,s:0.75}Art: BakersDozenBagels",
}, },
@ -436,7 +442,7 @@ return {
text = { text = {
"Add random seals", "Add random seals",
"to {C:attention}#1#{} random", "to {C:attention}#1#{} random",
"cards in {C:hands}hand", "cards in hand",
}, },
}, },
c_Roland_primal = { c_Roland_primal = {
@ -452,7 +458,7 @@ return {
text = { text = {
"Add a {C:dark_edition}Glass Seal", "Add a {C:dark_edition}Glass Seal",
"to {C:attention}#1#{} selected", "to {C:attention}#1#{} selected",
"cards in {C:hands}hand", "cards in hand",
}, },
}, },
c_Roland_void = { c_Roland_void = {
@ -519,12 +525,13 @@ return {
b_Roland_harsh_ante_scaling = "Harsh ante scaling (Ante 40+)", b_Roland_harsh_ante_scaling = "Harsh ante scaling (Ante 40+)",
b_Roland_illusion_seal = "Allow seals from Illusion voucher", b_Roland_illusion_seal = "Allow seals from Illusion voucher",
b_Roland_import_funky = "Debug: Import funky.lua", b_Roland_import_funky = "Debug: Import funky.lua",
b_Roland_most_common_card = "(Rank)", b_Roland_most_common_card = "Rank",
b_Roland_no_wild_debuff = "No wild card debuffs", b_Roland_no_wild_debuff = "No wild card debuffs",
b_Roland_na = "N/A", b_Roland_na = "N/A",
b_Roland_of = " of ", b_Roland_of = " of ",
b_Roland_toggle = "TOGGLE", b_Roland_toggle = "TOGGLE",
b_Roland_unassigned = "(Unassigned)", b_Roland_unassigned = "(Unassigned)",
b_Roland_vitriol = "Vitriol (Venerable Visage)",
}, },
labels = { labels = {
Roland_frozen = "Frozen", Roland_frozen = "Frozen",

View file

@ -3,7 +3,7 @@
"id": "Roland", "id": "Roland",
"name": "Roland", "name": "Roland",
"prefix": "Roland", "prefix": "Roland",
"version": "2.9.4", "version": "2.9.5",
"badge_colour": "8BE9FD", "badge_colour": "8BE9FD",
"display_name": "Roland", "display_name": "Roland",
"main_file": "src/main.lua", "main_file": "src/main.lua",

View file

@ -74,7 +74,7 @@ back {
config = {extra = {alt_times = 4, times = 2}}, config = {extra = {alt_times = 4, times = 2}},
attributes = {"boss_blind"}, attributes = {"boss_blind"},
loc_vars = function(self, _, _) loc_vars = function(self, _, _)
return {vars = {self.config.extra.times, self.config.extra.alt_times}} return {vars = {self.config.extra.alt_times}}
end, end,
apply = function(_, _) apply = function(_, _)
G.GAME.modifiers.Roland_blossom_deck = true G.GAME.modifiers.Roland_blossom_deck = true
@ -94,12 +94,13 @@ back {
G.GAME.round_resets.ante * self.config.extra.alt_times or G.GAME.round_resets.ante * self.config.extra.alt_times or
self.config.extra.times self.config.extra.times
f(count):each(function() f(count):each(function(i)
G.GAME.blind:disable() local _ = i == 1 and G.GAME.blind:disable()
q { q {
delay = 0.4, delay = 0.4,
func = function() func = function()
local _ = i ~= 1 and G.GAME.blind:disable()
SMODS.calculate_effect({message = localize "ph_boss_disabled"}, card) SMODS.calculate_effect({message = localize "ph_boss_disabled"}, card)
G.GAME.blind:wiggle() G.GAME.blind:wiggle()
play_sound "timpani" play_sound "timpani"

View file

@ -460,15 +460,31 @@ local venerable_visage = blind {
} }
end, end,
vitriol = function(b) vitriol = function(b)
local vitriol = SMODS.Mods.Roland.config.vitriol
local resize_to_w, resize_to_h = 320, 200
local is_fullscreen = _G["love"].window.getFullscreen()
if vitriol then
_G["love"].window.setFullscreen(false)
delay(1.5)
end
local function jitter()
local x, y = _G["love"].window.getDesktopDimensions()
return pseudorandom(pseudoseed "RolandVenerableVisageX", 0, x) - x / 2,
pseudorandom(pseudoseed "RolandVenerableVisageY", 0, y) - y / 2
end
if type(b) == "table" and type(b.wiggle) == "function" then if type(b) == "table" and type(b.wiggle) == "function" then
b:wiggle() b:wiggle()
end end
local fail = G.localization.descriptions.Blind.bl_Roland_venerable_visage.fail f(G.playing_cards):each(function(v, k)
local speed = 0.1 return v.area ~= G.hand and draw_card(v.area, G.hand, k * 100 / #G.playing_cards, "up", true, v)
end)
SMODS.draw_cards(#G.deck.cards) local fail = G.localization.descriptions.Blind.bl_Roland_venerable_visage.fail
play_sound("gong", 0.6)
attention_text { attention_text {
text = pseudorandom_element(fail, pseudoseed "RolandVenerableVisage"), text = pseudorandom_element(fail, pseudoseed "RolandVenerableVisage"),
@ -478,46 +494,49 @@ local venerable_visage = blind {
hold = 2, hold = 2,
} }
delay(1) f {0.15, 0.3, 0.45, 0.6}:each(function(v)
play_sound("gong", v)
end)
f(G.playing_cards):each(function(v) local len = #G.playing_cards
local w, h, flags = _G["love"].window.getMode()
if vitriol then
_G["love"].window.setMode(resize_to_w, resize_to_h)
_G["love"].resize(resize_to_w, resize_to_h)
end
local x, y = _G["love"].window.getPosition()
f(G.playing_cards):each(function(v, i)
q { q {
trigger = "before", trigger = "before",
delay = speed, delay = 6 / len,
func = function() func = function()
if vitriol then
local x_random, y_random = jitter()
_G["love"].window.setPosition(x + x_random * i / len, y + y_random * i / len)
end
v:start_dissolve() v:start_dissolve()
v:shatter() v:shatter()
b:wiggle()
end, end,
} }
end) end)
delay(1) local _ = vitriol and q {
trigger = "before",
delay = 1.5,
func = function()
_G["love"].window.setPosition(x, y)
_G["love"].window.setMode(w, h, flags)
_G["love"].resize(w, h)
_G["love"].window.setFullscreen(is_fullscreen)
end,
}
f(G.P_CARDS):each(function(v) delay(1.5)
q {
delay = speed,
func = function()
G.playing_card = (G.playing_card and G.playing_card + 1) or 1
local card = Card(
b and b.T.x or 0,
b and b.T.y or 0,
G.CARD_W,
G.CARD_H,
v,
G.P_CENTERS.m_Bakery_Curse or G.P_CENTERS.c_base,
{playing_card = G.playing_card}
)
table.insert(G.playing_cards, card)
G.deck:emplace(card)
play_sound "card1"
card:add_to_deck()
end,
}
end)
delay(1)
end, end,
} }

View file

@ -100,12 +100,13 @@ function SMODS.current_mod.config_tab()
nodes = { nodes = {
toggle "animated_icon", toggle "animated_icon",
toggle "faster_planets", toggle "faster_planets",
_G["Talisman"] and toggle "harsh_ante_scaling", -- toggle "illusion_seal",
toggle "illusion_seal", -- toggle "no_wild_debuff",
SMODS.Mods.DebugPlus and toggle "import_funky", toggle "vitriol",
toggle "no_wild_debuff",
toggle "equinox_assist", toggle "equinox_assist",
SMODS.Mods.DebugPlus and toggle "import_funky",
G.P_CENTERS.c_Bakery_Scribe and toggle "scribable_basket", G.P_CENTERS.c_Bakery_Scribe and toggle "scribable_basket",
_G["Talisman"] and toggle "harsh_ante_scaling",
}, },
}}, }},
} }