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..ea48e3e18 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) end 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