GOL-029 · technical companion
Resurrection
Every living and dead spell leaves a weight in time. Neighbors sum their living and dead days to decide resurrection, survival and death.
At a glance
- geometry
- Square lattice
- neighborhood
- Moore square or von Neumann diamond, radius 1–3
- states
- Alive / dead + current spell age + recorded death ratio and wait + previous-Step evidence
- update
- Adjacency pause before frozen day sums, ratio tests, optional age-qualified death and death waits; simultaneous commits
- renderer
- Canvas 2D
What to explore
Make time, rather than head count, the local influence. Reveal bursts of revival, aging regions and the reset of influence after death. A ratio-dependent recovery time should suppress rapid death/resurrection flicker while allowing stronger death-time living influence to recover sooner. Preserve the literal rule even if some settings synchronize into whole-field oscillation.
Rules, update order and replay
Square 80/120/160 lattice, toroidal by default. Moore radius one excludes self; composer permits Moore squares or von Neumann diamonds at radii one through three. Bounded exterior contributes no samples and no imaginary dead days. Every site stores binary occupancy and one positive integer age for its current spell. Except when adjacency pause matches, one Step reads the frozen board and ages, decides occupancy, then increments unchanged spells by one or starts changed spells at one. No old living age survives death and no old dead age survives resurrection. Each simulated death also records exact neighboring living/dead sums, assigned wait, and remaining wait. This records the death snapshot rather than a lifetime age history. All commits are simultaneous.
First count living cells in the eight immediately adjacent positions, including all diagonals and excluding self, using the same wrapping/bounded topology. This count is independent of the age-sum radius and square/diamond setting. Adjacency pause defaults on with exact count one selected; any nonempty subset of 1, 2, 3, 4 is allowed. Its independent off switch retains the chosen counts. A matching living or dead cell skips all age sums and transition calculations, preserving occupancy, age, death snapshot and remaining wait. It still supplies its unchanged age to neighbors. Recheck on every frozen turn; there is no latch. Paused evidence stores the adjacent count and explicitly marks sums as not computed, rather than presenting the zero-filled evidence slots as actual sums.
Otherwise, let L be neighboring living days and D neighboring dead days. Dead sites resurrect when D > 0 and L * denominator < D * numerator (default 1/50). L=0 qualifies; D=0 never does. Optional Require living neighbor disables spontaneous revival. Living sites survive only when lower*(L+D) < 100L < upper(L+D), default 40/65. Exact ties at either endpoint die. Low share dies through insufficient support; high share dies through excess living influence. No-sample neighborhoods die/stay dead. Comparisons use integer cross products, not rounded percentages.
Optional age-qualified death runs after the ordinary ratio proposal. It defaults off. When enabled, any living neighbor younger than the focal living cell vetoes both low-share and high-share death. Compare the youngest living neighbor with the focal cell's current living age, using frozen pre-Step values in the configured square/diamond age-sum neighborhood. Equality permits death; dead ages are ignored; no living neighbors means no age veto. A veto preserves life and increments living age normally, creates no death record or wait, and does not affect resurrection. Adjacency pause takes precedence and skips this comparison entirely.
At each death, capture that same frozen L/D and assign W = minimum + ceil((maximum - minimum) * (D/(L+D))^curve). Defaults: enabled, minimum 2, maximum 32, curve 2. Smaller L/D gives a longer (never shorter) wait. L=0 gives maximum, D=0 with L>0 gives minimum, and no samples gives maximum. At 40% living share W=13; at 65%, W=6. Integer ceiling is exact, using BigInt only when the intermediate integer products exceed safe Number arithmetic.
The death Step commits dead age one and remaining W. Each following Step with remaining > 0 blocks resurrection and decrements the counter after the decision. Exactly W evaluated (non-paused) subsequent Steps are blocked; eligibility starts on the next Step. At zero, the current resurrection ratio still must pass. Zero assigned wait allows the very next Step, never a second transition inside the death Step. Dead age increases during non-paused waiting and contributes normally to neighbors. The snapshot and assigned duration remain fixed throughout the dead spell, including after expiry. Resurrection clears them. Death wait does not delay living survival/death; adjacency pause skips both. Disabling the gate bypasses it while snapshots and countdowns continue; enabling it honors any remaining wait. Parameter edits affect future deaths only.
Reset reconstructs occupancy and every age from selected opening and independent field/age seeds, generation zero, no death snapshots, no waits, no prior evidence. Initially dead cells have no simulated death and are immediately eligible, regardless of their starting dead age. Clear creates all dead, age one, no waits: this is not an absorbing state with spontaneous revival enabled. Painting a changed state starts age one and clears only that site's death snapshot/wait, preserving every other age and timer. Painting the same state preserves its timer. Rule/topology edits pause and preserve board/ages/timers while clearing previous-Step evidence. Full replay includes board, ages, generation, death snapshots, assigned and remaining waits, previous adjacent count, previous wait, previous occupancy/ages, L/D sums, youngest living neighbor ages, decisions, rules, geometry and topology. Age saturates at 1,000,000,000 days solely to keep all permitted integer comparisons exact; at 30 Steps/sec this is over a year.
Reading the simulation
Canvas 2D shows lime established life and cream resurrected life. Optional age view adds blue dead spells and amber dead spells with an active remaining wait, and grades brightness logarithmically with age; Color off restores binary life. Written legend and paused inspection expose current state/age, each neighbor's state/age contribution, L and D, exact fractions, next state and age with reason, and previous-Step evidence. It also separates the current ratio-only proposal, frozen death-time ratio, originally assigned wait, remaining countdown, gate eligibility and next countdown. Previous evidence reports the wait before that Step. Accessible canvas text reports remaining and next wait. When adjacency pause is enabled, outlines mark the eight immediate count inputs; when disabled, they mark the age-sum neighborhood. Written contributions remain available. The inspector also reports the youngest living neighbor, the age permission, the ratio-only proposal and the final protected outcome. Prior evidence retains the youngest age from that frozen Step. The inspector names skipped calculations and the previous pause count. Outlines also mark the selected cell; arrows select, Enter paints, P plays/pauses, S steps.
Reproduce an opening
Download the example above, open the simulation, expand the controls, then use Share & reproduce → Import JSON. The example uses authored rules and a fixed seeded starting field; it is independent of the site’s editable default composition. Import starts paused at Step zero.
Share links and JSON reproduce the configured starting conditions, including hidden layers rebuilt by Reset. They do not save an evolved board, hand-painted cells, speed or display preferences. Determinism applies to the same rule version and Step sequence; real-time playback rates vary by device.
Larger fields and more involved rules can reduce playback speed. Read the configuration format and automated-access guide for compatibility details.