Skip to content

Repository files navigation

YGO Deck Builder

Yu-Gi-Oh! card browser and Deck maker for android, with some tools for dueling and YDK import/export. The data (excluding images for now) is fetched from YGOPRODeck API so the app works fully offline after a sync.

Demo YDK files to import in deck editor for testing are put in the demo/ folder.

The UI is written in Jetpack Compose so LazyColumns and LazyGrids are used as "equivalents" of RecyclerView which isn't available in Compose.


Architecture

The UI of the app is implemented in Jetpack Compose using material3.

UI Navigation: Navigation Compose and ViewModel + StateFlow for state.

Local database (API Cache + Decks): Room persistence library

API Requests: Retrofit + OkHttp

Preferences: DataStore

Features

Card Database

  • Full-text search of the YGOPRODeck card database (14 000+ cards)
  • List/grid card browser with card art thumbnails
  • Detailed card view: stats, description, banlist status, set info, prices
  • Cache all images, and preferably resize them (if there is a cheap way cpu-cycle wise, image conversion with focus on efficiency is very costly) to mitigate some lag stemming from API serving images that are too highres to be used as thumbnails

Offline Caching

  • All cards stored in Room via CachedCardEntity
  • CardSyncWorker enforces a 15-minute cooldown before re-pulling from the API
  • WorkManager periodic sync keeps the cache fresh

Deck Builder

  • Create, rename, and delete decks
  • Main / Extra / Side deck zones with TCG max 3 copies enforcement
  • YDK export — compatible with EDOPro, YGO Omega, etc.
  • YDK import — parse existing .ydk files
  • Activity to open .ydk files directly by intents

Tools

Tool Description
LP Calculator Dual-player life point tracker with damage, gain, halve, reset
Dice Roller 6-sided or d20 roll
Counters Named counters with increment/decrement
Coin Flip Heads or Tails

Extending the App

Banlist Editor

Implement BanlistRepository and a new screen. Format doc: https://www.ygoprog.com/BanlistBuilder

Card Maker

Add a CardMakerScreen that lets the user fill a custom card form and renders it with Canvas / Compose drawBehind.

Mini Games (Wordle, Art Guesser)

  • Leverage CardRepository.searchCards to pick a random card each day.
  • Build game logic in a dedicated ViewModel using a seeded Random keyed to today's date.

Online Drafting

Add a backend (e.g., Firebase Realtime Database or Ktor WebSockets) and a DraftRepository.


API Reference

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages