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.
- {tuipet-0.2.332/src/tuipet.egg-info → tuipet-0.2.334}/PKG-INFO +1 -1
- {tuipet-0.2.332 → tuipet-0.2.334}/pyproject.toml +1 -1
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/pet.py +32 -6
- {tuipet-0.2.332 → tuipet-0.2.334/src/tuipet.egg-info}/PKG-INFO +1 -1
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_feeding_math.py +29 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_gift_birthday_math.py +16 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/LICENSE +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/README.md +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/setup.cfg +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/__init__.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/adventure.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/adventurescreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/anim.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/app.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/assistscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/battle.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/battlefx.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/battlescreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/cloudsync.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/attr_icons.json +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/backgrounds.json.gz +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/battle_overlays.json +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/careEffect.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/digicoreMenuConfig.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/digimon.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/dropRate.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/effects.json.gz +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/eggUnlock.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/eggs.json.gz +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/elementAffinity.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/enemies.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/evolutions.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/fieldAffinity.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/foods.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/habitats.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/hp_dummies.json +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/icons.json.gz +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/items.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/lines.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/lootTable.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/maps.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/orbs.json.gz +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/shopConsumable.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/alarm.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/angry.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/attack.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/attackHit.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/battle.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/cancel.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/champion.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/click.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/compatible.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/confirm.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/death.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/eat.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/error.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/evolve.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/happy.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/hatch.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/jogress.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/largePoop.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/lastBite.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/lose.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/menu.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/mischief.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/poop.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/refuse.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/reward.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/scroll.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/select.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/smallPoop.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/startBattle.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/strongAttack.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/strongHit.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/trainhit.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/wash.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/win.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sounds/wind.wav +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/sprites.json.gz +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/tournies.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/towns.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data/zones.csv +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/data.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/deathscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/digicorescreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/dnascreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/egg.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/eggselectscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/evolution.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/feedscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/grid.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/habitatscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/jogress.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/jogressscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/lines.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/lobbyscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/loot.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/menu.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/net.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/optionsscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/persistence.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/placeholder.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/render.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/shop.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/shopscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/sound.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/strikefx.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/theme.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/themescreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/titlescreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/tournament.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/tournamentscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/townscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/training.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/transportscreen.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/update.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet/weather.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet.egg-info/SOURCES.txt +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet.egg-info/dependency_links.txt +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet.egg-info/entry_points.txt +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet.egg-info/requires.txt +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/src/tuipet.egg-info/top_level.txt +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_adventure.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_adventure_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_adventure_scenery.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_album_dex.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_anim_canon.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_anim_timing.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_announce.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_audit_fixes.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_auto_care.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_battle.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_battle_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_bedtime.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_birthday.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_body_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_care_asleep.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_care_bonus.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_data.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_dead_gate.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_death.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_digicore.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_digimemory.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_discipline.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_effects_integrity.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_egg_economy.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_egg_unlock.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_egg_unlock_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_energy_system.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_evolution.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_evolution_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_evolution_system.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_feed.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_filth_system.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_fx.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_habitat.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_habitat_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_hud.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_hunger.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_item_effects.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_item_heal.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_jogress.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_jogress_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_line_curation.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_lines.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_lobby.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_lobby_screens.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_medicine.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_messages.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_mood_system.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_mortality_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_msg_strip.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_nav_quit.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_night_palette.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_obedience_system.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_options.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_panel_smoke.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_performance.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_persistence.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_persistence_audit.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_pet_effect.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_poop_model.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_poop_placement.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_protocol_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_rank_system.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_refusal.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_refusal_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_robustness.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_save_integrity.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_screen_sweep.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sfx_scroll.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_shop.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_shop_economy.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_shop_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sickness_system.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sleep.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sleep_system.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sleep_weather_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sound.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_stage_arrival.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_status_box.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_status_icons.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_sync.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_theme.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_toilet.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_tournament.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_town.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training_facing.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training_hp.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training_math.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training_strike.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_training_system.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_ui_stats.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_update.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_verx.py +0 -0
- {tuipet-0.2.332 → tuipet-0.2.334}/tests/test_weight_system.py +0 -0
- {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.
|
|
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
|
|
@@ -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.
|
|
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.
|
|
2376
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|