The problem I needed to solve
When I added card skins, I did not want new prices or artwork changing card identity. Visual data should be replaceable, with the economy definition referencing it.
Implementation in this snapshot
CardSkinDefinition has fifty-three front slots: fifty-two ordinary cards and a Joker, plus a card back. EnsureStandardSlots creates missing slots while retaining existing references.
The design decision and its cost
GetFrontSprite matches suit and rank. CardSkinShopItemDefinition separately holds pricing and shop imagery, reflecting the separation I described in the cosmetic development narrative.
Current boundaries
Creating a slot does not populate its Sprite. A skin can be structurally complete but visually incomplete, especially when its Joker front is missing.
Review scenarios and contract meaning
A skin change is correct when a jack remains the same jack and only its appearance changes. That makes the suit-and-rank mapping important; an image filename alone is not a reliable gameplay contract. When adding a pack, the front and back assignments should be clear before a shop definition references it. Fifty-three slots include the Joker, but that count says nothing about completed artwork. The structure can be complete while a Sprite is still missing, especially when moving from Hokm to Joker.
Preserving existing references in EnsureStandardSlots helps edit a partially completed pack, because creating missing slots should not erase prior assignments. The tool still does not replace art review. Relevant checks include a specific ordinary suit and rank, an opponent’s card back and the Joker rather than a single sample image. Separating pricing and shop imagery from card fronts also lets a shop offer change without altering card identity. This is a data path for expanding content, not a guarantee that every pack is complete or its images fit every layout.
Card backs matter as much as fronts because hidden opposing cards are part of the visual choice. Changing only the player’s visible hand would make a coherent pack incomplete. I follow that concern in visual consumers rather than rank logic. The shared boundary is broad application of appearance while card meaning remains stable.
What this stage taught me
For me, adding content should mostly be a data task. A new skin can enter the shop and selection flow without a new condition on its name inside Hokm or Joker rules.




