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.
Tried it? Did this program work on 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.
TI-84 Plus CE Python · screen preview
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
- Send DUCKMON.py, DMTEAM.py, and DMARENA.py to your calculator with TI Connect CE. Keep their names.
- Run DUCKMON from the Python App and choose a starter: 1 Piplet, 2 Flamoo, or 3 Bubblin. You begin with 60 gold.
- Choose 1 Explore to look for gold. Most trips find 10 to 38 gold, a few find a free egg, and some meet a wild monster, which you battle in DMARENA.
- Choose 2 Eggs to buy one. A Basic egg costs 30 gold and a Royal egg 100 gold. A new monster joins your album; a monster you already have also gives upgrade dust.
- Run DMARENA and choose 1 Battle. Your team monster fights a random wild monster near its level. Pick a move each turn until one side reaches 0 HP. A win pays gold, and sometimes 1 dust.
- Run DMTEAM to see your album, choose 2 Team to switch to another monster you own by its album number, or upgrade it with dust, up to level 9.
- Every program saves as you play, so you can switch between them whenever you like. Choose 0 to save and exit.
Tips
- Explore a few times before buying eggs. Basic eggs are the cheap way to fill your album; Royal eggs are far more likely to be Rare or Legend.
- Duplicates are not wasted: each one gives 2 dust for a Common, 4 for an Uncommon, 6 for a Rare, and 8 for a Legend.
- Upgrading costs 3 + 2 times the current level in dust: 5 dust to reach level 2, up to 19 dust to reach level 9. Each level adds 5 HP and 2 ATK.
- Rarer monsters start stronger. A Legend at level 1 has more HP and ATK than a Common at level 2.
- In a close battle, Guard+hit keeps you alive; Power ends fights fast when you can afford a miss.
- Losing a battle costs nothing but a loss on your record, so try the arena early.
Good to know
- Your save is a calculator list named DMONS. Deleting or editing it starts a new game.
- Egg odds, shown in DMTEAM under 4 Help: Basic is 72% Common, 23% Uncommon, 4% Rare, and 1% Legend; Royal is 15%, 40%, 37%, and 8%.
- In the album, a monster you have not found shows as ??? with its rarity letter: C, U, R, or L.
- DMTEAM and DMARENA say No save found until you have run DUCKMON and chosen a starter.
- To stop the game at any time, press the [on] key. The Python App returns to the shell.
Exact reviewed bytes
Source code
from random import randint as Rfrom ti_system import disp_clr as cl,recall_list,store_listN="Piplet Flamoo Bubblin Pebblit Buzzkit Fuzzle Dewbit Mossling Thornix Cindera Tidefin Voltusk Glintail Snowsprig Pyronox Frosthorn Stormpaw Moonveil Auraduck Voidwing".split()S=[1,60,0,0,0,0,0,0]+[0]*20+[1]*20def rk(i):return (i>7)+(i>13)+(i>17)def hp(i,l):return 30+rk(i)*8+i%3*2+(l-1)*5def at(i,l):return 8+rk(i)*3+i%3+(l-1)*2def nf():return str(sum(1 for v in S[8:28] if v))def pz():input("[enter]")def sv():try:store_list("DMONS",S)except Exception:print("SAVE FAILED!")def ld():try:a=[int(v) for v in recall_list("DMONS")]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 1except Exception:passdef pick(p):x=R(1,100);r=sum(1 for t in((15,55,92) if p else(72,95,99)) if x>t)return R((0,8,14,18)[r],(7,13,17,19)[r])def get(i):cl();print("EGG HATCHED!\n"+N[i]+" ("+("Common","Uncommon","Rare","Legend")[rk(i)]+")")if S[8+i]:b=2+2*rk(i);S[2]+=b;print("Duplicate! +"+str(b)+" dust")else:print("NEW DISCOVERY!")S[8+i]+=1;S[6]+=1;sv();pz()def eggs():while 1:cl();c=input("EGG SHOP Gold: "+str(S[1])+"\n1 Basic 30 gold\n2 Royal 100 gold\n0 Back\n> ")if c=="0":returnif c in("1","2"):k=30 if c=="1" else 100if S[1]<k:cl();print("Not enough gold!");pz()else:S[1]-=k;get(pick(c=="2"))def explore():S[7]+=1;x=R(1,100);cl();print("EXPLORING...")if x<=81:p=R(10,20) if x<=62 else R(23,38);S[1]+=pif x>62:print("Treasure chest!")print("Found "+str(p)+" gold!");sv();pz()elif x<=96:print("A wild monster appeared!\nBattle it in DMARENA\nfor gold and dust!");sv();pz()else:print("Found a free egg!");sv();pz();get(pick(0))cl();print("DUCKMON\n __\n ___(o )> quack!\n \\ <_. )\n `---'\nDuckieDai (TM)\nhiddenwordscanner.com\n20 original monsters");pz()if not ld():while 1:cl();c=input("CHOOSE YOUR STARTER\n1 Piplet\n2 Flamoo\n3 Bubblin\n> ")if c in("1","2","3"):S[3]=int(c)-1;S[8+S[3]]=1;sv();breakwhile 1:i=S[3];cl()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> ")if c=="0":sv();cl();print("Saved! Thanks for playing!\nDuckieDai (TM)\nhiddenwordscanner.com");breakif c=="1":explore()if c=="2":eggs()
- Filename
DUCKMON.py- Size
- 2367 bytes
- SHA-256
d3d364e352f751004ed937589d3014448bd861a48047a614f494688faa5e4482
DMTEAM.py
from random import randint as Rfrom ti_system import disp_clr as cl,recall_list,store_listN="Piplet Flamoo Bubblin Pebblit Buzzkit Fuzzle Dewbit Mossling Thornix Cindera Tidefin Voltusk Glintail Snowsprig Pyronox Frosthorn Stormpaw Moonveil Auraduck Voidwing".split()S=[1,60,0,0,0,0,0,0]+[0]*20+[1]*20def rk(i):return (i>7)+(i>13)+(i>17)def hp(i,l):return 30+rk(i)*8+i%3*2+(l-1)*5def at(i,l):return 8+rk(i)*3+i%3+(l-1)*2def nf():return str(sum(1 for v in S[8:28] if v))def pz():input("[enter]")def sv():try:store_list("DMONS",S)except Exception:print("SAVE FAILED!")def ld():try:a=[int(v) for v in recall_list("DMONS")]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 1except Exception:passdef album():while 1:cl();p=input("ALBUM "+nf()+"/20\nPage 1-4, 0=back\n> ")if p=="0":returnif p in("1","2","3","4"):cl();s=(int(p)-1)*5for 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)]))print("C/U/R/L = rarity");pz()def team():while 1:i=S[3];l=S[28+i];cl()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> ")if c=="0":returnif c=="1":try:k=int(input("Owned ID 1-20 (see album): "))-1except ValueError:k=-1if 0<=k<20 and S[8+k]:S[3]=k;sv()else:print("Not owned / invalid");pz()elif c=="2":cl()if l>=9:print("Already max level!")else:k=3+l*2if input("Upgrade "+N[i]+"\nLv "+str(l)+" -> "+str(l+1)+" Cost "+str(k)+" dust\n1 Confirm 0 Back\n> ")=="1":if S[2]>=k:S[2]-=k;S[28+i]+=1;sv();print("UPGRADED!")else:print("Not enough dust!")pz()def stats():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()def hlp():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()cl();print("Basic egg: C72 U23 R4 L1\nRoyal egg: C15 U40 R37 L8\nAutosaves to list DMONS\nDon't delete it!");pz()cl();print("DUCKMON TEAM\n __\n ___(o )> quack!\n \\ <_. )\n `---'\nDuckieDai (TM)\nhiddenwordscanner.com");pz()if not ld():cl();print("No save found.\nRun DUCKMON first!")else:while 1:i=S[3];cl()c=input("TEAM | "+N[i]+" Lv"+str(S[28+i])+"\n1 Album 2 Team\n3 Stats 4 Help\n0 Exit\n> ")if c=="0":sv();cl();print("Saved! DuckieDai (TM)\nhiddenwordscanner.com");breakif c in("1","2","3","4"):(album,team,stats,hlp)[int(c)-1]()
- Filename
DMTEAM.py- Size
- 2680 bytes
- SHA-256
889475e0f3526bcd8a7c0c923d30c60db44ea96d3148b31c8cf5cce5ae3e7d80
DMARENA.py
from random import randint as Rfrom ti_system import disp_clr as cl,recall_list,store_listN="Piplet Flamoo Bubblin Pebblit Buzzkit Fuzzle Dewbit Mossling Thornix Cindera Tidefin Voltusk Glintail Snowsprig Pyronox Frosthorn Stormpaw Moonveil Auraduck Voidwing".split()S=[1,60,0,0,0,0,0,0]+[0]*20+[1]*20def rk(i):return (i>7)+(i>13)+(i>17)def hp(i,l):return 30+rk(i)*8+i%3*2+(l-1)*5def at(i,l):return 8+rk(i)*3+i%3+(l-1)*2def nf():return str(sum(1 for v in S[8:28] if v))def pz():input("[enter]")def sv():try:store_list("DMONS",S)except Exception:print("SAVE FAILED!")def ld():try:a=[int(v) for v in recall_list("DMONS")]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 1except Exception:passdef pick(p):x=R(1,100);r=sum(1 for t in((15,55,92) if p else(72,95,99)) if x>t)return R((0,8,14,18)[r],(7,13,17,19)[r])def fight():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)while h and E: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> ")if c=="0":cl();print("You escaped!");pz();returnif c not in("1","2","3"):continuea=at(i,l)if c=="1":d=max(1,a+R(-2,2))elif c=="2":d=0 if R(1,100)<=32 else max(1,a*17//10+R(-2,2))else:d=max(1,a//3)E=max(0,E-d);u=0if E and R(1,100)>18:u=max(1,at(j,e)+R(-2,2))if c=="3":u=max(1,u//3)h=max(0,h-u)cl();print("You dealt "+str(d)+" DMG" if d else "Your attack missed!")print("Enemy defeated!" if E==0 else "Enemy dealt "+str(u) if u else "Enemy missed!")print("Your HP: "+str(h));pz()cl()if h:p=14+rk(j)*9+R(2,10);S[1]+=p;S[4]+=1;print("VICTORY!\nEarned "+str(p)+" gold")if R(1,100)<=25:S[2]+=1;print("+1 upgrade dust")else:S[5]+=1;print("DEFEAT!\nTry another battle")sv();pz()cl();print("DUCKMON ARENA\n __\n ___(o )> quack!\n \\ <_. )\n `---'\nDuckieDai (TM)\nhiddenwordscanner.com");pz()if not ld():cl();print("No save found.\nRun DUCKMON first!")else:while 1:i=S[3];cl()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> ")if c=="0":sv();cl();print("Saved! DuckieDai (TM)\nhiddenwordscanner.com");breakif 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
- 1.0.0 — current version, published . Download this reviewed version
Related learning
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.