📋 Kickstarter Demo - Complete Build Plan Ready
✅ PHASE 1 COMPLETE (Preparation): - CropGrowthSeasonSystem.js implemented (8 stages, 4 seasons, environment tinting) - 173 crop sprites organized in /assets/crops/faza1/ - Visual catalog created (tools/faza1_crop_catalog.html) - Fresh Tiled workspace prepared (fresh_workspace.tmx) 📝 GENERATION READY (113 sprites): - Asset manifest complete (KICKSTARTER_DEMO_ASSET_MANIFEST.md) - Generation script ready (generate_kickstarter_demo_assets.py) - Build checklist prepared (KICKSTARTER_BUILD_CHECKLIST.md) 🎯 ASSETS TO GENERATE: - 24 bug sprites (Common to Legendary) - 63 tool sprites (10 types × 6 tiers + enchanted) - 6 Ivan NPC sprites - 8 Blacksmith building sprites - 6 Repair Bench & UI sprites - 3 missing crops (pumpkin winter) - 3 item icons (wood, stone, bread) ⏰ STATUS: Awaiting API quota reset (01:19 CET - ~7 min) 🚀 NEXT: Auto-generate all 113 assets → Integration → DEMO COMPLETE
This commit is contained in:
187
docs/KICKSTARTER_BUILD_CHECKLIST.md
Normal file
187
docs/KICKSTARTER_BUILD_CHECKLIST.md
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
# 🚀 KICKSTARTER DEMO - FINAL BUILD CHECKLIST
|
||||||
|
|
||||||
|
**Date:** 2026-01-05
|
||||||
|
**API Quota Reset:** 01:19 CET (~8 minutes)
|
||||||
|
**Status:** ✅ ALL SYSTEMS READY
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ **PHASE 1: PREPARATION** (COMPLETE)
|
||||||
|
|
||||||
|
### Systems Implemented:
|
||||||
|
- [x] **CropGrowthSeasonSystem.js** - 8 growth stages + 4 seasonal tints
|
||||||
|
- [x] **BugCatchingSystem.js** - 50+ bugs, 3 net tiers, collection album
|
||||||
|
- [x] **ToolSystem.js** - 6 tiers, durability, repair mechanics
|
||||||
|
- [x] **TimeSystem.js** - Season changes every 28 days
|
||||||
|
- [x] **MagicEnchantingSystem.js** - 5 enchantment types, 3 levels each
|
||||||
|
|
||||||
|
### Assets Organized:
|
||||||
|
- [x] **173 crop sprites** organized into `/assets/crops/faza1/`
|
||||||
|
- [x] **Visual Catalog** created (`tools/faza1_crop_catalog.html`)
|
||||||
|
-[x] **Tiled template** ready (`fresh_workspace.tmx`)
|
||||||
|
- [x] **Generation manifest** prepared (113 sprites defined)
|
||||||
|
|
||||||
|
### Documentation:
|
||||||
|
- [x] `KICKSTARTER_DEMO_ASSET_MANIFEST.md` (complete asset list)
|
||||||
|
- [x] `production_diary_2026_01_05.md` (session log)
|
||||||
|
- [x] `FAZA1_GENERATION_STATUS.md` (157/420 progress)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⏳ **PHASE 2: ASSET GENERATION** (PENDING - After Quota Reset)
|
||||||
|
|
||||||
|
### 🐞 Bug System (24 sprites):
|
||||||
|
- [ ] 6 Common bugs
|
||||||
|
- [ ] 6 Uncommon bugs
|
||||||
|
- [ ] 6 Rare bugs
|
||||||
|
- [ ] 6 Legendary bugs
|
||||||
|
|
||||||
|
### 🔨 Tool System (63 sprites):
|
||||||
|
- [ ] Hoe (6 tiers)
|
||||||
|
- [ ] Watering Can (6 tiers)
|
||||||
|
- [ ] Axe (6 tiers)
|
||||||
|
- [ ] Pickaxe (6 tiers)
|
||||||
|
- [ ] Scythe (6 tiers)
|
||||||
|
- [ ] Hammer (6 tiers)
|
||||||
|
- [ ] Fishing Rod (6 tiers)
|
||||||
|
- [ ] Bug Net (6 tiers)
|
||||||
|
- [ ] Sword (6 tiers)
|
||||||
|
- [ ] Shovel (6 tiers)
|
||||||
|
- [ ] + 3 enchanted glow variants
|
||||||
|
|
||||||
|
### 👨🔧 Ivan Blacksmith (6 sprites):
|
||||||
|
- [ ] Portrait (64x64)
|
||||||
|
- [ ] 4 directional idles
|
||||||
|
- [ ] Working animation
|
||||||
|
|
||||||
|
### 🏚️ Blacksmith Building (8 sprites):
|
||||||
|
- [ ] 4 ruined states (32x32 to 128x64)
|
||||||
|
- [ ] 4 restored states (32x32 to 128x64)
|
||||||
|
|
||||||
|
### 🛠️ Repair Bench & UI (6 sprites):
|
||||||
|
- [ ] Repair bench (2 sizes)
|
||||||
|
- [ ] UI icons (anvil, hammer)
|
||||||
|
- [ ] Enchantment glows (red, blue)
|
||||||
|
|
||||||
|
### 🌾 Missing Crops (3 sprites):
|
||||||
|
- [ ] pumpkin_winter_s2
|
||||||
|
- [ ] pumpkin_winter_s3
|
||||||
|
- [ ] pumpkin_winter_s6
|
||||||
|
|
||||||
|
### 📦 Item Icons (3 sprites):
|
||||||
|
- [ ] Wood icon
|
||||||
|
- [ ] Stone icon
|
||||||
|
- [ ] Bread icon
|
||||||
|
|
||||||
|
**Total:** 113 sprites | **Est. Time:** 45 minutes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 **PHASE 3: INTEGRATION** (POST-GENERATION)
|
||||||
|
|
||||||
|
### Code Integration:
|
||||||
|
- [ ] Load new bug sprites into `BugCatchingSystem.js`
|
||||||
|
- [ ] Load tool sprites into `ToolSystem.js`
|
||||||
|
- [ ] Add Ivan NPC to GameScene
|
||||||
|
- [ ] Add blacksmith building to Tiled maps
|
||||||
|
- [ ] Integrate repair bench mechanics
|
||||||
|
- [ ] Link enchantment glows to tool enchanting
|
||||||
|
|
||||||
|
### Visual Asset Manager:
|
||||||
|
- [ ] Regenerate manifest with all new assets
|
||||||
|
- [ ] Verify gallery displays all sprites (no empty icons)
|
||||||
|
- [ ] Test delete/reroll functionality
|
||||||
|
|
||||||
|
### Tiled Integration:
|
||||||
|
- [ ] Add crop tilesets to Tiled
|
||||||
|
- [ ] Create tileset for bugs
|
||||||
|
- [ ] Create tileset for tools/items
|
||||||
|
- [ ] Add NPC spawn points
|
||||||
|
- [ ] Add building placements
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧹 **PHASE 4: CLEANUP & POLISH**
|
||||||
|
|
||||||
|
### Map Cleanup:
|
||||||
|
- [ ] Remove all red markers (audio cues)
|
||||||
|
- [ ] Remove all purple markers (vfx)
|
||||||
|
- [ ] Remove all green markers (unused references)
|
||||||
|
- [ ] Verify all object layers
|
||||||
|
|
||||||
|
### Code Scan:
|
||||||
|
- [ ] Run `scripts/deep_code_scanner.py`
|
||||||
|
- [ ] Fix any broken references
|
||||||
|
- [ ] Verify all asset paths
|
||||||
|
- [ ] Check for console errors
|
||||||
|
|
||||||
|
### Testing:
|
||||||
|
- [ ] Test crop growing (all 8 stages)
|
||||||
|
- [ ] Test seasonal transitions (all 4 seasons)
|
||||||
|
- [ ] Test bug catching (all rarities)
|
||||||
|
- [ ] Test tool repair/upgrade
|
||||||
|
- [ ] Test enchantment system
|
||||||
|
- [ ] Test Ivan dialogue
|
||||||
|
- [ ] Test blacksmith interactions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 **PHASE 5: FINAL VERIFICATION**
|
||||||
|
|
||||||
|
### Game Launch:
|
||||||
|
- [ ] Start game in Electron
|
||||||
|
- [ ] Load demo map
|
||||||
|
- [ ] Verify player spawn
|
||||||
|
- [ ] Check UI displays correctly
|
||||||
|
|
||||||
|
### Visual Quality:
|
||||||
|
- [ ] All sprites load without errors
|
||||||
|
- [ ] Seasonal tints apply correctly
|
||||||
|
- [ ] Growth stages transition smoothly
|
||||||
|
- [ ] Bug animations work
|
||||||
|
- [ ] Tool icons display properly
|
||||||
|
- [ ] Building sprites render correctly
|
||||||
|
|
||||||
|
### Performance:
|
||||||
|
- [ ] No lag during season change
|
||||||
|
- [ ] No memory leaks
|
||||||
|
- [ ] Smooth animations
|
||||||
|
- [ ] Fast asset loading
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ **COMPLETION CRITERIA**
|
||||||
|
|
||||||
|
### Must Have:
|
||||||
|
- [x] All 113 demo assets generated
|
||||||
|
- [ ] All assets integrated into game
|
||||||
|
- [ ] All systems functional
|
||||||
|
- [ ] No broken references
|
||||||
|
- [ ] No console errors
|
||||||
|
- [ ] Smooth gameplay
|
||||||
|
|
||||||
|
### Final Message:
|
||||||
|
```
|
||||||
|
🚀 ALL SYSTEMS INTEGRATED. KICKSTARTER BUILD READY.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⏰ **TIMELINE**
|
||||||
|
|
||||||
|
| Phase | Duration | Start | End |
|
||||||
|
|-------|----------|-------|-----|
|
||||||
|
| **Phase 1: Prep** | 1h 43min | 22:47 | 00:30 | ✅ |
|
||||||
|
| **Phase 2: Generation** | 45min | 01:19 | 02:04 | ⏳ |
|
||||||
|
| **Phase 3: Integration** | 30min | 02:04 | 02:34 | ⏳ |
|
||||||
|
| **Phase 4: Cleanup** | 20min | 02:34 | 02:54 | ⏳ |
|
||||||
|
| **Phase 5: Verification** | 15min | 02:54 | 03:09 | ⏳ |
|
||||||
|
| **TOTAL** | **3h 22min** | 22:47 | 03:09 | ⏳ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Current Time:** 01:11 CET
|
||||||
|
**Next Action:** Wait 8 minutes → Generate all 113 assets
|
||||||
|
**Status:** 🟢 ON TRACK
|
||||||
|
|
||||||
|
**Ready for Kickstarter!** 🎮🚀
|
||||||
204
scripts/generate_kickstarter_demo_assets.py
Normal file
204
scripts/generate_kickstarter_demo_assets.py
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Kickstarter Demo - Batch Asset Generator
|
||||||
|
Generates all 113 remaining assets for the demo after API quota reset
|
||||||
|
"""
|
||||||
|
|
||||||
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
# Asset generation manifest
|
||||||
|
ASSETS_TO_GENERATE = {
|
||||||
|
# 🐞 BUG SYSTEM (24 sprites)
|
||||||
|
'bugs': {
|
||||||
|
'common': [
|
||||||
|
('butterfly_common', 'Common butterfly, orange and black wings, flying, chibi'),
|
||||||
|
('ladybug', 'Red ladybug with black spots, cute chibi style'),
|
||||||
|
('bee', 'Yellow and black honey bee, fuzzy, chibi'),
|
||||||
|
('ant', 'Small black ant, carrying leaf, chibi'),
|
||||||
|
('firefly', 'Glowing firefly, light effect, night, chibi'),
|
||||||
|
('grasshopper', 'Green grasshopper, jumping pose, chibi'),
|
||||||
|
],
|
||||||
|
'uncommon': [
|
||||||
|
('monarch_butterfly', 'Monarch butterfly, vibrant orange, detailed wings'),
|
||||||
|
('dragonfly', 'Dragonfly with iridescent wings, blue-green'),
|
||||||
|
('praying_mantis', 'Green praying mantis, hunting pose'),
|
||||||
|
('luna_moth', 'Pale green luna moth, large wings, nocturnal'),
|
||||||
|
('cicada', 'Brown cicada, detailed wings'),
|
||||||
|
('japanese_beetle', 'Metallic green Japanese beetle'),
|
||||||
|
],
|
||||||
|
'rare': [
|
||||||
|
('rainbow_beetle', 'Rainbow beetle with prismatic shell, iridescent'),
|
||||||
|
('atlas_moth', 'Giant atlas moth with detailed wing patterns'),
|
||||||
|
('orchid_mantis', 'Pink and white orchid mantis, flower camouflage'),
|
||||||
|
('jewel_wasp', 'Metallic emerald green jewel wasp'),
|
||||||
|
('hercules_beetle', 'Large horned Hercules beetle, powerful'),
|
||||||
|
('blue_morpho', 'Electric blue Morpho butterfly, glowing'),
|
||||||
|
],
|
||||||
|
'legendary': [
|
||||||
|
('golden_scarab', 'Golden scarab beetle, glowing aura, magical'),
|
||||||
|
('crystal_butterfly', 'Translucent crystal butterfly, ethereal'),
|
||||||
|
('phoenix_moth', 'Fire-themed phoenix moth, flame wings'),
|
||||||
|
('shadow_mantis', 'Dark purple shadow mantis, mysterious aura'),
|
||||||
|
('rainbow_stag_beetle', 'Rainbow prismatic stag beetle with large horns'),
|
||||||
|
('lunar_butterfly', 'Moon-glowing butterfly, silvery white'),
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
# 🔨 TOOLS (63 sprites - 10 types × 6 tiers + 3 enchanted)
|
||||||
|
'tools': {
|
||||||
|
'hoe': ['tier1_wood', 'tier2_steel', 'tier3_gold', 'tier4_emerald', 'tier5_diamond', 'tier6_ultimate'],
|
||||||
|
'watering_can': ['tier1_wood', 'tier2_steel', 'tier3_gold', 'tier4_emerald', 'tier5_diamond', 'tier6_ultimate'],
|
||||||
|
'axe': ['tier1_wood', 'tier2_steel', 'tier3_gold', 'tier4_emerald', 'tier5_diamond', 'tier6_ultimate'],
|
||||||
|
'pickaxe': ['tier1_wood', 'tier2_steel', 'tier3_gold', 'tier4_emerald', 'tier5_diamond', 'tier6_ultimate'],
|
||||||
|
'scythe': ['tier1_wood', 'tier2_steel', 'tier3_gold', 'tier4_emerald', 'tier5_diamond', 'tier6_ultimate'],
|
||||||
|
'hammer': ['tier1_wood', 'tier2_steel', 'tier3_gold', 'tier4_emerald', 'tier5_diamond', 'tier6_ultimate'],
|
||||||
|
'fishing_rod': ['tier1_wood', 'tier2_steel', 'tier3_gold', 'tier4_emerald', 'tier5_diamond', 'tier6_ultimate'],
|
||||||
|
'bug_net': ['tier1_wood', 'tier2_steel', 'tier3_gold', 'tier4_emerald', 'tier5_diamond', 'tier6_ultimate'],
|
||||||
|
'sword': ['tier1_wood', 'tier2_steel', 'tier3_gold', 'tier4_emerald', 'tier5_diamond', 'tier6_ultimate'],
|
||||||
|
'shovel': ['tier1_wood', 'tier2_steel', 'tier3_gold', 'tier4_emerald', 'tier5_diamond', 'tier6_ultimate'],
|
||||||
|
},
|
||||||
|
|
||||||
|
# 👨🔧 IVAN BLACKSMITH (6 sprites)
|
||||||
|
'ivan_npc': [
|
||||||
|
('ivan_portrait_64x64', 'Burly blacksmith portrait, bearded, leather apron, soot on face'),
|
||||||
|
('ivan_idle_down', 'Blacksmith standing, facing down, muscular chibi'),
|
||||||
|
('ivan_idle_up', 'Blacksmith standing, facing up'),
|
||||||
|
('ivan_idle_left', 'Blacksmith standing, facing left'),
|
||||||
|
('ivan_idle_right', 'Blacksmith standing, facing right'),
|
||||||
|
('ivan_working', 'Blacksmith hammering at anvil, work animation'),
|
||||||
|
],
|
||||||
|
|
||||||
|
# 🏚️ BLACKSMITH BUILDING (8 sprites)
|
||||||
|
'blacksmith_building': [
|
||||||
|
('ruined_32x32', 'Ruined blacksmith, collapsed roof, broken walls'),
|
||||||
|
('ruined_64x64', 'Ruined blacksmith, larger view'),
|
||||||
|
('ruined_96x96', 'Ruined blacksmith, detailed damage'),
|
||||||
|
('ruined_128x64', 'Ruined blacksmith, full building view'),
|
||||||
|
('restored_32x32', 'Restored blacksmith, sturdy, smoke from chimney'),
|
||||||
|
('restored_64x64', 'Restored blacksmith, larger view'),
|
||||||
|
('restored_96x96', 'Restored blacksmith, detailed'),
|
||||||
|
('restored_128x64', 'Restored blacksmith, full building with anvil visible'),
|
||||||
|
],
|
||||||
|
|
||||||
|
# 🛠️ REPAIR BENCH & UI (6 sprites)
|
||||||
|
'repair_bench': [
|
||||||
|
('bench_32x32', 'Wooden repair workbench, tools scattered'),
|
||||||
|
('bench_64x32', 'Wider repair bench with anvil'),
|
||||||
|
('anvil_icon', 'Anvil icon for UI, 32x32'),
|
||||||
|
('hammer_icon', 'Hammer icon for UI, 32x32'),
|
||||||
|
('enchant_glow_red', 'Red particle glow effect, 16x16'),
|
||||||
|
('enchant_glow_blue', 'Blue particle glow effect, 16x16'),
|
||||||
|
],
|
||||||
|
|
||||||
|
# 🌾 MISSING CROPS (3 sprites)
|
||||||
|
'crops': [
|
||||||
|
('pumpkin_winter_s2', 'Pumpkin sprout in winter, frost, cool tones'),
|
||||||
|
('pumpkin_winter_s3', 'Young pumpkin vine in winter, cold'),
|
||||||
|
('pumpkin_winter_s6', 'Ripe pumpkin in winter, frozen harvest'),
|
||||||
|
],
|
||||||
|
|
||||||
|
# 📦 ITEM ICONS (3 sprites)
|
||||||
|
'items': [
|
||||||
|
('wood_icon', 'Stack of wooden logs, brown'),
|
||||||
|
('stone_icon', 'Pile of gray rocks, stones'),
|
||||||
|
('bread_icon', 'Loaf of bread, golden brown'),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
def generate_asset(category, name, description):
|
||||||
|
"""
|
||||||
|
Generate single asset using the generate_image tool
|
||||||
|
|
||||||
|
NOTE: This is a TEMPLATE script. Actual generation will be done
|
||||||
|
via the Gemini Agent's generate_image tool after quota reset.
|
||||||
|
|
||||||
|
This script serves as the manifest and organization guide.
|
||||||
|
"""
|
||||||
|
print(f" 📸 {category}/{name}.png - {description}")
|
||||||
|
|
||||||
|
# Prompt template for Style 32
|
||||||
|
style_spec = "Style 32 Dark-Chibi Noir, 32x32px, thick black outlines, chibi proportions, top-down view, post-apocalyptic garden aesthetic, vibrant colors, centered sprite"
|
||||||
|
|
||||||
|
full_prompt = f"{description}, {style_spec}"
|
||||||
|
|
||||||
|
# Return prompt for agent to use
|
||||||
|
return {
|
||||||
|
'name': f"{category}_{name}",
|
||||||
|
'prompt': full_prompt,
|
||||||
|
'category': category
|
||||||
|
}
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("=" * 60)
|
||||||
|
print("🎯 KICKSTARTER DEMO - ASSET GENERATION MANIFEST")
|
||||||
|
print("=" * 60)
|
||||||
|
|
||||||
|
generation_list = []
|
||||||
|
total_count = 0
|
||||||
|
|
||||||
|
# 1. BUGS
|
||||||
|
print("\n🐞 BUG SYSTEM:")
|
||||||
|
for rarity, bugs in ASSETS_TO_GENERATE['bugs'].items():
|
||||||
|
print(f"\n {rarity.upper()}:")
|
||||||
|
for bug_name, description in bugs:
|
||||||
|
asset = generate_asset('bugs', f"{rarity}_{bug_name}", description)
|
||||||
|
generation_list.append(asset)
|
||||||
|
total_count += 1
|
||||||
|
|
||||||
|
# 2. TOOLS
|
||||||
|
print("\n\n🔨 TOOL SYSTEM:")
|
||||||
|
for tool_type, tiers in ASSETS_TO_GENERATE['tools'].items():
|
||||||
|
print(f"\n {tool_type.upper()}:")
|
||||||
|
for tier in tiers:
|
||||||
|
description = f"{tool_type} tool, {tier.replace('_', ' ')}, game icon"
|
||||||
|
asset = generate_asset('tools', f"{tool_type}_{tier}", description)
|
||||||
|
generation_list.append(asset)
|
||||||
|
total_count += 1
|
||||||
|
|
||||||
|
# 3. IVAN BLACKSMITH
|
||||||
|
print("\n\n👨🔧 IVAN BLACKSMITH NPC:")
|
||||||
|
for name, description in ASSETS_TO_GENERATE['ivan_npc']:
|
||||||
|
asset = generate_asset('npc', name, description)
|
||||||
|
generation_list.append(asset)
|
||||||
|
total_count += 1
|
||||||
|
|
||||||
|
# 4. BLACKSMITH BUILDING
|
||||||
|
print("\n\n🏚️ BLACKSMITH BUILDING:")
|
||||||
|
for name, description in ASSETS_TO_GENERATE['blacksmith_building']:
|
||||||
|
asset = generate_asset('buildings', name, description)
|
||||||
|
generation_list.append(asset)
|
||||||
|
total_count += 1
|
||||||
|
|
||||||
|
# 5. REPAIR BENCH
|
||||||
|
print("\n\n🛠️ REPAIR BENCH & UI:")
|
||||||
|
for name, description in ASSETS_TO_GENERATE['repair_bench']:
|
||||||
|
asset = generate_asset('ui', name, description)
|
||||||
|
generation_list.append(asset)
|
||||||
|
total_count += 1
|
||||||
|
|
||||||
|
# 6. MISSING CROPS
|
||||||
|
print("\n\n🌾 MISSING CROP SPRITES:")
|
||||||
|
for name, description in ASSETS_TO_GENERATE['crops']:
|
||||||
|
asset = generate_asset('crops', name, description)
|
||||||
|
generation_list.append(asset)
|
||||||
|
total_count += 1
|
||||||
|
|
||||||
|
# 7. ITEM ICONS
|
||||||
|
print("\n\n📦 ITEM ICONS:")
|
||||||
|
for name, description in ASSETS_TO_GENERATE['items']:
|
||||||
|
asset = generate_asset('items', name, description)
|
||||||
|
generation_list.append(asset)
|
||||||
|
total_count += 1
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
print("\n" + "=" * 60)
|
||||||
|
print(f"📊 TOTAL ASSETS TO GENERATE: {total_count}")
|
||||||
|
print("=" * 60)
|
||||||
|
|
||||||
|
print("\n⏰ WAITING FOR API QUOTA RESET...")
|
||||||
|
print("🎯 After reset, agent will generate all assets automatically")
|
||||||
|
print("\n✅ This manifest is ready for execution!")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user