diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/output/brilliant/1-001_foil.png b/img/brilliant/1-001_foil.png similarity index 100% rename from output/brilliant/1-001_foil.png rename to img/brilliant/1-001_foil.png diff --git a/output/brilliant/1-002_foil.png b/img/brilliant/1-002_foil.png similarity index 100% rename from output/brilliant/1-002_foil.png rename to img/brilliant/1-002_foil.png diff --git a/output/brilliant/1-003_foil.png b/img/brilliant/1-003_foil.png similarity index 100% rename from output/brilliant/1-003_foil.png rename to img/brilliant/1-003_foil.png diff --git a/output/brilliant/1-004_foil.png b/img/brilliant/1-004_foil.png similarity index 100% rename from output/brilliant/1-004_foil.png rename to img/brilliant/1-004_foil.png diff --git a/output/brilliant/1-005_foil.png b/img/brilliant/1-005_foil.png similarity index 100% rename from output/brilliant/1-005_foil.png rename to img/brilliant/1-005_foil.png diff --git a/output/brilliant/1-006_foil.png b/img/brilliant/1-006_foil.png similarity index 100% rename from output/brilliant/1-006_foil.png rename to img/brilliant/1-006_foil.png diff --git a/output/brilliant/1-007_foil.png b/img/brilliant/1-007_foil.png similarity index 100% rename from output/brilliant/1-007_foil.png rename to img/brilliant/1-007_foil.png diff --git a/output/brilliant/1-008P_foil.png b/img/brilliant/1-008P_foil.png similarity index 100% rename from output/brilliant/1-008P_foil.png rename to img/brilliant/1-008P_foil.png diff --git a/output/brilliant/1-008_foil.png b/img/brilliant/1-008_foil.png similarity index 100% rename from output/brilliant/1-008_foil.png rename to img/brilliant/1-008_foil.png diff --git a/output/brilliant/1-009_foil.png b/img/brilliant/1-009_foil.png similarity index 100% rename from output/brilliant/1-009_foil.png rename to img/brilliant/1-009_foil.png diff --git a/output/brilliant/1-010_foil.png b/img/brilliant/1-010_foil.png similarity index 100% rename from output/brilliant/1-010_foil.png rename to img/brilliant/1-010_foil.png diff --git a/output/brilliant/1-011_foil.png b/img/brilliant/1-011_foil.png similarity index 100% rename from output/brilliant/1-011_foil.png rename to img/brilliant/1-011_foil.png diff --git a/output/brilliant/1-012_foil.png b/img/brilliant/1-012_foil.png similarity index 100% rename from output/brilliant/1-012_foil.png rename to img/brilliant/1-012_foil.png diff --git a/output/brilliant/1-013_foil.png b/img/brilliant/1-013_foil.png similarity index 100% rename from output/brilliant/1-013_foil.png rename to img/brilliant/1-013_foil.png diff --git a/output/brilliant/1-014_foil.png b/img/brilliant/1-014_foil.png similarity index 100% rename from output/brilliant/1-014_foil.png rename to img/brilliant/1-014_foil.png diff --git a/output/brilliant/1-015_foil.png b/img/brilliant/1-015_foil.png similarity index 100% rename from output/brilliant/1-015_foil.png rename to img/brilliant/1-015_foil.png diff --git a/output/brilliant/1-016_foil.png b/img/brilliant/1-016_foil.png similarity index 100% rename from output/brilliant/1-016_foil.png rename to img/brilliant/1-016_foil.png diff --git a/output/brilliant/1-017_foil.png b/img/brilliant/1-017_foil.png similarity index 100% rename from output/brilliant/1-017_foil.png rename to img/brilliant/1-017_foil.png diff --git a/output/brilliant/1-018_foil.png b/img/brilliant/1-018_foil.png similarity index 100% rename from output/brilliant/1-018_foil.png rename to img/brilliant/1-018_foil.png diff --git a/output/brilliant/1-019_foil.png b/img/brilliant/1-019_foil.png similarity index 100% rename from output/brilliant/1-019_foil.png rename to img/brilliant/1-019_foil.png diff --git a/output/brilliant/1-020_foil.png b/img/brilliant/1-020_foil.png similarity index 100% rename from output/brilliant/1-020_foil.png rename to img/brilliant/1-020_foil.png diff --git a/output/brilliant/1-021_foil.png b/img/brilliant/1-021_foil.png similarity index 100% rename from output/brilliant/1-021_foil.png rename to img/brilliant/1-021_foil.png diff --git a/output/brilliant/1-022P_foil.png b/img/brilliant/1-022P_foil.png similarity index 100% rename from output/brilliant/1-022P_foil.png rename to img/brilliant/1-022P_foil.png diff --git a/output/brilliant/1-022_foil.png b/img/brilliant/1-022_foil.png similarity index 100% rename from output/brilliant/1-022_foil.png rename to img/brilliant/1-022_foil.png diff --git a/output/brilliant/1-023_foil.png b/img/brilliant/1-023_foil.png similarity index 100% rename from output/brilliant/1-023_foil.png rename to img/brilliant/1-023_foil.png diff --git a/output/brilliant/1-024_foil.png b/img/brilliant/1-024_foil.png similarity index 100% rename from output/brilliant/1-024_foil.png rename to img/brilliant/1-024_foil.png diff --git a/output/brilliant/1-025_foil.png b/img/brilliant/1-025_foil.png similarity index 100% rename from output/brilliant/1-025_foil.png rename to img/brilliant/1-025_foil.png diff --git a/output/brilliant/1-026_foil.png b/img/brilliant/1-026_foil.png similarity index 100% rename from output/brilliant/1-026_foil.png rename to img/brilliant/1-026_foil.png diff --git a/output/brilliant/1-027_foil.png b/img/brilliant/1-027_foil.png similarity index 100% rename from output/brilliant/1-027_foil.png rename to img/brilliant/1-027_foil.png diff --git a/output/brilliant/1-028_foil.png b/img/brilliant/1-028_foil.png similarity index 100% rename from output/brilliant/1-028_foil.png rename to img/brilliant/1-028_foil.png diff --git a/output/brilliant/1-029_foil.png b/img/brilliant/1-029_foil.png similarity index 100% rename from output/brilliant/1-029_foil.png rename to img/brilliant/1-029_foil.png diff --git a/output/brilliant/1-030_foil.png b/img/brilliant/1-030_foil.png similarity index 100% rename from output/brilliant/1-030_foil.png rename to img/brilliant/1-030_foil.png diff --git a/output/brilliant/1-031_foil.png b/img/brilliant/1-031_foil.png similarity index 100% rename from output/brilliant/1-031_foil.png rename to img/brilliant/1-031_foil.png diff --git a/output/brilliant/1-032P_foil.png b/img/brilliant/1-032P_foil.png similarity index 100% rename from output/brilliant/1-032P_foil.png rename to img/brilliant/1-032P_foil.png diff --git a/output/brilliant/1-032_foil.png b/img/brilliant/1-032_foil.png similarity index 100% rename from output/brilliant/1-032_foil.png rename to img/brilliant/1-032_foil.png diff --git a/output/brilliant/1-033_foil.png b/img/brilliant/1-033_foil.png similarity index 100% rename from output/brilliant/1-033_foil.png rename to img/brilliant/1-033_foil.png diff --git a/output/brilliant/1-034_foil.png b/img/brilliant/1-034_foil.png similarity index 100% rename from output/brilliant/1-034_foil.png rename to img/brilliant/1-034_foil.png diff --git a/output/brilliant/1-035_foil.png b/img/brilliant/1-035_foil.png similarity index 100% rename from output/brilliant/1-035_foil.png rename to img/brilliant/1-035_foil.png diff --git a/output/brilliant/1-036_foil.png b/img/brilliant/1-036_foil.png similarity index 100% rename from output/brilliant/1-036_foil.png rename to img/brilliant/1-036_foil.png diff --git a/output/brilliant/1-037_foil.png b/img/brilliant/1-037_foil.png similarity index 100% rename from output/brilliant/1-037_foil.png rename to img/brilliant/1-037_foil.png diff --git a/output/brilliant/1-038_foil.png b/img/brilliant/1-038_foil.png similarity index 100% rename from output/brilliant/1-038_foil.png rename to img/brilliant/1-038_foil.png diff --git a/output/brilliant/1-039_foil.png b/img/brilliant/1-039_foil.png similarity index 100% rename from output/brilliant/1-039_foil.png rename to img/brilliant/1-039_foil.png diff --git a/output/brilliant/1-040_foil.png b/img/brilliant/1-040_foil.png similarity index 100% rename from output/brilliant/1-040_foil.png rename to img/brilliant/1-040_foil.png diff --git a/output/brilliant/1-041_foil.png b/img/brilliant/1-041_foil.png similarity index 100% rename from output/brilliant/1-041_foil.png rename to img/brilliant/1-041_foil.png diff --git a/output/brilliant/1-042_foil.png b/img/brilliant/1-042_foil.png similarity index 100% rename from output/brilliant/1-042_foil.png rename to img/brilliant/1-042_foil.png diff --git a/output/brilliant/1-043P_foil.png b/img/brilliant/1-043P_foil.png similarity index 100% rename from output/brilliant/1-043P_foil.png rename to img/brilliant/1-043P_foil.png diff --git a/output/brilliant/1-043_foil.png b/img/brilliant/1-043_foil.png similarity index 100% rename from output/brilliant/1-043_foil.png rename to img/brilliant/1-043_foil.png diff --git a/output/brilliant/1-044_foil.png b/img/brilliant/1-044_foil.png similarity index 100% rename from output/brilliant/1-044_foil.png rename to img/brilliant/1-044_foil.png diff --git a/output/brilliant/1-045_foil.png b/img/brilliant/1-045_foil.png similarity index 100% rename from output/brilliant/1-045_foil.png rename to img/brilliant/1-045_foil.png diff --git a/output/brilliant/1-046_foil.png b/img/brilliant/1-046_foil.png similarity index 100% rename from output/brilliant/1-046_foil.png rename to img/brilliant/1-046_foil.png diff --git a/output/brilliant/1-047_foil.png b/img/brilliant/1-047_foil.png similarity index 100% rename from output/brilliant/1-047_foil.png rename to img/brilliant/1-047_foil.png diff --git a/output/brilliant/1-048_foil.png b/img/brilliant/1-048_foil.png similarity index 100% rename from output/brilliant/1-048_foil.png rename to img/brilliant/1-048_foil.png diff --git a/output/brilliant/1-049_foil.png b/img/brilliant/1-049_foil.png similarity index 100% rename from output/brilliant/1-049_foil.png rename to img/brilliant/1-049_foil.png diff --git a/output/brilliant/1-050_foil.png b/img/brilliant/1-050_foil.png similarity index 100% rename from output/brilliant/1-050_foil.png rename to img/brilliant/1-050_foil.png diff --git a/output/brilliant/1-051_foil.png b/img/brilliant/1-051_foil.png similarity index 100% rename from output/brilliant/1-051_foil.png rename to img/brilliant/1-051_foil.png diff --git a/output/brilliant/1-052_foil.png b/img/brilliant/1-052_foil.png similarity index 100% rename from output/brilliant/1-052_foil.png rename to img/brilliant/1-052_foil.png diff --git a/output/brilliant/1-053_foil.png b/img/brilliant/1-053_foil.png similarity index 100% rename from output/brilliant/1-053_foil.png rename to img/brilliant/1-053_foil.png diff --git a/output/brilliant/1-054_foil.png b/img/brilliant/1-054_foil.png similarity index 100% rename from output/brilliant/1-054_foil.png rename to img/brilliant/1-054_foil.png diff --git a/output/brilliant/1-055_foil.png b/img/brilliant/1-055_foil.png similarity index 100% rename from output/brilliant/1-055_foil.png rename to img/brilliant/1-055_foil.png diff --git a/output/brilliant/1-056_foil.png b/img/brilliant/1-056_foil.png similarity index 100% rename from output/brilliant/1-056_foil.png rename to img/brilliant/1-056_foil.png diff --git a/output/brilliant/1-057_foil.png b/img/brilliant/1-057_foil.png similarity index 100% rename from output/brilliant/1-057_foil.png rename to img/brilliant/1-057_foil.png diff --git a/output/brilliant/1-058_foil.png b/img/brilliant/1-058_foil.png similarity index 100% rename from output/brilliant/1-058_foil.png rename to img/brilliant/1-058_foil.png diff --git a/output/brilliant/1-059P_foil.png b/img/brilliant/1-059P_foil.png similarity index 100% rename from output/brilliant/1-059P_foil.png rename to img/brilliant/1-059P_foil.png diff --git a/output/brilliant/1-059_foil.png b/img/brilliant/1-059_foil.png similarity index 100% rename from output/brilliant/1-059_foil.png rename to img/brilliant/1-059_foil.png diff --git a/output/brilliant/1-060_foil.png b/img/brilliant/1-060_foil.png similarity index 100% rename from output/brilliant/1-060_foil.png rename to img/brilliant/1-060_foil.png diff --git a/output/brilliant/1-061_foil.png b/img/brilliant/1-061_foil.png similarity index 100% rename from output/brilliant/1-061_foil.png rename to img/brilliant/1-061_foil.png diff --git a/output/brilliant/1-062_foil.png b/img/brilliant/1-062_foil.png similarity index 100% rename from output/brilliant/1-062_foil.png rename to img/brilliant/1-062_foil.png diff --git a/output/brilliant/1-063_foil.png b/img/brilliant/1-063_foil.png similarity index 100% rename from output/brilliant/1-063_foil.png rename to img/brilliant/1-063_foil.png diff --git a/output/brilliant/1-064_foil.png b/img/brilliant/1-064_foil.png similarity index 100% rename from output/brilliant/1-064_foil.png rename to img/brilliant/1-064_foil.png diff --git a/output/brilliant/1-065_foil.png b/img/brilliant/1-065_foil.png similarity index 100% rename from output/brilliant/1-065_foil.png rename to img/brilliant/1-065_foil.png diff --git a/output/brilliant/1-066F_foil.png b/img/brilliant/1-066F_foil.png similarity index 100% rename from output/brilliant/1-066F_foil.png rename to img/brilliant/1-066F_foil.png diff --git a/output/brilliant/1-067F_foil.png b/img/brilliant/1-067F_foil.png similarity index 100% rename from output/brilliant/1-067F_foil.png rename to img/brilliant/1-067F_foil.png diff --git a/output/sideab/1-001.png b/img/sideab/1-001.png similarity index 100% rename from output/sideab/1-001.png rename to img/sideab/1-001.png diff --git a/output/sideab/1-002.png b/img/sideab/1-002.png similarity index 100% rename from output/sideab/1-002.png rename to img/sideab/1-002.png diff --git a/output/sideab/1-003.png b/img/sideab/1-003.png similarity index 100% rename from output/sideab/1-003.png rename to img/sideab/1-003.png diff --git a/output/sideab/1-004.png b/img/sideab/1-004.png similarity index 100% rename from output/sideab/1-004.png rename to img/sideab/1-004.png diff --git a/output/sideab/1-005.png b/img/sideab/1-005.png similarity index 100% rename from output/sideab/1-005.png rename to img/sideab/1-005.png diff --git a/output/sideab/1-006.png b/img/sideab/1-006.png similarity index 100% rename from output/sideab/1-006.png rename to img/sideab/1-006.png diff --git a/output/sideab/1-007.png b/img/sideab/1-007.png similarity index 100% rename from output/sideab/1-007.png rename to img/sideab/1-007.png diff --git a/output/sideab/1-008.png b/img/sideab/1-008.png similarity index 100% rename from output/sideab/1-008.png rename to img/sideab/1-008.png diff --git a/output/sideab/1-009.png b/img/sideab/1-009.png similarity index 100% rename from output/sideab/1-009.png rename to img/sideab/1-009.png diff --git a/output/sideab/1-010.png b/img/sideab/1-010.png similarity index 100% rename from output/sideab/1-010.png rename to img/sideab/1-010.png diff --git a/output/sideab/1-011.png b/img/sideab/1-011.png similarity index 100% rename from output/sideab/1-011.png rename to img/sideab/1-011.png diff --git a/output/sideab/1-012.png b/img/sideab/1-012.png similarity index 100% rename from output/sideab/1-012.png rename to img/sideab/1-012.png diff --git a/output/sideab/1-013.png b/img/sideab/1-013.png similarity index 100% rename from output/sideab/1-013.png rename to img/sideab/1-013.png diff --git a/output/sideab/1-014.png b/img/sideab/1-014.png similarity index 100% rename from output/sideab/1-014.png rename to img/sideab/1-014.png diff --git a/output/sideab/1-015.png b/img/sideab/1-015.png similarity index 100% rename from output/sideab/1-015.png rename to img/sideab/1-015.png diff --git a/output/sideab/1-016.png b/img/sideab/1-016.png similarity index 100% rename from output/sideab/1-016.png rename to img/sideab/1-016.png diff --git a/output/sideab/1-017.png b/img/sideab/1-017.png similarity index 100% rename from output/sideab/1-017.png rename to img/sideab/1-017.png diff --git a/output/sideab/1-018.png b/img/sideab/1-018.png similarity index 100% rename from output/sideab/1-018.png rename to img/sideab/1-018.png diff --git a/output/sideab/1-019.png b/img/sideab/1-019.png similarity index 100% rename from output/sideab/1-019.png rename to img/sideab/1-019.png diff --git a/output/sideab/1-020.png b/img/sideab/1-020.png similarity index 100% rename from output/sideab/1-020.png rename to img/sideab/1-020.png diff --git a/output/sideab/1-021.png b/img/sideab/1-021.png similarity index 100% rename from output/sideab/1-021.png rename to img/sideab/1-021.png diff --git a/output/sideab/1-022.png b/img/sideab/1-022.png similarity index 100% rename from output/sideab/1-022.png rename to img/sideab/1-022.png diff --git a/output/sideab/1-023.png b/img/sideab/1-023.png similarity index 100% rename from output/sideab/1-023.png rename to img/sideab/1-023.png diff --git a/output/sideab/1-024.png b/img/sideab/1-024.png similarity index 100% rename from output/sideab/1-024.png rename to img/sideab/1-024.png diff --git a/output/sideab/1-025.png b/img/sideab/1-025.png similarity index 100% rename from output/sideab/1-025.png rename to img/sideab/1-025.png diff --git a/output/sideab/1-026.png b/img/sideab/1-026.png similarity index 100% rename from output/sideab/1-026.png rename to img/sideab/1-026.png diff --git a/output/sideab/1-027.png b/img/sideab/1-027.png similarity index 100% rename from output/sideab/1-027.png rename to img/sideab/1-027.png diff --git a/output/sideab/1-028.png b/img/sideab/1-028.png similarity index 100% rename from output/sideab/1-028.png rename to img/sideab/1-028.png diff --git a/output/sideab/1-029.png b/img/sideab/1-029.png similarity index 100% rename from output/sideab/1-029.png rename to img/sideab/1-029.png diff --git a/output/sideab/1-030.png b/img/sideab/1-030.png similarity index 100% rename from output/sideab/1-030.png rename to img/sideab/1-030.png diff --git a/output/sideab/1-031.png b/img/sideab/1-031.png similarity index 100% rename from output/sideab/1-031.png rename to img/sideab/1-031.png diff --git a/output/sideab/1-032.png b/img/sideab/1-032.png similarity index 100% rename from output/sideab/1-032.png rename to img/sideab/1-032.png diff --git a/output/sideab/1-033.png b/img/sideab/1-033.png similarity index 100% rename from output/sideab/1-033.png rename to img/sideab/1-033.png diff --git a/output/sideab/1-034.png b/img/sideab/1-034.png similarity index 100% rename from output/sideab/1-034.png rename to img/sideab/1-034.png diff --git a/output/sideab/1-035.png b/img/sideab/1-035.png similarity index 100% rename from output/sideab/1-035.png rename to img/sideab/1-035.png diff --git a/output/sideab/1-036.png b/img/sideab/1-036.png similarity index 100% rename from output/sideab/1-036.png rename to img/sideab/1-036.png diff --git a/output/sideab/1-037.png b/img/sideab/1-037.png similarity index 100% rename from output/sideab/1-037.png rename to img/sideab/1-037.png diff --git a/output/sideab/1-038.png b/img/sideab/1-038.png similarity index 100% rename from output/sideab/1-038.png rename to img/sideab/1-038.png diff --git a/output/sideab/1-039.png b/img/sideab/1-039.png similarity index 100% rename from output/sideab/1-039.png rename to img/sideab/1-039.png diff --git a/output/sideab/1-040.png b/img/sideab/1-040.png similarity index 100% rename from output/sideab/1-040.png rename to img/sideab/1-040.png diff --git a/output/sideab/1-041.png b/img/sideab/1-041.png similarity index 100% rename from output/sideab/1-041.png rename to img/sideab/1-041.png diff --git a/output/sideab/1-042.png b/img/sideab/1-042.png similarity index 100% rename from output/sideab/1-042.png rename to img/sideab/1-042.png diff --git a/output/sideab/1-043.png b/img/sideab/1-043.png similarity index 100% rename from output/sideab/1-043.png rename to img/sideab/1-043.png diff --git a/output/sideab/1-044.png b/img/sideab/1-044.png similarity index 100% rename from output/sideab/1-044.png rename to img/sideab/1-044.png diff --git a/output/sideab/1-045.png b/img/sideab/1-045.png similarity index 100% rename from output/sideab/1-045.png rename to img/sideab/1-045.png diff --git a/output/sideab/1-046.png b/img/sideab/1-046.png similarity index 100% rename from output/sideab/1-046.png rename to img/sideab/1-046.png diff --git a/output/sideab/1-047.png b/img/sideab/1-047.png similarity index 100% rename from output/sideab/1-047.png rename to img/sideab/1-047.png diff --git a/output/sideab/1-048.png b/img/sideab/1-048.png similarity index 100% rename from output/sideab/1-048.png rename to img/sideab/1-048.png diff --git a/output/sideab/1-049.png b/img/sideab/1-049.png similarity index 100% rename from output/sideab/1-049.png rename to img/sideab/1-049.png diff --git a/output/sideab/1-050.png b/img/sideab/1-050.png similarity index 100% rename from output/sideab/1-050.png rename to img/sideab/1-050.png diff --git a/output/sideab/1-051.png b/img/sideab/1-051.png similarity index 100% rename from output/sideab/1-051.png rename to img/sideab/1-051.png diff --git a/output/sideab/1-052.png b/img/sideab/1-052.png similarity index 100% rename from output/sideab/1-052.png rename to img/sideab/1-052.png diff --git a/output/sideab/1-053.png b/img/sideab/1-053.png similarity index 100% rename from output/sideab/1-053.png rename to img/sideab/1-053.png diff --git a/output/sideab/1-054.png b/img/sideab/1-054.png similarity index 100% rename from output/sideab/1-054.png rename to img/sideab/1-054.png diff --git a/output/sideab/1-055.png b/img/sideab/1-055.png similarity index 100% rename from output/sideab/1-055.png rename to img/sideab/1-055.png diff --git a/output/sideab/1-056.png b/img/sideab/1-056.png similarity index 100% rename from output/sideab/1-056.png rename to img/sideab/1-056.png diff --git a/output/sideab/1-057.png b/img/sideab/1-057.png similarity index 100% rename from output/sideab/1-057.png rename to img/sideab/1-057.png diff --git a/output/sideab/1-058.png b/img/sideab/1-058.png similarity index 100% rename from output/sideab/1-058.png rename to img/sideab/1-058.png diff --git a/output/sideab/1-059.png b/img/sideab/1-059.png similarity index 100% rename from output/sideab/1-059.png rename to img/sideab/1-059.png diff --git a/output/sideab/1-060.png b/img/sideab/1-060.png similarity index 100% rename from output/sideab/1-060.png rename to img/sideab/1-060.png diff --git a/output/sideab/1-061.png b/img/sideab/1-061.png similarity index 100% rename from output/sideab/1-061.png rename to img/sideab/1-061.png diff --git a/output/sideab/1-062.png b/img/sideab/1-062.png similarity index 100% rename from output/sideab/1-062.png rename to img/sideab/1-062.png diff --git a/output/sideab/1-063.png b/img/sideab/1-063.png similarity index 100% rename from output/sideab/1-063.png rename to img/sideab/1-063.png diff --git a/output/sideab/1-064.png b/img/sideab/1-064.png similarity index 100% rename from output/sideab/1-064.png rename to img/sideab/1-064.png diff --git a/output/sideab/1-065.png b/img/sideab/1-065.png similarity index 100% rename from output/sideab/1-065.png rename to img/sideab/1-065.png diff --git a/output/sideab/omega.png b/img/sideab/omega.png similarity index 100% rename from output/sideab/omega.png rename to img/sideab/omega.png diff --git a/output/sideab/sigma.png b/img/sideab/sigma.png similarity index 100% rename from output/sideab/sigma.png rename to img/sideab/sigma.png diff --git a/main.py b/main.py deleted file mode 100644 index 1807d8d..0000000 --- a/main.py +++ /dev/null @@ -1,237 +0,0 @@ -from pathlib import Path -from typing import List -import requests -from model import ( - Product, - Card, - ActionAttr, - AbilityType, - CardColor, - CardType, - Ability, - Ex, - Link, - ProgressAttr, - StartAttr, - FrameType, - CollectionAttr, -) -from utils import from_json, get_safe_value, get_member_from_enum, to_json - -imgBaseDir = "./output" -imgBaseURL = "https://ange-unite.com/_assets_/hjangeunite" -productsMetaPath = "./meta/product.json" -cardsRawPath = ["./meta/raw/1.json"] - -productsMeta = from_json(productsMetaPath) - - -def save_product_image(product_id: str) -> bool: - foil = productsMeta[product_id]["foil"] - productUrl = productsMeta[product_id]["url"] - for card_index in productsMeta[product_id]["cards_index"]: - cardFilename = f"{card_index}_foil.png" if foil else f"{card_index}.png" - - image_url = f"{imgBaseURL}/{productUrl}/{cardFilename}" - image_dir = Path(imgBaseDir).joinpath(product_id) - image_path = image_dir.joinpath(cardFilename) - - if image_path.exists(): - continue - else: - image_dir.mkdir(parents=True, exist_ok=True) - - try: - response = requests.get(image_url) - response.raise_for_status() - f = open(image_path, "wb") - f.write(response.content) - except requests.exceptions.RequestException as e: - print(f"{product_id}/{card_index} image is unavailable. {e}") - return False - except Exception as e: - print(f"Error ocured. {e}") - return False - return True - - -if __name__ == "__main__": - products = ["sideab", "brilliant"] - - output: List[Product] = [] - - for product_id in products: - product = productsMeta[product_id] - - product_name = product["name"] - product_release_date = product["release_date"] - product_main_expansion = product["main_expansion"] - product_series_id = product["series_id"] - product_cards_index = product["cards_index"] - product_foil = product["foil"] - - product_cards_meta = from_json(f"./meta/raw/{product_series_id}.json")["cards"] - - save_product_image(product_id) - - outP = Product( - product_id, - product_name, - product_release_date, - product_main_expansion, - ) - - flag = True - for i, card_index in enumerate(product_cards_index): - if card_index in ["omega", "sigma"]: - card_no = card_index - effect_index = card_index - else: - card_no = card_index.split("-")[1] - if card_no[-1] == "P": - card_alternate_art = True - card_no = card_no[:-1] - effect_index = f"{product_series_id}-{card_no}" - elif card_no[-1] == "F": - card_alternate_art = True - card_no = "omega" if flag else "sigma" - effect_index = "omega" if flag else "sigma" - flag = not flag - else: - card_alternate_art = False - effect_index = f"{product_series_id}-{card_no}" - - idx = -1 - for j, match in enumerate(product_cards_meta): - if match["collection_attr"]["card_index"] == card_no: - idx = j - break - if idx == -1: - print("Error") - exit(1) - - card_meta = product_cards_meta[idx] - - # print(card_meta, "\n\n") - - card_name = card_meta["name"] - card_type = get_member_from_enum( - CardType, get_safe_value(card_meta["type"], "") - ) - card_level = card_meta["level"] - card_color = get_member_from_enum( - CardColor, get_safe_value(card_meta["color"], "") - ) - card_start_attr, card_progress_attr, card_action_attr, card_frame_attr = ( - None, - None, - None, - None, - ) - if card_type == CardType.Start: - card_start_attr = StartAttr( - get_member_from_enum( - FrameType, card_meta["start_attr"]["frame_attr"] - ), - ) - elif card_type == CardType.Progress: - card_progress_attr = ProgressAttr( - card_meta["progress_attr"]["character"], - Link( - card_meta["progress_attr"]["link"]["cost"], - ( - card_meta["progress_attr"]["link"]["condition"]["Omega"], - card_meta["progress_attr"]["link"]["condition"]["Sigma"], - card_meta["progress_attr"]["link"]["condition"]["Any"], - ), - card_meta["progress_attr"]["link"]["effect"], - ) - if card_meta["progress_attr"]["link"] - else None, - Ex( - card_meta["progress_attr"]["ex"]["name"], - card_meta["progress_attr"]["ex"]["effect"], - ) - if card_meta["progress_attr"]["ex"] - else None, - ) - elif card_type == CardType.Action: - card_action_attr = ActionAttr( - card_meta["action_attr"]["condition"], - card_meta["action_attr"]["effect"], - ) - elif card_type == CardType.Frame: - card_frame_attr = get_member_from_enum( - FrameType, card_meta["frame_attr"] - ) - - if card_type == CardType.Start: - card_abilities = [ - Ability( - get_member_from_enum( - AbilityType, get_safe_value(ability["type"], "") - ), - ability["effect"], - ) - for ability in card_meta["start_attr"]["abilities"] - ] - elif card_type == CardType.Progress: - card_abilities = [ - Ability( - get_member_from_enum( - AbilityType, get_safe_value(ability["type"], "") - ), - ability["effect"], - ) - for ability in card_meta["progress_attr"]["abilities"] - ] - - else: - card_abilities = [] - - card_atk = card_meta["atk"] if card_meta["atk"] else None - card_def = card_meta["def"] if card_meta["def"] else None - card_stk = card_meta["stk"] if card_meta["stk"] else None - card_flavor_text = ( - card_meta["flavor_text"] if card_meta["flavor_text"] else None - ) - - card_collection_attr = CollectionAttr( - product_series_id, - card_index, - effect_index, - product_id, - product_name, - product_foil, - card_meta["collection_attr"]["alternate_art"] - if card_meta["collection_attr"]["alternate_art"] - else False, - card_meta["collection_attr"]["artist"] - if card_meta["collection_attr"]["artist"] - else None, - card_meta["collection_attr"]["promo"] - if card_meta["collection_attr"]["promo"] - else None, - ) - outC = Card( - card_name, - card_type, - card_level, - card_color, - card_abilities, - card_start_attr, - card_progress_attr, - card_action_attr, - card_frame_attr, - card_atk, - card_def, - card_stk, - card_flavor_text, - card_collection_attr, - ) - outP.cards.append(outC) - output.append(outP) - - to_json( - output, - ) diff --git a/meta/product.json b/meta/product.json deleted file mode 100644 index 61bb0d8..0000000 --- a/meta/product.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "sideab": { - "id": "sideab", - "name": "アンジュ・ユナイト side:α/side:β", - "release_date": "2023-09-01T09:00:00Z", - "main_expansion": true, - "series_id": "1", - "url": "/cardlist01/large", - "foil": false, - "cards_index": [ - "1-001", - "1-002", - "1-003", - "1-004", - "1-005", - "1-006", - "1-007", - "1-008", - "1-009", - "1-010", - "1-011", - "1-012", - "1-013", - "1-014", - "1-015", - "1-016", - "1-017", - "1-018", - "1-019", - "1-020", - "1-021", - "1-022", - "1-023", - "1-024", - "1-025", - "1-026", - "1-027", - "1-028", - "1-029", - "1-030", - "1-031", - "1-032", - "1-033", - "1-034", - "1-035", - "1-036", - "1-037", - "1-038", - "1-039", - "1-040", - "1-041", - "1-042", - "1-043", - "1-044", - "1-045", - "1-046", - "1-047", - "1-048", - "1-049", - "1-050", - "1-051", - "1-052", - "1-053", - "1-054", - "1-055", - "1-056", - "1-057", - "1-058", - "1-059", - "1-060", - "1-061", - "1-062", - "1-063", - "1-064", - "1-065", - "omega", - "sigma" - ] - }, - "brilliant": { - "id": "brilliant", - "name": "アンジュ・ユナイト ブリリアントパック Vol.1", - "release_date": "2023-09-01T09:00:00Z", - "main_expansion": true, - "series_id": "1", - "url": "/cardlist01/large", - "foil": true, - "cards_index": [ - "1-001", - "1-002", - "1-003", - "1-004", - "1-005", - "1-006", - "1-007", - "1-008", - "1-008P", - "1-009", - "1-010", - "1-011", - "1-012", - "1-013", - "1-014", - "1-015", - "1-016", - "1-017", - "1-018", - "1-019", - "1-020", - "1-021", - "1-022", - "1-022P", - "1-023", - "1-024", - "1-025", - "1-026", - "1-027", - "1-028", - "1-029", - "1-030", - "1-031", - "1-032", - "1-032P", - "1-033", - "1-034", - "1-035", - "1-036", - "1-037", - "1-038", - "1-039", - "1-040", - "1-041", - "1-042", - "1-043", - "1-043P", - "1-044", - "1-045", - "1-046", - "1-047", - "1-048", - "1-049", - "1-050", - "1-051", - "1-052", - "1-053", - "1-054", - "1-055", - "1-056", - "1-057", - "1-058", - "1-059", - "1-059P", - "1-060", - "1-061", - "1-062", - "1-063", - "1-064", - "1-065", - "1-066F", - "1-067F" - ] - } -} diff --git a/meta/raw/1.json b/meta/raw/1.json deleted file mode 100644 index 01791af..0000000 --- a/meta/raw/1.json +++ /dev/null @@ -1,2595 +0,0 @@ -{ - "id": "cardlist1", - "cards": [ - { - "name": "つまみ食いはダメ!", - "type": "Progress", - "level": 1, - "color": "Blue", - "start_attr": null, - "progress_attr": { - "character": "千尋", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、1枚引き、手札を1枚捨てる。" - } - ], - "link": { - "cost": 3, - "condition": { - "Omega": 2, - "Sigma": 0, - "Any": 0 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 1, - "flavor_text": "「お兄ちゃんは本当に私がいないとダメなんだから……」", - "collection_attr": { - "series_id": "1", - "card_index": "001", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "サワダ", - "promo": null - } - }, - { - "name": "大切なきすな", - "type": "Progress", - "level": 2, - "color": "Blue", - - "start_attr": null, - "progress_attr": { - "character": "彩城天音", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、1枚引く。" - } - ], - "link": { - "cost": 3, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 0 - }, - "effect": "ATK+5000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 4000, - "def": 4000, - "stk": 1, - "flavor_text": "「αドライバーっていいよね!絆でみんなを強くできるんだもん」", - "collection_attr": { - "series_id": "1", - "card_index": "002", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "2人だけの時間", - "type": "Progress", - "level": 2, - "color": "Blue", - - "start_attr": null, - "progress_attr": { - "character": "東条遥", - "abilities": [], - "link": { - "cost": 3, - "condition": { - "Omega": 0, - "Sigma": 1, - "Any": 1 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 6000, - "def": 6000, - "stk": 1, - "flavor_text": "「放課後は風紀委員として、街にパトロールに行かなきゃね!」", - "collection_attr": { - "series_id": "1", - "card_index": "003", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "理想のメイド!?", - "type": "Progress", - "level": 3, - "color": "Blue", - - "start_attr": null, - "progress_attr": { - "character": "新田由美", - "abilities": [], - "link": { - "cost": 4, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 0 - }, - "effect": "ATK+6000。1枚引く。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 7000, - "def": 8000, - "stk": 1, - "flavor_text": "「せんばーい?相も変わらす、新田に夢中ですね~?」", - "collection_attr": { - "series_id": "1", - "card_index": "004", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "くらは", - "promo": null - } - }, - { - "name": "笑顔の可能性", - "type": "Progress", - "level": 3, - "color": "Blue", - - "start_attr": null, - "progress_attr": { - "character": "日向美海", - "abilities": [], - "link": { - "cost": 4, - "condition": { - "Omega": 2, - "Sigma": 0, - "Any": 0 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 8000, - "def": 8000, - "stk": 1, - "flavor_text": "彼女が紡き出す風は、無限の可能性に満ちていた。", - "collection_attr": { - "series_id": "1", - "card_index": "005", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "カントク", - "promo": null - } - }, - { - "name": "グラヴィティ·シャボン", - "type": "Progress", - "level": 4, - "color": "Blue", - - "start_attr": null, - "progress_attr": { - "character": "千尋", - "abilities": [], - "link": { - "cost": 5, - "condition": { - "Omega": 2, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+7000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 8000, - "def": 8000, - "stk": 1, - "flavor_text": "「お兄ちゃんとの絆のカ……やつばり、安心するなあ」", - "collection_attr": { - "series_id": "1", - "card_index": "006", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "覚醒めし少女の煌めき", - "type": "Progress", - "level": 4, - "color": "Blue", - - "start_attr": null, - "progress_attr": { - "character": "東条遥", - "abilities": [], - "link": { - "cost": 6, - "condition": { - "Omega": 0, - "Sigma": 1, - "Any": 2 - }, - "effect": "ATK+7000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 9000, - "def": 9000, - "stk": 1, - "flavor_text": "「本気の風紀委員のカ……見せてあげる!」", - "collection_attr": { - "series_id": "1", - "card_index": "007", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "みんなの希望", - "type": "Progress", - "level": 5, - "color": "Blue", - - "start_attr": null, - "progress_attr": { - "character": "彩城天音", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、2枚引き、手札を1枚捨てる。" - } - ], - "link": { - "cost": 6, - "condition": { - "Omega": 2, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+8000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 9000, - "def": 9000, - "stk": 1, - "flavor_text": "「グッジョブ!あははつ、きみと一緒なら安心だね!」", - "collection_attr": { - "series_id": "1", - "card_index": "008", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "炎武ー閃", - "type": "Progress", - "level": 5, - "color": "Blue", - - "start_attr": null, - "progress_attr": { - "character": "御影葵", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、あなたのデッキの上から2枚見て、デッキの上、または下に自由に戻す。" - } - ], - "link": { - "cost": 6, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 1 - }, - "effect": "ATK+8000。あなたのデッキの上から1枚見て、デッキの上、または下に自由に戻す。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 10000, - "def": 10000, - "stk": 1, - "flavor_text": "「すべてを断ち切る・・・・・・刹那に切れぬものはない!」", - "collection_attr": { - "series_id": "1", - "card_index": "009", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "なかじまゆか", - "promo": null - } - }, - { - "name": "常夏の可能性", - "type": "Progress", - "level": 6, - "color": "Blue", - - "start_attr": null, - "progress_attr": { - "character": "日向美海", - "abilities": [], - "link": { - "cost": 7, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 2 - }, - "effect": "ATK+8000。1枚引く。" - }, - "ex": { - "name": "コネクト・ウインド", - "effect": "2枚引く。" - } - }, - "action_attr": null, - "frame_attr": null, - "atk": 9000, - "def": 9000, - "stk": 1, - "flavor_text": "「よーし、風のカで、もっと大きな波を起こしちゃうよ!」", - "collection_attr": { - "series_id": "1", - "card_index": "010", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "カントク", - "promo": null - } - }, - { - "name": "心を照らす輝き", - "type": "Progress", - "level": 7, - "color": "Blue", - - "start_attr": null, - "progress_attr": { - "character": "蒼月紗夜", - "abilities": [ - { - "type": "Persistent", - "effect": "手札が2枚以上の場合、ATK+4000。" - }, - { - "type": "Activated", - "effect": "手札を1枚捨てる:青のプログレス1体を選び、リンク十2(1体のプログレスにつき1回まで)。" - } - ], - "link": { - "cost": 8, - "condition": { - "Omega": 2, - "Sigma": 1, - "Any": 2 - }, - "effect": "ATK+9000。ほかのプログレス1体を選び、ATK+4000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 11000, - "def": 11000, - "stk": 2, - "flavor_text": "「私は、特別になりたい……そのためなら、なんだってする!」", - "collection_attr": { - "series_id": "1", - "card_index": "011", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "涼香", - "promo": null - } - }, - { - "name": "風が繋ぐカ", - "type": "Action", - "level": 0, - "color": "Blue", - "text": "[条件] 青のプログレス2体以上(スタートカードは含まない)。\nチャージを1枚捨てる。そうした場合、2枚引く。", - "start_attr": null, - "progress_attr": null, - "action_attr": { - "condition": "青のプログレス2体以上(スタートカードは含まない)。", - "effect": "チャージを1枚捨てる。そうした場合、2枚引く。" - }, - "frame_attr": null, - "atk": null, - "def": null, - "stk": null, - "flavor_text": "青の世界に吹く風は、どこか優しく、温かい。", - "collection_attr": { - "series_id": "1", - "card_index": "012", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ONION", - "promo": null - } - }, - { - "name": "気高い吸血鬼", - "type": "Progress", - "level": 1, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "アルマリア", - "abilities": [], - "link": { - "cost": 3, - "condition": { - "Omega": 0, - "Sigma": 1, - "Any": 1 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 1, - "flavor_text": "彼女にとって吸血とは、お互いの絆を確かめ合うための行為だ。", - "collection_attr": { - "series_id": "1", - "card_index": "013", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ぽよよん♥ろっく", - "promo": null - } - }, - { - "name": "永遠に輝く漆黒の花嫁", - "type": "Progress", - "level": 2, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "テオドーチェ", - "abilities": [], - "link": { - "cost": 3, - "condition": { - "Omega": 1, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+4000。チャージ+1。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 1, - "flavor_text": "テオドーチェは天才悪魔だ。本人がそういうのだから間違いない。", - "collection_attr": { - "series_id": "1", - "card_index": "014", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "大いなる預言", - "type": "Progress", - "level": 2, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "リュミエール", - "abilities": [], - "link": { - "cost": 3, - "condition": { - "Omega": 1, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 7000, - "def": 5000, - "stk": 1, - "flavor_text": "緑豊かなエルフの森で、彼女は魔曲を奏でている。", - "collection_attr": { - "series_id": "1", - "card_index": "015", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "有河サトル", - "promo": null - } - }, - { - "name": "真夏の吸血鬼", - "type": "Progress", - "level": 3, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "アルマリア", - "abilities": [], - "link": { - "cost": 4, - "condition": { - "Omega": 2, - "Sigma": 0, - "Any": 0 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 9000, - "def": 7000, - "stk": 1, - "flavor_text": "「黒の世界には、そもそも太陽なんてないんですよ」", - "collection_attr": { - "series_id": "1", - "card_index": "016", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ぽよよん♥ろっく", - "promo": null - } - }, - { - "name": "幻想のメイド", - "type": "Progress", - "level": 3, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "ロザリー", - "abilities": [], - "link": { - "cost": 4, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 0 - }, - "effect": "ATK+6000。相手の手札が2枚以上の場合、相手は手札を1枚捨てる。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 8000, - "def": 7000, - "stk": 1, - "flavor_text": "「ねねっ!今日のコーデの感想、聞かせて欲しいな!」", - "collection_attr": { - "series_id": "1", - "card_index": "017", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "しらび", - "promo": null - } - }, - { - "name": "悪魔の誘惑", - "type": "Progress", - "level": 4, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "リゼリッタ", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、プログレス1体を選び、ATK+3000。" - } - ], - "link": { - "cost": 5, - "condition": { - "Omega": 2, - "Sigma": 1, - "Any": 0 - }, - "effect": "ATK+7000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 9000, - "def": 9000, - "stk": 1, - "flavor_text": "悪友、あるいは腐れ線……いずれにせよ、彼女はソフィーナのよき友だ。", - "collection_attr": { - "series_id": "1", - "card_index": "018", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "メ鲭コハダ", - "promo": null - } - }, - { - "name": "我こそは久遠の優炎", - "type": "Progress", - "level": 4, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "テオドーチェ", - "abilities": [], - "link": { - "cost": 6, - "condition": { - "Omega": 0, - "Sigma": 1, - "Any": 2 - }, - "effect": "ATK+7000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 10000, - "def": 8000, - "stk": 1, - "flavor_text": "「悪魔の力を開放するのだ!これが悪魔の炎なのだ!」", - "collection_attr": { - "series_id": "1", - "card_index": "019", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "聖夜の魔法", - "type": "Progress", - "level": 5, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "アルマリア", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、相手はチャージを1枚捨てる。" - } - ], - "link": { - "cost": 6, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 1 - }, - "effect": "ATK+8000。" - }, - "ex": { - "name": "ブラッドソード", - "effect": "チャージ+1。相手はチャージを1枚捨てる。" - } - }, - "action_attr": null, - "frame_attr": null, - "atk": 10000, - "def": 8000, - "stk": 1, - "flavor_text": "「今日はす一一つとここにいるんです。わかりましたか?」", - "collection_attr": { - "series_id": "1", - "card_index": "020", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ぽよよん♥ろっく", - "promo": null - } - }, - { - "name": "ハロウイン女王", - "type": "Progress", - "level": 5, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "ミルドレッド", - "abilities": [], - "link": { - "cost": 6, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 1 - }, - "effect": "ATK+8000。相手の手札が2枚以上の場合、相手は手札を1枚捨てる。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 10000, - "def": 10000, - "stk": 1, - "flavor_text": "完全無欠の彼女にとって、この世界は少し退屈らしい。", - "collection_attr": { - "series_id": "1", - "card_index": "021", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "紅緒", - "promo": null - } - }, - { - "name": "魔姫の覚醒", - "type": "Progress", - "level": 6, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "テオドーチェ", - "abilities": [], - "link": { - "cost": 7, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 2 - }, - "effect": "ATK+8000。相手はチャージを1枚捨てる。" - }, - "ex": { - "name": "天隕石", - "effect": "STK+1。相手の手札が2枚以上の場合、相手は手札を1枚捨てる。" - } - }, - "action_attr": null, - "frame_attr": null, - "atk": 12000, - "def": 10000, - "stk": 1, - "flavor_text": "「皆ひれ伏せ! 天才悪魔の降臨なのだ!」", - "collection_attr": { - "series_id": "1", - "card_index": "022", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "真なる理", - "type": "Progress", - "level": 7, - "color": "Black", - - "start_attr": null, - "progress_attr": { - "character": "ソフィーナ", - "abilities": [ - { - "type": "Persistent", - "effect": "相手の手札が1枚以下の場合、ATK+3000。" - } - ], - "link": { - "cost": 8, - "condition": { - "Omega": 1, - "Sigma": 2, - "Any": 2 - }, - "effect": "ATK+9000。相手は手札を1枚捨てる。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 12000, - "def": 12000, - "stk": 2, - "flavor_text": "「理深き黒魔女のカ、見せてあげるわ!」", - "collection_attr": { - "series_id": "1", - "card_index": "023", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "狗神煌", - "promo": null - } - }, - { - "name": "黒き炎の力", - "type": "Action", - "level": 0, - "color": "Black", - - "start_attr": null, - "progress_attr": null, - "action_attr": { - "condition": "黒のプロレグス2体以上(スタートカードは含まない)。", - "effect": "チャージ1枚を捨てる。そうした場合、プログレス1体を選び、リバースする。そのプログレスは次のアウェイクフェイズにはアウェイクしない。" - }, - "frame_attr": null, - "atk": null, - "def": null, - "stk": null, - "flavor_text": "彼女の炎が未来を照らし、道を切り拓く。", - "collection_attr": { - "series_id": "1", - "card_index": "024", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ゆるや", - "promo": null - } - }, - { - "name": "エール・フレンド", - "type": "Progress", - "level": 1, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "エルエル", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、プログレス1体を選び、リンク+1。" - } - ], - "link": { - "cost": 3, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 0 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 1, - "flavor_text": "「今日も友だち作っちゃうよ~!目標100人!」", - "collection_attr": { - "series_id": "1", - "card_index": "025", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "三嶋くろね", - "promo": null - } - }, - { - "name": "天使の贈りもの", - "type": "Progress", - "level": 2, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "レミエル", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、捨札のレベル5以下のプログレスカード1枚を選び、手札に加える。" - } - ], - "link": { - "cost": 3, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 0 - }, - "effect": "ATK+5000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 4000, - "def": 4000, - "stk": 1, - "flavor_text": "「この服、真っ赤ですつごく目立ちますよね。恥すかしいです……」", - "collection_attr": { - "series_id": "1", - "card_index": "026", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "兎塚工イジ", - "promo": null - } - }, - { - "name": "聖夜の福音", - "type": "Progress", - "level": 2, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "クラリス", - "abilities": [], - "link": { - "cost": 3, - "condition": { - "Omega": 1, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 6000, - "def": 6000, - "stk": 1, - "flavor_text": "「こ、こら!輪っかに触るな!……まったく。これは体の一部だ」", - "collection_attr": { - "series_id": "1", - "card_index": "027", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "夏休み昆虫採集編", - "type": "Progress", - "level": 3, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "オルトリン", - "abilities": [], - "link": { - "cost": 4, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 0 - }, - "effect": "ATK+6000。プログレス1体を選び、リンク+2。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 8000, - "def": 8000, - "stk": 1, - "flavor_text": "努力はしている。ただ絶望的に、運だけがなかった。", - "collection_attr": { - "series_id": "1", - "card_index": "028", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "らんどせるRX", - "promo": null - } - }, - { - "name": "エール・サンシャイン", - "type": "Progress", - "level": 3, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "エルエル", - "abilities": [], - "link": { - "cost": 4, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 0 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 8000, - "def": 8000, - "stk": 1, - "flavor_text": "「頭の羽根、小さくてかわいーでしよ!あたしのチャームボイントなの」", - "collection_attr": { - "series_id": "1", - "card_index": "029", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "三嶋くろね", - "promo": null - } - }, - { - "name": "ヴァルキリーの笑顔", - "type": "Progress", - "level": 4, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "オルトリン", - "abilities": [], - "link": { - "cost": 5, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 1 - }, - "effect": "プログレス1体を選び、ATK+2000。これを3回繰り返す(それぞれ選び先を変えてもよい)。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 9000, - "def": 9000, - "stk": 1, - "flavor_text": "「私は誇り高きヴァルキリーですから! どんな時も冷静沈着!」", - "collection_attr": { - "series_id": "1", - "card_index": "030", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": null, - "promo": null - } - }, - - { - "name": "恥じらい天使", - "type": "Progress", - "level": 4, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "レミエル", - "abilities": [], - "link": { - "cost": 6, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 2 - }, - "effect": "ATK+7000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 9000, - "def": 9000, - "stk": 1, - "flavor_text": "自分が嫌い。でもそんな自分を変えたいと、すっと思っていた。", - "collection_attr": { - "series_id": "1", - "card_index": "031", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": null, - "promo": null - } - }, - - { - "name": "波打ち際の天使", - "type": "Progress", - "level": 5, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "レミエル", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、プログレス1体を選び、リバースする。" - } - ], - "link": { - "cost": 5, - "condition": { - "Omega": 2, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+7000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 8000, - "def": 8000, - "stk": 1, - "flavor_text": "「こんな穏やかな1日は久しぶりだな……ん?ど、どこを見ている?」", - "collection_attr": { - "series_id": "1", - "card_index": "032", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "魔矢の射手", - "type": "Progress", - "level": 5, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "フェルノ", - "abilities": [ - { - "type": "Persistent", - "effect": "あなたのほかの赤のプログレス1体につき、ATK+1000/DEF+1000。" - } - ], - "link": { - "cost": 6, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 2 - }, - "effect": "ATK+8000。あなたのプログレス3体が赤の場合、STK+1。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 9000, - "def": 9000, - "stk": 1, - "flavor_text": "「封印弓フェイルノート。我が一族が継承する神器のひとつですわ」", - "collection_attr": { - "series_id": "1", - "card_index": "033", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "憂姫はぐれ", - "promo": null - } - }, - { - "name": "剣の理", - "type": "Progress", - "level": 6, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "クラリス", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、あなたの赤のプログレスすべてのATK+2000。" - } - ], - "link": { - "cost": 7, - "condition": { - "Omega": 2, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+9000。" - }, - "ex": { - "name": "絶世なる一閃", - "effect": "あなたの赤のプログレスすべてのATK+4000。" - } - }, - "action_attr": null, - "frame_attr": null, - "atk": 11000, - "def": 11000, - "stk": 1, - "flavor_text": "「騎士として、風紀委員として……そして、君のプログレスとして!」", - "collection_attr": { - "series_id": "1", - "card_index": "034", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "救済の覚悟", - "type": "Progress", - "level": 7, - "color": "Red", - - "start_attr": null, - "progress_attr": { - "character": "レミエル", - "abilities": [ - { - "type": "Persistent", - "effect": "あなたの捨札が20枚以上の場合、ATK+3000。" - } - ], - "link": { - "cost": 8, - "condition": { - "Omega": 1, - "Sigma": 2, - "Any": 2 - }, - "effect": "ATK+9000。プログレス1体を選び、リンク+2。" - }, - "ex": { - "name": "尊き絆の奇跡", - "effect": "デッキの上から5枚見て1枚を手札に加え、残りを捨札に置く。" - } - }, - "action_attr": null, - "frame_attr": null, - "atk": 12000, - "def": 12000, - "stk": 2, - "flavor_text": "「あなたとの絆……私の、なによりも大切なものです」", - "collection_attr": { - "series_id": "1", - "card_index": "035", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "兎塚工イジ", - "promo": null - } - }, - { - "name": "赤き奇跡の力", - "type": "Action", - "level": 0, - "color": "Red", - - "start_attr": null, - "progress_attr": null, - "action_attr": { - "condition": "赤のプロレグス2体以上(スタートカードは含まない)。", - "effect": "チャージ1枚を捨てる。そうした場合、捨札のプログレスカードを2枚まで選び、手札に加える。" - }, - "frame_attr": null, - "atk": null, - "def": null, - "stk": null, - "flavor_text": "その翼は、大切なものを守るための力。", - "collection_attr": { - "series_id": "1", - "card_index": "036", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "空井里玖", - "promo": null - } - }, - { - "name": "マスターとの邂逅", - "type": "Progress", - "level": 1, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "トト", - "abilities": [], - "link": { - "cost": 3, - "condition": { - "Omega": 1, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 1, - "flavor_text": "「わたしね、じんこうちの一のかいはつのためにね、作られたの!」", - "collection_attr": { - "series_id": "1", - "card_index": "037", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "斜文", - "promo": null - } - }, - { - "name": "献身の機械少女", - "type": "Progress", - "level": 2, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "アクエリア", - "abilities": [], - "link": { - "cost": 3, - "condition": { - "Omega": 0, - "Sigma": 1, - "Any": 1 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 7000, - "stk": 1, - "flavor_text": "「私はあなたのアンドロイドです。それでは、ご命令を」", - "collection_attr": { - "series_id": "1", - "card_index": "038", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "最優先事項", - "type": "Progress", - "level": 2, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "カレン", - "abilities": [ - { - "type": "Automatic", - "effect": "レベル1のプログレスカード1枚をサーチし、手札に加える。" - } - ], - "link": { - "cost": 3, - "condition": { - "Omega": 1, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+5000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 4000, - "def": 4000, - "stk": 1, - "flavor_text": "「戦術級決戦型を冠されたわたくしは、白の世界の最高戦力です」", - "collection_attr": { - "series_id": "1", - "card_index": "039", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "るろお", - "promo": null - } - }, - { - "name": "観察モード", - "type": "Progress", - "level": 3, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "トト", - "abilities": [], - "link": { - "cost": 4, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 0 - }, - "effect": "ATK+6000。相手のレベル5以下のプログレス1体を選ぶ。そのプログレスは次のアウェイクフェイズ、アウェイクする代わりにフォールする。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 7000, - "def": 8000, - "stk": 1, - "flavor_text": "目に映るすべてが、彼女を成長させる。いつか人間になれることを信じて。", - "collection_attr": { - "series_id": "1", - "card_index": "040", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "斜文", - "promo": null - } - }, - { - "name": "幸せな気持ち", - "type": "Progress", - "level": 3, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "幸せな気持ち", - "abilities": [], - "link": { - "cost": 4, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 0 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 7000, - "def": 9000, - "stk": 1, - "flavor_text": "「いつか、夢を見たんです。あなたとこんな時間を過ごす夢を」", - "collection_attr": { - "series_id": "1", - "card_index": "041", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "マリンスタイル", - "type": "Progress", - "level": 4, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "ステラ", - "abilities": [], - "link": { - "cost": 6, - "condition": { - "Omega": 0, - "Sigma": 1, - "Any": 2 - }, - "effect": "ATK+7000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 8000, - "def": 10000, - "stk": 1, - "flavor_text": "「材質、構造面で自分のボディは軽量化されている。すべては加速のため」", - "collection_attr": { - "series_id": "1", - "card_index": "042", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "つなこ", - "promo": null - } - }, - { - "name": "時をめぐる少女", - "type": "Progress", - "level": 4, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "ユーフィリア", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、フレームカード1枚をサーチし、手札に加える。" - } - ], - "link": { - "cost": 5, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 1 - }, - "effect": "ATK+7000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 4000, - "def": 4000, - "stk": 1, - "flavor_text": "彼女は未来からやってきた。そして、また……", - "collection_attr": { - "series_id": "1", - "card_index": "043", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "メイドリーダー", - "type": "Progress", - "level": 5, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "トト", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、相手のレベル4以下のプログレス1体を選ぶ。そのプログレスは次のアウェイクフェイズ、アウェイクする代わりにフォールする。" - } - ], - "link": { - "cost": 6, - "condition": { - "Omega": 2, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+8000。" - }, - "ex": { - "name": "邂逅", - "effect": "白のプログレスカード1枚をサーチし、手札に加える。" - } - }, - "action_attr": null, - "frame_attr": null, - "atk": 10000, - "def": 10000, - "stk": 1, - "flavor_text": "「マスター、しってる?メイドさんはね、強い!」", - "collection_attr": { - "series_id": "1", - "card_index": "044", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "斜文", - "promo": null - } - }, - { - "name": "貴き水鞠", - "type": "Progress", - "level": 5, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "アクエリア", - "abilities": [], - "link": { - "cost": 6, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 1 - }, - "effect": "ATK+8000。フレームカードもしくは白のプログレスカード1枚をサーチし、手札に加える。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 10000, - "def": 10000, - "stk": 1, - "flavor_text": "「水素集束。火力上昇。フィ-ルド展開!」", - "collection_attr": { - "series_id": "1", - "card_index": "045", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "決意を抱いて", - "type": "Progress", - "level": 6, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "ユーフィリア", - "abilities": [ - { - "type": "Automatic", - "effect": "このプログレスがガードに成功したとき、このチャージゾーンのチャージを1枚捨ててもよい。そうした場合、1枚引く。" - } - ], - "link": { - "cost": 7, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 1 - }, - "effect": "ATK+9000。" - }, - "ex": { - "name": "セラフ・エスケープ", - "effect": "フレームカード1枚をサーチし、手札に加える。" - } - }, - "action_attr": null, - "frame_attr": null, - "atk": 10000, - "def": 12000, - "stk": 1, - "flavor_text": "「すべてを断ち切ります!セラフィック・エンジン、起動!」", - "collection_attr": { - "series_id": "1", - "card_index": "046", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "添い寝モード", - "type": "Progress", - "level": 7, - "color": "White", - - "start_attr": null, - "progress_attr": { - "character": "ラウラ", - "abilities": [ - { - "type": "Persistent", - "effect": "あなたのほかのレベル5以上のプログレスがいる場合、ATK+4000。" - } - ], - "link": { - "cost": 8, - "condition": { - "Omega": 2, - "Sigma": 1, - "Any": 2 - }, - "effect": "ATK+9000。相手のレベル5以下のプログレス1体を選ぶ。そのプログレスは次のアウェイクフェイズ、アウェイクする代わりにフォールする。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 11000, - "def": 11000, - "stk": 2, - "flavor_text": "「マスター、ここに座って。いいからいいから。ごろーん」", - "collection_attr": { - "series_id": "1", - "card_index": "047", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "バセリ", - "promo": null - } - }, - { - "name": "未来への力", - "type": "Action", - "level": 0, - "color": "White", - - "start_attr": null, - "progress_attr": null, - "action_attr": { - "condition": "白のプロレグス2体以上(スタートカードは含まない)。", - "effect": "フレームカードもしくは白のプログレスカード1枚をサーチし、手札に加える。" - }, - "frame_attr": null, - "atk": null, - "def": null, - "stk": null, - "flavor_text": "人のカで、未来はいつだって変えられる。", - "collection_attr": { - "series_id": "1", - "card_index": "048", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ひなた睦月", - "promo": null - } - }, - { - "name": "純真な心", - "type": "Progress", - "level": 1, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "セナ", - "abilities": [], - "link": { - "cost": 3, - "condition": { - "Omega": 1, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 1, - "flavor_text": "いつからだろうか。彼女の耳に、人の心の声が届くようになったのは。", - "collection_attr": { - "series_id": "1", - "card_index": "049", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "新緑の願い", - "type": "Progress", - "level": 2, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "セナ", - "abilities": [], - "link": { - "cost": 3, - "condition": { - "Omega": 0, - "Sigma": 1, - "Any": 1 - }, - "effect": "ATK+4000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 1, - "flavor_text": "「私だって、おにぎりばかり作ってるわけではないんですよ?」", - "collection_attr": { - "series_id": "1", - "card_index": "050", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "吉岡榊", - "promo": null - } - }, - { - "name": "緑の意思", - "type": "Progress", - "level": 2, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "シルト", - "abilities": [], - "link": { - "cost": 3, - "condition": { - "Omega": 0, - "Sigma": 1, - "Any": 1 - }, - "effect": "ATK+5000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 4000, - "def": 4000, - "stk": 1, - "flavor_text": "この世界を司る世界水晶。彼女はそれそのものだった。", - "collection_attr": { - "series_id": "1", - "card_index": "051", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "りいちゅ", - "promo": null - } - }, - { - "name": "メイドで軍人", - "type": "Progress", - "level": 3, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "ルルーナ", - "abilities": [], - "link": { - "cost": 4, - "condition": { - "Omega": 1, - "Sigma": 1, - "Any": 0 - }, - "effect": "ATK+6000。ほかのプログレス1体を選び、ATK+3000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 8000, - "def": 8000, - "stk": 1, - "flavor_text": "ロは軽いが、グリューネシルト統合軍の中でも指折りの実力者だ。", - "collection_attr": { - "series_id": "1", - "card_index": "052", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "結城リカ", - "promo": null - } - }, - { - "name": "世界の心", - "type": "Progress", - "level": 3, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "ルルーナ", - "abilities": [], - "link": { - "cost": 4, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 0 - }, - "effect": "ATK+6000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 8000, - "def": 8000, - "stk": 1, - "flavor_text": "「グリューネシルトは過酷な環境。それでも、私はこの世界が大好き」", - "collection_attr": { - "series_id": "1", - "card_index": "053", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ぶにゃん", - "promo": null - } - }, - { - "name": "月下", - "type": "Progress", - "level": 4, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "アインス", - "abilities": [], - "link": { - "cost": 5, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 1 - }, - "effect": "ATK+7000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 8000, - "def": 8000, - "stk": 1, - "flavor_text": "「エクスペンドは、強化人間のこと。んと、うまく説明できない……」", - "collection_attr": { - "series_id": "1", - "card_index": "054", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "二人なら、なにも怖くない", - "type": "Progress", - "level": 4, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "セナ", - "abilities": [], - "link": { - "cost": 6, - "condition": { - "Omega": 1, - "Sigma": 0, - "Any": 2 - }, - "effect": "ATK+7000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 9000, - "def": 9000, - "stk": 1, - "flavor_text": "「私だって緑の世界の一員ですから。悪人は処断しちゃいます!」", - "collection_attr": { - "series_id": "1", - "card_index": "055", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "深緑の絆", - "type": "Progress", - "level": 5, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "マユカ", - "abilities": [ - { - "type": "Automatic", - "effect": "登場したとき、あなたのいずれかのチャージゾーンのチャージ1枚を、手札に加えてもよい。" - } - ], - "link": { - "cost": 6, - "condition": { - "Omega": 0, - "Sigma": 2, - "Any": 1 - }, - "effect": "ATK+8000。" - }, - "ex": { - "name": "グリム・フォーゲル", - "effect": "チャージゾーン2つを選び、それらにチャージ+1。" - } - }, - "action_attr": null, - "frame_attr": null, - "atk": 10000, - "def": 10000, - "stk": 1, - "flavor_text": "「グリュ-ネシルト統合軍所属! マュカ・サナギです!」", - "collection_attr": { - "series_id": "1", - "card_index": "056", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "吉岡榊", - "promo": null - } - }, - { - "name": "優しい時間", - "type": "Progress", - "level": 5, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "ナイア", - "abilities": [ - { - "type": "Persistent", - "effect": "このプログレスのチャージが3枚以上の場合、STK+1" - } - ], - "link": { - "cost": 6, - "condition": { - "Omega": 2, - "Sigma": 0, - "Any": 1 - }, - "effect": "ATK+8000。" - }, - "ex": null - }, - "action_attr": null, - "frame_attr": null, - "atk": 10000, - "def": 10000, - "stk": 1, - "flavor_text": "「サポってないって。これは適切な休息だよ」", - "collection_attr": { - "series_id": "1", - "card_index": "057", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "トモセシュシリワ", - "promo": null - } - }, - { - "name": "魂の在処へ羽ばたく者", - "type": "Progress", - "level": 6, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "セナ", - "abilities": [], - "link": { - "cost": 7, - "condition": { - "Omega": 2, - "Sigma": 0, - "Any": 2 - }, - "effect": "ATK+8000。あなたのすべてのチャージの合計が5枚以上の場合、対戦相手に1点のダメージを与える。" - }, - "ex": { - "name": "フライハイト", - "effect": "チャージ+1。あなたのいずれかのチャージゾーンのチャージ1枚を、手札に加えてもよい。" - } - }, - "action_attr": null, - "frame_attr": null, - "atk": 11000, - "def": 11000, - "stk": 1, - "flavor_text": "「これが私のフライハイト!最大出力、いきます!」", - "collection_attr": { - "series_id": "1", - "card_index": "058", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ササギコウシ", - "promo": null - } - }, - { - "name": "少女の夢", - "type": "Progress", - "level": 7, - "color": "Green", - - "start_attr": null, - "progress_attr": { - "character": "ルルーナ", - "abilities": [ - { - "type": "Persistent", - "effect": "あなたのすべてのチャージの合計が5枚以上の場合、ATK+4000。" - } - ], - "link": { - "cost": 8, - "condition": { - "Omega": 1, - "Sigma": 2, - "Any": 2 - }, - "effect": "ATK+9000。チャージゾーン1つを選び、チャージ+2。" - }, - "ex": { - "name": "シュッツ・リッタ", - "effect": "ATK+2000。チャージ+1。" - } - }, - "action_attr": null, - "frame_attr": null, - "atk": 11000, - "def": 11000, - "stk": 2, - "flavor_text": "「きみとの絆のカできみを守る! なーんてね♪」", - "collection_attr": { - "series_id": "1", - "card_index": "059", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "結城リカ", - "promo": null - } - }, - { - "name": "大地に芽吹く力", - "type": "Action", - "level": 0, - "color": "Green", - - "start_attr": null, - "progress_attr": null, - "action_attr": { - "condition": "緑のプロレグス2体以上(スタートカードは含まない)。", - "effect": "チャージゾーン1つを選び、チャージ+2。" - }, - "frame_attr": null, - "atk": null, - "def": null, - "stk": null, - "flavor_text": "いつかまた、大地が可能性に満ちることを祈って。", - "collection_attr": { - "series_id": "1", - "card_index": "060", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": "ONION", - "promo": null - } - }, - { - "name": "日向美海", - "type": "Start", - "level": 0, - "color": "Blue", - "text": "[常] スタートカード(にのカードはアタックできない)\n", - "start_attr": { - "abilities": [ - { - "type": "Persistent", - "effect": "スタートカード(にのカードはアタックできない)" - } - ], - "frame_attr": "Forall" - }, - "progress_attr": null, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 0, - "flavor_text": "青の世界。そこには、空と海と風がある。", - "collection_attr": { - "series_id": "1", - "card_index": "061", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": null, - "promo": null - } - }, - { - "name": "ソフィーナ", - "type": "Start", - "level": 0, - "color": "Black", - "text": "[常] スタートカード(にのカードはアタックできない)\n", - "start_attr": { - "abilities": [ - { - "type": "Persistent", - "effect": "スタートカード(にのカードはアタックできない)" - } - ], - "frame_attr": "Forall" - }, - "progress_attr": null, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 0, - "flavor_text": "黒の世界。魔女王の統治する、明けない夜と魔法の国。", - "collection_attr": { - "series_id": "1", - "card_index": "062", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": null, - "promo": null - } - }, - { - "name": "レミエル", - "type": "Start", - "level": 0, - "color": "Red", - "text": "[常] スタートカード(にのカードはアタックできない)\n", - "start_attr": { - "abilities": [ - { - "type": "Persistent", - "effect": "スタートカード(にのカードはアタックできない)" - } - ], - "frame_attr": "Forall" - }, - "progress_attr": null, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 0, - "flavor_text": "赤の世界。祈りがカに変わる、女神たちの園。", - "collection_attr": { - "series_id": "1", - "card_index": "063", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": null, - "promo": null - } - }, - { - "name": "ユーフィリア", - "type": "Start", - "level": 0, - "color": "White", - "text": "[常] スタートカード(にのカードはアタックできない)\n", - "start_attr": { - "abilities": [ - { - "type": "Persistent", - "effect": "スタートカード(にのカードはアタックできない)" - } - ], - "frame_attr": "Forall" - }, - "progress_attr": null, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 0, - "flavor_text": "白の世界。すべてはシステムによって管理されている。", - "collection_attr": { - "series_id": "1", - "card_index": "064", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": null, - "promo": null - } - }, - { - "name": "マユカ", - "type": "Start", - "level": 0, - "color": "Green", - "text": "[常] スタートカード(にのカードはアタックできない)\n", - "start_attr": { - "abilities": [ - { - "type": "Persistent", - "effect": "スタートカード(にのカードはアタックできない)" - } - ], - "frame_attr": "Forall" - }, - "progress_attr": null, - "action_attr": null, - "frame_attr": null, - "atk": 5000, - "def": 5000, - "stk": 0, - "flavor_text": "緑の世界。かってそこは、鮮やかな緑に覆われていた。", - "collection_attr": { - "series_id": "1", - "card_index": "065", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": null, - "promo": null - } - }, - { - "name": "omega", - "type": "Frame", - "level": 0, - "color": null, - "text": "omega", - "start_attr": null, - "progress_attr": null, - "action_attr": null, - "frame_attr": "Omega", - "atk": null, - "def": null, - "stk": null, - "flavor_text": null, - "collection_attr": { - "series_id": "1", - "card_index": "omega", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": null, - "promo": null - } - }, - { - "name": "sigma", - "type": "Frame", - "level": 0, - "color": null, - "text": "sigma", - "start_attr": null, - "progress_attr": null, - "action_attr": null, - "frame_attr": "Sigma", - "atk": null, - "def": null, - "stk": null, - "flavor_text": null, - "collection_attr": { - "series_id": "1", - "card_index": "sigma", - "product_id": "sideab", - "product_name": "アンジュ・ユナイト side:α/side:β", - "foil": false, - "alternate_art": null, - "artist": null, - "promo": null - } - } - ] -} diff --git a/model/__init__.py b/model/__init__.py deleted file mode 100644 index 07e9224..0000000 --- a/model/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -from .action import ActionAttr -from .card import Card, Ability -from .collection import CollectionAttr -from .constants import CardType, AbilityType, CardColor, FrameType -from .product import Product -from .progress import ProgressAttr, Ex, Link -from .start import StartAttr - - -__all__ = [ - "ActionAttr", - "Card", - "CollectionAttr", - "CardType", - "AbilityType", - "CardColor", - "FrameType", - "Product", - "ProgressAttr", - "StartAttr", - "Ability", - "Ex", - "Link", -] diff --git a/model/action.py b/model/action.py deleted file mode 100644 index c456a72..0000000 --- a/model/action.py +++ /dev/null @@ -1,13 +0,0 @@ -class ActionAttr: - condition: str - effect: str - - def __init__(self, conditions: str, effect: str) -> None: - self.condition = conditions - self.effect = effect - - def __json__(self): - return {"condition": self.condition, "effect": self.effect} - - def __text__(self) -> str: - return f"[条件] {self.condition}\n{self.effect}" diff --git a/model/card.py b/model/card.py deleted file mode 100644 index fee5ccb..0000000 --- a/model/card.py +++ /dev/null @@ -1,119 +0,0 @@ -from typing import List, Optional - -from .collection import CollectionAttr -from .start import StartAttr -from .action import ActionAttr -from .progress import ProgressAttr -from .constants import AbilityType, CardColor, CardType, FrameType - - -class Ability: - type: AbilityType - effect: str - - def __init__(self, type: AbilityType, effect: str) -> None: - self.type = type - self.effect = effect - - def __json__(self): - return {"type": self.type.value, "effect": self.effect} - - -class Card: - name: str - type: CardType - level: int - color: Optional[CardColor] - # Will automatic generate - text: str - - abilities: List[Ability] - - start_attr: Optional[StartAttr] - progress_attr: Optional[ProgressAttr] - action_attr: Optional[ActionAttr] - frame_attr: Optional[FrameType] - - atk_value: Optional[int] - def_value: Optional[int] - stk_value: Optional[int] - - flavor_text: Optional[str] - - collection_attr: CollectionAttr - - def __init__( - self, - name: str, - type: CardType, - level: int, - color: Optional[CardColor], - abilities: List[Ability], - start_attr: Optional[StartAttr], - progress_attr: Optional[ProgressAttr], - action_attr: Optional[ActionAttr], - frame_attr: Optional[FrameType], - atk_value: Optional[int], - def_value: Optional[int], - stk_value: Optional[int], - flavor_text: Optional[str], - collection_attr: CollectionAttr, - ) -> None: - self.name = name - self.type = type - self.level = level - self.color = color - self.abilities = abilities - self.start_attr = start_attr - self.progress_attr = progress_attr - self.action_attr = action_attr - self.frame_attr = frame_attr - self.frame_attr = frame_attr - self.atk_value = atk_value - self.def_value = def_value - self.stk_value = stk_value - self.flavor_text = flavor_text - self.collection_attr = collection_attr - - text = "" - - for ability in self.abilities: - if ability.type == AbilityType.Persistent: - type_text = "[常]" - elif ability.type == AbilityType.Automatic: - type_text = "[自]" - elif ability.type == AbilityType.Activated: - type_text = "[起]" - text += f"{type_text} {ability.effect}\n" - - if self.start_attr: - text += self.start_attr.__text__() - elif self.action_attr: - text += self.action_attr.__text__() - elif self.frame_attr: - text += self.frame_attr.value - elif self.progress_attr: - text += self.progress_attr.__text__() - - self.text = text - - def __json__(self): - return { - "name": self.name, - "type": self.type.value, - "level": self.level, - "color": self.color.value if self.color else None, - "text": self.text, - "abilities": [ability.__json__() for ability in self.abilities], - "start_attr": self.start_attr.__json__() if self.start_attr else None, - "progress_attr": self.progress_attr.__json__() - if self.progress_attr - else None, - "action_attr": self.action_attr.__json__() if self.action_attr else None, - "frame_attr": self.frame_attr.value if self.frame_attr else None, - "atk": self.atk_value if self.atk_value else None, - "def": self.def_value if self.def_value else None, - "stk": self.stk_value if self.stk_value else None, - "flavor_text": self.flavor_text if self.flavor_text else None, - "collection_attr": self.collection_attr.__json__(), - } diff --git a/model/collection.py b/model/collection.py deleted file mode 100644 index 1d053cc..0000000 --- a/model/collection.py +++ /dev/null @@ -1,51 +0,0 @@ -from typing import Optional - - -class CollectionAttr: - series_id: str - card_index: str - effect_index: str - product_id: str - product_name: str - - foil: bool - alternate_art: bool - - artist: Optional[str] - - promo: Optional[str] - - def __init__( - self, - series_id: str, - card_index: str, - effect_index: str, - product_id: str, - product_name: str, - foil: bool, - alternate_art: bool, - artist: Optional[str], - promo: Optional[str] = None, - ) -> None: - self.series_id = series_id - self.card_index = card_index - self.effect_index = effect_index - self.product_id = product_id - self.product_name = product_name - self.foil = foil - self.alternate_art = alternate_art - self.artist = artist - self.promo = promo - - def __json__(self): - return { - "series_id": self.series_id, - "card_index": self.card_index, - "effect_index": self.effect_index, - "product_id": self.product_id, - "product_name": self.product_name, - "foil": self.foil, - "alternate_art": self.alternate_art, - "artist": self.artist if self.artist else None, - "promo": self.promo if self.promo else None, - } diff --git a/model/constants.py b/model/constants.py deleted file mode 100644 index c372d65..0000000 --- a/model/constants.py +++ /dev/null @@ -1,29 +0,0 @@ -from enum import Enum - - -class CardType(Enum): - Start = "Start" - Progress = "Progress" - Action = "Action" - Frame = "Frame" - - -class AbilityType(Enum): - Persistent = "Persistent" - Automatic = "Automatic" - Activated = "Activated" - - -class CardColor(Enum): - Blue = "Blue" - Black = "Black" - Red = "Red" - White = "White" - Green = "Green" - - -class FrameType(Enum): - Any = "Any" - Omega = "Omega" - Sigma = "Sigma" - Forall = "Forall" diff --git a/model/product.py b/model/product.py deleted file mode 100644 index 075e9bc..0000000 --- a/model/product.py +++ /dev/null @@ -1,30 +0,0 @@ -from typing import List -from .card import Card - - -class Product: - id: str - name: str - release_date: str - main_expansion: bool - cards_num: int - cards: List[Card] - - def __init__( - self, id: str, name: str, release_date: str, main_expansion: bool - ) -> None: - self.id = id - self.name = name - self.release_date = release_date - self.main_expansion = main_expansion - self.cards = [] - - def __json__(self) -> str: - return { - "id": self.id, - "name": self.name, - "release_date": self.release_date, - "main_expansion": self.main_expansion, - "cards_num": len(self.cards), - "cards": [card.__json__() for card in self.cards], - } diff --git a/model/progress.py b/model/progress.py deleted file mode 100644 index df44a2b..0000000 --- a/model/progress.py +++ /dev/null @@ -1,75 +0,0 @@ -from typing import Optional, Tuple -from .constants import FrameType - - -class Link: - cost: int - # condition: [Omega, Sigma, Any] - # example: "Omega, Sigma, Sigma, 2" -> (1, 2, 2) - condition: Tuple[int, int, int] - effect: str - - def __init__(self, cost: int, condition: Tuple[int, int, int], effect: str) -> None: - self.cost = cost - self.condition = condition - self.effect = effect - - def __json__(self): - return { - "cost": self.cost, - "condition": [FrameType.Omega.value] * self.condition[0] - + [FrameType.Sigma.value] * self.condition[1] - + [FrameType.Any.value] * self.condition[2], - "effect": self.effect, - } - - -class Ex: - name: str - effect: str - - def __init__(self, name: str, effect: str) -> None: - self.name = name - self.effect = effect - - def __json__(self): - return {"name": self.name, "effect": self.effect} - - -class ProgressAttr: - character: str - link: Optional[Link] - ex: Optional[Ex] - - def __init__( - self, - character: str, - link: Optional[Link], - ex: Optional[Ex], - ) -> None: - self.character = character - self.link = link - self.ex = ex - - def __json__(self): - return { - "character": self.character, - "link": self.link.__json__() if self.link else None, - "ex": self.ex.__json__() if self.ex else None, - } - - def __text__(self) -> str: - text = "" - - if self.ex: - text += f"[EX] {self.ex.name} {self.ex.effect}\n" - - if self.link: - condition = ( - ["Ω" for _ in range(self.link.condition[0])] - + ["Σ" for _ in range(self.link.condition[1])] - + [str(self.link.condition[2])] - ) - - text += f"[Link-{self.link.cost}] {condition} {self.link.effect}\n" - return text diff --git a/model/start.py b/model/start.py deleted file mode 100644 index b603dd8..0000000 --- a/model/start.py +++ /dev/null @@ -1,16 +0,0 @@ -from .constants import FrameType - - -class StartAttr: - frame: FrameType - - def __init__(self, frame: FrameType) -> None: - self.frame = frame - - def __json__(self): - return { - "frame": self.frame.value, - } - - def __text__(self) -> str: - return f"{self.frame.value}" diff --git a/output/products.json b/products.json similarity index 100% rename from output/products.json rename to products.json diff --git a/output/products_min.json b/products_min.json similarity index 100% rename from output/products_min.json rename to products_min.json diff --git a/utils/__init__.py b/utils/__init__.py deleted file mode 100644 index 7ed4a29..0000000 --- a/utils/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -from .json import ( - custom_encoder, - convert_to_json, - from_json, - get_safe_value, - get_member_from_enum, - to_json, -) -from .product import get_cards_index - -__all__ = [ - "custom_encoder", - "convert_to_json", - "from_json", - "get_safe_value", - "get_cards_index", - "get_member_from_enum", - "to_json", -] diff --git a/utils/json.py b/utils/json.py deleted file mode 100644 index 61e7419..0000000 --- a/utils/json.py +++ /dev/null @@ -1,54 +0,0 @@ -import json -from pathlib import Path -from typing import Any, List - -from model import Product - - -def custom_encoder(obj): - if hasattr(obj, "__json__"): - return obj.__json__() - else: - raise TypeError(f"Object of type {type(obj)} is not JSON serializable") - - -def convert_to_json(obj, compress=False): - return ( - json.dumps(obj, default=custom_encoder, indent=4) - if not compress - else json.dumps(obj, default=custom_encoder, separators=(",", ":")) - ) - - -def to_json(products: List[Product], path: str = "./output"): - fp = Path(path) - with open(fp.joinpath("products.json"), "w") as f: - f.write( - convert_to_json( - products, - compress=False, - ) - ) - with open(fp.joinpath("products_min.json"), "w") as f: - f.write(convert_to_json(products, compress=True)) - - -def from_json(path: str) -> str: - with open(path, "r") as f: - raw_text = f.read() - content = json.loads(raw_text) - f.close() - return content - - -def get_safe_value(x: Any, default_value: Any): - if x: - return x - else: - return default_value - - -def get_member_from_enum(type, value): - if value in type.__members__: - return type[value] - return None diff --git a/utils/product.py b/utils/product.py deleted file mode 100644 index 1ec71d0..0000000 --- a/utils/product.py +++ /dev/null @@ -1,20 +0,0 @@ -from typing import Any, List -from bs4 import BeautifulSoup -from pyppeteer import launch - - -async def get_cards_index(product: str) -> List[str]: - url = f"https://ange-unite.com/cardlist/{product}.html" - browser = await launch(args=["--single-process"]) - page = await browser.newPage() - await page.goto(url) - await page.waitForSelector("#app") - content = await page.content() - await browser.close() - soup = BeautifulSoup(content, "html.parser") - elements = soup.select("h3.p-headline-items span.p-subtext span.p-text-inner") - - res = [] - for element in elements: - res.append(element.text) - return res