Life tag testing

For scripts to aid with computation or simulation in cellular automata.
Locked
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Build 536 is now available on the lazyslug server

Fixes in this build:
  • fixed "New pattern" message for non-RLE format patterns
User avatar
dvgrn
Moderator
Posts: 12053
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Life tag testing

Post by dvgrn »

Hmm, it appears there's a new rule format in town. Here's a sample, from lemon41625's ambitious SAT-solver-based search project. (I'm trying out the installation instructions now to see if they're as easy as they look.)

Not sure if this makes sense to put on the LifeViewer backlog, or the Golly backlog, or what, but it's interesting that it's getting traction nowadays, especially on Discord.
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

dvgrn wrote: June 25th, 2020, 9:31 am Hmm, it appears there's a new rule format in town.
I'll add some basic support to LifeViewer at some stage. It will need to use the Rule: namespace on the Wiki like RuleTable rules do.

For Golly I guess someone could implement it using the NewCA.lua stuff though it'll probably need to be natively implemented for performance on range 2+ rules (especially with weightings).

For many cases it can be translated down to an existing rule family.
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Build 537 is now available on the lazyslug server

Enhancements in this build:
  • added support for Checkerboard neighbourhood for LtL and HROT rules
    • specify with NB
User avatar
dvgrn
Moderator
Posts: 12053
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Life tag testing

Post by dvgrn »

A question came up on Discord this morning about an equivalent for Golly's Ctrl+Shift+O in LifeView. I looked at the hotkey map and fiddled around a little with Ctrl+A, Del, Alt+M (?), Ctrl+V, but couldn't seem to get Paste to bring in anything from the external clipboard. Am I missing something as usual?
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Build 538 is now available on the lazyslug server

Enhancements in this build:
  • added support for Hash neighbourhood for LtL and HROT rules
    • specify with N#
  • added hotkey Ctrl+Shift+O to open clipboard as pattern on some browsers
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

dvgrn wrote: June 28th, 2020, 1:57 pm A question came up on Discord this morning about an equivalent for Golly's Ctrl+Shift+O in LifeView.
Build 538 is your friend...

And since you questioned it: Alt+M changes the paste mode.
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

I'm thinking of extending the LtL/HROT format to allow arbitrary outer totalistic neighbourhoods. The syntax will probably support CoordCA (hex encoded) format or neighbourhood lookup from a Neighborhood: namespace on LifeWiki.

R2,C0,S0,B1,N@1555AAA - hex always begins with digit 1, since ((2R+1)^2-1) is always divisible by 8.
or
R2,C0,S0,B1,N@FarCorners

The format for the Neighborhood namespace will probably be one or all of:
  • RLE
  • 1,0,1,1,1 etc. (which could also be used for Weighted Life, though will also need state weightings in that case)
  • CoordCA Hex encoded format
I'll probably also allow neighbourhood aliases so there's no repository lookup for common neighbourhoods.

Having the range specified in the rule rather than in the repository will allow subsets of neighbourhoods to be used. For example you could use the inner 3x3 square of a 5x5 neighbourhood by specifying R3 rather than R5 in the rule. Although this could also lead to confusion so I'm undecided as yet.
User avatar
dvgrn
Moderator
Posts: 12053
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Life tag testing

Post by dvgrn »

rowett wrote: July 2nd, 2020, 5:28 pm I'm thinking of extending the LtL/HROT format to allow arbitrary outer totalistic neighbourhoods. The syntax will probably support CoordCA (hex encoded) format or neighbourhood lookup from a Neighborhood: namespace on LifeWiki.
Slackermanz' YouTube videos (link is on this Reddit post, discussion on this forum thread) involve rule definitions in something he calls MNCA, "multi-neighborhood CAs".

On Discord Slackermanz has posted 450 rule definitions in some kind of GPU C-code form, called a "fragment". Not familiar with how this kind of thing works, but the code is very easy to read to retrieve the neighborhood definitions and the (sometimes very complicated) mapping of various neighborhood counts onto ON and OFF states.

I'm planning on writing a parser to convert those 450 fragments into something a little more rule-file-like. Are you interested in maybe supporting these MNCAs in LifeViewer at some point, as an extension of your "arbitrary outer totalistic neighborhoods"? If so, do you have any preferences for what my parser should output?

EDIT: Here are the first two MNCA "fragment" specs:

000000.frag:

Code: Select all

precision mediump float;
uniform sampler2D tex0_in;
uniform vec2 tex_size;
float cv(float fx,float fy){
    vec2 v=vec2(fx,fy);
    float o=texture2D(tex0_in,(gl_FragCoord.xy+v)/tex_size).r;
    if(o>0.0){
        return 1.0;
    }else{
        return 0.0;
    }
}
void main(){
    float outval=cv(0.0,0.0);
    float nhd0=cv(-14.0,-3.0)+cv(-14.0,-2.0)+cv(-14.0,-1.0)+cv(-14.0,0.0)+cv(-14.0,1.0)+cv(-14.0,2.0)+cv(-14.0,3.0)+cv(-13.0,-6.0)+cv(-13.0,-5.0)+cv(-13.0,-4.0)+cv(-13.0,-3.0)+cv(-13.0,-2.0)+cv(-13.0,-1.0)+cv(-13.0,0.0)+cv(-13.0,1.0)+cv(-13.0,2.0)+cv(-13.0,3.0)+cv(-13.0,4.0)+cv(-13.0,5.0)+cv(-13.0,6.0)+cv(-12.0,-8.0)+cv(-12.0,-7.0)+cv(-12.0,-6.0)+cv(-12.0,-5.0)+cv(-12.0,-4.0)+cv(-12.0,-3.0)+cv(-12.0,-2.0)+cv(-12.0,-1.0)+cv(-12.0,0.0)+cv(-12.0,1.0)+cv(-12.0,2.0)+cv(-12.0,3.0)+cv(-12.0,4.0)+cv(-12.0,5.0)+cv(-12.0,6.0)+cv(-12.0,7.0)+cv(-12.0,8.0)+cv(-11.0,-9.0)+cv(-11.0,-8.0)+cv(-11.0,-7.0)+cv(-11.0,-6.0)+cv(-11.0,-5.0)+cv(-11.0,-4.0)+cv(-11.0,-3.0)+cv(-11.0,-2.0)+cv(-11.0,-1.0)+cv(-11.0,0.0)+cv(-11.0,1.0)+cv(-11.0,2.0)+cv(-11.0,3.0)+cv(-11.0,4.0)+cv(-11.0,5.0)+cv(-11.0,6.0)+cv(-11.0,7.0)+cv(-11.0,8.0)+cv(-11.0,9.0)+cv(-10.0,-10.0)+cv(-10.0,-9.0)+cv(-10.0,-8.0)+cv(-10.0,-7.0);
    float nhd1=cv(-10.0,-6.0)+cv(-10.0,-5.0)+cv(-10.0,5.0)+cv(-10.0,6.0)+cv(-10.0,7.0)+cv(-10.0,8.0)+cv(-10.0,9.0)+cv(-10.0,10.0)+cv(-9.0,-11.0)+cv(-9.0,-10.0)+cv(-9.0,-9.0)+cv(-9.0,-8.0)+cv(-9.0,-7.0)+cv(-9.0,7.0)+cv(-9.0,8.0)+cv(-9.0,9.0)+cv(-9.0,10.0)+cv(-9.0,11.0)+cv(-8.0,-12.0)+cv(-8.0,-11.0)+cv(-8.0,-10.0)+cv(-8.0,-9.0)+cv(-8.0,-8.0)+cv(-8.0,8.0)+cv(-8.0,9.0)+cv(-8.0,10.0)+cv(-8.0,11.0)+cv(-8.0,12.0)+cv(-7.0,-12.0)+cv(-7.0,-11.0)+cv(-7.0,-10.0)+cv(-7.0,-9.0)+cv(-7.0,-2.0)+cv(-7.0,-1.0)+cv(-7.0,0.0)+cv(-7.0,1.0)+cv(-7.0,2.0)+cv(-7.0,9.0)+cv(-7.0,10.0)+cv(-7.0,11.0)+cv(-7.0,12.0)+cv(-6.0,-13.0)+cv(-6.0,-12.0)+cv(-6.0,-11.0)+cv(-6.0,-10.0)+cv(-6.0,-4.0)+cv(-6.0,-3.0)+cv(-6.0,3.0)+cv(-6.0,4.0)+cv(-6.0,10.0)+cv(-6.0,11.0)+cv(-6.0,12.0)+cv(-6.0,13.0)+cv(-5.0,-13.0)+cv(-5.0,-12.0)+cv(-5.0,-11.0)+cv(-5.0,-10.0)+cv(-5.0,-5.0)+cv(-5.0,5.0)+cv(-5.0,10.0)+cv(-5.0,11.0);
    float nhd2=cv(-5.0,12.0)+cv(-5.0,13.0)+cv(-4.0,-13.0)+cv(-4.0,-12.0)+cv(-4.0,-11.0)+cv(-4.0,-6.0)+cv(-4.0,-1.0)+cv(-4.0,0.0)+cv(-4.0,1.0)+cv(-4.0,6.0)+cv(-4.0,11.0)+cv(-4.0,12.0)+cv(-4.0,13.0)+cv(-3.0,-14.0)+cv(-3.0,-13.0)+cv(-3.0,-12.0)+cv(-3.0,-11.0)+cv(-3.0,-6.0)+cv(-3.0,-2.0)+cv(-3.0,2.0)+cv(-3.0,6.0)+cv(-3.0,11.0)+cv(-3.0,12.0)+cv(-3.0,13.0)+cv(-3.0,14.0)+cv(-2.0,-14.0)+cv(-2.0,-13.0)+cv(-2.0,-12.0)+cv(-2.0,-11.0)+cv(-2.0,-7.0)+cv(-2.0,-3.0)+cv(-2.0,3.0)+cv(-2.0,7.0)+cv(-2.0,11.0)+cv(-2.0,12.0)+cv(-2.0,13.0)+cv(-2.0,14.0)+cv(-1.0,-14.0)+cv(-1.0,-13.0)+cv(-1.0,-12.0)+cv(-1.0,-11.0)+cv(-1.0,-7.0)+cv(-1.0,-4.0)+cv(-1.0,-1.0)+cv(-1.0,0.0)+cv(-1.0,1.0)+cv(-1.0,4.0)+cv(-1.0,7.0)+cv(-1.0,11.0)+cv(-1.0,12.0)+cv(-1.0,13.0)+cv(-1.0,14.0)+cv(0.0,-14.0)+cv(0.0,-13.0)+cv(0.0,-12.0)+cv(0.0,-11.0)+cv(0.0,-7.0)+cv(0.0,-4.0)+cv(0.0,-1.0)+cv(0.0,1.0)+cv(0.0,4.0);
    float nhd3=cv(0.0,7.0)+cv(0.0,11.0)+cv(0.0,12.0)+cv(0.0,13.0)+cv(0.0,14.0)+cv(1.0,-14.0)+cv(1.0,-13.0)+cv(1.0,-12.0)+cv(1.0,-11.0)+cv(1.0,-7.0)+cv(1.0,-4.0)+cv(1.0,-1.0)+cv(1.0,0.0)+cv(1.0,1.0)+cv(1.0,4.0)+cv(1.0,7.0)+cv(1.0,11.0)+cv(1.0,12.0)+cv(1.0,13.0)+cv(1.0,14.0)+cv(2.0,-14.0)+cv(2.0,-13.0)+cv(2.0,-12.0)+cv(2.0,-11.0)+cv(2.0,-7.0)+cv(2.0,-3.0)+cv(2.0,3.0)+cv(2.0,7.0)+cv(2.0,11.0)+cv(2.0,12.0)+cv(2.0,13.0)+cv(2.0,14.0)+cv(3.0,-14.0)+cv(3.0,-13.0)+cv(3.0,-12.0)+cv(3.0,-11.0)+cv(3.0,-6.0)+cv(3.0,-2.0)+cv(3.0,2.0)+cv(3.0,6.0)+cv(3.0,11.0)+cv(3.0,12.0)+cv(3.0,13.0)+cv(3.0,14.0)+cv(4.0,-13.0)+cv(4.0,-12.0)+cv(4.0,-11.0)+cv(4.0,-6.0)+cv(4.0,-1.0)+cv(4.0,0.0)+cv(4.0,1.0)+cv(4.0,6.0)+cv(4.0,11.0)+cv(4.0,12.0)+cv(4.0,13.0)+cv(5.0,-13.0)+cv(5.0,-12.0)+cv(5.0,-11.0)+cv(5.0,-10.0)+cv(5.0,-5.0)+cv(5.0,5.0);
    float nhd4=cv(5.0,10.0)+cv(5.0,11.0)+cv(5.0,12.0)+cv(5.0,13.0)+cv(6.0,-13.0)+cv(6.0,-12.0)+cv(6.0,-11.0)+cv(6.0,-10.0)+cv(6.0,-4.0)+cv(6.0,-3.0)+cv(6.0,3.0)+cv(6.0,4.0)+cv(6.0,10.0)+cv(6.0,11.0)+cv(6.0,12.0)+cv(6.0,13.0)+cv(7.0,-12.0)+cv(7.0,-11.0)+cv(7.0,-10.0)+cv(7.0,-9.0)+cv(7.0,-2.0)+cv(7.0,-1.0)+cv(7.0,0.0)+cv(7.0,1.0)+cv(7.0,2.0)+cv(7.0,9.0)+cv(7.0,10.0)+cv(7.0,11.0)+cv(7.0,12.0)+cv(8.0,-12.0)+cv(8.0,-11.0)+cv(8.0,-10.0)+cv(8.0,-9.0)+cv(8.0,-8.0)+cv(8.0,8.0)+cv(8.0,9.0)+cv(8.0,10.0)+cv(8.0,11.0)+cv(8.0,12.0)+cv(9.0,-11.0)+cv(9.0,-10.0)+cv(9.0,-9.0)+cv(9.0,-8.0)+cv(9.0,-7.0)+cv(9.0,7.0)+cv(9.0,8.0)+cv(9.0,9.0)+cv(9.0,10.0)+cv(9.0,11.0)+cv(10.0,-10.0)+cv(10.0,-9.0)+cv(10.0,-8.0)+cv(10.0,-7.0)+cv(10.0,-6.0)+cv(10.0,-5.0)+cv(10.0,5.0)+cv(10.0,6.0)+cv(10.0,7.0)+cv(10.0,8.0)+cv(10.0,9.0)+cv(10.0,10.0);
    float nhd5=cv(11.0,-9.0)+cv(11.0,-8.0)+cv(11.0,-7.0)+cv(11.0,-6.0)+cv(11.0,-5.0)+cv(11.0,-4.0)+cv(11.0,-3.0)+cv(11.0,-2.0)+cv(11.0,-1.0)+cv(11.0,0.0)+cv(11.0,1.0)+cv(11.0,2.0)+cv(11.0,3.0)+cv(11.0,4.0)+cv(11.0,5.0)+cv(11.0,6.0)+cv(11.0,7.0)+cv(11.0,8.0)+cv(11.0,9.0)+cv(12.0,-8.0)+cv(12.0,-7.0)+cv(12.0,-6.0)+cv(12.0,-5.0)+cv(12.0,-4.0)+cv(12.0,-3.0)+cv(12.0,-2.0)+cv(12.0,-1.0)+cv(12.0,0.0)+cv(12.0,1.0)+cv(12.0,2.0)+cv(12.0,3.0)+cv(12.0,4.0)+cv(12.0,5.0)+cv(12.0,6.0)+cv(12.0,7.0)+cv(12.0,8.0)+cv(13.0,-6.0)+cv(13.0,-5.0)+cv(13.0,-4.0)+cv(13.0,-3.0)+cv(13.0,-2.0)+cv(13.0,-1.0)+cv(13.0,0.0)+cv(13.0,1.0)+cv(13.0,2.0)+cv(13.0,3.0)+cv(13.0,4.0)+cv(13.0,5.0)+cv(13.0,6.0)+cv(14.0,-3.0)+cv(14.0,-2.0)+cv(14.0,-1.0)+cv(14.0,0.0)+cv(14.0,1.0)+cv(14.0,2.0)+cv(14.0,3.0);
    float fin_0=nhd0+nhd1+nhd2+nhd3+nhd4+nhd5;
    if(fin_0>=0.0){
        outval=0.0;
    }
    if(fin_0>=126.0&&fin_0<=211.0){
        outval=1.0;
    }
    if(fin_0>=136.0&&fin_0<=161.0){
        outval=1.0;
    }
    if(fin_0>=156.0&&fin_0<=171.0){
        outval=1.0;
    }
    if(fin_0>=186.0&&fin_0<=211.0){
        outval=1.0;
    }
    if(fin_0>=36.0&&fin_0<=40.0){
        outval=1.0;
    }
    if(fin_0<=29.0){
        outval=0.0;
    }
    gl_FragColor=vec4(outval,outval,outval,1.0);
}
000001.frag:

Code: Select all

precision mediump float;
uniform sampler2D tex0_in;
uniform vec2 tex_size;
float cv(float fx,float fy){
    vec2 v=vec2(fx,fy);
    float o=texture2D(tex0_in,(gl_FragCoord.xy+v)/tex_size).r;
    if(o>0.0){
        return 1.0;
    }else{
        return 0.0;
    }
}
void main(){
    float outval=cv(0.0,0.0);
    float nhd0=cv(1.0,-1.0)+cv(1.0,0.0)+cv(1.0,1.0)+cv(-1.0,-1.0)+cv(-1.0,0.0)+cv(-1.0,1.0);
    float fin_0=nhd0;
    float nhd1=cv(0.0,-1.0)+cv(0.0,1.0);
    float fin_1=nhd1;
    if(fin_0>=4.0){
        outval=0.0;
    }
    if(fin_0==3.0){
        outval=1.0;
    }
    if(fin_0<=1.0){
        outval=0.0;
    }
    float nhd2=cv(-14.0,-1.0)+cv(-14.0,0.0)+cv(-14.0,1.0)+cv(-13.0,-4.0)+cv(-13.0,-3.0)+cv(-13.0,-2.0)+cv(-13.0,2.0)+cv(-13.0,3.0)+cv(-13.0,4.0)+cv(-12.0,-6.0)+cv(-12.0,-5.0)+cv(-12.0,5.0)+cv(-12.0,6.0)+cv(-11.0,-8.0)+cv(-11.0,-7.0)+cv(-11.0,7.0)+cv(-11.0,8.0)+cv(-10.0,-9.0)+cv(-10.0,-1.0)+cv(-10.0,0.0)+cv(-10.0,1.0)+cv(-10.0,9.0)+cv(-9.0,-10.0)+cv(-9.0,-4.0)+cv(-9.0,-3.0)+cv(-9.0,-2.0)+cv(-9.0,2.0)+cv(-9.0,3.0)+cv(-9.0,4.0)+cv(-9.0,10.0)+cv(-8.0,-11.0)+cv(-8.0,-6.0)+cv(-8.0,-5.0)+cv(-8.0,5.0)+cv(-8.0,6.0)+cv(-8.0,11.0)+cv(-7.0,-11.0)+cv(-7.0,-7.0)+cv(-7.0,-2.0)+cv(-7.0,-1.0)+cv(-7.0,0.0)+cv(-7.0,1.0)+cv(-7.0,2.0)+cv(-7.0,7.0)+cv(-7.0,11.0)+cv(-6.0,-12.0)+cv(-6.0,-8.0)+cv(-6.0,-4.0)+cv(-6.0,-3.0)+cv(-6.0,3.0)+cv(-6.0,4.0)+cv(-6.0,8.0)+cv(-6.0,12.0)+cv(-5.0,-12.0)+cv(-5.0,-8.0)+cv(-5.0,-5.0)+cv(-5.0,-1.0)+cv(-5.0,0.0)+cv(-5.0,1.0)+cv(-5.0,5.0);
    float nhd3=cv(-5.0,8.0)+cv(-5.0,12.0)+cv(-4.0,-13.0)+cv(-4.0,-9.0)+cv(-4.0,-6.0)+cv(-4.0,-3.0)+cv(-4.0,-2.0)+cv(-4.0,2.0)+cv(-4.0,3.0)+cv(-4.0,6.0)+cv(-4.0,9.0)+cv(-4.0,13.0)+cv(-3.0,-13.0)+cv(-3.0,-9.0)+cv(-3.0,-6.0)+cv(-3.0,-4.0)+cv(-3.0,-1.0)+cv(-3.0,0.0)+cv(-3.0,1.0)+cv(-3.0,4.0)+cv(-3.0,6.0)+cv(-3.0,9.0)+cv(-3.0,13.0)+cv(-2.0,-13.0)+cv(-2.0,-9.0)+cv(-2.0,-7.0)+cv(-2.0,-4.0)+cv(-2.0,-2.0)+cv(-2.0,2.0)+cv(-2.0,4.0)+cv(-2.0,7.0)+cv(-2.0,9.0)+cv(-2.0,13.0)+cv(-1.0,-14.0)+cv(-1.0,-10.0)+cv(-1.0,-7.0)+cv(-1.0,-5.0)+cv(-1.0,-3.0)+cv(-1.0,-1.0)+cv(-1.0,0.0)+cv(-1.0,1.0)+cv(-1.0,3.0)+cv(-1.0,5.0)+cv(-1.0,7.0)+cv(-1.0,10.0)+cv(-1.0,14.0)+cv(0.0,-14.0)+cv(0.0,-10.0)+cv(0.0,-7.0)+cv(0.0,-5.0)+cv(0.0,-3.0)+cv(0.0,-1.0)+cv(0.0,1.0)+cv(0.0,3.0)+cv(0.0,5.0)+cv(0.0,7.0)+cv(0.0,10.0)+cv(0.0,14.0)+cv(1.0,-14.0)+cv(1.0,-10.0)+cv(1.0,-7.0);
    float nhd4=cv(1.0,-5.0)+cv(1.0,-3.0)+cv(1.0,-1.0)+cv(1.0,0.0)+cv(1.0,1.0)+cv(1.0,3.0)+cv(1.0,5.0)+cv(1.0,7.0)+cv(1.0,10.0)+cv(1.0,14.0)+cv(2.0,-13.0)+cv(2.0,-9.0)+cv(2.0,-7.0)+cv(2.0,-4.0)+cv(2.0,-2.0)+cv(2.0,2.0)+cv(2.0,4.0)+cv(2.0,7.0)+cv(2.0,9.0)+cv(2.0,13.0)+cv(3.0,-13.0)+cv(3.0,-9.0)+cv(3.0,-6.0)+cv(3.0,-4.0)+cv(3.0,-1.0)+cv(3.0,0.0)+cv(3.0,1.0)+cv(3.0,4.0)+cv(3.0,6.0)+cv(3.0,9.0)+cv(3.0,13.0)+cv(4.0,-13.0)+cv(4.0,-9.0)+cv(4.0,-6.0)+cv(4.0,-3.0)+cv(4.0,-2.0)+cv(4.0,2.0)+cv(4.0,3.0)+cv(4.0,6.0)+cv(4.0,9.0)+cv(4.0,13.0)+cv(5.0,-12.0)+cv(5.0,-8.0)+cv(5.0,-5.0)+cv(5.0,-1.0)+cv(5.0,0.0)+cv(5.0,1.0)+cv(5.0,5.0)+cv(5.0,8.0)+cv(5.0,12.0)+cv(6.0,-12.0)+cv(6.0,-8.0)+cv(6.0,-4.0)+cv(6.0,-3.0)+cv(6.0,3.0)+cv(6.0,4.0)+cv(6.0,8.0)+cv(6.0,12.0)+cv(7.0,-11.0)+cv(7.0,-7.0)+cv(7.0,-2.0);
    float nhd5=cv(7.0,-1.0)+cv(7.0,0.0)+cv(7.0,1.0)+cv(7.0,2.0)+cv(7.0,7.0)+cv(7.0,11.0)+cv(8.0,-11.0)+cv(8.0,-6.0)+cv(8.0,-5.0)+cv(8.0,5.0)+cv(8.0,6.0)+cv(8.0,11.0)+cv(9.0,-10.0)+cv(9.0,-4.0)+cv(9.0,-3.0)+cv(9.0,-2.0)+cv(9.0,2.0)+cv(9.0,3.0)+cv(9.0,4.0)+cv(9.0,10.0)+cv(10.0,-9.0)+cv(10.0,-1.0)+cv(10.0,0.0)+cv(10.0,1.0)+cv(10.0,9.0)+cv(11.0,-8.0)+cv(11.0,-7.0)+cv(11.0,7.0)+cv(11.0,8.0)+cv(12.0,-6.0)+cv(12.0,-5.0)+cv(12.0,5.0)+cv(12.0,6.0)+cv(13.0,-4.0)+cv(13.0,-3.0)+cv(13.0,-2.0)+cv(13.0,2.0)+cv(13.0,3.0)+cv(13.0,4.0)+cv(14.0,-1.0)+cv(14.0,0.0)+cv(14.0,1.0);
    float fin_2=nhd2+nhd3+nhd4+nhd5;
    if(fin_1>=29.0&&fin_1<=90.0){
        outval=0.0;
    }
    if(fin_1>=37.0&&fin_1<=29.0){
        outval=1.0;
    }
    if(fin_1>=80.0&&fin_1<=191.0){
        outval=1.0;
    }
    float nhd6=cv(-3.0,-1.0)+cv(-3.0,0.0)+cv(-3.0,1.0)+cv(-2.0,-2.0)+cv(-2.0,2.0)+cv(-1.0,-3.0)+cv(-1.0,-1.0)+cv(-1.0,0.0)+cv(-1.0,1.0)+cv(-1.0,3.0)+cv(0.0,-3.0)+cv(0.0,-1.0)+cv(0.0,1.0)+cv(0.0,3.0)+cv(1.0,-3.0)+cv(1.0,-1.0)+cv(1.0,0.0)+cv(1.0,1.0)+cv(1.0,3.0)+cv(2.0,-2.0)+cv(2.0,2.0)+cv(3.0,-1.0)+cv(3.0,0.0)+cv(3.0,1.0);
    float fin_1=nhd6;
    if(fin_2>=13.0&&fin_2<=20.0){
        outval=1.0;
    }
    if(fin_2>=9.0&&fin_2<=9.0){
        outval=1.0;
    }
    float nhd7=cv(-6.0,-1.0)+cv(-6.0,0.0)+cv(-6.0,1.0)+cv(-5.0,-3.0)+cv(-5.0,-2.0)+cv(-5.0,-1.0)+cv(-5.0,0.0)+cv(-5.0,1.0)+cv(-5.0,2.0)+cv(-5.0,3.0)+cv(-4.0,-4.0)+cv(-4.0,-3.0)+cv(-4.0,-2.0)+cv(-4.0,-1.0)+cv(-4.0,0.0)+cv(-4.0,1.0)+cv(-4.0,2.0)+cv(-4.0,3.0)+cv(-4.0,4.0)+cv(-3.0,-5.0)+cv(-3.0,-4.0)+cv(-3.0,-3.0)+cv(-3.0,-2.0)+cv(-3.0,2.0)+cv(-3.0,3.0)+cv(-3.0,4.0)+cv(-3.0,5.0)+cv(-2.0,-5.0)+cv(-2.0,-4.0)+cv(-2.0,-3.0)+cv(-2.0,3.0)+cv(-2.0,4.0)+cv(-2.0,5.0)+cv(-1.0,-6.0)+cv(-1.0,-5.0)+cv(-1.0,-4.0)+cv(-1.0,4.0)+cv(-1.0,5.0)+cv(-1.0,6.0)+cv(0.0,-6.0)+cv(0.0,-5.0)+cv(0.0,-4.0)+cv(0.0,4.0)+cv(0.0,5.0)+cv(0.0,6.0)+cv(1.0,-6.0)+cv(1.0,-5.0)+cv(1.0,-4.0)+cv(1.0,4.0)+cv(1.0,5.0)+cv(1.0,6.0)+cv(2.0,-5.0)+cv(2.0,-4.0)+cv(2.0,-3.0)+cv(2.0,3.0)+cv(2.0,4.0)+cv(2.0,5.0)+cv(3.0,-5.0)+cv(3.0,-4.0)+cv(3.0,-3.0);
    float nhd8=cv(3.0,-2.0)+cv(3.0,2.0)+cv(3.0,3.0)+cv(3.0,4.0)+cv(3.0,5.0)+cv(4.0,-4.0)+cv(4.0,-3.0)+cv(4.0,-2.0)+cv(4.0,-1.0)+cv(4.0,0.0)+cv(4.0,1.0)+cv(4.0,2.0)+cv(4.0,3.0)+cv(4.0,4.0)+cv(5.0,-3.0)+cv(5.0,-2.0)+cv(5.0,-1.0)+cv(5.0,0.0)+cv(5.0,1.0)+cv(5.0,2.0)+cv(5.0,3.0)+cv(6.0,-1.0)+cv(6.0,0.0)+cv(6.0,1.0);
    float fin_3=nhd7+nhd8;
    if(fin_3>=15.0&&fin_3<=27.0){
        outval=0.0;
    }
    float nhd9=cv(-14.0,-3.0)+cv(-14.0,-2.0)+cv(-14.0,-1.0)+cv(-14.0,0.0)+cv(-14.0,1.0)+cv(-14.0,2.0)+cv(-14.0,3.0)+cv(-13.0,-6.0)+cv(-13.0,-5.0)+cv(-13.0,-4.0)+cv(-13.0,-3.0)+cv(-13.0,-2.0)+cv(-13.0,-1.0)+cv(-13.0,0.0)+cv(-13.0,1.0)+cv(-13.0,2.0)+cv(-13.0,3.0)+cv(-13.0,4.0)+cv(-13.0,5.0)+cv(-13.0,6.0)+cv(-12.0,-8.0)+cv(-12.0,-7.0)+cv(-12.0,-6.0)+cv(-12.0,-5.0)+cv(-12.0,-4.0)+cv(-12.0,-3.0)+cv(-12.0,-2.0)+cv(-12.0,-1.0)+cv(-12.0,0.0)+cv(-12.0,1.0)+cv(-12.0,2.0)+cv(-12.0,3.0)+cv(-12.0,4.0)+cv(-12.0,5.0)+cv(-12.0,6.0)+cv(-12.0,7.0)+cv(-12.0,8.0)+cv(-11.0,-9.0)+cv(-11.0,-8.0)+cv(-11.0,-7.0)+cv(-11.0,-6.0)+cv(-11.0,-5.0)+cv(-11.0,-4.0)+cv(-11.0,-3.0)+cv(-11.0,-2.0)+cv(-11.0,-1.0)+cv(-11.0,0.0)+cv(-11.0,1.0)+cv(-11.0,2.0)+cv(-11.0,3.0)+cv(-11.0,4.0)+cv(-11.0,5.0)+cv(-11.0,6.0)+cv(-11.0,7.0)+cv(-11.0,8.0)+cv(-11.0,9.0)+cv(-10.0,-10.0)+cv(-10.0,-9.0)+cv(-10.0,-8.0)+cv(-10.0,-7.0);
    float nhd10=cv(-10.0,-6.0)+cv(-10.0,-5.0)+cv(-10.0,5.0)+cv(-10.0,6.0)+cv(-10.0,7.0)+cv(-10.0,8.0)+cv(-10.0,9.0)+cv(-10.0,10.0)+cv(-9.0,-11.0)+cv(-9.0,-10.0)+cv(-9.0,-9.0)+cv(-9.0,-8.0)+cv(-9.0,-7.0)+cv(-9.0,7.0)+cv(-9.0,8.0)+cv(-9.0,9.0)+cv(-9.0,10.0)+cv(-9.0,11.0)+cv(-8.0,-12.0)+cv(-8.0,-11.0)+cv(-8.0,-10.0)+cv(-8.0,-9.0)+cv(-8.0,-8.0)+cv(-8.0,8.0)+cv(-8.0,9.0)+cv(-8.0,10.0)+cv(-8.0,11.0)+cv(-8.0,12.0)+cv(-7.0,-12.0)+cv(-7.0,-11.0)+cv(-7.0,-10.0)+cv(-7.0,-9.0)+cv(-7.0,-2.0)+cv(-7.0,-1.0)+cv(-7.0,0.0)+cv(-7.0,1.0)+cv(-7.0,2.0)+cv(-7.0,9.0)+cv(-7.0,10.0)+cv(-7.0,11.0)+cv(-7.0,12.0)+cv(-6.0,-13.0)+cv(-6.0,-12.0)+cv(-6.0,-11.0)+cv(-6.0,-10.0)+cv(-6.0,-4.0)+cv(-6.0,-3.0)+cv(-6.0,3.0)+cv(-6.0,4.0)+cv(-6.0,10.0)+cv(-6.0,11.0)+cv(-6.0,12.0)+cv(-6.0,13.0)+cv(-5.0,-13.0)+cv(-5.0,-12.0)+cv(-5.0,-11.0)+cv(-5.0,-10.0)+cv(-5.0,-5.0)+cv(-5.0,5.0)+cv(-5.0,10.0)+cv(-5.0,11.0);
    float nhd11=cv(-5.0,12.0)+cv(-5.0,13.0)+cv(-4.0,-13.0)+cv(-4.0,-12.0)+cv(-4.0,-11.0)+cv(-4.0,-6.0)+cv(-4.0,-1.0)+cv(-4.0,0.0)+cv(-4.0,1.0)+cv(-4.0,6.0)+cv(-4.0,11.0)+cv(-4.0,12.0)+cv(-4.0,13.0)+cv(-3.0,-14.0)+cv(-3.0,-13.0)+cv(-3.0,-12.0)+cv(-3.0,-11.0)+cv(-3.0,-6.0)+cv(-3.0,-2.0)+cv(-3.0,2.0)+cv(-3.0,6.0)+cv(-3.0,11.0)+cv(-3.0,12.0)+cv(-3.0,13.0)+cv(-3.0,14.0)+cv(-2.0,-14.0)+cv(-2.0,-13.0)+cv(-2.0,-12.0)+cv(-2.0,-11.0)+cv(-2.0,-7.0)+cv(-2.0,-3.0)+cv(-2.0,3.0)+cv(-2.0,7.0)+cv(-2.0,11.0)+cv(-2.0,12.0)+cv(-2.0,13.0)+cv(-2.0,14.0)+cv(-1.0,-14.0)+cv(-1.0,-13.0)+cv(-1.0,-12.0)+cv(-1.0,-11.0)+cv(-1.0,-7.0)+cv(-1.0,-4.0)+cv(-1.0,-1.0)+cv(-1.0,0.0)+cv(-1.0,1.0)+cv(-1.0,4.0)+cv(-1.0,7.0)+cv(-1.0,11.0)+cv(-1.0,12.0)+cv(-1.0,13.0)+cv(-1.0,14.0)+cv(0.0,-14.0)+cv(0.0,-13.0)+cv(0.0,-12.0)+cv(0.0,-11.0)+cv(0.0,-7.0)+cv(0.0,-4.0)+cv(0.0,-1.0)+cv(0.0,1.0)+cv(0.0,4.0);
    float nhd12=cv(0.0,7.0)+cv(0.0,11.0)+cv(0.0,12.0)+cv(0.0,13.0)+cv(0.0,14.0)+cv(1.0,-14.0)+cv(1.0,-13.0)+cv(1.0,-12.0)+cv(1.0,-11.0)+cv(1.0,-7.0)+cv(1.0,-4.0)+cv(1.0,-1.0)+cv(1.0,0.0)+cv(1.0,1.0)+cv(1.0,4.0)+cv(1.0,7.0)+cv(1.0,11.0)+cv(1.0,12.0)+cv(1.0,13.0)+cv(1.0,14.0)+cv(2.0,-14.0)+cv(2.0,-13.0)+cv(2.0,-12.0)+cv(2.0,-11.0)+cv(2.0,-7.0)+cv(2.0,-3.0)+cv(2.0,3.0)+cv(2.0,7.0)+cv(2.0,11.0)+cv(2.0,12.0)+cv(2.0,13.0)+cv(2.0,14.0)+cv(3.0,-14.0)+cv(3.0,-13.0)+cv(3.0,-12.0)+cv(3.0,-11.0)+cv(3.0,-6.0)+cv(3.0,-2.0)+cv(3.0,2.0)+cv(3.0,6.0)+cv(3.0,11.0)+cv(3.0,12.0)+cv(3.0,13.0)+cv(3.0,14.0)+cv(4.0,-13.0)+cv(4.0,-12.0)+cv(4.0,-11.0)+cv(4.0,-6.0)+cv(4.0,-1.0)+cv(4.0,0.0)+cv(4.0,1.0)+cv(4.0,6.0)+cv(4.0,11.0)+cv(4.0,12.0)+cv(4.0,13.0)+cv(5.0,-13.0)+cv(5.0,-12.0)+cv(5.0,-11.0)+cv(5.0,-10.0)+cv(5.0,-5.0)+cv(5.0,5.0);
    float nhd13=cv(5.0,10.0)+cv(5.0,11.0)+cv(5.0,12.0)+cv(5.0,13.0)+cv(6.0,-13.0)+cv(6.0,-12.0)+cv(6.0,-11.0)+cv(6.0,-10.0)+cv(6.0,-4.0)+cv(6.0,-3.0)+cv(6.0,3.0)+cv(6.0,4.0)+cv(6.0,10.0)+cv(6.0,11.0)+cv(6.0,12.0)+cv(6.0,13.0)+cv(7.0,-12.0)+cv(7.0,-11.0)+cv(7.0,-10.0)+cv(7.0,-9.0)+cv(7.0,-2.0)+cv(7.0,-1.0)+cv(7.0,0.0)+cv(7.0,1.0)+cv(7.0,2.0)+cv(7.0,9.0)+cv(7.0,10.0)+cv(7.0,11.0)+cv(7.0,12.0)+cv(8.0,-12.0)+cv(8.0,-11.0)+cv(8.0,-10.0)+cv(8.0,-9.0)+cv(8.0,-8.0)+cv(8.0,8.0)+cv(8.0,9.0)+cv(8.0,10.0)+cv(8.0,11.0)+cv(8.0,12.0)+cv(9.0,-11.0)+cv(9.0,-10.0)+cv(9.0,-9.0)+cv(9.0,-8.0)+cv(9.0,-7.0)+cv(9.0,7.0)+cv(9.0,8.0)+cv(9.0,9.0)+cv(9.0,10.0)+cv(9.0,11.0)+cv(10.0,-10.0)+cv(10.0,-9.0)+cv(10.0,-8.0)+cv(10.0,-7.0)+cv(10.0,-6.0)+cv(10.0,-5.0)+cv(10.0,5.0)+cv(10.0,6.0)+cv(10.0,7.0)+cv(10.0,8.0)+cv(10.0,9.0)+cv(10.0,10.0);
    float nhd14=cv(11.0,-9.0)+cv(11.0,-8.0)+cv(11.0,-7.0)+cv(11.0,-6.0)+cv(11.0,-5.0)+cv(11.0,-4.0)+cv(11.0,-3.0)+cv(11.0,-2.0)+cv(11.0,-1.0)+cv(11.0,0.0)+cv(11.0,1.0)+cv(11.0,2.0)+cv(11.0,3.0)+cv(11.0,4.0)+cv(11.0,5.0)+cv(11.0,6.0)+cv(11.0,7.0)+cv(11.0,8.0)+cv(11.0,9.0)+cv(12.0,-8.0)+cv(12.0,-7.0)+cv(12.0,-6.0)+cv(12.0,-5.0)+cv(12.0,-4.0)+cv(12.0,-3.0)+cv(12.0,-2.0)+cv(12.0,-1.0)+cv(12.0,0.0)+cv(12.0,1.0)+cv(12.0,2.0)+cv(12.0,3.0)+cv(12.0,4.0)+cv(12.0,5.0)+cv(12.0,6.0)+cv(12.0,7.0)+cv(12.0,8.0)+cv(13.0,-6.0)+cv(13.0,-5.0)+cv(13.0,-4.0)+cv(13.0,-3.0)+cv(13.0,-2.0)+cv(13.0,-1.0)+cv(13.0,0.0)+cv(13.0,1.0)+cv(13.0,2.0)+cv(13.0,3.0)+cv(13.0,4.0)+cv(13.0,5.0)+cv(13.0,6.0)+cv(14.0,-3.0)+cv(14.0,-2.0)+cv(14.0,-1.0)+cv(14.0,0.0)+cv(14.0,1.0)+cv(14.0,2.0)+cv(14.0,3.0);
    float fin_1=nhd9+nhd10+nhd11+nhd12+nhd13+nhd14;
    if(fin_4>=165.0&&fin_4<=235.0){
        outval=0.0;
    }
    if(fin_4>=320.0){
        outval=0.0;
    }
    gl_FragColor=vec4(outval,outval,outval,1.0);
}
Notice the second one defines some neighborhoods after doing some of the tests... but later outval settings overwrite earlier ones, just the opposite of the way Golly ruletables work. So the calculation could be optimized by doing the tests in reverse order and stopping the calculation as soon as outval has been set... (right?)

The request from Slackermanz is to turn these into as simple and clear a format as possible, with all the neighborhood definitions up at the top, and all the tests/outval settings listed below that. Looks like fun so far...
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

dvgrn wrote: July 6th, 2020, 10:21 pm On Discord Slackermanz has posted 450 rule definitions in some kind of GPU C-code form, called a "fragment".
Yes those are shader fragments that run on the GPU in parallel for each pixel in the texture.
dvgrn wrote: July 6th, 2020, 10:21 pm I'm planning on writing a parser to convert those 450 fragments into something a little more rule-file-like. Are you interested in maybe supporting these MNCAs in LifeViewer at some point, as an extension of your "arbitrary outer totalistic neighborhoods"? If so, do you have any preferences for what my parser should output?
Yes sounds good. It looks like it's totalistic 2-state. The ndh0=cv(x1,y1)+cv(x2,y2)+cv(x3,x3)+...+cv(xn,yn) just represents the neighbourhood as a series of coordinates x1,y1 .. xn,yn from the current cell. We then sum of the states in each neighbourhood cell.
The if statements are then just testing the cell counts to determine current cell state.
The neighbourhood range for both examples appears to be 14 so I imagine it's going to run pretty slow.

The first example is simple since it just defines one neighbourhood and a set of tests based on cell count.

The second example is harder since it defines multiple neighbourhoods each with their own tests. As you said later tests can override earlier ones but I don't think it's possible to re-order because we're not done until we've applied all tests for all neighbourhoods in the order specified.

In terms of output format I don't really mind. For the neighbourhood definition perhaps a sets of (integer) coordinate pairs so the first example becomes:
-14,-3,-14,-2,-14,-1,-14,0,-14,1,-14,2,-14,3,-13,6,-13,5 etc.

Perhaps some sort of RLE could be used or hex/based64 encoding.

We then sum cell values over the list of supplied cell locations and apply the tests.
User avatar
dvgrn
Moderator
Posts: 12053
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Life tag testing

Post by dvgrn »

rowett wrote: July 7th, 2020, 9:00 amPerhaps some sort of RLE could be used or hex/based64 encoding.

We then sum cell values over the list of supplied cell locations and apply the tests.
I kind of like the RLE option, but it ends up more complicated than a simple list of coordinates -- you'd also need something like a leading #CXRLE line to say where the RLE pattern is relative to the center cell. So maybe the place to start is just a list of coordinates in a much tighter format, like

nhd5=11 -9,11 -8,11 -7,11 -6,11 -5,11 -4,11 -3,11 -2,11 -1,11 0,11 1,11 2,11 3,11 4,11 5,11 6,11 7,11 8,11 9,12 -8,12 -7,12 -6,12 -5,12 -4,12 -3,12 -2,12 -1,12 0,12 1,12 2,12 3,12 4,12 5,12 6,12 7,12 8,13 -6,13 -5,13 -4,13 -3,13 -2,13 -1,13 0,13 1,13 2,13 3,13 4,13 5,13 6,14 -3,14 -2,14 -1,14 0,14 1,14 2,14 3
But, yeah, RLE or hex format would be a lot tighter. I guess the hex format automatically provides a delta, so if so that's a point in its favor. I haven't looked closely at it, though. Would it get fooled by weird small asymmetric neighborhoods, like the pattern below? Can leading zeroes be added or something, to signal a larger neighborhood, or is that not necessary?

Code: Select all

x = 21, y = 21, rule = LifeHistory
21B$21B$21B$21B$21B$21B$21B$21B$21B$21B$10BD10B$12BC8B$11BCBC7B$12BCB
C6B$13BCBC5B$14BCBC4B$15BCBC3B$16BCBC2B$17BCBCB$18BCBC$19BCB!
rowett wrote: July 7th, 2020, 9:00 amAs you said later tests can override earlier ones but I don't think it's possible to re-order because we're not done until we've applied all tests for all neighbourhoods in the order specified.
Well... but if later tests override earlier ones, then couldn't you just run the tests in reverse order -- but stop calculating as soon as a match is found and the output value is set? Seems like you'd end up with the same output, but often you could skip even calculating sums for neighborhoods not referenced yet.
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

dvgrn wrote: July 7th, 2020, 9:51 am Well... but if later tests override earlier ones, then couldn't you just run the tests in reverse order
Yes, true.

For capturing the conditions we probably just need a list of count ranges that result in 1 for the specified neighbourhood. Everything else is a 0. Or if you don't want to process that much you can provide both a 0 list and a 1 list.
0-15,23,45-50

I'll think more on the output format balancing space with readability.
User avatar
dvgrn
Moderator
Posts: 12053
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Life tag testing

Post by dvgrn »

rowett wrote: July 7th, 2020, 10:45 amFor capturing the conditions we probably just need a list of count ranges that result in 1 for the specified neighbourhood. Everything else is a 0. Or if you don't want to process that much you can provide both a 0 list and a 1 list.
0-15,23,45-50
I don't think it's quite that simple, because some of the multi-neighborhood conditions get pretty complicated. I mean, you could have Condition#1 0-15,23,45-50 for neighborhood 1, unless Condition#2 18-20 for neighborhood 2... and then Condition#3 might go back to neighborhood 1 again, but that range couldn't be included in the original list because Condition#2 could have changed the outcome of Condition#1, but not of Condition#3...

That's for the current order of processing in these fragments from Slackermanz. Not sure if it's worth reversing the order and having a new rule about stopping as soon as an output value is set... but multiple conditions for a given neighborhood still couldn't safely be combined, I think.

I have to think some more, or maybe just sort through some more fragments to get specific examples, to see if there's a straightforward way to convert from two lists (for 0 and 1) to just one list. The default value seems to be always the current state of the center cell -- that's the initial (or final, reading in reverse order) outcome to be set in all these fragments.
User avatar
Andrew
Moderator
Posts: 1073
Joined: June 2nd, 2009, 2:08 am
Location: Melbourne, Australia
Contact:

Re: Life tag testing

Post by Andrew »

A couple of questions for Chris:

1. Do you have any long-term plans to add support for all these new rules and neighborhoods into Golly?
(Probably no need to create a new algo -- just add them to LtL.)

2. Any chance LifeViewer could become open source? That would make it a lot easier for other people
to keep Golly's rule support in sync with LifeViewer (in case you don't want to do it, or you get run over
by a bus!).
Use Glu or Glui to explore CA rules on non-periodic tilings: DominoLife, HatLife, SpectreLife
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Andrew wrote: July 13th, 2020, 10:38 pm 1. Do you have any long-term plans to add support for all these new rules and neighborhoods into Golly?
Yes including HROT format rules. Don't know when I'll get to it though.
Andrew wrote: July 13th, 2020, 10:38 pm 2. Any chance LifeViewer could become open source? That would make it a lot easier for other people
to keep Golly's rule support in sync with LifeViewer (in case you don't want to do it, or you get run over
by a bus!).
Again it's a long term plan. The main reason I haven't done it so far is that LifeViewer started off as a learning project for Javascript and needs some major refactoring before it will be in a nice enough state to make it easy for others to extend it.
As ever with technical debt it's the least interesting problem to solve...

Hopefully it's now very hard to get hit by a bus now I'm stuck at home :D
User avatar
Andrew
Moderator
Posts: 1073
Joined: June 2nd, 2009, 2:08 am
Location: Melbourne, Australia
Contact:

Re: Life tag testing

Post by Andrew »

I wrote:
(Probably no need to create a new algo -- just add them to LtL.)
Using LtL doesn't make much sense for neighborhoods like Margolus. Here's a better idea: We create a new algo called BoundedGrid. It only supports bounded universes with the same maximum dimensions as LifeViewer (16K x 16K?). If you ever get around to refactoring the LV code then maybe do it in a way that makes it easy to auto-translate the JS code (via a Lua/Python script) into C++ code that can then get merged into Golly's BoundedGrid code.

EDIT: Not all of the JS code, obviously! Just the rule parsing and pattern generating code.
Use Glu or Glui to explore CA rules on non-periodic tilings: DominoLife, HatLife, SpectreLife
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Andrew wrote: July 14th, 2020, 4:04 pm Using LtL doesn't make much sense for neighborhoods like Margolus.
True. Beyond Life-like, LtL/HROT and RuleLoader, LifeViewer has separate algos for Margolus, PCA and Triangular rules. Triangular needs its own algo since it's effectively range 2.

However there are many neighbourhoods added to the LtL/HROT family: L2, Saltire, Star, Cross, Checkerboard, Hash. The new custom neighbourhoods will be added here also.

Also note that PCA and Margolus both support reversible rules. Not sure how that would work in Golly. I had to add more logic around the playback controls in LifeViewer (and undo/redo logic) to deal with it.

Andrew wrote: July 14th, 2020, 4:04 pm Here's a better idea: We create a new algo called BoundedGrid. It only supports bounded universes with the same maximum dimensions as LifeViewer (16K x 16K?).
I'm not sure that's necessary. None of the LifeViewer algos have a particular limit at 16Kx16K. I just enforce it to prevent the browser from running out of memory.
For performance most algos use a tile-based approach. The exception is LtL/HROT which uses the bounding box approach the same as Golly.
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Build 539 is now available on the lazyslug server

Enhancements in this build:
  • improved random rule choice for HROT rules
  • added support for Custom neighbourhood for LtL and HROT rules
    • specify with N@ and then hex digits
  • added support for range 1 Hex Tripod neighbourhood
    • specify with HT
  • added support for range 1 Triangular Inner and Triangular Outer neighbourhoods
    • specify with LI and LO
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Build 540 is now available on the lazyslug server

Enhancements in this build:
  • added support for Tripod neighbourhood for LtL and HROT rules
    • specify with N3
  • added support for Asterisk neighbourhood for LtL and HROT rules
    • specify with NA
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Build 541 is now available on the lazyslug server

Enhancements in this build:
  • improved Custom neighbourhood performance
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Build 542 is now available on the lazyslug server

Enhancements in this build:
  • hotkey Ctrl+B converts the selection to a CoordCA neighbourhood and copies it to the external clipboard
    • selection must be square and have a odd side length from 3 to 99
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Build 543 is now available on the lazyslug server

Enhancements in this build:
  • Custom neighbourhoods now allow a postfix of "H" to specify hex grid
User avatar
dvgrn
Moderator
Posts: 12053
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Life tag testing

Post by dvgrn »

Here's something interesting that came up this morning while I was generating LifeViewer scripts for the Rakes folder for Golly 3.4:

Code: Select all

#C Some common and typical c/2 rakes.
#C A rake is any puffer whose debris consists entirely of spaceships.
#C Front row: p20 forward and backward rakes, the original kind of
#C  rake created by perturbing the output of a small puffer with
#C  light-weight spaceships.
#C Next row: p16 forward and backward rakes by Tim Coe, 1996.
#C Back row: a p240 forward rake, to show one alternative rake.
#C "Rakes.lif" from Alan Hensel's "lifebc" pattern collection.
x = 263, y = 79, rule = B3/S23
18boo$16bo4bo$22bo$16bo5bo$17b6o3$33boo$31bo4bo$37bo$31bo5bo213boo8bo$
32b6o132b6o74b4o8bo$169bo5bo74booboo3bo3bo$159b6o10bo76boo5b4o$107b5o
46bo5bo9bo$106bo4bo52bo$41b6o64bo5b4o42bo$40bo5bo59bo3bo5b6o61boo73bo$
46bo61bo7b4oboo56b4oboo73boo$40bo4bo74boo58b5o75bo$42boo137b3o76bo$89b
o169bo$87booboo28bo$89bo14bo3bo3bo3bo5bo58b4o$104bo3bo3bo3bo6bo56bo3bo
76bo$89bo14bo3bo3bo3bo6bo36bo23bo77bo$87booboo27b5o37bo13boo6bo74bo3bo
$89bo65bo5bo9b4oboo64b4o13b4o$156b6o9b6o64bo3bo$bboo116b3o49b4o69bo$o
4bo15b4o24boo57bo10b5o120bo$6bo13bo3bo21b3oboo54bo3bo8b3oboo$o5bo17bo
21b5o60bo10boo$b6o13bobbo23b3o56bo4bo$107b5o25$251boo8bo$169b6o75b4o8b
o$168bo5bo75booboo3bo3bo$174bo77boo5b4o$173bo3$182boo74bo$178b4oboo74b
oo$179b5o76bo$180b3o77bo$259bo$$180b4o$179bo3bo77bo$183bo78bo$174boo6b
o60bo14bo3bo$170b4oboo67bo14b4o$170b6o64bo3bo$171b4o66b4o!
#C [[ AUTOSTART GPS 30 TRACK 1/2 0 THEME 2 "Zoom in to see labels for individual rakes.\nSource: rakes.lif (Alan Hensel's collection)" ]]
#C [[ COLOR LABEL Red ]]
#C [[ LABEL 250 0 8 "P20 c/2 forerake\n('space rake', circa 1971)" ]]
#C [[ LABEL 250 50 8 "P20 c/2 backrake\n(based on an ecologist, same as the space rake above,\nbut with the trailing LWSS in a different location)" ]]
#C [[ COLOR LABEL Yellow ]]
#C [[ LABEL 170 0 8 "P16 c/2 forerake\nTim Coe, 1996" ]]
#C [[ LABEL 170 50 8 "P16 c/2 forerake\nTim Coe, 1996" ]]
#C [[ COLOR LABEL SpringGreen ]]
#C [[ LABEL 65 4 7 "sample higher-period forerake (p240),\nbased on a repeatably ignited blinker fuse" ]]
The labels work fine with TRACK... except that if you turn the step size up to 14 or above, after a couple thousand ticks the labels start getting left behind.

EDIT: I believe the same thing happens with higher step sizes and TRACKBOX:

Code: Select all

