Lantern ShootZombies Night
Lantern survival overhaul. Kill zombies or light a campfire to refuel your lantern, blow the bugle to refill the whole team. Bilingual (CN/EN). Requires ShootZombies 1.3.3.
By WUYACHIYU
CHANGELOG
Changelog
[0.2.0] - 2026-04-26
Final tuning before release
Default config is now "Casual" — friendly out of the box
First-time install no longer drops you into the old hardcore tuning. The default .cfg is now identical to the Casual preset:
- Lit lantern blocks 75% cold (
EnableWarmthReduction=true,LanternWarmthMultiplier=0.75) - AutoRefill runs 1.0 fuel-second per real second, anytime (no daytime/hold gating)
- Upgrade system on by default, cheaper curve
30,60,90,120,150and faster passive accrual (PassiveTickInterval=30s) - 3D fuel indicator on, HUD defaults to Bottom + ExtraLarge
- Flashlight drain dialed back to
1.2x, proximity grace shortened to15s
If you want the old tuning back, switch ActivePreset to Balanced (mid-range) or Hardcore.
The three-way alignment (cfg defaults / Config.Bind defaults / PresetManager.Casual) means manual edits and preset switches stay consistent — no more silent drift between "what gets written on first launch" and "what Casual gives you".
ShootZombies 1.3.3 compatibility — leaner patch surface
Upstream Thanks-ShootZombies shipped 1.3.3 with its own fixes for the cook-color tinting issue. Our defensive overlays were no longer needed and have been removed:
InventoryItemUiCookColorRestorePatch— deletedBackpackWheelCookColorRestorePatch— deletedShootZombiesPerformanceFixslimmed down from 369 lines → 163 lines, keeping only theZombieDeathPatchreflection-elimination Postfix (the part that still gives a measurable perf win)
No functional regression: cook-color now displays correctly in inventory and backpack wheel via SZ's own gating.
Late additions (post-rework polish)
Warmth now survives when the lantern is off (revised)
- Zombie-kill and campfire refuel now work regardless of whether your lantern is currently lit — the warmth flows straight into the lantern body (held, tempSlot, or backpack), RPC-synced to other clients
- Overflow behavior: if the lantern is already full, zombie-hit overflow spills into the reserve pool (campfire is a "refill to max" action, so no overflow by design)
- Why this matters: the reserve pool caps at a fraction of lantern max (
Half/Quarter), so dumping everything straight into it used to waste warmth. Filling the lantern first preserves the full value - Only truly lantern-less players fall back to reserve-pool banking (hit only) so nothing is silently dropped
Host: bugle recall hotkey (BugleRecallKey, default F7)
- Host-only shortcut that destroys every bugle in the scene
- Handles PUN ownership correctly: two-phase coroutine — phase 1 destroys bugles you own + requests ownership on the rest, waits ~0.8s for the RPC to propagate, phase 2 destroys the newly-owned ones
- Pairs with F8 (host bugle spawn): recall all → spawn a fresh one
Bugfix: StrayBugleCleaner couldn't actually destroy stray bugles
- PUN requires
Destroyto come from the current owner; stray bugles are usually owned by the last player who picked them up, not the host - Previous version just logged a warning and gave up
- Now uses two-scan flow: first scan requests ownership (skips destroy), next 5s-scan owns it and destroys cleanly
Bugfix: BugleRecaller had the same async-ownership issue
- Rewrote as a coroutine that waits for the TransferOwnership RPC to land before destroying (see above)
Bugfix: bugle ultimate could force-light lanterns inside backpacks
- Backpack lanterns are supposed to stay snuffed by game design
BugleUltimatePatchnow refills fuel as before but skips theLightLanternRPCcall for backpack slots — logsSkipped re-lit (in backpack)for verification
Cleanup
- Removed the dead
UpgradeMenuKey(F9) config — redundant since upgrades became automatic EnableUpgradeSystemmoved fromDisplaysection toUpgradesection (it never belonged in Display)- Added CN/EN localization for the
Upgradesection (9 entries) andBugleRecallKey
0.2.0 original rework below
Major rework of the warmth-restore system. Old restore sources that felt out of place (rope / rescue / eat / cook / luggage / huddle) are gone. The new loop is: kill zombies for quick top-ups, snuffed lanterns auto-refuel slowly, and the bugle becomes a long-cooldown ultimate.
⚠️ Breaking change: many config keys were renamed or removed. Old
.cfgfiles are not migrated — deleteBepInEx/config/com.wuyachiyu.LanternShootZombiesNight.cfgbefore the first launch.
Removed restore sources
InteractionRestorePatchnow only handles the bugle — the 5 sub-patches (Luggage / Action_ReduceUses / Item.Consume / CharacterItems.DropItemRpc / Rope.Detach_Rpc) are deletedCookingRestorePatch/RescueRestorePatch/HuddleWarmthdeleted outright- Their config keys (
EatRestoreWarmth,InteractRestoreWarmth,DropRestoreWarmth,RopeRestoreWarmth,HuddleRestoreWarmth,DiversityCooldown, etc.) are gone
New: AutoRefill (snuffed-lantern slow regeneration)
- When fuel hits 0 and the lantern goes out, it slowly refills back up to a configurable cap
- Configurable in the new
AutoRefillsection:AutoRefillEnabled(default true)AutoRefillCapPercent(default 0.5 — stops at 50% of max fuel)AutoRefillRate(default 0.5 fuel-seconds per real second)AutoRefillDaytimeOnly(default true — only recharges in daytime)AutoRefillRequireHold(default true — lantern must be held by a player)
- HUD shows "Refill…" while actively ticking
- The lantern stays snuffed — you have to relight it yourself once fuel is back
New: Bugle Ultimate (BugleUltimate section)
- Blowing the bugle is now a group-wide AoE ability with a long shared cooldown
- All non-faerie lanterns on everyone within radius are refilled to max; overflow goes into the reserve pool
- Config:
BugleUltimateEnabled(default true)BugleUltimateCooldown(default 180s — global, not per-bugle)BugleUltimateRadius(default 20m)BugleUltimateRestore(default -1 = refill to max; >0 = fixed seconds)
- Old per-item
Bugle_Enabled/Radius/Cooldown/Restoreconfig is gone
F8 hotkey: host-only bugle spawn
- F8 spawns missing items with stricter gating:
- Lantern: you get one only if you have no non-faerie lantern in hands, backpack, or temp slot; spawned empty (fuel=0) so you can't cheese it by burning one and respawning a full one
- Bugle: only the host can spawn, and only when no bugle exists anywhere in the session (checked against every player's inventory + scene objects)
- Backpack: unchanged
- Faerie Lantern is still exempt — mysterious items never block a regular lantern spawn
New: auto-purge extra lanterns (PurgeExtraLanterns)
- Scans the local player every 2s with a 0.5s grace buffer
- If you're carrying 2+ non-faerie lanterns, the lowest-fuel one (tempSlot first) gets destroyed
- Faerie Lantern is exempt
New: stray-bugle cleanup (host-only, StrayBugle*)
- The host periodically sweeps for bugles no one is holding, far from every player (> 100m), and has been so for a while (> 60s)
- These are destroyed via
PhotonNetwork.Destroyto prevent solo players from "locking" the F8 bugle spawn by tossing one into the void
Upgrade system: passive accrual + CSV-configurable levels
- Points are now gained passively (1 per 60s by default), plus event bonuses:
- Zombie hit: +1
- Campfire light: +5
- Bugle ultimate trigger: +3
- All level numbers moved to the new
Upgradesection as CSVs:LevelCostsCsv(default "50,100,150,200,250" — Casual default ships as "30,60,90,120,150")CapacityBonusCsv(default "0.2,0.4,0.6,0.8,1.0" — Casual default "0.15,0.3,0.45,0.6,0.75")EfficiencyBonusCsv(default "0.1,0.2,0.3,0.4,0.5")PassiveTickInterval/PassivePointsPerTick/HitPoints/CampfirePoints/BuglePoints
HUD simplified
- Restore source icons reduced to: Kill / Bugle / Fire
- AutoRefill shown as a small "Refill…" status text, not an event icon
- Reserve warmth still shown separately
Multiplayer sync
RoomConfigSyncpublishes the new AutoRefill / BugleUltimate / Upgrade / PurgeExtraLanterns / StrayBugle* keys- Presets (Casual / Balanced / Hardcore) re-tuned around the new loop