tuipet 0.5.332__tar.gz → 0.5.333__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. {tuipet-0.5.332/src/tuipet.egg-info → tuipet-0.5.333}/PKG-INFO +1 -1
  2. {tuipet-0.5.332 → tuipet-0.5.333}/pyproject.toml +1 -1
  3. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/app.py +1 -1
  4. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/arena.py +6 -2
  5. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/arenafx.py +18 -0
  6. {tuipet-0.5.332 → tuipet-0.5.333/src/tuipet.egg-info}/PKG-INFO +1 -1
  7. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_scene_actors.py +36 -0
  8. {tuipet-0.5.332 → tuipet-0.5.333}/LICENSE +0 -0
  9. {tuipet-0.5.332 → tuipet-0.5.333}/README.md +0 -0
  10. {tuipet-0.5.332 → tuipet-0.5.333}/setup.cfg +0 -0
  11. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/__init__.py +0 -0
  12. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/__main__.py +0 -0
  13. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/accountscreen.py +0 -0
  14. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/adventure.py +0 -0
  15. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/adventurescreen.py +0 -0
  16. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/albumscreen.py +0 -0
  17. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/anim.py +0 -0
  18. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/appactions.py +0 -0
  19. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/appboot.py +0 -0
  20. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/assistscreen.py +0 -0
  21. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/backgrounds.py +0 -0
  22. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/backgroundscreen.py +0 -0
  23. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/battle.py +0 -0
  24. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/battlescreen.py +0 -0
  25. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/bugscreen.py +0 -0
  26. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/cloudsync.py +0 -0
  27. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/attr_icons.json +0 -0
  28. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/backgrounds.json.gz +0 -0
  29. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/battle_fx.json.gz +0 -0
  30. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/battle_overlays.json +0 -0
  31. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/careEffect.csv +0 -0
  32. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/deviceAttacks.csv +0 -0
  33. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/digicoreMenuConfig.csv +0 -0
  34. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/digimon.csv +0 -0
  35. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/dropRate.csv +0 -0
  36. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/effects.json.gz +0 -0
  37. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/eggUnlock.csv +0 -0
  38. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/eggs.json.gz +0 -0
  39. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/elementAffinity.csv +0 -0
  40. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/enemies.csv +0 -0
  41. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/evolutions.csv +0 -0
  42. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/fieldAffinity.csv +0 -0
  43. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/foods.csv +0 -0
  44. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/hp_dummies.json +0 -0
  45. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/icons.json.gz +0 -0
  46. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/items.csv +0 -0
  47. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/jogress_overlays.json +0 -0
  48. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/lines.csv +0 -0
  49. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/lootTable.csv +0 -0
  50. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/maps.csv +0 -0
  51. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/orbs.json.gz +0 -0
  52. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/shopConsumable.csv +0 -0
  53. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/alarm.wav +0 -0
  54. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/angry.wav +0 -0
  55. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/attack.wav +0 -0
  56. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/attackHit.wav +0 -0
  57. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/battle.wav +0 -0
  58. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/boot.wav +0 -0
  59. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/cancel.wav +0 -0
  60. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/champion.wav +0 -0
  61. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/click.wav +0 -0
  62. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/compatible.wav +0 -0
  63. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/confirm.wav +0 -0
  64. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/death.wav +0 -0
  65. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/eat.wav +0 -0
  66. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/error.wav +0 -0
  67. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/evolve.wav +0 -0
  68. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/happy.wav +0 -0
  69. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/hatch.wav +0 -0
  70. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/jogress.wav +0 -0
  71. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/largePoop.wav +0 -0
  72. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/lastBite.wav +0 -0
  73. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/lose.wav +0 -0
  74. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/menu.wav +0 -0
  75. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/mischief.wav +0 -0
  76. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/poop.wav +0 -0
  77. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/refuse.wav +0 -0
  78. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/reward.wav +0 -0
  79. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/scroll.wav +0 -0
  80. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/select.wav +0 -0
  81. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/smallPoop.wav +0 -0
  82. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/startBattle.wav +0 -0
  83. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/strongAttack.wav +0 -0
  84. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/strongHit.wav +0 -0
  85. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/trainhit.wav +0 -0
  86. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/wash.wav +0 -0
  87. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sounds/win.wav +0 -0
  88. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/sprites.json.gz +0 -0
  89. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/titles.csv +0 -0
  90. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/tournies.csv +0 -0
  91. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/towns.csv +0 -0
  92. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/train_wall.json +0 -0
  93. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/vitems.json +0 -0
  94. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data/zones.csv +0 -0
  95. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data.py +0 -0
  96. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data_core.py +0 -0
  97. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data_meta.py +0 -0
  98. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data_shop.py +0 -0
  99. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/data_world.py +0 -0
  100. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/deathscreen.py +0 -0
  101. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/digicore.py +0 -0
  102. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/digicorescreen.py +0 -0
  103. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/disciplinescreen.py +0 -0
  104. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/dnascreen.py +0 -0
  105. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/egg.py +0 -0
  106. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/eggguidescreen.py +0 -0
  107. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/eggmigrate.py +0 -0
  108. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/eggselectscreen.py +0 -0
  109. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/evolution.py +0 -0
  110. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/feedscreen.py +0 -0
  111. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/grid.py +0 -0
  112. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/hallscreen.py +0 -0
  113. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/helpscreen.py +0 -0
  114. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/hostinfo.py +0 -0
  115. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/itemfx.py +0 -0
  116. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/jogress.py +0 -0
  117. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/jogressscreen.py +0 -0
  118. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/lines.py +0 -0
  119. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/lobbybout.py +0 -0
  120. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/lobbychat.py +0 -0
  121. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/lobbyscreen.py +0 -0
  122. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/menu.py +0 -0
  123. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/net.py +0 -0
  124. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/optionsscreen.py +0 -0
  125. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/persistence.py +0 -0
  126. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/persistio.py +0 -0
  127. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/pet.py +0 -0
  128. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/petbase.py +0 -0
  129. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/petbattle.py +0 -0
  130. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/petbody.py +0 -0
  131. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/petcare.py +0 -0
  132. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/petdna.py +0 -0
  133. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/placeholder.py +0 -0
  134. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/raidscreen.py +0 -0
  135. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/render.py +0 -0
  136. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/rival.py +0 -0
  137. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/shop.py +0 -0
  138. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/shopscreen.py +0 -0
  139. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/sound.py +0 -0
  140. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/statusbox.py +0 -0
  141. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/strikefx.py +0 -0
  142. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/theme.py +0 -0
  143. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/themescreen.py +0 -0
  144. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/titlescreen.py +0 -0
  145. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/tournament.py +0 -0
  146. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/tournamentscreen.py +0 -0
  147. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/towneggscreen.py +0 -0
  148. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/townscreen.py +0 -0
  149. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/training.py +0 -0
  150. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet/update.py +0 -0
  151. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet.egg-info/SOURCES.txt +0 -0
  152. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet.egg-info/dependency_links.txt +0 -0
  153. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet.egg-info/entry_points.txt +0 -0
  154. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet.egg-info/requires.txt +0 -0
  155. {tuipet-0.5.332 → tuipet-0.5.333}/src/tuipet.egg-info/top_level.txt +0 -0
  156. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_audit.py +0 -0
  157. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_boss.py +0 -0
  158. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_conditions.py +0 -0
  159. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_drain.py +0 -0
  160. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_encounters.py +0 -0
  161. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_finds.py +0 -0
  162. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_foundation.py +0 -0
  163. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_geography.py +0 -0
  164. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_hazards.py +0 -0
  165. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_holiday.py +0 -0
  166. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_march.py +0 -0
  167. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_placement.py +0 -0
  168. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_progression.py +0 -0
  169. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_replay.py +0 -0
  170. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_rewards.py +0 -0
  171. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_score.py +0 -0
  172. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_shop.py +0 -0
  173. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_streak.py +0 -0
  174. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_summary.py +0 -0
  175. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_towns.py +0 -0
  176. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_adventure_transport.py +0 -0
  177. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_album_completable.py +0 -0
  178. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_album_dex.py +0 -0
  179. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_album_screen.py +0 -0
  180. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_anim_canon.py +0 -0
  181. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_anim_hardening.py +0 -0
  182. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_anim_timing.py +0 -0
  183. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_announce.py +0 -0
  184. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_armor_canon.py +0 -0
  185. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_audit_fixes.py +0 -0
  186. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_auto_care.py +0 -0
  187. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_auto_update.py +0 -0
  188. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_away_flag.py +0 -0
  189. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_background_audit.py +0 -0
  190. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_backgrounds.py +0 -0
  191. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_battle_audit.py +0 -0
  192. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_battle_race.py +0 -0
  193. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_bedtime.py +0 -0
  194. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_birthday.py +0 -0
  195. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_body_math.py +0 -0
  196. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_body_tells.py +0 -0
  197. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_bugreport.py +0 -0
  198. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_call_cadence.py +0 -0
  199. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_canon_discipline.py +0 -0
  200. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_canon_injury.py +0 -0
  201. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_card_runoffs.py +0 -0
  202. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_care_asleep.py +0 -0
  203. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_care_audit.py +0 -0
  204. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_care_bonus.py +0 -0
  205. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_catalog_categories.py +0 -0
  206. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_catalog_record.py +0 -0
  207. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_catalog_touches.py +0 -0
  208. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_clock_units.py +0 -0
  209. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_completeness_sweep.py +0 -0
  210. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_constant_shadowing.py +0 -0
  211. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_cup_audit.py +0 -0
  212. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_cup_cadence.py +0 -0
  213. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_cup_festival_eggs.py +0 -0
  214. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_cup_theater.py +0 -0
  215. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_dark_room_fx.py +0 -0
  216. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_data.py +0 -0
  217. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_data_facade.py +0 -0
  218. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_dead_gate.py +0 -0
  219. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_death.py +0 -0
  220. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_device_lines.py +0 -0
  221. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_digicore.py +0 -0
  222. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_digimemory.py +0 -0
  223. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_digimental_gates.py +0 -0
  224. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_distribution.py +0 -0
  225. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_divergence.py +0 -0
  226. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_dmx_level.py +0 -0
  227. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_dna_audit.py +0 -0
  228. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_dna_charge.py +0 -0
  229. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_dna_slim.py +0 -0
  230. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_effects_integrity.py +0 -0
  231. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_egg_audit.py +0 -0
  232. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_egg_dominance.py +0 -0
  233. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_egg_economy.py +0 -0
  234. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_egg_guide.py +0 -0
  235. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_egg_guide_audit.py +0 -0
  236. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_egg_unlock.py +0 -0
  237. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_egg_unlock_math.py +0 -0
  238. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_encoding.py +0 -0
  239. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_energy_system.py +0 -0
  240. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_evolution.py +0 -0
  241. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_evolution_audit.py +0 -0
  242. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_evolution_math.py +0 -0
  243. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_evolution_system.py +0 -0
  244. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_feed.py +0 -0
  245. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_feeding_math.py +0 -0
  246. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_festival_gifts.py +0 -0
  247. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_filth_sick_rate.py +0 -0
  248. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_filth_system.py +0 -0
  249. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_food_audit.py +0 -0
  250. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_fusion_mode_canon.py +0 -0
  251. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_fx.py +0 -0
  252. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_gift_birthday_math.py +0 -0
  253. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_hall.py +0 -0
  254. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_hardening_0712.py +0 -0
  255. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_help.py +0 -0
  256. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_hint_strips.py +0 -0
  257. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_holiday_decor.py +0 -0
  258. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_home_battle.py +0 -0
  259. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_honors.py +0 -0
  260. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_hud.py +0 -0
  261. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_humulos_eggs.py +0 -0
  262. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_hunger.py +0 -0
  263. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_ios_support.py +0 -0
  264. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_item_expansion.py +0 -0
  265. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_item_heal.py +0 -0
  266. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_itemfx.py +0 -0
  267. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_items_p5.py +0 -0
  268. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_items_p6.py +0 -0
  269. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_items_sweep.py +0 -0
  270. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_jogress.py +0 -0
  271. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_jogress_canon.py +0 -0
  272. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_jogress_math.py +0 -0
  273. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_jogress_wire.py +0 -0
  274. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_ko6_gate.py +0 -0
  275. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_ko6_reachable.py +0 -0
  276. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_line_anchoring.py +0 -0
  277. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_line_curation.py +0 -0
  278. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_lines.py +0 -0
  279. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_liveplay_audit.py +0 -0
  280. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_lobby.py +0 -0
  281. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_lobby_admin.py +0 -0
  282. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_lobby_audit.py +0 -0
  283. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_lobby_chat_polish.py +0 -0
  284. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_lobby_screens.py +0 -0
  285. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_menu_bounds.py +0 -0
  286. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_menu_runoffs.py +0 -0
  287. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_messages.py +0 -0
  288. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_mortality_math.py +0 -0
  289. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_msg_strip.py +0 -0
  290. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_nav_quit.py +0 -0
  291. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_night_palette.py +0 -0
  292. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_note_marquee.py +0 -0
  293. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_options.py +0 -0
  294. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_orb_integrity.py +0 -0
  295. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_panel_smoke.py +0 -0
  296. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_performance.py +0 -0
  297. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_persistence.py +0 -0
  298. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_persistence_audit.py +0 -0
  299. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_pet_effect.py +0 -0
  300. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_poop_audit.py +0 -0
  301. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_poop_model.py +0 -0
  302. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_poop_placement.py +0 -0
  303. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_poop_report.py +0 -0
  304. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_pvp_duel.py +0 -0
  305. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_qol_polish.py +0 -0
  306. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_raid.py +0 -0
  307. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_rank_system.py +0 -0
  308. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_render_budgets.py +0 -0
  309. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_rival.py +0 -0
  310. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_road_presents.py +0 -0
  311. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_robustness.py +0 -0
  312. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_rooms.py +0 -0
  313. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_save_integrity.py +0 -0
  314. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_scene_picker.py +0 -0
  315. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_screen_sweep.py +0 -0
  316. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_sfx_scroll.py +0 -0
  317. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_shop_clone.py +0 -0
  318. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_shop_dossier_audit.py +0 -0
  319. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_shops_audit.py +0 -0
  320. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_sickness_clone.py +0 -0
  321. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_silent_failures.py +0 -0
  322. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_sleep.py +0 -0
  323. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_sleep_audit.py +0 -0
  324. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_sleep_system.py +0 -0
  325. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_sound.py +0 -0
  326. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_sound_ios.py +0 -0
  327. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_special_idles.py +0 -0
  328. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_stage_arrival.py +0 -0
  329. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_status_box.py +0 -0
  330. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_status_box_sweep.py +0 -0
  331. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_status_icons.py +0 -0
  332. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_sync.py +0 -0
  333. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_theme.py +0 -0
  334. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_theme_contrast.py +0 -0
  335. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_tier1_robustness.py +0 -0
  336. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_tier2_onboarding.py +0 -0
  337. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_tier3_moments.py +0 -0
  338. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_timing_honesty.py +0 -0
  339. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_tournament.py +0 -0
  340. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_town_cup.py +0 -0
  341. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_town_egg_market.py +0 -0
  342. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_town_shop_economy.py +0 -0
  343. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_training_audit.py +0 -0
  344. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_training_clone.py +0 -0
  345. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_training_hp.py +0 -0
  346. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_training_system.py +0 -0
  347. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_ui_stats.py +0 -0
  348. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_update.py +0 -0
  349. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_update_install.py +0 -0
  350. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_verx.py +0 -0
  351. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_visual_audit.py +0 -0
  352. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_visual_polish.py +0 -0
  353. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_weight_system.py +0 -0
  354. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_whats_new.py +0 -0
  355. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_wild_memory.py +0 -0
  356. {tuipet-0.5.332 → tuipet-0.5.333}/tests/test_win_eggs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tuipet
