Dave: a neighbor on the lawn
The intended emotional loop is pressure from defending the lawn, curiosity about Dave, a small voluntary decision, a surprising or affectionate consequence, and a quick return to planting. Adventure remains the main activity. A dialogue panel, stat, action or interruption must justify the attention it takes away.
What informed this version
Read-only inspection of the public world definitions on September 7, 2026 found Sakura Season at 2,248 downloads and Stray Diary at 461. These are useful public examples, not a claim that download count measures enjoyment or retention.
Sakura Season uses small, earned affection changes, independent character motives and relationship thresholds that change behavior. Stray Diary connects companion responses to real gifts and game outcomes. We apply those principles without copying creator prose or art. No private conversations were inspected.
Presentation and platform integration
- Original PvZ Dave, lawn, reanimation and sound remain the visual language.
- One readable speech bubble and a direct reply field replace the intermediate “say something / do something” menus. Used actions disappear. During a tin sale, unrelated gift and bonk actions step aside.
- Memory, relationship and settings stay behind small notebook/settings controls.
/pvz-models?embed=1renders the actual sharedModelTriggerandModelPickerModal, with an adapter for the game. The account, private model catalog, pins and preferences use existing Yumina stores.- Origin, window source, account and channel checks bind model selection to the requesting game. Selection persists after the game's acknowledgement.
- The embedded document supports the WASM page's COOP/COEP isolation. It does not own native pause state. Choosing a model does not reload the room/game; an in-flight response retains its originally selected model.
Character and mechanics
Dave's provider sees current visible enemies, playable rows, real planted types, positions and health, the seed bank, resources, witnessed events and scoped memory. Fog conceals enemies from this context. Future spawns are unknown. The campaign context follows day, night, pool, fog and roof progression, with knowledge limits. Versus is separate; Adventure alone has the 4× weighted budget.
Dialogue, reactions, sales pitches and decisions to stay, leave or remain silent come from AI. Affection changes by at most 3 and irritation by at most 10 per personal exchange. Background observations cannot farm either. Affection lasts; passing irritation cools by 15 on each new level. Refusals give Dave a 45-second break without blocking Adventure or repeatedly spending API calls.
Native simulation creates opportunities; it does not dictate Dave's line. Occasional comments are limited to two AI calls per level, at least 90 seconds of simulation apart, after the earliest tutorial levels and away from immediate house danger/final waves. Quiet checks vary from 90–150 seconds. A remark does not pause battle. Opening it reuses that response. Settings can disable comments and can separately exclude sales visits from those comments.
The AI proposes only implemented offers. Native code still checks the current board, price, eligibility, once-per-level flags and deadlines at acceptance. There is no generated executable code and no model-directed resource mutation.
The modern tin costs 50 sun and requires 150 in hand, leaving 100 for defense. Its native outcomes remain 75 sun (50%), 150 sun (25%), or empty (25%). A free demonstration ends the sale and Dave keeps any contents. A bought tin is opened once. The exact AI pitch is retained for later complaints and callbacks. Gifts to Dave cost 50 sun and promise no return. Bonking the pot is a comic action, not injury. An apology can affect his feelings but does not force forgiveness.
Persistence and operations
The existing account-scoped game profile holds notebook JSON and revision. No schema migration or separate database is introduced. Compare-and-swap writes and factual action receipts prevent retrying a failed response from charging or recording an action again. Campaign/level scoping prevents later-save memories from leaking backwards. The rolling transcript is trimmed by UTF-8 byte size; old refusal text is not copied into every level's relationship entry.
Adventure requires sign-in. Dave requires the player's selected private API connection; it does not fall back to official Yumina credits. Provider failures leave the native game playable, with an explicit retry. Existing kill switch PVZ_DAVE_DISABLED=1 remains available. Old clients retain their compatible notebook narration until they load the new game page.
Validation and limits
Validation includes platform typecheck/build, NPC/relationship/header tests, model-handoff tests, native economy/save and 4× mode-isolation tests, and actual WASM browser play with the real React model picker. Browser scenarios cover EN/ZH/ES, phone landscape and desktop, purchases and failed-sync retries, refusal, spontaneous speech/silence, malformed provider replies, returning to planting, account changes, model selection during a response and spoofed model messages.
Automated provider responses use fixtures, not a player's paid API key. Phone checks use touch/viewport emulation, not physical iOS/Android hardware. These establish mechanics and integration, not that every model produces equally good comedy or that a full campaign is balanced for every player. Long-session human play remains the measure of enjoyment. Talking plants are intentionally deferred.
