Editorial illustration: Card skins without changing card identity

Card skins without changing card identity

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.

Explore Dalo

Latest devlogs

Editorial illustration: Pasur launch and telemetry in the shared structure

Pasur launch and telemetry in the shared structure

Adding Pasur needs both a correct mode handoff and valid public telemetry.

Read article
Editorial illustration: Pasur bot decisions from capture options

Pasur bot decisions from capture options

My teammate’s Pasur bot chooses among legal options without inspecting hidden opposing cards.

Read article
Editorial illustration: Capturing table cards in Pasur

Capturing table cards in Pasur

In my teammate’s implementation, Pasur combines selecting a hand card with selecting table cards. Its rules must produce valid sets and prohibit ignoring an available capture.

Read article
Dalo