3
- Version: 0.5.332
3
+ Version: 0.5.333
4
4
  Summary: A terminal virtual pet (Digimon V-Pet style) rendered with halfblock sprites, built on data from the real devices.
5
5
  Author-email: Joel Taylor <joeltaylor734@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tuipet"
3
- version = "0.5.332"
3
+ version = "0.5.333"
4
4
  description = "A terminal virtual pet (Digimon V-Pet style) rendered with halfblock sprites, built on data from the real devices."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -150,7 +150,7 @@ class TuiPetApp(ActionsMixin, App):
150
150
  """
151
151
  # the release-news line (title-screen msg box, first launch per build) --
152
152
  # UPDATE THIS WITH EVERY RELEASE that ships something player-visible
153
- WHATS_NEW = ("THAT LITTLE SPRITE IN THE CORNER IS A FESTIVAL, NOT A STUCK PIXEL: on four days a year a decoration appears in your arena — the Crest of Courage on Odaiba Memorial Day, a present at Christmas, candy at Halloween, cake at New Year — and until now nothing on the home screen said so. The card names the day above your vitals whenever one is on, on the egg screen too. It was only ever labelled on the adventure card before.")
153
+ WHATS_NEW = ("THE FESTIVAL DECORATION STOPS DRAWING THROUGH YOUR MON: the prop in the arena corner never joined the rule that keeps the poop pile and the sick skull out of your pet's way, so on festival days the roamer walked straight into it and the decoration punched through the sprite. It is a wall now, like the others — your mon turns at it instead of wearing it. The card also names the day above your vitals so the little sprite in the corner reads as a holiday and not a stuck pixel.")
154
154
 
155
155
  BINDINGS = [
156
156
  # jogress is LOBBY-ONLY (fusion needs a real partner from the
@@ -32,7 +32,7 @@ from .arenafx import ( # noqa: F401,E402
32
32
  PLAY_HOP, PLAY_HOP_H, PLAY_LEAD, POOP_PAD, POOP_W, SCREEN_COLS,
33
33
  SCREEN_ROWS, SICK_ZONE, SPRITE_W, _FxCtx, _WINDOW, _clip_win,
34
34
  _HIDDEN_STATUS_ICONS, _blit, _effect_overlay, _evol_strobe, _filth_pts,
35
- _filth_right, _sick_mark_up)
35
+ _filth_right, _holiday_right, _sick_mark_up)
36
36
 
37
37
 
38
38
  def hearts(n, total=4, color=None):
@@ -190,7 +190,11 @@ class Screen(FxMixin, Static):
190
190
  # a hard right one -- sleep/sick/startle bypass the roamer's bounds,
191
191
  # so the clamp here is what actually guarantees no overlap.
192
192
  base = PET_BASE_X
193
- lo = (_filth_right(pet.poop) if pet.poop else grid.X0) - base
193
+ # the LEFT wall is whichever occupant reaches furthest in: the filth
194
+ # block, or today's festival prop (which joined this clamp 2026-08-01
195
+ # -- see _holiday_right; it had been drawing straight through the mon)
196
+ lo = max(_filth_right(pet.poop) if pet.poop else grid.X0,
197
+ _holiday_right()) - base
194
198
  cap = ((grid.X1 - SICK_ZONE if _sick_mark_up(pet) else grid.X1)
195
199
  - SPRITE_W) - base
196
200
  xshift = min(max(xshift, lo), max(cap, lo)) # poop wins over the skull (it yields when crowded)
@@ -60,6 +60,24 @@ def _evol_strobe(c):
60
60
  if ev[y % mh][x % mw] == "1"]
61
61
 
62
62
 
63
+ def _holiday_right(today=None):
64
+ """Right edge x of TODAY's festival prop, or grid.X0 on an ordinary day.
65
+
66
+ ⭐The decor is a LEFT-WALL occupant exactly like the filth block (Joel
67
+ 2026-08-01: "my mon is clipping right into it. looks like shit"). The
68
+ exclusive-floor-zone law -- filth a hard left wall, the sick skull a hard
69
+ right one -- predates the prop by three months, and when the prop landed
70
+ (2026-07-24) it simply never joined the clamp. Its own comment claimed it
71
+ "sits where a resting pet does not reach", which is true of a CENTRED
72
+ sleeper and false of the roamer, which walks the whole band; and the
73
+ overlay is stamped AFTER the sprite, so the prop punched straight through
74
+ the mon. Four days a year, the arena looked broken."""
75
+ deco = _holiday_decor(today)
76
+ if not deco:
77
+ return grid.X0
78
+ return grid.X0 + max(len(r) for r in deco)
79
+
80
+
63
81
  def _filth_right(count):
64
82
  """Right edge x of the filth block: fixed POOP_W columns like DVPet's 30px slots."""
65
83
  n = min(count or 0, POOP_MAX_PILES)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tuipet
3
- Version: 0.5.332
3
+ Version: 0.5.333
4
4
  Summary: A terminal virtual pet (Digimon V-Pet style) rendered with halfblock sprites, built on data from the real devices.
5
5
  Author-email: Joel Taylor <joeltaylor734@gmail.com>
6
6
  License-Expression: MIT
@@ -363,3 +363,39 @@ def test_the_ambient_sulk_is_pose_only():
363
363
  assert '_FX.get("unhappy")' not in src, "the idle painter still draws smoke"
364
364
  afx = open("src/tuipet/arenafx.py").read()
365
365
  assert afx.count('"unhappy"') >= 2, "the REACTION smoke must survive"
366
+
367
+
368
+ def test_no_sprite_draws_on_the_festival_prop(monkeypatch):
369
+ """⭐Bug report 2026-08-01 (Joel): "my mon is clipping right into it.
370
+ looks like shit."
371
+
372
+ The exclusive-floor-zone law (2026-07-11) gives the filth block a hard
373
+ LEFT wall and the sick skull a hard RIGHT one, and `test_no_sprite_ever_
374
+ draws_on_another` above sweeps it. The festival prop landed three months
375
+ later (2026-07-24) in the top-LEFT corner and never joined the clamp: its
376
+ own comment claimed it "sits where a resting pet does not reach", true of
377
+ a centred sleeper and false of the roamer, which walks the whole band --
378
+ and the overlay is stamped AFTER the sprite, so it punched through the
379
+ mon. Measured before the fix: 11 pixels of crest inside the creature.
380
+
381
+ ⚠The sweep above could never catch it, because it runs on whatever day
382
+ the suite runs and 361 of them have no prop -- and conftest's
383
+ `ordinary_day` now pins even that away. This one FORCES each festival."""
384
+ import datetime
385
+ from tuipet import arenafx, tournament
386
+ cap = _paint_capture(monkeypatch)
387
+ for m, d in ((8, 1), (12, 25), (10, 31), (1, 1)):
388
+ monkeypatch.setattr(tournament, "_today",
389
+ lambda mm=m, dd=d: datetime.date(2026, mm, dd))
390
+ assert arenafx._holiday_decor() is not None, (m, d)
391
+ assert arenafx._holiday_right() > grid.X0 # a real wall
392
+ for n, sizes in LOADS:
393
+ random.seed(7)
394
+ p = _pet(weather="Clear", poop=n, poop_sizes=list(sizes))
395
+ s = _screen()
396
+ for i in range(30):
397
+ s.advance(p)
398
+ s.paint(p)
399
+ pet_px = _sprite_px(cap["rows"], cap["xshift"], cap["mirror"])
400
+ hit = pet_px & set(cap["overlay"])
401
+ assert not hit, ((m, d), n, i, sorted(hit)[:6])
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes