tuipet 0.2.332__tar.gz → 0.2.334__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 (218) hide show
  1. {tuipet-0.2.332/src/tuipet.egg-info → tuipet-0.2.334}/PKG-INFO +1 -1
  2. {tuipet-0.2.332 → tuipet-0.2.334}/pyproject.toml +1 -1
  3. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/pet.py +32 -6
  4. {tuipet-0.2.332 → tuipet-0.2.334/src/tuipet.egg-info}/PKG-INFO +1 -1
  5. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_feeding_math.py +29 -0
  6. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_gift_birthday_math.py +16 -0
  7. {tuipet-0.2.332 → tuipet-0.2.334}/LICENSE +0 -0
  8. {tuipet-0.2.332 → tuipet-0.2.334}/README.md +0 -0
  9. {tuipet-0.2.332 → tuipet-0.2.334}/setup.cfg +0 -0
  10. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/__init__.py +0 -0
  11. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/adventure.py +0 -0
  12. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/adventurescreen.py +0 -0
  13. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/anim.py +0 -0
  14. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/app.py +0 -0
  15. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/assistscreen.py +0 -0
  16. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/battle.py +0 -0
  17. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/battlefx.py +0 -0
  18. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/battlescreen.py +0 -0
  19. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/cloudsync.py +0 -0
  20. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/attr_icons.json +0 -0
  21. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/backgrounds.json.gz +0 -0
  22. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/battle_overlays.json +0 -0
  23. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/careEffect.csv +0 -0
  24. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/digicoreMenuConfig.csv +0 -0
  25. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/digimon.csv +0 -0
  26. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/dropRate.csv +0 -0
  27. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/effects.json.gz +0 -0
  28. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/eggUnlock.csv +0 -0
  29. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/eggs.json.gz +0 -0
  30. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/elementAffinity.csv +0 -0
  31. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/enemies.csv +0 -0
  32. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/evolutions.csv +0 -0
  33. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/fieldAffinity.csv +0 -0
  34. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/foods.csv +0 -0
  35. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/habitats.csv +0 -0
  36. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/hp_dummies.json +0 -0
  37. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/icons.json.gz +0 -0
  38. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/items.csv +0 -0
  39. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/lines.csv +0 -0
  40. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/lootTable.csv +0 -0
  41. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/maps.csv +0 -0
  42. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/orbs.json.gz +0 -0
  43. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/shopConsumable.csv +0 -0
  44. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/alarm.wav +0 -0
  45. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/angry.wav +0 -0
  46. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/attack.wav +0 -0
  47. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/attackHit.wav +0 -0
  48. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/battle.wav +0 -0
  49. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/cancel.wav +0 -0
  50. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/champion.wav +0 -0
  51. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/click.wav +0 -0
  52. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/compatible.wav +0 -0
  53. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/confirm.wav +0 -0
  54. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/death.wav +0 -0
  55. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/eat.wav +0 -0
  56. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/error.wav +0 -0
  57. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/evolve.wav +0 -0
  58. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/happy.wav +0 -0
  59. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/hatch.wav +0 -0
  60. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/jogress.wav +0 -0
  61. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/largePoop.wav +0 -0
  62. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/lastBite.wav +0 -0
  63. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/lose.wav +0 -0
  64. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/menu.wav +0 -0
  65. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/mischief.wav +0 -0
  66. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/poop.wav +0 -0
  67. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/refuse.wav +0 -0
  68. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/reward.wav +0 -0
  69. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/scroll.wav +0 -0
  70. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/select.wav +0 -0
  71. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/smallPoop.wav +0 -0
  72. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/startBattle.wav +0 -0
  73. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/strongAttack.wav +0 -0
  74. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/strongHit.wav +0 -0
  75. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/trainhit.wav +0 -0
  76. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/wash.wav +0 -0
  77. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/win.wav +0 -0
  78. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/wind.wav +0 -0
  79. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sprites.json.gz +0 -0
  80. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/tournies.csv +0 -0
  81. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/towns.csv +0 -0
  82. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/zones.csv +0 -0
  83. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data.py +0 -0
  84. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/deathscreen.py +0 -0
  85. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/digicorescreen.py +0 -0
  86. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/dnascreen.py +0 -0
  87. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/egg.py +0 -0
  88. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/eggselectscreen.py +0 -0
  89. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/evolution.py +0 -0
  90. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/feedscreen.py +0 -0
  91. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/grid.py +0 -0
  92. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/habitatscreen.py +0 -0
  93. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/jogress.py +0 -0
  94. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/jogressscreen.py +0 -0
  95. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/lines.py +0 -0
  96. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/lobbyscreen.py +0 -0
  97. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/loot.py +0 -0
  98. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/menu.py +0 -0
  99. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/net.py +0 -0
  100. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/optionsscreen.py +0 -0
  101. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/persistence.py +0 -0
  102. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/placeholder.py +0 -0
  103. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/render.py +0 -0
  104. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/shop.py +0 -0
  105. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/shopscreen.py +0 -0
  106. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/sound.py +0 -0
  107. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/strikefx.py +0 -0
  108. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/theme.py +0 -0
  109. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/themescreen.py +0 -0
  110. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/titlescreen.py +0 -0
  111. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/tournament.py +0 -0
  112. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/tournamentscreen.py +0 -0
  113. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/townscreen.py +0 -0
  114. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/training.py +0 -0
  115. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/transportscreen.py +0 -0
  116. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/update.py +0 -0
  117. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/weather.py +0 -0
  118. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet.egg-info/SOURCES.txt +0 -0
  119. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet.egg-info/dependency_links.txt +0 -0
  120. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet.egg-info/entry_points.txt +0 -0
  121. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet.egg-info/requires.txt +0 -0
  122. {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet.egg-info/top_level.txt +0 -0
  123. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_adventure.py +0 -0
  124. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_adventure_math.py +0 -0
  125. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_adventure_scenery.py +0 -0
  126. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_album_dex.py +0 -0
  127. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_anim_canon.py +0 -0
  128. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_anim_timing.py +0 -0
  129. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_announce.py +0 -0
  130. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_audit_fixes.py +0 -0
  131. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_auto_care.py +0 -0
  132. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_battle.py +0 -0
  133. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_battle_math.py +0 -0
  134. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_bedtime.py +0 -0
  135. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_birthday.py +0 -0
  136. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_body_math.py +0 -0
  137. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_care_asleep.py +0 -0
  138. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_care_bonus.py +0 -0
  139. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_data.py +0 -0
  140. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_dead_gate.py +0 -0
  141. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_death.py +0 -0
  142. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_digicore.py +0 -0
  143. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_digimemory.py +0 -0
  144. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_discipline.py +0 -0
  145. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_effects_integrity.py +0 -0
  146. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_egg_economy.py +0 -0
  147. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_egg_unlock.py +0 -0
  148. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_egg_unlock_math.py +0 -0
  149. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_energy_system.py +0 -0
  150. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_evolution.py +0 -0
  151. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_evolution_math.py +0 -0
  152. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_evolution_system.py +0 -0
  153. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_feed.py +0 -0
  154. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_filth_system.py +0 -0
  155. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_fx.py +0 -0
  156. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_habitat.py +0 -0
  157. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_habitat_math.py +0 -0
  158. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_hud.py +0 -0
  159. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_hunger.py +0 -0
  160. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_item_effects.py +0 -0
  161. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_item_heal.py +0 -0
  162. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_jogress.py +0 -0
  163. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_jogress_math.py +0 -0
  164. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_line_curation.py +0 -0
  165. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_lines.py +0 -0
  166. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_lobby.py +0 -0
  167. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_lobby_screens.py +0 -0
  168. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_medicine.py +0 -0
  169. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_messages.py +0 -0
  170. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_mood_system.py +0 -0
  171. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_mortality_math.py +0 -0
  172. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_msg_strip.py +0 -0
  173. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_nav_quit.py +0 -0
  174. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_night_palette.py +0 -0
  175. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_obedience_system.py +0 -0
  176. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_options.py +0 -0
  177. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_panel_smoke.py +0 -0
  178. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_performance.py +0 -0
  179. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_persistence.py +0 -0
  180. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_persistence_audit.py +0 -0
  181. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_pet_effect.py +0 -0
  182. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_poop_model.py +0 -0
  183. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_poop_placement.py +0 -0
  184. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_protocol_math.py +0 -0
  185. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_rank_system.py +0 -0
  186. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_refusal.py +0 -0
  187. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_refusal_math.py +0 -0
  188. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_robustness.py +0 -0
  189. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_save_integrity.py +0 -0
  190. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_screen_sweep.py +0 -0
  191. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sfx_scroll.py +0 -0
  192. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_shop.py +0 -0
  193. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_shop_economy.py +0 -0
  194. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_shop_math.py +0 -0
  195. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sickness_system.py +0 -0
  196. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sleep.py +0 -0
  197. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sleep_system.py +0 -0
  198. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sleep_weather_math.py +0 -0
  199. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sound.py +0 -0
  200. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_stage_arrival.py +0 -0
  201. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_status_box.py +0 -0
  202. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_status_icons.py +0 -0
  203. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sync.py +0 -0
  204. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_theme.py +0 -0
  205. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_toilet.py +0 -0
  206. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_tournament.py +0 -0
  207. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_town.py +0 -0
  208. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training.py +0 -0
  209. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training_facing.py +0 -0
  210. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training_hp.py +0 -0
  211. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training_math.py +0 -0
  212. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training_strike.py +0 -0
  213. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training_system.py +0 -0
  214. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_ui_stats.py +0 -0
  215. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_update.py +0 -0
  216. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_verx.py +0 -0
  217. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_weight_system.py +0 -0
  218. {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_win_eggs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tuipet
3
- Version: 0.2.332
3
+ Version: 0.2.334
4
4
  Summary: A terminal virtual pet (Digimon V-Pet style) rendered with halfblock sprites, built on data extracted from DVPet.
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.2.332"
3
+ version = "0.2.334"
4
4
  description = "A terminal virtual pet (Digimon V-Pet style) rendered with halfblock sprites, built on data extracted from DVPet."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -345,6 +345,9 @@ ENTH_DISLIKE_FORCED = -1 # EnthusiasmChangeDislikeForced
345
345
  FAV_FOOD_MOOD = 10 # config FavFoodMoodInc
346
346
  FOOD_MOOD = 2 # config FoodMoodInc (neutral food)
347
347
  FAV_FOOD_ENTH = 1 # config FavFoodEnthusiasmInc
348
+ GLUTTON_FEED_MOOD = 1 # GluttonFeedMoodChange: a glutton relishes any meal
349
+ NOT_GLUTTON_FEED_MOOD = -1 # NotGluttonFeedMoodChange: a picky eater resents each
350
+ ENTH_BAD_FOOD_FORCED = -1 # EnthusiasmChangeBadFoodForced (disliked + full + forced)
348
351
  DISLIKED_FOOD_OBEDIENCE = -1 # config DislikedFoodObedienceChange
349
352
  INTOL_FOOD_SICK_CHANCE = 50 # config IntolerantFoodSickChance (per roll, x2 rolls)
350
353
 
@@ -2366,17 +2369,33 @@ class Pet:
2366
2369
  cats = [c for c in (category or "").split(";") if c in data.FOOD_CATEGORIES]
2367
2370
  if not cats:
2368
2371
  return "neutral"
2372
+ # feed()'s taste branches, canon shape (feed/food audit 2026-07-06):
2373
+ # a glutton relishes EVERY meal a little (+1 mood on each branch), a
2374
+ # picky eater resents each (-1); fullness GATES the pleasant moods
2375
+ # (a full pet gets nothing from even its favourite) and DOUBLES the
2376
+ # disliked-meal misery (plus the spirit hit, worse when forced)
2377
+ mod = (GLUTTON_FEED_MOOD if self.glutton > 0
2378
+ else NOT_GLUTTON_FEED_MOOD if self.glutton < 0 else 0)
2379
+ cap = OVEREAT_LIMIT if self.glutton > 0 else STOMACH_CAPACITY
2369
2380
  if self.disliked_food and self.disliked_food in cats:
2370
2381
  tier = "disliked"
2371
- self._set_mood(self.mood - FAV_FOOD_MOOD)
2382
+ if self.hunger >= FULL_HUNGER: # full AND hating it: the double dip
2383
+ self._set_mood(self.mood - FAV_FOOD_MOOD + mod)
2384
+ self._set_enthusiasm(self.enthusiasm - FAV_FOOD_ENTH
2385
+ + (ENTH_BAD_FOOD_FORCED if complied else 0))
2386
+ self._set_mood(self.mood - FAV_FOOD_MOOD + mod)
2372
2387
  self._set_obedience(self.obedience + DISLIKED_FOOD_OBEDIENCE)
2373
2388
  elif self.favorite_food and self.favorite_food in cats:
2374
2389
  tier = "favorite"
2375
- self._set_mood(self.mood + FAV_FOOD_MOOD)
2376
- self._set_enthusiasm(self.enthusiasm + FAV_FOOD_ENTH)
2390
+ if self.hunger < FULL_HUNGER or (self.glutton > 0 and self.hunger < OVEREAT_LIMIT):
2391
+ self._set_mood(self.mood + FAV_FOOD_MOOD + mod)
2392
+ self._set_enthusiasm(self.enthusiasm + FAV_FOOD_ENTH)
2393
+ elif self.hunger < cap:
2394
+ self._set_mood(self.mood + FOOD_MOOD + mod)
2377
2395
  else:
2378
2396
  tier = "neutral"
2379
- self._set_mood(self.mood + FOOD_MOOD)
2397
+ if self.hunger < cap:
2398
+ self._set_mood(self.mood + FOOD_MOOD + mod)
2380
2399
  for c in cats: # incFoodRankAndEaten: per category
2381
2400
  self.food_eaten[c] = self.food_eaten.get(c, 0) + 1
2382
2401
  self._change_rank(c)
@@ -3058,6 +3077,12 @@ class Pet:
3058
3077
  return f"{self.name} refuses to eat!"
3059
3078
  self._calm_discipline_call() # a meal placates the tantrum
3060
3079
  fills = int(food.get("hunger", 0)) > 0
3080
+ # (canon checkMaxHoursBeforeSleep -- the bedtime-only food gate -- is
3081
+ # DATA-DEAD: every shipped foods.csv row carries -1; feed/food audit
3082
+ # 2026-07-06.) The too-full early refuse below is a DOCUMENTED
3083
+ # divergence: canon applyFood eats the meal anyway (overeatPenalty +
3084
+ # capped hunger, food spent); tuipet refuses like the REAL device's
3085
+ # head-shake, with the same penalties -- kept, matches the toy.
3061
3086
  # a hunger-food on a full stomach -> too full (a glutton eats past FULL_HUNGER)
3062
3087
  if fills and self.hunger >= FULL_HUNGER and self.glutton <= 0:
3063
3088
  self._set_weight(self.weight + 1)
@@ -4310,8 +4335,9 @@ class Pet:
4310
4335
  return
4311
4336
  self.gift_t = 0.0
4312
4337
  if (self.gift or self.asleep or self.stage in ("Egg", "Fresh", "InTraining")
4313
- or self.current_mood() != "Happy"):
4314
- return
4338
+ or self.current_mood() != "Happy"
4339
+ or getattr(self, "away", False)): # checkGiftCall gates on _isHome:
4340
+ return # presents are found AT HOME
4315
4341
  chance = int(OBEDIENCE_REFUSAL_CAP - self.obedience
4316
4342
  + (MOOD_MAX - self.mood) * GIFT_CHANCE_MOOD_COEFF + GIFT_CHANCE_FACTOR)
4317
4343
  if chance > 0 and random.randrange(chance) == 0:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tuipet
3
- Version: 0.2.332
3
+ Version: 0.2.334
4
4
  Summary: A terminal virtual pet (Digimon V-Pet style) rendered with halfblock sprites, built on data extracted from DVPet.
5
5
  Author-email: Joel Taylor <joeltaylor734@gmail.com>
6
6
  License-Expression: MIT
@@ -102,3 +102,32 @@ def test_double_dose_costs_one_game_hour():
102
102
  msg = p._feed_med()
103
103
  assert "poison" in msg
104
104
  assert p.lifespan == life0 - 60.0 # 3600 REAL-sec / 60, not 3600 game-sec
105
+
106
+
107
+ def test_feed_taste_branches_take_canon_shape():
108
+ """feed()'s taste branches (feed/food audit 2026-07-06): the glutton shade
109
+ rides every branch, fullness GATES the pleasant moods, and a full pet fed
110
+ its DISLIKED meal pays the double dip plus the spirit hit."""
111
+ from tuipet.pet import (FAV_FOOD_MOOD, FOOD_MOOD, FAV_FOOD_ENTH,
112
+ GLUTTON_FEED_MOOD, DISLIKED_FOOD_OBEDIENCE)
113
+ # hungry + favourite + glutton: +10 +1 shade, spirit +1
114
+ p = _pet(hunger=1, glutton=1, mood=0, enthusiasm=0)
115
+ p.favorite_food = "Meat"
116
+ p._eat_food("Meat")
117
+ assert p.mood == FAV_FOOD_MOOD + GLUTTON_FEED_MOOD and p.enthusiasm == FAV_FOOD_ENTH
118
+ # FULL + favourite (non-glutton): nothing pleasant left to feel
119
+ q = _pet(hunger=4, glutton=0, mood=0, enthusiasm=0)
120
+ q.favorite_food = "Meat"
121
+ q._eat_food("Meat")
122
+ assert q.mood == 0 and q.enthusiasm == 0
123
+ # FULL + disliked, forced: the double dip + the spirit hit + obedience
124
+ r = _pet(hunger=4, glutton=0, mood=0, enthusiasm=0, obedience=50)
125
+ r.disliked_food = "Veg"
126
+ r._eat_food("Veg", complied=True)
127
+ assert r.mood <= -2 * FAV_FOOD_MOOD # two dips (taste decs may add)
128
+ assert r.enthusiasm <= -FAV_FOOD_ENTH # -(1) - forced(1) before boundary fx
129
+ assert r.obedience == 50 + DISLIKED_FOOD_OBEDIENCE
130
+ # hungry + neutral + picky eater: +2 -1 shade
131
+ s = _pet(hunger=1, glutton=-1, mood=0)
132
+ s._eat_food("Fish")
133
+ assert s.mood == FOOD_MOOD - 1
@@ -112,3 +112,19 @@ def test_mood_samples_every_five_game_minutes():
112
112
  for _ in range(int(MOOD_RECORD_MIN * 60 * 3.5)):
113
113
  p.tick(1.0)
114
114
  assert sum(p.daily_mood.values()) >= 3 # ~one sample per 5 game-min
115
+
116
+
117
+ def test_gifts_are_found_at_home_only(monkeypatch):
118
+ """checkGiftCall gates on _isHome (play/gift audit 2026-07-06): on the
119
+ road there are no presents -- and the roll resumes at homecoming."""
120
+ monkeypatch.setattr(Pet, "_pick_gift", lambda self: "f:8")
121
+ monkeypatch.setattr(random, "randrange", lambda n: 0) # the roll always hits
122
+ p = _pet(mood=300, obedience=90)
123
+ p.away = True
124
+ p.gift_t = 10**9
125
+ p._check_gift_call(1.0)
126
+ assert p.gift == "" # adventuring: no visitor
127
+ p.away = False
128
+ p.gift_t = 10**9
129
+ p._check_gift_call(1.0)
130
+ assert p.gift == "f:8" # home again: the present lands
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
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