Hidden WordScanner
Private scans · No account required

DuckieDai DUCKMON

A monster-collecting game in three files: explore for gold and hatch eggs in DUCKMON, battle in DMARENA, and upgrade your team in DMTEAM, all sharing one save on the calculator.

games · MIT License

Overview

A monster-collecting game in three files: explore for gold and hatch eggs in DUCKMON, battle in DMARENA, and upgrade your team in DMTEAM, all sharing one save on the calculator.

  • Owner-tested on a TI calculator
  • Version 1.0.0
  • 3 files · 7398 bytes
  • Uses random, ti_system

This game is 3 files. Download all of them and send each one to your calculator.

Before you run it

  • TI-84 Plus CE Python · No calculator OS or Python App version has been verified.
  • TI Connect CE .py transfer to the Python App, all three files; the owner's transfer details were not recorded
  • All three files, DUCKMON, DMTEAM, and DMARENA, are on the same calculator.
  • DUCKMON is run first: it creates the save, a list named DMONS, that DMTEAM and DMARENA read.
  • The game saves after every change to the calculator list DMONS. Deleting or editing that list starts a new game.

Play it here first

This is the real game, all three files. Pick a file to run, the way you would in the Python App: choose a starter in DUCKMON, explore and hatch eggs, then battle in DMARENA and upgrade in DMTEAM. Your save is shared between the three files, like the DMONS list on the calculator, and lasts until you leave or reload this page.

JavaScript is required for the optional browser simulation. Source viewing and downloading remain available without it.

Simulation boundary: This preview uses a reviewed browser adapter. It does not execute the downloaded Python and does not prove TI-Python or calculator compatibility.

How to play

How to play DUCKMON

About the game

DUCKMON is a monster-collecting game. Explore for gold, spend it on eggs that hatch into 20 original monsters, from Common to Legend, then battle wild monsters in the arena and level up your favorite.

The game is three programs that share one save. DUCKMON is where you explore and hatch eggs, DMARENA is where you battle, and DMTEAM is your album, team, stats, and help. Put all three on your calculator, and run DUCKMON first: it starts your game.

Controls

1, 2, 3 ...
pick the menu choice with that number, then press enter
0
go back, or save and exit from a program's main menu
enter
move on from a message screen marked [enter]
1 Hit
in a battle: a steady hit for about your ATK
2 Power
in a battle: about 1.7 times your ATK, but it misses 32% of the time
3 Guard+hit
in a battle: a small hit, and the enemy's hit back that turn is cut to a third
0 Run
in a battle: escape with no win or loss

How to play

Tips

Good to know

Exact reviewed bytes

Source code

Download .py

View source below, copy it when JavaScript is available, or download the exact .py bytes.

  1. from random import randint as R
  2. from ti_system import disp_clr as cl,recall_list,store_list
  3. N="Piplet Flamoo Bubblin Pebblit Buzzkit Fuzzle Dewbit Mossling Thornix Cindera Tidefin Voltusk Glintail Snowsprig Pyronox Frosthorn Stormpaw Moonveil Auraduck Voidwing".split()
  4. S=[1,60,0,0,0,0,0,0]+[0]*20+[1]*20
  5. def rk(i):return (i>7)+(i>13)+(i>17)
  6. def hp(i,l):return 30+rk(i)*8+i%3*2+(l-1)*5
  7. def at(i,l):return 8+rk(i)*3+i%3+(l-1)*2
  8. def nf():return str(sum(1 for v in S[8:28] if v))
  9. def pz():input("[enter]")
  10. def sv():
  11. try:store_list("DMONS",S)
  12. except Exception:print("SAVE FAILED!")
  13. def ld():
  14. try:
  15. a=[int(v) for v in recall_list("DMONS")]
  16. if len(a)==48 and a[0]==1 and 0<=a[3]<20 and a[8+a[3]]>0 and min(a[28:])>0 and max(a[28:])<10:S[:]=a;return 1
  17. except Exception:pass
  18. def pick(p):
  19. x=R(1,100);r=sum(1 for t in((15,55,92) if p else(72,95,99)) if x>t)
  20. return R((0,8,14,18)[r],(7,13,17,19)[r])
  21. def get(i):
  22. cl();print("EGG HATCHED!\n"+N[i]+" ("+("Common","Uncommon","Rare","Legend")[rk(i)]+")")
  23. if S[8+i]:b=2+2*rk(i);S[2]+=b;print("Duplicate! +"+str(b)+" dust")
  24. else:print("NEW DISCOVERY!")
  25. S[8+i]+=1;S[6]+=1;sv();pz()
  26. def eggs():
  27. while 1:
  28. cl();c=input("EGG SHOP Gold: "+str(S[1])+"\n1 Basic 30 gold\n2 Royal 100 gold\n0 Back\n> ")
  29. if c=="0":return
  30. if c in("1","2"):
  31. k=30 if c=="1" else 100
  32. if S[1]<k:cl();print("Not enough gold!");pz()
  33. else:S[1]-=k;get(pick(c=="2"))
  34. def explore():
  35. S[7]+=1;x=R(1,100);cl();print("EXPLORING...")
  36. if x<=81:
  37. p=R(10,20) if x<=62 else R(23,38);S[1]+=p
  38. if x>62:print("Treasure chest!")
  39. print("Found "+str(p)+" gold!");sv();pz()
  40. elif x<=96:print("A wild monster appeared!\nBattle it in DMARENA\nfor gold and dust!");sv();pz()
  41. else:print("Found a free egg!");sv();pz();get(pick(0))
  42. cl();print("DUCKMON\n __\n ___(o )> quack!\n \\ <_. )\n `---'\nDuckieDai (TM)\nhiddenwordscanner.com\n20 original monsters");pz()
  43. if not ld():
  44. while 1:
  45. cl();c=input("CHOOSE YOUR STARTER\n1 Piplet\n2 Flamoo\n3 Bubblin\n> ")
  46. if c in("1","2","3"):S[3]=int(c)-1;S[8+S[3]]=1;sv();break
  47. while 1:
  48. i=S[3];cl()
  49. c=input("DUCKMON | "+str(S[1])+" gold\n"+N[i]+" Lv"+str(S[28+i])+" Found "+nf()+"/20\n1 Explore 2 Eggs\n0 Save + exit\nArena: DMARENA\nTeam/album: DMTEAM\n> ")
  50. if c=="0":sv();cl();print("Saved! Thanks for playing!\nDuckieDai (TM)\nhiddenwordscanner.com");break
  51. if c=="1":explore()
  52. if c=="2":eggs()
Filename
DUCKMON.py
Size
2367 bytes
SHA-256
d3d364e352f751004ed937589d3014448bd861a48047a614f494688faa5e4482

DMTEAM.py

Download DMTEAM.py

  1. from random import randint as R
  2. from ti_system import disp_clr as cl,recall_list,store_list
  3. N="Piplet Flamoo Bubblin Pebblit Buzzkit Fuzzle Dewbit Mossling Thornix Cindera Tidefin Voltusk Glintail Snowsprig Pyronox Frosthorn Stormpaw Moonveil Auraduck Voidwing".split()
  4. S=[1,60,0,0,0,0,0,0]+[0]*20+[1]*20
  5. def rk(i):return (i>7)+(i>13)+(i>17)
  6. def hp(i,l):return 30+rk(i)*8+i%3*2+(l-1)*5
  7. def at(i,l):return 8+rk(i)*3+i%3+(l-1)*2
  8. def nf():return str(sum(1 for v in S[8:28] if v))
  9. def pz():input("[enter]")
  10. def sv():
  11. try:store_list("DMONS",S)
  12. except Exception:print("SAVE FAILED!")
  13. def ld():
  14. try:
  15. a=[int(v) for v in recall_list("DMONS")]
  16. if len(a)==48 and a[0]==1 and 0<=a[3]<20 and a[8+a[3]]>0 and min(a[28:])>0 and max(a[28:])<10:S[:]=a;return 1
  17. except Exception:pass
  18. def album():
  19. while 1:
  20. cl();p=input("ALBUM "+nf()+"/20\nPage 1-4, 0=back\n> ")
  21. if p=="0":return
  22. if p in("1","2","3","4"):
  23. cl();s=(int(p)-1)*5
  24. for i in range(s,s+5):print(str(i+1)+". "+(N[i]+" x"+str(S[8+i]) if S[8+i] else "??? "+"CURL"[rk(i)]))
  25. print("C/U/R/L = rarity");pz()
  26. def team():
  27. while 1:
  28. i=S[3];l=S[28+i];cl()
  29. c=input("TEAM: "+N[i]+" Lv"+str(l)+"\nHP "+str(hp(i,l))+" ATK "+str(at(i,l))+" Dust "+str(S[2])+"\n1 Choose monster\n2 Upgrade 0 Back\n> ")
  30. if c=="0":return
  31. if c=="1":
  32. try:k=int(input("Owned ID 1-20 (see album): "))-1
  33. except ValueError:k=-1
  34. if 0<=k<20 and S[8+k]:S[3]=k;sv()
  35. else:print("Not owned / invalid");pz()
  36. elif c=="2":
  37. cl()
  38. if l>=9:print("Already max level!")
  39. else:
  40. k=3+l*2
  41. if input("Upgrade "+N[i]+"\nLv "+str(l)+" -> "+str(l+1)+" Cost "+str(k)+" dust\n1 Confirm 0 Back\n> ")=="1":
  42. if S[2]>=k:S[2]-=k;S[28+i]+=1;sv();print("UPGRADED!")
  43. else:print("Not enough dust!")
  44. pz()
  45. def stats():
  46. cl();print("STATS\nFound "+nf()+"/20\nEggs "+str(S[6])+" Trips "+str(S[7])+"\nWins "+str(S[4])+" Losses "+str(S[5])+"\nGold "+str(S[1])+" Dust "+str(S[2])+"\nSave: list DMONS");pz()
  47. def hlp():
  48. cl();print("Explore = gold\nEggs = new monsters\nDuplicates = dust\nDust upgrades team\nArena wins = gold\n1 Hit 2 Big risky hit\n3 Guard + counter");pz()
  49. cl();print("Basic egg: C72 U23 R4 L1\nRoyal egg: C15 U40 R37 L8\nAutosaves to list DMONS\nDon't delete it!");pz()
  50. cl();print("DUCKMON TEAM\n __\n ___(o )> quack!\n \\ <_. )\n `---'\nDuckieDai (TM)\nhiddenwordscanner.com");pz()
  51. if not ld():cl();print("No save found.\nRun DUCKMON first!")
  52. else:
  53. while 1:
  54. i=S[3];cl()
  55. c=input("TEAM | "+N[i]+" Lv"+str(S[28+i])+"\n1 Album 2 Team\n3 Stats 4 Help\n0 Exit\n> ")
  56. if c=="0":sv();cl();print("Saved! DuckieDai (TM)\nhiddenwordscanner.com");break
  57. if c in("1","2","3","4"):(album,team,stats,hlp)[int(c)-1]()
Filename
DMTEAM.py
Size
2680 bytes
SHA-256
889475e0f3526bcd8a7c0c923d30c60db44ea96d3148b31c8cf5cce5ae3e7d80

DMARENA.py

Download DMARENA.py

  1. from random import randint as R
  2. from ti_system import disp_clr as cl,recall_list,store_list
  3. N="Piplet Flamoo Bubblin Pebblit Buzzkit Fuzzle Dewbit Mossling Thornix Cindera Tidefin Voltusk Glintail Snowsprig Pyronox Frosthorn Stormpaw Moonveil Auraduck Voidwing".split()
  4. S=[1,60,0,0,0,0,0,0]+[0]*20+[1]*20
  5. def rk(i):return (i>7)+(i>13)+(i>17)
  6. def hp(i,l):return 30+rk(i)*8+i%3*2+(l-1)*5
  7. def at(i,l):return 8+rk(i)*3+i%3+(l-1)*2
  8. def nf():return str(sum(1 for v in S[8:28] if v))
  9. def pz():input("[enter]")
  10. def sv():
  11. try:store_list("DMONS",S)
  12. except Exception:print("SAVE FAILED!")
  13. def ld():
  14. try:
  15. a=[int(v) for v in recall_list("DMONS")]
  16. if len(a)==48 and a[0]==1 and 0<=a[3]<20 and a[8+a[3]]>0 and min(a[28:])>0 and max(a[28:])<10:S[:]=a;return 1
  17. except Exception:pass
  18. def pick(p):
  19. x=R(1,100);r=sum(1 for t in((15,55,92) if p else(72,95,99)) if x>t)
  20. return R((0,8,14,18)[r],(7,13,17,19)[r])
  21. def fight():
  22. i=S[3];l=S[28+i];j=pick(0);e=max(1,min(9,l+R(-1,1)));m=hp(i,l);h=m;E=max(5,hp(j,e)*4//5)
  23. while h and E:
  24. cl();c=input("BATTLE\n"+N[i]+" Lv"+str(l)+" HP "+str(h)+"/"+str(m)+"\nVS "+N[j]+" Lv"+str(e)+" HP "+str(E)+"\n1 Hit 2 Power\n3 Guard+hit 0 Run\n> ")
  25. if c=="0":cl();print("You escaped!");pz();return
  26. if c not in("1","2","3"):continue
  27. a=at(i,l)
  28. if c=="1":d=max(1,a+R(-2,2))
  29. elif c=="2":d=0 if R(1,100)<=32 else max(1,a*17//10+R(-2,2))
  30. else:d=max(1,a//3)
  31. E=max(0,E-d);u=0
  32. if E and R(1,100)>18:
  33. u=max(1,at(j,e)+R(-2,2))
  34. if c=="3":u=max(1,u//3)
  35. h=max(0,h-u)
  36. cl();print("You dealt "+str(d)+" DMG" if d else "Your attack missed!")
  37. print("Enemy defeated!" if E==0 else "Enemy dealt "+str(u) if u else "Enemy missed!")
  38. print("Your HP: "+str(h));pz()
  39. cl()
  40. if h:
  41. p=14+rk(j)*9+R(2,10);S[1]+=p;S[4]+=1;print("VICTORY!\nEarned "+str(p)+" gold")
  42. if R(1,100)<=25:S[2]+=1;print("+1 upgrade dust")
  43. else:S[5]+=1;print("DEFEAT!\nTry another battle")
  44. sv();pz()
  45. cl();print("DUCKMON ARENA\n __\n ___(o )> quack!\n \\ <_. )\n `---'\nDuckieDai (TM)\nhiddenwordscanner.com");pz()
  46. if not ld():cl();print("No save found.\nRun DUCKMON first!")
  47. else:
  48. while 1:
  49. i=S[3];cl()
  50. c=input("ARENA | "+str(S[1])+" gold\n"+N[i]+" Lv"+str(S[28+i])+"\nWins "+str(S[4])+" Losses "+str(S[5])+"\n1 Battle 0 Exit\n> ")
  51. if c=="0":sv();cl();print("Saved! DuckieDai (TM)\nhiddenwordscanner.com");break
  52. if c=="1":fight()
Filename
DMARENA.py
Size
2351 bytes
SHA-256
30bfb443bd11cd97ee3ca5e903cce7eb260372b13bdfa45e6a3358c82fb16e2b

Usage

Inputs

  • Menu choices typed as numbers, then Enter
  • A monster ID from 1 to 20 when choosing your team monster in DMTEAM

Outputs

  • Gold, dust, eggs that hatch into 20 monsters of four rarities, and an album of the ones found
  • Turn-based battles in the arena with three moves, and upgrades for your team monster
  • Stats: monsters found, eggs hatched, trips, wins, and losses

Units: Gold and dust; no units.

Assumptions and limitations

Assumptions

  • All three files, DUCKMON, DMTEAM, and DMARENA, are on the same calculator.
  • DUCKMON is run first: it creates the save, a list named DMONS, that DMTEAM and DMARENA read.

Constraints

  • The game saves after every change to the calculator list DMONS. Deleting or editing that list starts a new game.
  • Monsters reach level 9 at most; there are 20 monsters to find.

Known failures

  • The game needs the calculator's ti_system module to clear the screen and save; on a computer it stops with an import error.
  • If the DMONS list is changed by hand so it no longer looks like a DUCKMON save, the game ignores it and starts over.

Compatibility and review

Review status
Owner-tested on a TI calculator
Tested on
Owner reports personally running all three files on a TI-84 Plus CE Python calculator; the test date, OS version, and Python App version were not recorded
What happened
Owner reported pass on the calculator: the three files run and share the DMONS save. The published files are the owner's files unchanged.
Dependencies
random, ti_system
Calculator names
DUCKMON, DMTEAM, DMARENA — keep these names: the files open each other's saved data by name
Desktop test cases
Not available for this interactive-only source

This exact source auto-launches an interactive calculator session, so compatibility evidence comes from the recorded physical-device review rather than an importable desktop fixture.

Transfer and launch

Download the .py file, send it to your calculator with TI Connect CE as DUCKMON or another name, then open the Python App and start a game. Press [on] to stop at any time. This release has no verified calculator OS or Python App version; treat transfer and execution as unverified until independently tested.

Full installation and troubleshooting guide. Check your teacher's or exam's rules before using any program.

Version history

Enjoying a DuckieDai game? Every game and program here is free. If you would like to say thanks, you can leave a tip on Cash App ($duckiedai214) or read what tips pay for.

Independent compatibility resource: Hidden Word Scanner is independent and is not affiliated with or endorsed by Texas Instruments. TI product names describe compatibility only.

Action-count privacy: Successful downloads, preview starts, and preview completions increment same-origin aggregate counters, and so does a Yes or No answer about whether the program worked. Your browser notes that you answered; that note is never sent to the site. No entered values, source text, IP address, account, cookie, device identifier, or fingerprint is stored with these counts.