#N c3-forward-rake-p159.rle
#C   ( velocity-c3/rake-c3-p159.rle in jslife-moving collection )
#C Engineless p159 c/3 rake
#C Jason Summers, 2 Feb 2010
#C Most of the components were found by David Bell
#C https://github.com/Matthias-Merzenich/jslife-moving/
x = 473, y = 780, rule = B3/S23
254boob3o26boo$254boo4boo19b3obob3o$253bobbobo3bo14booboo3bo3boo5bo$
260b3obb3o5boobobb3obo3bo3bo3boob3o$262b3obobo4boo5boboboobbooboo8bo$
262bo4bo4bobbo3bo5b5obob3o3boo$263boo12bob3obboobboo3b4o$277boo3boo13b
o$263boo17boo4bo5bobo$262bobbo12bo10bo4bo$262bobbo11bobo$261boobo8b3o
3bo10bo$262boboboo4bobobo5b3o4b4o8b3o$259boobobo7bobobo4bo3boobo3boo8b
obooboo$259boobobobo6bobo5bobobbobobo3bo4boobo4boo$260bobobobbo12boo4b
obobbo6bobobo3bobbo$261bobbo3boo4bo7boobbobob7obobobo$249bo10b5obb3o4b
o8bo4bo5bo5bo3bo$224boob3o18bobo10b3oboboo10b3obboobboo4bo6boo$224boo
4boo15bo3bo13bo12b4o4b3o7boobbo4bo$223bobbobo3bo15b3o14bo11bo3b3o11boo
3bo3boo$230b3obb3o44b3o10b3o$232b3obobo7boo3boo19bo4bobo3boo10boo4b3o$
232bo4bo8boo3boo18b3o$233boo10boob3obbo17boboo$243boo3bobooboo17b3o$
233boo7bo3bo25boo$232bobbo6bo4bo3bo$232bobbo9b3obbo$231boobo7b3o4bo$
232boboboo3boo$229boobobo$229boobobobo$230bobobobbo$231bobbo3boo$230b
5obb3o$231b3oboboo$219bo15bo$215b3ob3o13bo5bo$214bo6boo16boo$215boo3bo
bbo3bo11boobo$225b4o10boo3bo$225bo3bo10boo3bo$223bobbobo13b3o$224bo$$
224boo$223bobbo$223boboo$222boobobo43b3o$221bobobo45bobbo$220boobobob
oo42bo$223bobo45bo$220boobobobboo42bobo$225boo3bo$221bo4boo$221bo4bobo
bo$223bobbo17$259b3o$261bo10bo$260bo10b3o$270boobo$270b3o$271boo5$256b
oobo$253boobooboo$253bobbobobbo$247boo4boo5bo38boo$247booboo48boo$246b
o3boo47bo$250boo$259bo$222bo34b3ob3o$221boo33boo6bo$221bobo27bo3bobbo
3boo$250b4o$249bo3bo$250bobobbo$254bo$237boo$237boo100boo$338bobo$271b
3o66bo$270bobbo$226bo22bo23bo$222b3ob3o18b3ob3o19bo$181b3o37bo6boo16b
oo6bo15bobo$181bo40boo3bobbo3bo6bo3bobbo3boo$182bo49b4o4b4o$105boboo
19b3o101bo3bobbo3bo$104boobooboo16b3o99bobbobo4bobobbo$103bobbobobbo
15bo3bo99bo12bo$104bo5boo4boo$113booboo8bo5bo246bo$113boo3bo7boo3boo
246boo$113boo13bo4boo243bobo$123booboboboo$113boo8boobobobo3bo305boo$
113boo8b3ob4o309booboo$112bobbo7b3o3boo11boo295boboboo$112bobobo4boo5b
o12boo295b3obboo$112bobo28bo290b3obobob3o$109booboboboo3bobboo307bo11b
oo$109boobobo319bobobbo$112bobobobo324bobbo$111bobbo3bo315boo5bo$109b
3oboobboo314bobbo3boo$118bo299b3o16bo$111bobboo156bo147bo16bo3bo$95boo
b3o15bo154b3o145bo17bo3bo4bo$95boo4boo168boboo163boo5b4o$94bobbobo3bo
168b3o169bo3booboo$101b3obb3o163boo170bo3bobboo$103b3obobo332bo7bobbo$
103bo4bo333bo$104boo338boboo$446boo$104boo339bobo$103bobbo336boo$103bo
bbo337b3o$102boobo338bobboo3bo$103boboboo337boo3b3o$100boobobo339bobo
bbo3bo$100boobobobo339bobobobo$101bobobobbo338bo$102bobbo3boo336boo$
101b5obb3o4bo331bo11b3o$102b3oboboo5boo330bo10boboboo$106bo9boo341bo$
106bo10boobo343boboo$117bobbo340b5obboboo$118bobo22bo9bo301b3o4bobo5b
oo$142bobo4b3ob3o297boobo7boo3bobbo$141bo3bobbo6boo285boo8bo3b5ob4obo$
142b3o4boo3bobbo3bo279boboo8bobobbobobobo$159b4o108b3o165bo5boo9bobboo
boo$117bo22boo3boo12bo3bo107bobbo164bo3bobo$117boo21boo3boo10bobbobo
108bo167bo5boboo6boo$117b3o19bobb3oboo10bo112bo167bobo6bo$119bo18boob
oobo3boo122bobo164bobo6bo5b3o$121bo24bo3bo7boo280bobbooboo8bo$116boo3b
o19bo3bo4bo6bobbo284bo9bo$116boo24bobb3o9boobo271boo$120bo22bo4b3o5bob
oboo270bobo$116bobbo30boo6bobobo270boo$117b3o35booboboboo$158bobo272b
oo$154boobboboboo268bobo$153bo3boo273boo$156boo4bo282bo16b3oboo$153bob
obo4bo277bobbooboo12boo4boo$150bo6bobbo278bobo6bo10bo3bobobbo$151boo
286bobo6bo5b3obb3o$153bo261bo23bo5boboo4bobob3o$150bobbo259b4o22bo3bob
o8bo4bo$136bo10b5o260boo3bo21bo5boo10boo$134b3ob3o9bo260bo5b3o21boboo$
133boo6bo3bo3bo264bobo4boo19boo$128bo3bobbo3boo3bo266bob4o4boo$127b4o
13bobo263b8ob4o$126bo3bo14bo264boo$127bobobbo139bo142bo5boo$131bo139b
3o140bobo3bobbo$138b3oboo126boobo143bobobbo$136boo4boo126b3o142b4o$
135bo3bobobbo126boo142b4o$130b3obb3o279bobbo$129bobob3o$88bo41bo4bo$
87boo44boo$31bo55bobo$29b4o$28boo3bo$27bo5b3o$30bobo4boo$27bob4o4boo
373boo$26b8ob4o63boob3o20b3oboo275booboo$26boo74boo4boo16boo4boo272b4o
bbobo$31bo5boo62bobbobo3bo14bo3bobobbo270bo4bo4bo$30bobo3bobbo68b3obb
3o4b3obb3o278boo7bo$33bobobbo71b3obobobbobob3o54bo234bo$31b4o75bo4bo4b
o4bo53b4o228b3o$31b4o12b3o61boo10boo53bo3boo226bo$25b3o5bobbo10bo128b
3o5bo226boboo$21boboo3bo19bo83bo40boo4bobo233bo$20b3o3bobo99b3ob3o38b
oo4b4obo226boo$19bo3bo4boo97bo6boo37b4ob8o219b3obbo3bo$20bo7b3o97boo3b
obbo3bo43boo219b3o5bo$26bobo109b4o31boo5bo90b3o130bo3bobbo27bo$25boo
111bo3bo29bobbo3bobo88bobbo134bobbo23b3oboo$24bo3bo107bobbobo31bobbobo
94bo137boo21bo5b3o$28bo108bo39b4o92bo136b3o22boo7boo$25boboo96boob3o
46b4o89bobo138boo26bo4boo$20bo4bo99boo4boo42bobbo5b3o251bo4b3o$19bobo
3b3o96bobbobo3bo49bo3boobo246boo3boo5b3o5bo$18bo3bo108b3obb3o34boo8bob
o3b3o232boo9boobboobb3obbo6b3ob3o$19boobo3bo106b3obobo32bobo7boo4bo3bo
226b3obo11b3oboo6boo5boo6bo$24boo107bo4bo35bo6b3o7bo226b5obo11booboobb
oo3b4obobbo3boo$134boo47bobo231b4o4bo$12boo10bobbo157boo229boo7bo25bo$
10boboo10bobo156bo3bo228bo4bo3bo3bo21bobo$9boo3bo168bo233bo3bobbo4bobo
bboo$9boo172boobo235b3o4bo6bo$bbob4obboo174bo4bo238bo4bo$boob4o7boo
167b3o3bobo238bo3bo$obboboobbo5booboo115boob3o20b3oboo22bo3bo239bo$bo
7bo3boo3boo115boo4boo16boo4boo18bo3boboo$6boobboboo3b3o114bobbobo3bo
14bo3bobobbo18boo262bo$9boobo128b3obb3o4b3obb3o288boo$16boo125b3obobo
bbobob3o25bobbo10boo247boobo$143bo4bo4bo4bo26bobo10boobo247bobbo$17bo
126boo10boo39bo3boo237boob3o6boo$17bo183boo237boo3boobb3oboobb3o$16bob
o181boobb4obo230b4o5bo4b3obobo$16bo178boo7b4oboo61bo170bobobboo4bo4bo$
192booboo5bobboobobbo59b3o168bobbo9boo$192boo3boo3bo7bo60boboo165boobb
o$192b3o3boobobboo66b3o164b4o$34boo163boboo69boo165bo3boo$34bobo157boo
243bob6o$26bo7b3o402boo6boo$25boboo5boo158bo244b4oboobbo$6boboo15bo3bo
4bo4boo153bo246boob3o3b3o4b3obo$5boobooboo13boobo8bobo152bobo250bo3boo
bobbobooboo$4bobbobobbo15bo9boo155bo250bo3bobbobb3obobbo$5bo5boo4boo
429bobo6bo4bo$14booboo9bo9boo361bo46bo3b3obbo$14boo3bo6boobo8bobo15b3o
338b3ob3o52boo$14boo9bo3bo4bo4boo14bo3boo335bo6boo43boo3bo3bo$25boboo
5boo18bobbo3bo335boo3bobbo3bo45boo$26bo7b3o14boboo6bo345b4o$34bobo13b
ooboob3o348bo3bo$34boo13bobboobo3b3o140boobo199bobbobo$61boo136booboob
oo199bo$50bo148bobbobobbo$50boo4b3o134boo4boo5bo199boo$50b3o3boo135boo
boo207bobbo$52boobboo95b3o36bo3boo207boboo41boobo$52b3o96boo3bo39boo
206boobobo37boobooboo$53bobbo93bo3bobbo17bo227bobobo39bobbobobbo$54bo
95bo6boobo14bo226booboboboo30boo4boo5bo$153b3obooboo12b3o94b3o131bobo
33booboo$150b3o3boboobbo108bobbo127boobobobboo28bo3boo$149boo21bo5bo
92bo135boo3bo31boo$161bo8bo9bo90bo131bo4boo$153b3o4boo7boo4bo4boo90bob
o128bo4bobobo$154boo3b3o6boo4b3o4boo222bobbo$154boobboo9bobb3ob3obbo$
60bo96b3o10bobo5bobo$59b4o92bobbo$58bo3booboo90bo12bobo5bobo$58bo3bobb
oo102bobb3ob3obbo268b3o$56bo7bobbo100boo4b3o4boo269bo$56bo112boo4bo4b
oo269bo$58boboo108bo9bo$60boo110bo5bo$59bobo$57boo115b3o$58b3o90bo23bo
$58bobboo3bo82b4o22bo$60boo3b3o77booboo3bo269bo5boo$33bo25bobobbo3bo
76boobbo3bo270bo$32boboboo23bobobobo76bobbo7bo267b3o$31bo4boo23bo93bo
267bobb3o$28boboo3bobbo22boo87boobo$27booboobo27bo88boo275boo$26bobb6o
26bo88bobo$22boo9bobbo116boo117bo$11boob3o4boobo3bo3bo3bo114b3o117b3o$
11boo4boobboob3oboobbobboo108bo3boobbo116boobo$10bobbobo3boboo5boo3bo
bbo107b3o3boo118b3o$17b3o5boo5bo110bo3bobbobo25bo92boo$19b3obo120bobob
obo23boobobo$19boo129bo23boo4bo$149boo22bobbo3boobo$150bo27bobooboo$
150bo26b6obbo$55boo118bobbo9boo$42b3o9bobbo117bo3bo3bo3boboo4b3oboo$
55bobo117boobbobboob3oboobboo4boo$56bo118bobbo3boo5boobo3bobobbo$21b3o
155bo5boo5b3o$24bo15bo147bob3o$24boo12bobbo149boo$19b3obboobboobo5bo3b
oo$13boo4bo5boobooboo6bo$13booboo4boobo3boobbo4b3o$12bo3boo6b4o$16boo
8boobobo17bobo$29bo18bo$31boo15bo$29bobboo14bobbo136b3o$26boob3o16b3o
136bo$24b3o5bobbo150boo$23bo3bob4obo145boboobboobb3o78b3o$14bo6bo4boo
151boobooboo5bo4boo71bobbo$10b3oboo4boo4bo151bobboo3boboo4booboo74bo$
9bo5boobboobbo3bo156b4o6boo3bo73bo$10boo5bobbobobbo154boboboo8boo74bob
o$15bo4b3obo157bo$14bob3obb3o46b3oboo103boo$17b3o3boo43boo4boo79boo21b
oobbo$14bobbo49bo3bobobbo77bobbo22b3oboo$16bo45b3obb3o84bobo19bobbo5b
3o$61bobob3o87bo21bob4obo3bo$62bo4bo116boo4bo6bo$65boo118bo4boo4boob3o
$184bo3bobboobboo5bo$65boo119bobbobobbo5boo$64bobbo119bob3o4bo$10bo11b
o41bobbo68boob3o30boo14b3obb3obo$8b4o6b3ob3o40boboo67boo4boo34bo8boo3b
3o$4booboo3bo4bo6boo36boobobo67bobbobo3bo26bobbo3bo15bobbo$4boobbo3bo
5boo3bobbo3bo34boboboo71b3obb3o21boobo20bo$3bobbo7bo13b4o31boboboboo
73b3obobo22bo$14bo13bo3bo29bobbobobo74bo4bo$9boobo13bobbobo28boo3bobbo
76boo$9boo16bo32b3obb5o$9bobo49boobob3o76boo$12boo50bo79bobbo$10b3o51b
o79bobbo41bo11bo70bo$4bo3boobbo130boobo40b3ob3o6b4o67b3o$3b3o3boo133bo
boboo36boo6bo4bo3booboo63boboo$bbo3bobbobo129boobobo34bo3bobbo3boo5bo
3bobboo64b3o$3bobobobo131boobobobo31b4o13bo7bobbo63boo$9bo132bobobobbo
29bo3bo13bo$8boo5b3o125bobbo3boo28bobobbo13boboo$9bo5bo126b5obb3o32bo
16boo$9bo6bo126b3oboboo49bobo$147bo50boo$147bo51b3o$199bobboo3bo214boo
$201boo3b3o212b3o$162bobo35bobobbo3bo211boobo$161bo40bobobobo213b3o$
161bo40bo220bo$161bobbo37boo$161b3o38bo$202bo9$271b3o$271bobbo$271bo$
271bo$272bobo10$174bo11bo$172b4o9b4o$171boo3bo7bo3boo$168bobo4bo9bo4bo
bo$167boo3bo7bo7bo3boo$168bo3boo5b3o5boo3bo$170boboo4bo3bo4boobo$149bo
18boobbo6b3o6bobboo$147b4o21bo5b5o5bo$143booboo3bo3bo12bo3bobooboo3boo
boobo3bo$143boobbo5b4o13boo3bo9bo3boo$142bobbo7bo3bo16bobboo3boobbo$
151bobbobo115bo$152bo118b3o$270boobo$270b3o$144bo126boo$142b4o$138boob
oo3bo3bo$138boobbo5b4o$137bobbo7bo3bo$146bobbobo$147bo7$182bo$180b3ob
3o$179boo6bo$174bo3bobbo3boo$162bo10b4o$160bobbo8bo3bo$159bo4bo8bobobb
o$159bo4bo12bo$160bo$160bo3bo11boo$160boobbo10bobbo92b3o$162b3o10boobo
91bobbo$174boboboo93bo$156boobbo5bo9bobobo92bo$155b3obo5bobo5boobobob
oo88bobo$157boboo4bobbo7bobo$158bo7boo4boobboboboo$157b3obboo7bo3boo$
155bobo4bobo9boo4bo$155bo7bo7bobobo4bo$175bobbo11$49boo$49b3o$48boboo$
48b3o$49bo$128boboo140bo$127boobooboo136b3o$126bobbobobbo136boboo$127b
o5boo4boo131b3o$136booboo131boo$136boo3bo$136boo$123b3ob3o$119boboo4bo
b4o$118b3o3boboo3boo3bo$117bo3bo3boboo5b4o$118bo9bo3bobo3bo$128bo3bobo
bobo$128bobo4b3o$136bo6$129bo$127b4o$123booboo3bo$123boobbo3bo$122bobb
o7bo$133bo$128boobo$128boo141b3o$128bobo7boo131bobbo$131boo4boo132bo$
129b3o6bobo18boo110bo$127boobbo3bo4boo17boo111bobo$128boo5bo5bo$128bob
o4bo5bo$141bo$129boo$$130bo292bobo$130bo291bo$129bobo290bo$129bo292bo
bbo$422b3o$120bo$118b4o$114booboo3bo3bo$114boobbo5b4o38boo$113bobbo7bo
3bo37booboo$122bobbobo37bobobb4o$123bo40bo4bo4bo$164bo7boo$164bo$166b
3o$169bo$165boobo103bo$164bo106b3o$167boo101boobo$165bo3bobb3o95b3o$
166bo5b3o96boo$168bobbo3bo$168bobbo$167boo$167b3o$167boo18$271b3o$270b
obbo$273bo$159boo112bo$159boo109bobo22$272bo$271b3o$271boboo$272b3o$
272boo3$172bo$173boo$172boo12$47bobo$50bo$50bo93boob3o20b3oboo$47bobbo
93boo4boo16boo4boo$48b3o92bobbobo3bo14bo3bobobbo$150b3obb3o4b3obb3o$
152b3obobobbobob3o103b3o$152bo4bo4bo4bo103bobbo$153boo10boo104bo$271bo
$61boo9boo198bobo$58booboo9booboo$58boo3bo7bo3boo$54b3obbo15bobb3o$54b
oobb3o5b3o5b3obboo$54b3o9b3o9b3o$55bo9bo3bo9bo$36boo18bobbo15bobbo$33b
ooboo17booboo4bo5bo4booboo$30b4obboo4boo15b7obob7o$29bo4bo4booboo14bob
obo9bobobo$30boo7boo3bo$39boo4$31boo$28booboo$25b4obboo4boo$24bo4bo4b
ooboo$25boo7boo3bo359boo9boo$34boo360booboo9booboo$272bo123boo3bo7bo3b
oo$271b3o118b3obbo15bobb3o$270boobo118boobb3o5b3o5b3obboo$270b3o119b3o
9b3o9b3o$271boo120bo9bo3bo9bo$394bobbo15bobbo18boo$393booboo4bo5bo4boo
boo17booboo$69boobo324b7obob7o15boo4boobb4o$66boobooboo322bobobo9bobob
o7b3o4booboo4bo4bo$66bobbobobbo346bo3bobbo3boo7boo$60boo4boo5bo347bo3b
o6boo$60booboo356bo3bo$59bo3boo357b3o$63boo$440boo$63boo375booboo$63b
oo369boo4boobb4o$62bobbo368booboo4bo4bo$61bobobo367bo3boo7boo$63bobo
371boo$60booboboboo$63boboboo$59bobobobo$59bo3bobbo$51boo6boobboob3o$
50boboo5bo$50bobo9boobbo$50boo9bo209b3o126boboo$48bo221bobbo125booboob
oo$47b3o223bo124bobbobobbo$48boo223bo125bo5boo4boo$44b5o221bobo135boob
oo$45b3o360boo3bo$46bo361boo$$408boo$408boo$407bobbo$407bobobo$407bobo
$404booboboboo$404boobobo$407bobobobo$14boob3o386bobbo3bo$14boo4boo
382b3oboobboo$13bobbobo3bo390bo$20b3obb3o378bobboo$22b3obobo184bo197bo
$22bo4bo183bobo$11bo3bo7boo187boo$9b3oboobobo$5booboo6bobbo$5boobbobbo
3bobboobboo$4bobbo4bobbobbooboboo247bo$15boo4bo3bo245b3o$14boobbobbobo
bo245boboo150bo$16bo255b3o137bobo10bo$22b3o247boo139bo12bo$$420bo3boo$
422b3o6bo$422boo7boo$430boboo$16boo412bobo20b3oboo$13booboo412boo19boo
4boo$10b4obbobo431bo3bobobbo$9bo4bo4bo425b3obb3o$10boo7bo424bobob3o$
19bo425bo4bo$15b3o430boo7bo3bo$14bo439boboboob3o$15boboo434bobbo6boob
oo$19bo428boobboobbo3bobbobboo$15boo431booboboobbobbo4bobbo$14bo3bo
428bo3bo4boo$17bo429bobobobbobboo$15bo440bo$17bo430b3o$28bo$16boo6bobb
oo$23bobbo5bo13boo223b3o$16b3o4bo5boobbo12boo223bobbo$16bo6bobboo5bo
237bo$17bo6bo5bobbo237bo183boo$28boobbo239bobo180booboo$7boo19bo425bob
obb4o$4booboo444bo4bo4bo$b4obboo4boo438bo7boo$o4bo4booboo438bo$boo7boo
3bo439b3o$10boo446bo$454boobo$453bo$456boo$454bo3bo$455bo$457bo$455bo
$$455boo$$454b3o$456bo$455bo$439boo$438bobbo22boo$57boo213bo164bo3boo
21booboo$56bobo212b3o162boo3bo16boo4boobb4o$58bo211boobo163boboobobbo
12booboo4bo4bo$270b3o152boo13bobobbo11bo3boo7boo$271boo152boo12bo4boo
15boo$435booboo8bo$435b3o8boobobboo$435bobo9bobobboo$64bo371bo8bobbo$
62b3ob3o367bo8boo$61boo6bo$56bo3bobbo3boo$55b4o$54bo3bo38bo$55bobobbo
36boo$59bo36bobo$$58boo$57bobbo$57boobo$56boboboo$58bobobo$55boobobob
oo344bo$58bobo346boo$54boobboboboo343bobo$53bo3boo$56boo4bo$46boo5bobo
bo4bo73b3o132b3o$46boo9bobbo77bo131bobbo134bo$137bo135bo130b3ob3o$273b
o129bo6boo$32boboo22boobo208bobo131boo3bobbo3bo$31boobooboo16boobooboo
351b4o$30bobbobobbo16bobbobobbo350bo3bo$31bo5boo4boo4boo4boo5bo188bobo
158bobbobo$40booboo4booboo198boo159bo$40boo3bobbo3boo198bo114b3o$40boo
10boo313bo45boo$368bo43bobbo$412boboo$176boo233boobobo$177boo231bobobo
$176bo232booboboboo$412bobo$409boobobobboo$414boo3bo$410bo4boo$410bo4b
obobo$412bobbo$328boo$327boo$329bo81boboo22boobo$410boobooboo16booboob
oo$216boo54bo136bobbobobbo16bobbobobbo$215bobo53b3o136bo5boo4boo4boo4b
oo5bo$217bo53boboo144booboo4booboo$272b3o144boo3bobbo3boo$272boo145boo
10boo5$288boo$288bobo$288bo$$256bo$256boo$255bobo!
#C Script commands for lifeviewer.lua:
#C [[ ANGLE 90 ZOOM -1.5 THEME 3 AUTOSTART AUTOHIDEGUI TRACKBOX 1/4 -1/3 0 -1/3 ]]
Also something came up that I wanted to work differently with AUTOHIDEGUI: you can roll the mousewheel to zoom the above pattern while it's running, but the standard click-and-drag pan method pauses the pattern. I wanted to be able to click-and-drag pan the pattern while it was running, just the same as I can if AUTOHIDEGUI isn't turned on. But maybe that isn't an option for some reason?

The arrow keys are a good workaround, anyway.

I took out the ZOOM -1.5 in the Golly version of this, because it doesn't look the same in a browser window launched by Golly as it does in a pop-up window here. Haven't completely sorted out why there's such a big difference (i.e., the rake doesn't fill the screen well in a Golly-launched browser). Different aspect ratio combined with ANGLE 90, maybe?
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Build 544 is now available on the lazyslug server

Enhancements in this build:
  • Custom neighbourhoods now allow a postfix of "L" to specify hex grid
  • Random Pattern no longer randomizes Custom neighbourhood
User avatar
rowett
Moderator
Posts: 4597
Joined: January 31st, 2013, 2:34 am
Location: UK
Contact:

Re: Life tag testing

Post by rowett »

Build 545 is now available on the lazyslug server

Enhancements in this build:
  • setting focus with "Click to control" doesn't show controls if [[ AUTOHIDEGUI ]] active
  • can now drag background during [[ AUTOHIDEGUI ]]
Fixes in this build:
  • better synchronization of Annotation positions during performance throttling
Locked