many deck changes, including pentacles to crowns, middle arcana, and major arcana fa icons

This commit is contained in:
Disco DeDisco
2026-04-05 22:32:40 -04:00
parent c7370bda03
commit c3ab78cc57
11 changed files with 254 additions and 30 deletions

View File

@@ -205,20 +205,24 @@ class DeckVariant(models.Model):
class TarotCard(models.Model):
MAJOR = "MAJOR"
MINOR = "MINOR"
MIDDLE = "MIDDLE" # Earthman court cards (M/J/Q/K)
ARCANA_CHOICES = [
(MAJOR, "Major Arcana"),
(MINOR, "Minor Arcana"),
(MAJOR, "Major Arcana"),
(MINOR, "Minor Arcana"),
(MIDDLE, "Middle Arcana"),
]
WANDS = "WANDS"
CUPS = "CUPS"
SWORDS = "SWORDS"
PENTACLES = "PENTACLES" # Fiorentine 4th suit
CROWNS = "CROWNS" # Earthman 4th suit (renamed from Pentacles)
SUIT_CHOICES = [
(WANDS, "Wands"),
(CUPS, "Cups"),
(SWORDS, "Swords"),
(WANDS, "Wands"),
(CUPS, "Cups"),
(SWORDS, "Swords"),
(PENTACLES, "Pentacles"),
(CROWNS, "Crowns"),
]
deck_variant = models.ForeignKey(
@@ -226,8 +230,9 @@ class TarotCard(models.Model):
on_delete=models.CASCADE, related_name="cards",
)
name = models.CharField(max_length=200)
arcana = models.CharField(max_length=5, choices=ARCANA_CHOICES)
arcana = models.CharField(max_length=6, choices=ARCANA_CHOICES)
suit = models.CharField(max_length=10, choices=SUIT_CHOICES, null=True, blank=True)
icon = models.CharField(max_length=50, blank=True, default='') # FA icon override (e.g. major arcana)
number = models.IntegerField() # 021 major (Fiorentine); 051 major (Earthman); 114 minor
slug = models.SlugField(max_length=120)
correspondence = models.CharField(max_length=200, blank=True) # standard / Italian equivalent
@@ -275,6 +280,8 @@ class TarotCard(models.Model):
@property
def suit_icon(self):
if self.icon:
return self.icon
if self.arcana == self.MAJOR:
return ''
return {
@@ -282,6 +289,7 @@ class TarotCard(models.Model):
self.CUPS: 'fa-trophy',
self.SWORDS: 'fa-gun',
self.PENTACLES: 'fa-star',
self.CROWNS: 'fa-crown',
}.get(self.suit, '')
def __str__(self):
@@ -361,23 +369,23 @@ class SigReservation(models.Model):
def sig_deck_cards(room):
"""Return 36 TarotCard objects forming the Significator deck (18 unique × 2).
PC/BC pair → WANDS + PENTACLES court cards (numbers 1114): 8 unique
SC/AC pair → SWORDS + CUPS court cards (numbers 1114): 8 unique
NC/EC pair → MAJOR arcana numbers 0 and 1: 2 unique
PC/BC pair → WANDS + CROWNS Middle Arcana court cards (1114): 8 unique
SC/AC pair → SWORDS + CUPS Middle Arcana court cards (1114): 8 unique
NC/EC pair → MAJOR arcana numbers 0 and 1: 2 unique
Total: 18 unique × 2 (levity + gravity piles) = 36 cards.
"""
deck_variant = room.owner.equipped_deck
if deck_variant is None:
return []
wands_pentacles = list(TarotCard.objects.filter(
wands_crowns = list(TarotCard.objects.filter(
deck_variant=deck_variant,
arcana=TarotCard.MINOR,
suit__in=[TarotCard.WANDS, TarotCard.PENTACLES],
arcana=TarotCard.MIDDLE,
suit__in=[TarotCard.WANDS, TarotCard.CROWNS],
number__in=[11, 12, 13, 14],
))
swords_cups = list(TarotCard.objects.filter(
deck_variant=deck_variant,
arcana=TarotCard.MINOR,
arcana=TarotCard.MIDDLE,
suit__in=[TarotCard.SWORDS, TarotCard.CUPS],
number__in=[11, 12, 13, 14],
))
@@ -386,7 +394,7 @@ def sig_deck_cards(room):
arcana=TarotCard.MAJOR,
number__in=[0, 1],
))
unique_cards = wands_pentacles + swords_cups + major # 18 unique
unique_cards = wands_crowns + swords_cups + major # 18 unique
return unique_cards + unique_cards # × 2 = 36
@@ -395,15 +403,15 @@ def _sig_unique_cards(room):
deck_variant = room.owner.equipped_deck
if deck_variant is None:
return []
wands_pentacles = list(TarotCard.objects.filter(
wands_crowns = list(TarotCard.objects.filter(
deck_variant=deck_variant,
arcana=TarotCard.MINOR,
suit__in=[TarotCard.WANDS, TarotCard.PENTACLES],
arcana=TarotCard.MIDDLE,
suit__in=[TarotCard.WANDS, TarotCard.CROWNS],
number__in=[11, 12, 13, 14],
))
swords_cups = list(TarotCard.objects.filter(
deck_variant=deck_variant,
arcana=TarotCard.MINOR,
arcana=TarotCard.MIDDLE,
suit__in=[TarotCard.SWORDS, TarotCard.CUPS],
number__in=[11, 12, 13, 14],
))
@@ -412,7 +420,7 @@ def _sig_unique_cards(room):
arcana=TarotCard.MAJOR,
number__in=[0, 1],
))
return wands_pentacles + swords_cups + major
return wands_crowns + swords_cups + major
def levity_sig_cards(room):