From 017891a3607898dac70d550734e9d9c0c2b60e35 Mon Sep 17 00:00:00 2001 From: MetaNite64 Date: Fri, 29 May 2026 15:26:43 -0500 Subject: [PATCH 1/2] implement suit shades --- lovely/playing_card.toml | 3 ++- lsp_def/classes/suit.lua | 1 + lsp_def/utils.lua | 9 ++++++++- src/game_object.lua | 4 ++++ src/utils.lua | 15 ++++++++++++++- 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lovely/playing_card.toml b/lovely/playing_card.toml index 018fd7849..b19a5880c 100644 --- a/lovely/playing_card.toml +++ b/lovely/playing_card.toml @@ -234,7 +234,8 @@ line_prepend = '$indent' payload = ''' local suit = SMODS.Suits[self.base.suit] or {} self.base.suit_nominal = suit.suit_nominal or 0 -self.base.suit_nominal_original = suit_base_nominal_original or suit.suit_nominal or 0''' +self.base.suit_nominal_original = suit_base_nominal_original or suit.suit_nominal or 0 +self.base.shade = suit.shade''' # Card:change_suit() [[patches]] diff --git a/lsp_def/classes/suit.lua b/lsp_def/classes/suit.lua index 185a79a83..5386a2997 100644 --- a/lsp_def/classes/suit.lua +++ b/lsp_def/classes/suit.lua @@ -15,6 +15,7 @@ ---@field hc_ui_atlas? string Atlas used for high-contrast mini suit symbol in deck view. ---@field lc_colour? table HEX color of the suit text for low-contrast. ---@field hc_colour? table HEX color of the suit text for high-contrast. +---@field shade? string A string that identifies a "shade" for the suit, e.g. "light" and "dark" suits. ---@field __call? fun(self: SMODS.Suit|table, o: SMODS.Suit|table): nil|table|SMODS.Suit ---@field extend? fun(self: SMODS.Suit|table, o: SMODS.Suit|table): table Primary method of creating a class. ---@field check_duplicate_register? fun(self: SMODS.Suit|table): boolean? Ensures objects already registered will not register. diff --git a/lsp_def/utils.lua b/lsp_def/utils.lua index 5882845d3..f0aadc922 100644 --- a/lsp_def/utils.lua +++ b/lsp_def/utils.lua @@ -872,4 +872,11 @@ function SMODS.copy_card(card, args) end ---@param card Card|table Card to add ---@param args {set: string?, area: CardArea|table?, playing_card: integer?}? ---@return Card|table -function SMODS.add_to_deck(card, args) end \ No newline at end of file +function SMODS.add_to_deck(card, args) end + +---Checks if a card counts as at least one suit that matches the provided suit shade +---@param card Card|table Card to check +---@param shade string Suit shade to check for +---@param bypass_debuff boolean? Whether to ignore the card's debuff status +---@return boolean +function Card.is_suit_shade(card, shade, bypass_debuff) diff --git a/src/game_object.lua b/src/game_object.lua index ca499b2bd..624fa7b31 100644 --- a/src/game_object.lua +++ b/src/game_object.lua @@ -2082,6 +2082,7 @@ SMODS.UndiscoveredCompat = { ui_pos = { x = 1, y = 1 }, keep_base_colours = true, sort_id = 3, + shade = "light", } SMODS.Suit { key = 'Clubs', @@ -2090,6 +2091,7 @@ SMODS.UndiscoveredCompat = { ui_pos = { x = 2, y = 1 }, keep_base_colours = true, sort_id = 4, + shade = "dark", } SMODS.Suit { key = 'Hearts', @@ -2098,6 +2100,7 @@ SMODS.UndiscoveredCompat = { ui_pos = { x = 0, y = 1 }, keep_base_colours = true, sort_id = 2, + shade = "light", } SMODS.Suit { key = 'Spades', @@ -2106,6 +2109,7 @@ SMODS.UndiscoveredCompat = { ui_pos = { x = 3, y = 1 }, keep_base_colours = true, sort_id = 1, + shade = "dark", } ------------------------------------------------------------------------------------------------- ----- API CODE GameObject.Rank diff --git a/src/utils.lua b/src/utils.lua index 93d07fab4..3ce8977cc 100644 --- a/src/utils.lua +++ b/src/utils.lua @@ -4160,4 +4160,17 @@ function SMODS.add_to_deck(card, args) local area = args.area or G.jokers area:emplace(card) return card -end \ No newline at end of file +end + +function Card:is_suit_shade(shade, bypass_debuff) + if self.debuff and not bypass_debuff then return end + if SMODS.has_no_suit(self) then + return false + end + for i, v in pairs(SMODS.Suits) do + if self:is_suit(i, bypass_debuff) and shade == v.shade then + return true + end + end + return false +end From cfb2027c70edc75903aee4a0e4d9da9d799738a7 Mon Sep 17 00:00:00 2001 From: MetaNite64 Date: Fri, 29 May 2026 15:31:41 -0500 Subject: [PATCH 2/2] woops missing end --- lsp_def/utils.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lsp_def/utils.lua b/lsp_def/utils.lua index f0aadc922..ea48e3e18 100644 --- a/lsp_def/utils.lua +++ b/lsp_def/utils.lua @@ -879,4 +879,4 @@ function SMODS.add_to_deck(card, args) end ---@param shade string Suit shade to check for ---@param bypass_debuff boolean? Whether to ignore the card's debuff status ---@return boolean -function Card.is_suit_shade(card, shade, bypass_debuff) +function Card.is_suit_shade(card, shade, bypass_debuff) end