diff --git a/docs/presets/core/Adrift.json b/docs/presets/core/Adrift.json new file mode 100644 index 0000000..48f1939 --- /dev/null +++ b/docs/presets/core/Adrift.json @@ -0,0 +1,236 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.20600000023841858, + "lateral_force": -0.7070000171661377, + "sensor_gain": 2.4000000953674316, + "mutation_scale": -0.23800000548362732, + "drag": 0.22304090857505798, + "strafe_power": 0.19099999964237213, + "sensor_angle": -0.9459999799728394, + "global_force_mult": 1.2803879976272583, + "sensor_distance": 2.065000057220459, + "trail_persistence": 0.9810000061988831, + "trail_diffusion": 1.0, + "hazard_rate": 0.008899999782443047 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + -0.23800000548362732, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 1.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 1.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "boundary_conditions": 2, + "initial_conditions": 1, + "num_cohorts": 3, + "rule_seed": 0.706243237577438, + "orientation_mix": 1.0 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 1, + "emboss_intensity": 0.5839999914169312, + "emboss_smoothness": 0.0949999988079071 + }, + "rule": [ + -0.5590564012527466, + -0.9662095308303833, + 0.2316361963748932, + 0.6751947999000549, + 0.07798841595649719, + 0.8288074731826782, + -0.6043798923492432, + -0.8211782574653625, + 0.061375781893730164, + -1.7465462684631348, + 0.5615509152412415, + -0.48884695768356323, + -0.7767192125320435, + -0.2844681441783905, + 0.3350430130958557, + 0.3653469979763031, + 0.2592425048351288, + -0.007073956076055765, + -1.0496008396148682, + 0.9815490245819092, + -0.005575627088546753, + -0.424625426530838, + 0.8164658546447754, + 0.7969560623168945, + 0.6727800965309143, + 1.845009207725525, + -2.0263831615448, + -0.8355033993721008, + 0.5711291432380676, + 0.22395625710487366, + -0.9544010162353516, + 0.028875648975372314, + -0.36221742630004883, + 0.6975933313369751, + 0.540959894657135, + 0.3638772964477539, + -0.7928569316864014, + 0.9743925333023071, + -0.3152179419994354, + -1.313124418258667, + 0.7426407933235168, + 0.7301257848739624, + 0.881454586982727, + -1.0617868900299072, + -0.7230390310287476, + -0.5524746179580688, + 0.690945029258728, + 0.16179344058036804, + 1.0647073984146118, + -1.2458608150482178, + 1.4176474809646606, + 1.5779831409454346, + -0.5279548168182373, + 0.8313497304916382, + 0.26246950030326843, + 0.8697594404220581, + -0.7095475196838379, + 1.047197699546814, + -0.09071393311023712, + -0.04015543311834335, + 0.04770748317241669, + 0.08775192499160767, + -0.3949321508407593, + -0.5831650495529175, + -0.5476587414741516, + -0.31841570138931274, + -1.0398536920547485, + -0.7610624432563782, + -0.49176695942878723, + -0.12715718150138855, + -0.15940183401107788, + 0.49463340640068054, + 1.1302738189697266, + -1.2627363204956055, + 1.3410791158676147, + -2.013176679611206, + 0.404327392578125, + -0.5767152309417725, + 0.3007463812828064, + 0.6155021786689758 + ] +} \ No newline at end of file diff --git a/docs/presets/core/Angles.json b/docs/presets/core/Angles.json new file mode 100644 index 0000000..24de5c7 --- /dev/null +++ b/docs/presets/core/Angles.json @@ -0,0 +1,240 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.02199999988079071, + "lateral_force": -0.1860000044107437, + "sensor_gain": 1.36899995803833, + "mutation_scale": 0.0949999988079071, + "drag": 0.125, + "strafe_power": 0.16899999976158142, + "sensor_angle": -0.14100000262260437, + "global_force_mult": 0.9399999976158142, + "sensor_distance": 1.0130000114440918, + "trail_persistence": 0.9430000185966492, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 1.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 1, + "orientation_mix": 0.0, + "boundary_conditions": 2, + "initial_conditions": 1, + "num_cohorts": 6, + "rule_seed": 0.6633918167161669 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.25, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 0.2723119258880615, + 0.2353467047214508, + -0.36034446954727173, + -0.0951252430677414, + 0.6235610246658325, + 3.0134029388427734, + 0.02889615297317505, + 0.6329693794250488, + 1.5284978151321411, + -1.9310680627822876, + -0.8994591236114502, + -2.6522579193115234, + -0.7968136072158813, + -0.45192423462867737, + -1.2523813247680664, + 0.9024071097373962, + 0.6202709078788757, + -3.0892333984375, + 2.7001781463623047, + 1.0300898551940918, + 0.26124876737594604, + 0.7132430076599121, + -0.521882176399231, + 2.613840341567993, + 1.4098798036575317, + 2.794755458831787, + -2.9237189292907715, + -1.8103021383285522, + -0.2040163278579712, + -0.0113610178232193, + 1.589127540588379, + 0.3890281319618225, + -0.3837513327598572, + -1.5257279872894287, + -1.3210279941558838, + -1.264946699142456, + 1.761325478553772, + 1.8376810550689697, + -0.404127836227417, + 0.15399736166000366, + 0.08247791230678558, + 0.6491791605949402, + 0.36356863379478455, + -0.34408271312713623, + -1.0078920125961304, + 1.1372640132904053, + -0.3193916082382202, + -2.4857420921325684, + 0.3343924880027771, + 0.7741389274597168, + -1.851560354232788, + 0.24103252589702606, + 0.45115506649017334, + 0.6353343725204468, + -0.4594263434410095, + -1.390197515487671, + 0.6367928385734558, + 0.1399131566286087, + 1.6079392433166504, + 1.3056485652923584, + -0.5525392293930054, + -2.5010201930999756, + 1.3425178527832031, + 1.339195728302002, + -0.3298691511154175, + -0.18361499905586243, + 0.07833869010210037, + 0.3052905797958374, + 0.48558253049850464, + -0.991615355014801, + -2.480074882507324, + 1.5251983404159546, + -0.21395477652549744, + 0.07011644542217255, + 0.3962416350841522, + 0.3858237862586975, + -1.6735206842422485, + 2.7825396060943604, + 0.17345786094665527, + 2.216310977935791 + ], + "notes": "" +} \ No newline at end of file diff --git a/docs/presets/core/Batarangs.json b/docs/presets/core/Batarangs.json new file mode 100644 index 0000000..b3df50e --- /dev/null +++ b/docs/presets/core/Batarangs.json @@ -0,0 +1,226 @@ +{ + "version": 7, + "physics": { + "axial_force": -0.8177437782287598, + "lateral_force": 1.531107783317566, + "sensor_gain": 0.4531199336051941, + "mutation_scale": 0.004999999888241291, + "drag": 0.656000018119812, + "strafe_power": 0.04926028475165367, + "sensor_angle": 0.07814788818359375, + "global_force_mult": 0.712827742099762, + "sensor_distance": -1.0521172285079956, + "trail_persistence": 0.9819999933242798, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.531107783317566, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + -1.0521172285079956, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "boundary_conditions": 0, + "initial_conditions": 0, + "num_cohorts": 64, + "rule_seed": 0.42, + "orientation_mix": 1.0 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 2.0338237285614014, + 0.9781721830368042, + -1.436856985092163, + 0.0612691305577755, + 0.19536283612251282, + 0.8532649874687195, + -0.7801104187965393, + 0.5703784227371216, + -0.3340151309967041, + 1.254616141319275, + 0.4860142171382904, + 0.5047671794891357, + -0.7406971454620361, + -0.17262309789657593, + 0.7837167978286743, + 0.8934873342514038, + 1.632476806640625, + 0.4724215865135193, + -1.8993821144104004, + 0.707472562789917, + 0.6768053770065308, + 0.4592742323875427, + 1.152608871459961, + -0.7257339954376221, + -0.42726120352745056, + 0.41363775730133057, + -0.9114928841590881, + -0.41117194294929504, + -0.1777014434337616, + -0.48678287863731384, + 0.333082377910614, + -0.044251106679439545, + 0.487726092338562, + 0.7787287831306458, + -1.5214647054672241, + 0.7924220561981201, + 0.24309346079826355, + -0.12296094745397568, + -0.13057947158813477, + -0.36988696455955505, + 0.3667687773704529, + 1.4826505184173584, + 0.3096461594104767, + 0.22873811423778534, + -0.2449282705783844, + -0.03759700059890747, + -1.127331018447876, + 0.4447457790374756, + -0.5278332233428955, + -0.22460108995437622, + -0.42774173617362976, + 0.9836820363998413, + -0.533270001411438, + 0.5433768033981323, + 0.3666982054710388, + 0.15650151669979095, + 0.19643303751945496, + 0.702786922454834, + -1.326629877090454, + -1.139497995376587, + -0.8341887593269348, + 0.39945536851882935, + -0.7034721374511719, + 0.028543487191200256, + 0.986171543598175, + -0.2985631823539734, + -0.8999123573303223, + 0.15158818662166595, + 0.17669154703617096, + -0.6469340324401855, + -0.8296289443969727, + 1.076275110244751, + -0.41656047105789185, + 0.06842068582773209, + -0.002860044362023473, + 0.7678893208503723, + -0.3305438756942749, + -1.1332005262374878, + -0.01581885665655136, + -0.3624683618545532 + ] +} \ No newline at end of file diff --git a/docs/presets/core/Bubbles.json b/docs/presets/core/Bubbles.json new file mode 100644 index 0000000..edb9414 --- /dev/null +++ b/docs/presets/core/Bubbles.json @@ -0,0 +1,239 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.052000001072883606, + "lateral_force": -0.30000001192092896, + "sensor_gain": 3.9881303310394287, + "mutation_scale": 0.004000000189989805, + "drag": 0.8254010081291199, + "strafe_power": 0.16899999976158142, + "sensor_angle": -0.14399999380111694, + "global_force_mult": 0.3738688826560974, + "sensor_distance": 1.6399999856948853, + "trail_persistence": 0.9430000185966492, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 1.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 1.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 2, + "initial_conditions": 0, + "num_cohorts": 64, + "rule_seed": 0.41999998688697815 + }, + "appearance": { + "ink_weight": 2.312000036239624, + "hue_sensitivity": 0.0729999989271164, + "color_by_cohort": false, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.0, + "emboss_smoothness": 0.0010000000474974513 + }, + "rule": [ + 0.24982698261737823, + 0.21591399610042572, + -0.3305906057357788, + -0.08727069199085236, + 0.5453777313232422, + 0.6592193841934204, + 1.0345219373703003, + 0.6058461666107178, + 1.5725170373916626, + -1.9866807460784912, + -0.9253627061843872, + -2.728640079498291, + -0.8168761730194092, + 0.9688932299613953, + -0.8540294170379639, + -0.7904863953590393, + 0.4303528368473053, + -2.143355131149292, + 1.8734238147735596, + 0.7146913409233093, + -0.7333734035491943, + 0.567722499370575, + 0.792397141456604, + 1.656206488609314, + 1.0965254306793213, + 2.173604965209961, + -2.2739052772521973, + -1.407952070236206, + -0.9000433683395386, + 0.08977060765028, + -0.9432690143585205, + 1.545775055885315, + -0.5211184620857239, + -2.0718748569488525, + -1.7939012050628662, + -1.7177447080612183, + 0.519044816493988, + 0.7934024930000305, + 0.6913467645645142, + 0.15279331803321838, + 0.12782485783100128, + 1.0061026811599731, + 0.5634613037109375, + -0.5332620143890381, + -0.1400202363729477, + 1.8535243272781372, + -0.6147862672805786, + -1.1358764171600342, + 0.21130883693695068, + 0.48919275403022766, + -1.1700356006622314, + 0.15231294929981232, + -0.603736162185669, + 0.3327077627182007, + 0.32728850841522217, + 0.39477425813674927, + 0.6853645443916321, + 0.15058496594429016, + 1.7305846214294434, + 1.4052375555038452, + -0.5202469229698181, + -0.6664999127388, + -0.033004313707351685, + 1.272554636001587, + -0.4988234341144562, + -0.27765995264053345, + 0.11846266686916351, + 0.4616560637950897, + 1.4029484987258911, + -0.30711910128593445, + -1.121110439300537, + 0.680158257484436, + -0.2835861146450043, + 0.09293575584888458, + 0.5251979231834412, + 0.5113896131515503, + 1.0838383436203003, + 0.8377264142036438, + -0.013460591435432434, + 0.06429916620254517 + ] +} \ No newline at end of file diff --git a/docs/presets/core/Circuits.json b/docs/presets/core/Circuits.json new file mode 100644 index 0000000..74a2841 --- /dev/null +++ b/docs/presets/core/Circuits.json @@ -0,0 +1,236 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.04100000113248825, + "lateral_force": -0.7070000171661377, + "sensor_gain": 1.3925049304962158, + "mutation_scale": 0.7675260305404663, + "drag": 0.3330000042915344, + "strafe_power": 0.0, + "sensor_angle": 0.16200000047683716, + "global_force_mult": 0.718999981880188, + "sensor_distance": 1.6829999685287476, + "trail_persistence": 0.9886726140975952, + "trail_diffusion": 0.3580000102519989, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 1.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "boundary_conditions": 0, + "initial_conditions": 1, + "num_cohorts": 10, + "rule_seed": 0.9463542447332114, + "orientation_mix": 1.0 + }, + "appearance": { + "ink_weight": 16.0, + "hue_sensitivity": 0.593999981880188, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5720000267028809, + "emboss_smoothness": 0.10000000149011612 + }, + "rule": [ + 0.02958657592535019, + -0.8248337507247925, + 0.9301514029502869, + -0.4672362208366394, + 1.3147722482681274, + 1.0059473514556885, + -1.3656266927719116, + 0.7142422795295715, + 0.9078131318092346, + -2.068183660507202, + 1.7170721292495728, + -1.0640711784362793, + 1.2417747974395752, + 1.0327458381652832, + -0.371610164642334, + -1.2614808082580566, + -0.589740514755249, + 0.6589550971984863, + -0.07589191943407059, + -0.026074886322021484, + 0.4837169647216797, + -1.0186351537704468, + 0.6086377501487732, + 0.2056964635848999, + -0.4383489787578583, + 0.2577780485153198, + -0.23357875645160675, + 0.3373747766017914, + 2.395021915435791, + 0.8705562949180603, + -0.35085055232048035, + 0.8371548056602478, + -0.5848132967948914, + -1.9505336284637451, + 1.5069043636322021, + -1.8309935331344604, + -1.2075340747833252, + 1.021162986755371, + -0.3107568323612213, + 0.0884014368057251, + -0.0002464375866111368, + 0.7894469499588013, + 0.2935407757759094, + -0.12562718987464905, + 2.0232813358306885, + 1.3874677419662476, + 1.8599867820739746, + 2.0394086837768555, + 2.0610036849975586, + -1.2825901508331299, + -1.5108697414398193, + 0.43969008326530457, + -1.644706130027771, + 1.3597334623336792, + 0.9348413944244385, + 1.0189483165740967, + -0.9144988656044006, + -1.2172967195510864, + -0.2414669692516327, + 1.3141127824783325, + 1.1636337041854858, + -0.18865367770195007, + -0.3629435896873474, + 0.5774178504943848, + 1.5962778329849243, + 0.8702152967453003, + 1.6947414875030518, + 0.5287332534790039, + 0.6592678427696228, + -0.8203657865524292, + 0.7057331800460815, + 2.6002249717712402, + -0.414029985666275, + 0.7197397947311401, + -0.5330645442008972, + -0.37226617336273193, + -1.2227659225463867, + -1.0341321229934692, + -0.9177538156509399, + 0.289615273475647 + ] +} \ No newline at end of file diff --git a/docs/presets/core/Critters.json b/docs/presets/core/Critters.json new file mode 100644 index 0000000..bf7354b --- /dev/null +++ b/docs/presets/core/Critters.json @@ -0,0 +1,240 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.0860000029206276, + "lateral_force": -0.7070000171661377, + "sensor_gain": 2.4539999961853027, + "mutation_scale": 0.014000000432133675, + "drag": 0.2370000034570694, + "strafe_power": 0.19099999964237213, + "sensor_angle": 0.16200000047683716, + "global_force_mult": 0.24500000476837158, + "sensor_distance": 2.0859999656677246, + "trail_persistence": 0.44600000977516174, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 2, + "initial_conditions": 0, + "num_cohorts": 64, + "rule_seed": 0.42 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.15600000321865082, + "color_by_cohort": false, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 0.29244035482406616, + -0.7750009298324585, + 0.31593993306159973, + -1.4123061895370483, + 0.5970830917358398, + -0.389507532119751, + -1.0076661109924316, + 1.1212620735168457, + 0.20756463706493378, + 1.0094239711761475, + -1.5322587490081787, + -0.2566033601760864, + 0.2303907871246338, + -0.020594969391822815, + 0.04212690889835358, + 0.15351459383964539, + 0.42262211441993713, + -1.1824564933776855, + -1.2143592834472656, + 0.27645689249038696, + 1.022444725036621, + 0.6343171000480652, + -0.6666417121887207, + 0.3566229045391083, + 2.581594705581665, + -0.26106226444244385, + -2.610968828201294, + 1.8548414707183838, + 0.4229719340801239, + 0.46283191442489624, + -0.7024494409561157, + 0.40701186656951904, + -0.6258365511894226, + 0.708000659942627, + 0.25336599349975586, + 1.112993836402893, + 0.40613022446632385, + -0.9923629760742188, + -0.5161771774291992, + 0.2413594126701355, + -0.8071590065956116, + -0.9198645949363708, + 0.8614987730979919, + -0.9763434529304504, + -1.2471897602081299, + -0.5836154818534851, + 0.11076229810714722, + -0.9173323512077332, + -0.4479275345802307, + -0.15901872515678406, + 0.7712042927742004, + -0.19752056896686554, + -0.34013432264328003, + -0.5376204252243042, + 0.9203327298164368, + 0.007607594132423401, + 2.46111798286438, + 0.17991919815540314, + 0.9432799220085144, + -0.817916989326477, + 0.173861563205719, + -0.4765690863132477, + 0.3455897569656372, + 0.8897463083267212, + 1.3829319477081299, + 0.9779521226882935, + -0.8067164421081543, + 2.3473455905914307, + -0.5881830453872681, + 0.013223834335803986, + -0.5165588855743408, + -0.22042664885520935, + -0.9387428164482117, + 0.8520209193229675, + -0.8096460700035095, + 0.43491581082344055, + 0.4321926236152649, + 0.5922808647155762, + -0.8276724219322205, + 1.218657374382019 + ], + "notes": "Unusually low Trail Persistence. I usually prefer 0.9 or higher" +} \ No newline at end of file diff --git a/docs/presets/core/Curls.json b/docs/presets/core/Curls.json new file mode 100644 index 0000000..c0a75b9 --- /dev/null +++ b/docs/presets/core/Curls.json @@ -0,0 +1,240 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.052000001072883606, + "lateral_force": -0.30000001192092896, + "sensor_gain": 1.0, + "mutation_scale": 0.13300000131130219, + "drag": 0.125, + "strafe_power": 0.16899999976158142, + "sensor_angle": -0.14399999380111694, + "global_force_mult": 0.9399999976158142, + "sensor_distance": 1.6399999856948853, + "trail_persistence": 0.9430000185966492, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 0, + "initial_conditions": 0, + "num_cohorts": 64, + "rule_seed": 0.42 + }, + "appearance": { + "ink_weight": 6.729000091552734, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": true, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 0.259061723947525, + 0.2238951325416565, + -0.342810720205307, + -0.09049660712480545, + 0.637373149394989, + 0.5727369785308838, + 1.009755253791809, + 0.5590413808822632, + 1.5452349185943604, + -1.952213168144226, + -0.9093083143234253, + -2.6812996864318848, + -0.7658802270889282, + 0.7859041094779968, + -0.8301372528076172, + -0.7369574308395386, + 0.4332331120967865, + -2.1577000617980957, + 1.8859620094299316, + 0.7194744944572449, + -0.7160491943359375, + 0.7845606803894043, + 0.7611522674560547, + 1.1898114681243896, + 1.0718942880630493, + 2.12477970123291, + -2.2228269577026367, + -1.3763253688812256, + -0.6925411224365234, + 0.20373046398162842, + -1.1412831544876099, + 1.683820366859436, + -0.5118650794029236, + -2.0350852012634277, + -1.7620474100112915, + -1.6872432231903076, + 0.497482031583786, + 0.8695435523986816, + 0.8324295878410339, + 0.17900554835796356, + 0.13037675619125366, + 1.0261884927749634, + 0.5747103095054626, + -0.5439081192016602, + -0.08254268765449524, + 1.7737561464309692, + -0.7801187038421631, + -0.966425895690918, + 0.2145053893327713, + 0.4965929687023163, + -1.1877350807189941, + 0.154617041349411, + -0.6495017409324646, + 0.1720990240573883, + 0.3798521161079407, + 0.37052223086357117, + 0.7390850782394409, + 0.1623881757259369, + 1.866231918334961, + 1.5153833627700806, + -0.3432876169681549, + -0.8398232460021973, + 0.19875243306159973, + 1.3634357452392578, + -0.49740612506866455, + -0.27687105536460876, + 0.11812607944011688, + 0.4603443443775177, + 1.3694891929626465, + -0.4685085415840149, + -1.0069637298583984, + 0.5914481282234192, + -0.27140870690345764, + 0.08894500881433487, + 0.5026454925537109, + 0.4894300699234009, + 0.9114559888839722, + 0.8103944063186646, + -0.2828904688358307, + 0.35439085960388184 + ], + "notes": "" +} \ No newline at end of file diff --git a/docs/presets/core/Dandelions.json b/docs/presets/core/Dandelions.json new file mode 100644 index 0000000..3336f34 --- /dev/null +++ b/docs/presets/core/Dandelions.json @@ -0,0 +1,226 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 0.6880896091461182, + "mutation_scale": 0.328000009059906, + "drag": 0.10300000011920929, + "strafe_power": 0.41996902227401733, + "sensor_angle": -0.49000000953674316, + "global_force_mult": 0.5233856439590454, + "sensor_distance": 0.6717398166656494, + "trail_persistence": 0.9810000061988831, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "boundary_conditions": 2, + "initial_conditions": 1, + "num_cohorts": 6, + "rule_seed": 0.0010756553383544087, + "orientation_mix": 1.0 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 1.5093871355056763, + 1.651310682296753, + -1.626986026763916, + -0.16992191970348358, + -0.029386788606643677, + -0.36706802248954773, + 1.1174367666244507, + -0.15552082657814026, + -0.6975675821304321, + 0.03688213601708412, + 0.24573378264904022, + 0.9980812668800354, + -0.7636172771453857, + 0.39783453941345215, + -1.0094337463378906, + 0.6972033977508545, + -0.06566552817821503, + -1.062676191329956, + -0.04456191882491112, + 0.5203171968460083, + -0.9025127291679382, + -0.21111011505126953, + -0.5917513966560364, + 0.5107214450836182, + 1.7491689920425415, + -0.06759431213140488, + 1.9501986503601074, + 0.12555257976055145, + 0.9018486738204956, + -0.019323155283927917, + 0.4286019802093506, + -0.4745025336742401, + -0.757583498954773, + 0.8693133592605591, + -0.6288542151451111, + -0.5160677433013916, + 0.164030522108078, + 0.27273374795913696, + -0.1091042160987854, + -0.7532268166542053, + 0.8491398096084595, + 1.6297345161437988, + -0.3259306252002716, + 1.613753080368042, + -0.7599941492080688, + -0.9672814011573792, + 0.9673978090286255, + -0.6555793881416321, + 1.5671836137771606, + 0.25070253014564514, + -0.4586329758167267, + 1.9361121654510498, + -0.4328192472457886, + 0.5942379236221313, + 0.5469098687171936, + -0.18454864621162415, + -0.7786874175071716, + 0.33141934871673584, + -0.9162911772727966, + 0.8178858160972595, + -0.8283188343048096, + 0.8831799626350403, + 0.5174775123596191, + 1.0213497877120972, + -0.6723061203956604, + -0.8756880760192871, + -0.3157220482826233, + -0.9826145768165588, + 1.022843837738037, + -0.019921712577342987, + 0.6720963716506958, + 0.8594903349876404, + -0.38846737146377563, + -0.22199483215808868, + -0.21892909705638885, + 0.6203404068946838, + -0.28335750102996826, + 0.05211669206619263, + -0.9983972311019897, + 0.14298084378242493 + ] +} \ No newline at end of file diff --git a/docs/presets/core/Ferns.json b/docs/presets/core/Ferns.json new file mode 100644 index 0000000..429d05c --- /dev/null +++ b/docs/presets/core/Ferns.json @@ -0,0 +1,254 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 1.5461252927780151, + "mutation_scale": 0.0, + "drag": 0.5040000081062317, + "strafe_power": 0.3889999985694885, + "sensor_angle": 0.3149999976158142, + "global_force_mult": 0.15380261838436127, + "sensor_distance": 1.093999981880188, + "trail_persistence": 0.9380000233650208, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "SENSOR_GAIN": 0.0, + "SENSOR_ANGLE": 0.0, + "SENSOR_DISTANCE": 0.0, + "MUTATION_SCALE": 0.0, + "GLOBAL_FORCE_MULT": 1.0, + "DRAG": 0.0, + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "STRAFE_POWER": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "SENSOR_GAIN": 0.0, + "SENSOR_ANGLE": 0.0, + "SENSOR_DISTANCE": 0.0, + "MUTATION_SCALE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "DRAG": 0.0, + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "STRAFE_POWER": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "SENSOR_GAIN": 0.0, + "SENSOR_ANGLE": 0.0, + "SENSOR_DISTANCE": 0.0, + "MUTATION_SCALE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "DRAG": 0.0, + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "STRAFE_POWER": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "jitters": { + "SENSOR_GAIN": 0.0, + "SENSOR_ANGLE": 0.3199999928474426, + "SENSOR_DISTANCE": 1.600000023841858, + "MUTATION_SCALE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "DRAG": 0.0, + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "STRAFE_POWER": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0 + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 0.12999999523162842, + "boundary_conditions": 2, + "initial_conditions": 1, + "num_cohorts": 1, + "rule_seed": 0.042810760228103484 + }, + "appearance": { + "ink_weight": 4.0, + "hue_sensitivity": 0.041999999433755875, + "color_by_cohort": false, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 1.3142324686050415, + -1.54048490524292, + 1.615188479423523, + -1.841676115989685, + 1.1779357194900513, + -0.8043999075889587, + 0.04695260524749756, + 0.011786207556724548, + 0.08694809675216675, + 1.3429723978042603, + 0.682350754737854, + 0.13070234656333923, + 1.3715472221374512, + -0.5985609889030457, + 0.22722569108009338, + 0.29789024591445923, + 0.9206027984619141, + -0.0879213809967041, + -1.5673491954803467, + -2.0413146018981934, + -0.2004184126853943, + 0.4507303237915039, + 0.17768490314483643, + 1.2523326873779297, + 1.5216656923294067, + 2.0260095596313477, + 2.112668037414551, + 0.5188016891479492, + 0.8398128747940063, + 0.21041402220726013, + 0.6534071564674377, + 0.5574371814727783, + 1.4985158443450928, + -2.2039809226989746, + 1.573503017425537, + -0.808229923248291, + 0.39150142669677734, + 0.4870128631591797, + 0.22445222735404968, + -0.29202932119369507, + -0.18682272732257843, + 0.9390847086906433, + -0.35511431097984314, + -0.9787337779998779, + -0.6126255989074707, + -0.23687390983104706, + -0.01856479048728943, + -0.16767875850200653, + -0.7140211462974548, + 0.09897010773420334, + 0.2710719406604767, + -0.4911040663719177, + 0.3535257577896118, + -0.9852195978164673, + -1.1650724411010742, + -0.6449546813964844, + 0.07410430163145065, + -0.22791585326194763, + 1.0897501707077026, + 0.6491128206253052, + 0.9737089276313782, + 0.3163423538208008, + -1.0790419578552246, + -0.4434269666671753, + -0.5497695207595825, + -0.33149611949920654, + 0.716407060623169, + 0.24196983873844147, + -0.035123661160469055, + 0.9307196736335754, + 1.0112231969833374, + -0.4298552870750427, + 0.20909863710403442, + -0.5906533598899841, + 1.121795892715454, + -1.009559988975525, + 0.443472295999527, + 0.44933900237083435, + -0.6009074449539185, + 0.7040729522705078 + ], + "notes": "" +} \ No newline at end of file diff --git a/docs/presets/core/Growth.json b/docs/presets/core/Growth.json new file mode 100644 index 0000000..ee168cd --- /dev/null +++ b/docs/presets/core/Growth.json @@ -0,0 +1,239 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 10.15462875366211, + "mutation_scale": 0.06599999964237213, + "drag": 0.5366925597190857, + "strafe_power": 0.2240000069141388, + "sensor_angle": 0.17319728434085846, + "global_force_mult": 0.5277748107910156, + "sensor_distance": 1.0, + "trail_persistence": 0.9900000095367432, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.15462875366211, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 2, + "initial_conditions": 2, + "num_cohorts": 4, + "rule_seed": 0.42 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + -0.8750424385070801, + -0.2218237817287445, + 0.6097644567489624, + -0.7468030452728271, + -0.7346505522727966, + -0.841789960861206, + 0.5717830061912537, + -0.8793417811393738, + -0.5863358378410339, + 0.8702017068862915, + 0.7499091625213623, + -0.7728079557418823, + 0.9592574834823608, + -0.22669701278209686, + 0.47091516852378845, + 0.8025389313697815, + -0.930133044719696, + 0.05574207007884979, + -0.3577873706817627, + 0.890146017074585, + -0.4787578880786896, + -0.7189961671829224, + 0.5877927541732788, + -0.5242933630943298, + 0.499146968126297, + -0.7037785053253174, + 1.1965829133987427, + -0.007579239085316658, + -0.8787487149238586, + 0.44291701912879944, + -0.4390066862106323, + 0.6312385201454163, + 0.012497291900217533, + 0.8001469969749451, + -1.3474342823028564, + 1.2832244634628296, + 0.12322765588760376, + -0.8217315673828125, + 0.7101240754127502, + 0.6910558342933655, + -0.7343848347663879, + -0.837496280670166, + -0.9831066727638245, + -0.6937537789344788, + -0.6708669066429138, + 0.3695942461490631, + 0.7925766706466675, + 0.6085859537124634, + 0.2770604193210602, + -0.6536067724227905, + 0.6074126958847046, + 1.3537577390670776, + 0.40771836042404175, + 0.3173680007457733, + 0.05413398519158363, + 0.8498564958572388, + -0.6506003737449646, + -0.261766254901886, + -0.2888701856136322, + -0.6152905225753784, + 0.2836506962776184, + 0.6841010451316833, + -0.029198380187153816, + -0.18425944447517395, + -0.594333291053772, + -0.6638039350509644, + -0.1205059364438057, + 0.96595698595047, + -0.5963315367698669, + -0.09793005138635635, + 0.40703126788139343, + -0.7266143560409546, + 0.47097504138946533, + -1.7610912322998047, + 0.7890220284461975, + -0.2218421846628189, + 0.4606666564941406, + -0.995776891708374, + -0.2444669008255005, + -0.8368915319442749 + ] +} \ No newline at end of file diff --git a/docs/presets/core/HungryHungryHippos.json b/docs/presets/core/HungryHungryHippos.json new file mode 100644 index 0000000..0b23757 --- /dev/null +++ b/docs/presets/core/HungryHungryHippos.json @@ -0,0 +1,240 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.35925570130348206, + "lateral_force": -1.293696641921997, + "sensor_gain": 0.9078231453895569, + "mutation_scale": 0.14000000059604645, + "drag": 0.5608117580413818, + "strafe_power": 0.07624772191047668, + "sensor_angle": -0.728590726852417, + "global_force_mult": -0.3406755328178406, + "sensor_distance": -1.0521172285079956, + "trail_persistence": 0.9819999933242798, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.293696641921997, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + -0.3406755328178406, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + -1.0521172285079956, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 1.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 1.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 2, + "initial_conditions": 1, + "num_cohorts": 8, + "rule_seed": 0.4862983671108597 + }, + "appearance": { + "ink_weight": 2.7709999084472656, + "hue_sensitivity": 0.18799999356269836, + "color_by_cohort": true, + "watercolor_mode": true, + "emboss_mode": 0, + "emboss_intensity": 0.7080000042915344, + "emboss_smoothness": 0.10000000149011612 + }, + "rule": [ + 1.2064379453659058, + 1.067139744758606, + 1.2132219076156616, + -0.12498120963573456, + 1.5426808595657349, + -0.2381400465965271, + -1.6898831129074097, + 1.2356244325637817, + -0.7950752973556519, + 0.8675197958946228, + 0.7583622336387634, + 0.8555039763450623, + -0.4020692706108093, + 0.31403112411499023, + -1.0033940076828003, + -0.7093168497085571, + 3.5040769577026367, + 3.050676107406616, + 1.4465839862823486, + 2.246659517288208, + -2.1314163208007812, + -0.002818688750267029, + -0.37139642238616943, + 1.2416610717773438, + 1.1865310668945312, + 1.286213755607605, + -0.9745411276817322, + -0.6409617066383362, + -0.021761491894721985, + 0.7107173800468445, + -0.20683011412620544, + 0.2877289354801178, + 1.4541025161743164, + 1.0496876239776611, + 1.4966915845870972, + -0.9024308323860168, + -0.10237443447113037, + -1.4029918909072876, + -0.17698410153388977, + -1.4599552154541016, + -0.5519824624061584, + 0.684830904006958, + 0.5333976745605469, + -0.8555260896682739, + 0.9248912334442139, + -1.845164179801941, + 0.904996395111084, + 0.9833927154541016, + -0.8521580100059509, + -0.9560102224349976, + -0.252249538898468, + -0.28091707825660706, + 0.7234344482421875, + 0.8838722109794617, + 1.5286259651184082, + -0.26113516092300415, + 0.3846791386604309, + -1.164605975151062, + 0.06522984057664871, + 0.14904245734214783, + -0.1396895945072174, + -0.6890721321105957, + 0.642676591873169, + 0.3004353642463684, + -0.11368437111377716, + -0.0009936660062521696, + -0.759465754032135, + -1.0703999996185303, + 1.16761314868927, + -0.7396655082702637, + 0.8717650175094604, + -1.5144052505493164, + 2.6468586921691895, + 1.8602746725082397, + -1.087221384048462, + 2.2106218338012695, + -0.9733583927154541, + -1.1184961795806885, + 0.107132688164711, + -0.1786668747663498 + ], + "notes": "One of my favorites! Set frequency as high as possible to watch the green flowers fight over pink pellets. (I like .4 World Size @ x20 physics frequency on my 5600)" +} \ No newline at end of file diff --git a/docs/presets/core/LavaLamp.json b/docs/presets/core/LavaLamp.json new file mode 100644 index 0000000..349fff7 --- /dev/null +++ b/docs/presets/core/LavaLamp.json @@ -0,0 +1,240 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 1.5461252927780151, + "mutation_scale": 0.1720000058412552, + "drag": 0.5981895923614502, + "strafe_power": 0.3889999985694885, + "sensor_angle": 0.3149999976158142, + "global_force_mult": 0.15380261838436127, + "sensor_distance": 0.8870000243186951, + "trail_persistence": 0.9380000233650208, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 1.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 1, + "orientation_mix": 0.1899999976158142, + "boundary_conditions": 0, + "initial_conditions": 1, + "num_cohorts": 15, + "rule_seed": 0.6897220261142252 + }, + "appearance": { + "ink_weight": 4.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 1.5971801280975342, + -0.43546268343925476, + 0.28982609510421753, + -1.961641788482666, + 0.2551876902580261, + -0.8082472681999207, + -0.2982575297355652, + -0.10233171284198761, + -0.35762834548950195, + 0.8915620446205139, + 0.4641057848930359, + 0.17897333204746246, + -0.8745092749595642, + 1.0951886177062988, + 1.5872905254364014, + 0.10067170113325119, + 1.0606759786605835, + -1.7266271114349365, + 2.266552686691284, + -2.6324338912963867, + -0.13785366714000702, + 0.05756750702857971, + -0.6317152976989746, + -0.7400498390197754, + -0.6513653993606567, + -0.8959881067276001, + 0.14928680658340454, + -0.3980691134929657, + 0.11382687836885452, + -0.7248189449310303, + 0.13636456429958344, + 0.45529448986053467, + 1.318798542022705, + 0.0464470311999321, + 1.2936460971832275, + 1.1405248641967773, + 0.4193042814731598, + 0.0882897675037384, + -0.29597628116607666, + 0.1672821342945099, + 0.16318291425704956, + -0.8063337206840515, + -1.2317310571670532, + 0.7469275593757629, + -0.004541531205177307, + -0.2542213797569275, + -0.284272700548172, + -2.312476396560669, + -0.2934926450252533, + 0.13149993121623993, + -0.4133073389530182, + 0.005710060242563486, + 0.16095547378063202, + 0.008479014039039612, + 0.6318308115005493, + -1.1174982786178589, + -0.1719258576631546, + -0.3761816918849945, + 0.1521228551864624, + -1.0967768430709839, + 1.7991111278533936, + -1.8832780122756958, + -0.6733858585357666, + 0.6237070560455322, + -0.5329096913337708, + -0.29392117261886597, + 0.8772275447845459, + 0.6048162579536438, + 1.3786522150039673, + -0.08977897465229034, + 0.8946298956871033, + 0.594213604927063, + -0.4161849617958069, + -0.8521063923835754, + -0.22893865406513214, + -0.5084526538848877, + -1.4341678619384766, + 0.05215933918952942, + -1.6874401569366455, + 0.021498650312423706 + ], + "notes": "Illustrates how mixing in a little absolute orientation (0.19) can create a distinct up-down gravity-like effect. Lots of fun at high physics frequency (I like x20)." +} \ No newline at end of file diff --git a/docs/presets/core/Pop.json b/docs/presets/core/Pop.json new file mode 100644 index 0000000..9c32ea4 --- /dev/null +++ b/docs/presets/core/Pop.json @@ -0,0 +1,240 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 1.2208932638168335, + "mutation_scale": 0.18199999630451202, + "drag": 0.6370000243186951, + "strafe_power": 0.2240000069141388, + "sensor_angle": 0.5734775066375732, + "global_force_mult": 0.622897744178772, + "sensor_distance": 1.0, + "trail_persistence": 0.9950000047683716, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 2, + "initial_conditions": 1, + "num_cohorts": 64, + "rule_seed": 0.6328877806663513 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + -0.8878291845321655, + 0.19912631809711456, + 0.2513297498226166, + 0.14762890338897705, + 0.600240170955658, + 0.6139535307884216, + -0.4808639585971832, + -0.8891838192939758, + 1.1664044857025146, + -0.32113751769065857, + -1.6818170547485352, + -0.0546991229057312, + 0.06395547091960907, + -0.922101616859436, + -0.8478285074234009, + -0.14897729456424713, + -0.7538522481918335, + -0.0454632006585598, + 0.4835020899772644, + 0.01853218302130699, + -0.9013296365737915, + 0.5260997414588928, + 0.7970078587532043, + 0.08219082653522491, + 0.3985083997249603, + 1.34608793258667, + -0.7140138149261475, + -0.9974373579025269, + 0.2184026837348938, + 0.09108908474445343, + 0.010477110743522644, + 0.9795894622802734, + 0.8658491373062134, + -1.9094221591949463, + 1.0179654359817505, + -1.9888921976089478, + 0.1094982773065567, + -0.176158145070076, + -0.7046807408332825, + -0.416130006313324, + 0.8505807518959045, + 0.7802966237068176, + 1.1879979372024536, + 1.877948522567749, + -0.11411724984645844, + -0.5991125106811523, + -0.16501866281032562, + -0.10596966743469238, + -1.0746777057647705, + -0.9408733248710632, + -0.16355887055397034, + 0.9846309423446655, + 0.5889813303947449, + 0.883992075920105, + 0.38135117292404175, + -0.725321888923645, + -0.4236324727535248, + -0.593553900718689, + -0.13533014059066772, + -0.2918974757194519, + -0.9042136073112488, + -0.3888998329639435, + -0.29366254806518555, + 0.47142094373703003, + 0.5697739720344543, + 0.4819115698337555, + 1.5911881923675537, + 1.516242265701294, + 0.43937039375305176, + -0.7106562852859497, + 0.9541618824005127, + 0.7883576154708862, + 0.2605288326740265, + 0.49135422706604004, + -1.14181649684906, + -1.3790627717971802, + -0.5996626019477844, + 0.18573720753192902, + 0.3528895974159241, + -0.27987974882125854 + ], + "notes": "Totally unique among my saves: colorful 'C' shaped bubbles which grow and then violently pop." +} \ No newline at end of file diff --git a/docs/presets/core/RingOfFire.json b/docs/presets/core/RingOfFire.json new file mode 100644 index 0000000..b6d2232 --- /dev/null +++ b/docs/presets/core/RingOfFire.json @@ -0,0 +1,240 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.37342554330825806, + "lateral_force": -0.8231800198554993, + "sensor_gain": 0.7852177023887634, + "mutation_scale": 0.18700000643730164, + "drag": 0.6449999809265137, + "strafe_power": 0.3409999907016754, + "sensor_angle": -0.5117601156234741, + "global_force_mult": 0.017999999225139618, + "sensor_distance": 0.6259999871253967, + "trail_persistence": 0.8769999742507935, + "trail_diffusion": 0.0, + "hazard_rate": 0.004000000189989805 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 1.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 1.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 1, + "orientation_mix": 0.09000000357627869, + "boundary_conditions": 0, + "initial_conditions": 2, + "num_cohorts": 1, + "rule_seed": 0.291242253075059 + }, + "appearance": { + "ink_weight": 2.062000036239624, + "hue_sensitivity": 0.5519999861717224, + "color_by_cohort": false, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": -0.2709999978542328, + "emboss_smoothness": 0.5009999871253967 + }, + "rule": [ + 1.0023164749145508, + -0.29741355776786804, + 0.9884987473487854, + -0.9403517842292786, + -0.9088449478149414, + 0.29802438616752625, + -0.7306678891181946, + -0.43923822045326233, + 1.7292379140853882, + 0.8626725673675537, + 1.3930690288543701, + 1.4993263483047485, + 0.7993181943893433, + 0.8254985213279724, + 0.4834561049938202, + 0.0549856573343277, + 0.37037989497184753, + -0.2813468873500824, + -0.3374806046485901, + -0.8629100322723389, + 0.4694429039955139, + -0.5807673931121826, + -0.9391796588897705, + 0.5259632468223572, + 1.1240936517715454, + 0.22575683891773224, + 1.620314598083496, + -1.5323982238769531, + 0.787205696105957, + 1.0194872617721558, + 0.34203100204467773, + -0.7257842421531677, + -0.7972422242164612, + 0.848709762096405, + 0.4590521454811096, + -0.013877899385988712, + -0.24675118923187256, + 0.22944894433021545, + 0.9108051061630249, + 0.527021050453186, + 0.1726239174604416, + 1.5038689374923706, + -1.5367487668991089, + 0.0016158388461917639, + -0.03703455626964569, + -0.5660411715507507, + 0.4732842445373535, + -0.519265353679657, + 2.865835428237915, + -0.9588616490364075, + -0.34169429540634155, + 0.5979667901992798, + -0.973614513874054, + -0.8015972971916199, + -0.5975209474563599, + 0.9213902950286865, + -0.219289630651474, + -0.5807850956916809, + -0.5965878963470459, + 1.2847099304199219, + -0.2633821964263916, + 0.778602659702301, + 0.7680369019508362, + 1.0020557641983032, + 0.9202959537506104, + -1.5663001537322998, + -1.0065504312515259, + -0.7217884063720703, + -0.7496302127838135, + 0.0911942571401596, + -0.44639524817466736, + -0.9035030007362366, + 0.19109824299812317, + -0.5788841843605042, + 0.15236462652683258, + -0.5642825961112976, + 0.7373502254486084, + -0.02970804274082184, + -0.6589655876159668, + 0.11496715247631073 + ], + "notes": "Weird Fire-like effect by combining a healthy Hazard Rate with a little mix of Y-axis absolute orientation for 'gravity'. Looks best at 0.2 World Size with a high Physics Frequency (~x20). " +} \ No newline at end of file diff --git a/docs/presets/core/RippleTree.json b/docs/presets/core/RippleTree.json new file mode 100644 index 0000000..1d6e252 --- /dev/null +++ b/docs/presets/core/RippleTree.json @@ -0,0 +1,236 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.11599999666213989, + "lateral_force": 0.5149999856948853, + "sensor_gain": 5.0, + "mutation_scale": 0.2329999953508377, + "drag": 0.5040000081062317, + "strafe_power": 0.2240000069141388, + "sensor_angle": -0.9200000166893005, + "global_force_mult": 0.15199999511241913, + "sensor_distance": 1.309000015258789, + "trail_persistence": 0.9380000233650208, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "boundary_conditions": 0, + "initial_conditions": 0, + "num_cohorts": 21, + "rule_seed": 0.5168903564593641, + "orientation_mix": 1.0 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + -0.7398709058761597, + 0.06874561309814453, + -0.5002655386924744, + -0.6929984092712402, + 0.3603830337524414, + -0.6802797317504883, + -0.29088205099105835, + -0.5829402804374695, + -0.21357500553131104, + -0.7610551714897156, + 0.08020615577697754, + 1.0296813249588013, + 0.270068883895874, + 0.789371132850647, + -0.29971957206726074, + -0.5697809457778931, + 1.326643943786621, + 0.07539510726928711, + 1.8610835075378418, + 2.101531982421875, + 0.20712614059448242, + 0.00110626220703125, + 0.15065157413482666, + -0.6575450897216797, + 0.09423637390136719, + -0.4338066577911377, + -1.1160792112350464, + -1.4597543478012085, + 0.16395998001098633, + -0.25546401739120483, + 0.12015843391418457, + -0.7583032250404358, + 2.2348878383636475, + -0.2211291790008545, + 0.25362086296081543, + -0.1948854923248291, + -0.3123924136161804, + 0.5037695169448853, + 0.32728755474090576, + -0.49014198780059814, + -0.8594400882720947, + -0.1433829665184021, + -0.0615118145942688, + 0.7507851123809814, + 0.8722126483917236, + -0.5124485492706299, + -0.23815160989761353, + 0.14097094535827637, + 0.07713592052459717, + -0.09612762928009033, + -1.2330994606018066, + 0.8127233982086182, + -0.3356337547302246, + -0.7624523043632507, + -0.1639222502708435, + 0.9073030948638916, + 0.6493635177612305, + -0.7964304685592651, + -1.6298247575759888, + 0.25641465187072754, + 0.5564736127853394, + 0.10276138782501221, + -0.9630324244499207, + 0.7226192951202393, + 2.585601806640625, + 1.4343013763427734, + 1.022817611694336, + -2.2021608352661133, + 0.912585973739624, + -0.3726254105567932, + -0.797353982925415, + -0.21794360876083374, + 1.0769670009613037, + 1.3472518920898438, + -0.1254584789276123, + -0.5474581718444824, + -0.6594763994216919, + -0.9885750412940979, + -0.3940991759300232, + -0.1909072995185852 + ] +} \ No newline at end of file diff --git a/docs/presets/core/Salt.json b/docs/presets/core/Salt.json new file mode 100644 index 0000000..7879403 --- /dev/null +++ b/docs/presets/core/Salt.json @@ -0,0 +1,240 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 1.1360000371932983, + "mutation_scale": -0.0, + "drag": -0.35018298029899597, + "strafe_power": 0.41996902227401733, + "sensor_angle": -0.49000000953674316, + "global_force_mult": 0.45140519738197327, + "sensor_distance": 0.6717398166656494, + "trail_persistence": 0.9810000061988831, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 1.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 1.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 1, + "initial_conditions": 2, + "num_cohorts": 110, + "rule_seed": 0.41999998688697815 + }, + "appearance": { + "ink_weight": 6.0, + "hue_sensitivity": 0.3540000021457672, + "color_by_cohort": false, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.0, + "emboss_smoothness": 0.0010000000474974513 + }, + "rule": [ + -0.1990494728088379, + 0.5282548666000366, + -0.07602667808532715, + 0.5671815872192383, + -0.3482027053833008, + -0.3454299569129944, + 0.7230108976364136, + 0.4688270092010498, + 0.663841724395752, + 0.8687338829040527, + 1.343493938446045, + -1.5923092365264893, + 0.778617262840271, + -0.8512462973594666, + 0.2766317129135132, + 0.5831986665725708, + -0.6678104400634766, + -0.6573953628540039, + 0.3541222810745239, + -0.2350684404373169, + -0.5221054553985596, + -0.40160465240478516, + 0.1863727569580078, + -0.6424355506896973, + 0.8509891033172607, + -0.2792264223098755, + -1.4230021238327026, + 1.1943459510803223, + -0.5740256309509277, + -0.22188138961791992, + 0.6526217460632324, + -0.6875842809677124, + 2.2007670402526855, + -1.2524710893630981, + -2.4615631103515625, + -1.5341962575912476, + 0.5721189975738525, + -0.7936639785766602, + -0.9886353015899658, + -0.1873658299446106, + 0.43340039253234863, + 1.3021230697631836, + -1.0023174285888672, + 0.8576390743255615, + -0.6375958323478699, + 0.23635947704315186, + 0.7200241088867188, + 0.5822278261184692, + -0.852695643901825, + -0.2363133430480957, + 0.2537001371383667, + 0.640865683555603, + -0.8523270487785339, + -0.37935876846313477, + -0.4449183940887451, + -0.8622293472290039, + -0.9736353754997253, + -0.10914736986160278, + 0.5158311128616333, + -0.6797989010810852, + -0.3303564786911011, + 0.8944520950317383, + 0.9284071922302246, + -0.2780998945236206, + 0.8407406806945801, + -1.7259242534637451, + 0.24772119522094727, + -1.989144206047058, + 0.9510786533355713, + 0.9957772493362427, + 0.797810435295105, + -0.15748149156570435, + -0.6159260869026184, + 0.39494407176971436, + 0.24917232990264893, + -0.7255998849868774, + -0.951838493347168, + -0.39515429735183716, + -0.9195523262023926, + 0.6620248556137085 + ], + "notes": "Beautiful crystals with unusual negative Drag value. Try playing around with the Drag slider and see what changes!" +} \ No newline at end of file diff --git a/docs/presets/core/Searching.json b/docs/presets/core/Searching.json new file mode 100644 index 0000000..e41e100 --- /dev/null +++ b/docs/presets/core/Searching.json @@ -0,0 +1,240 @@ +{ + "version": 7, + "physics": { + "axial_force": -0.13578170537948608, + "lateral_force": -1.293696641921997, + "sensor_gain": 0.9078231453895569, + "mutation_scale": 0.0020000000949949026, + "drag": 0.5608117580413818, + "strafe_power": 0.07624772191047668, + "sensor_angle": -0.728590726852417, + "global_force_mult": 0.6419504880905151, + "sensor_distance": -1.0521172285079956, + "trail_persistence": 0.9819999933242798, + "trail_diffusion": 1.0, + "hazard_rate": 0.0020000000949949026 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.293696641921997, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + -1.0521172285079956, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 1.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 1.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 2, + "initial_conditions": 1, + "num_cohorts": 8, + "rule_seed": 0.29228493571281433 + }, + "appearance": { + "ink_weight": 5.583000183105469, + "hue_sensitivity": 0.12399999797344208, + "color_by_cohort": false, + "watercolor_mode": true, + "emboss_mode": 0, + "emboss_intensity": 0.5519999861717224, + "emboss_smoothness": 0.10000000149011612 + }, + "rule": [ + 1.2064379453659058, + 1.067139744758606, + 1.2132219076156616, + -0.12498120963573456, + 1.5426808595657349, + -0.2381400465965271, + -1.6898831129074097, + 1.2356244325637817, + -0.7950752973556519, + 0.8675197958946228, + 0.7583622336387634, + 0.8555039763450623, + -0.4020692706108093, + 0.31403112411499023, + -1.0033940076828003, + -0.7093168497085571, + 3.5040769577026367, + 3.050676107406616, + 1.4465839862823486, + 2.246659517288208, + -2.1314163208007812, + -0.002818688750267029, + -0.37139642238616943, + 1.2416610717773438, + 1.1865310668945312, + 1.286213755607605, + -0.9745411276817322, + -0.6409617066383362, + -0.021761491894721985, + 0.7107173800468445, + -0.20683011412620544, + 0.2877289354801178, + 1.4541025161743164, + 1.0496876239776611, + 1.4966915845870972, + -0.9024308323860168, + -0.10237443447113037, + -1.4029918909072876, + -0.17698410153388977, + -1.4599552154541016, + -0.5519824624061584, + 0.684830904006958, + 0.5333976745605469, + -0.8555260896682739, + 0.9248912334442139, + -1.845164179801941, + 0.904996395111084, + 0.9833927154541016, + -0.8521580100059509, + -0.9560102224349976, + -0.252249538898468, + -0.28091707825660706, + 0.7234344482421875, + 0.8838722109794617, + 1.5286259651184082, + -0.26113516092300415, + 0.3846791386604309, + -1.164605975151062, + 0.06522984057664871, + 0.14904245734214783, + -0.1396895945072174, + -0.6890721321105957, + 0.642676591873169, + 0.3004353642463684, + -0.11368437111377716, + -0.0009936660062521696, + -0.759465754032135, + -1.0703999996185303, + 1.16761314868927, + -0.7396655082702637, + 0.8717650175094604, + -1.5144052505493164, + 2.6468586921691895, + 1.8602746725082397, + -1.087221384048462, + 2.2106218338012695, + -0.9733583927154541, + -1.1184961795806885, + 0.107132688164711, + -0.1786668747663498 + ], + "notes": "My favorite discovery so far. Meandering snakes grow until they are disrupted, then back away, flailing like a garden hose. It's slow so aim for Physics Frequency x15 or higher. The snakes can take a long time to get started so give it a quick swish in trail drawing mode, or just hover over Streamers for a second before you load this one. The snakes and the chaotic boiling snow are made of the same stuff: this is a monoculture (Mutation Scale == 0). " +} \ No newline at end of file diff --git a/docs/presets/core/SideWinder.json b/docs/presets/core/SideWinder.json new file mode 100644 index 0000000..426dc8f --- /dev/null +++ b/docs/presets/core/SideWinder.json @@ -0,0 +1,251 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 1.1360000371932983, + "mutation_scale": 0.03099999949336052, + "drag": -0.35018298029899597, + "strafe_power": 0.41996902227401733, + "sensor_angle": -0.49000000953674316, + "global_force_mult": 0.45140519738197327, + "sensor_distance": 0.6717398166656494, + "trail_persistence": 0.9810000061988831, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Sensor Gain": [ + 0, + 5, + 0, + 5 + ], + "Sensor Angle": [ + -1, + 1, + -1, + 1 + ], + "Sensor Distance": [ + 0, + 4, + 0, + 4 + ], + "Mutation Scale": [ + 0.0, + 1.0, + -0.5, + 0.5 + ], + "Global Force Mult": [ + 0, + 2, + 0, + 2 + ], + "Drag": [ + -1, + 1, + -1, + 1 + ], + "Axial Force": [ + -1, + 1, + -1, + 1 + ], + "Lateral Force": [ + -1, + 1, + -1, + 1 + ], + "Strafe Power": [ + 0, + 0.5, + 0, + 0.5 + ], + "Trail Persistence": [ + 0, + 1, + 0, + 1 + ], + "Trail Diffusion": [ + 0, + 1, + 0, + 1 + ], + "Hazard Rate": [ + 0, + 0.05, + 0, + 0.05 + ] + }, + "sweeps": { + "x": { + "SENSOR_GAIN": 0, + "SENSOR_ANGLE": 0, + "SENSOR_DISTANCE": 0, + "MUTATION_SCALE": 0, + "GLOBAL_FORCE_MULT": 0, + "DRAG": 0, + "AXIAL_FORCE": 0, + "LATERAL_FORCE": 0, + "STRAFE_POWER": 0, + "TRAIL_PERSISTENCE": 0, + "TRAIL_DIFFUSION": 0, + "HAZARD_RATE": 0 + }, + "y": { + "SENSOR_GAIN": 0, + "SENSOR_ANGLE": 0, + "SENSOR_DISTANCE": 0, + "MUTATION_SCALE": 0, + "GLOBAL_FORCE_MULT": 0, + "DRAG": 0, + "AXIAL_FORCE": 0, + "LATERAL_FORCE": 0, + "STRAFE_POWER": 0, + "TRAIL_PERSISTENCE": 0, + "TRAIL_DIFFUSION": 0, + "HAZARD_RATE": 0 + }, + "cohort": { + "SENSOR_GAIN": 0, + "SENSOR_ANGLE": 0, + "SENSOR_DISTANCE": 0, + "MUTATION_SCALE": 0, + "GLOBAL_FORCE_MULT": 0, + "DRAG": 0, + "AXIAL_FORCE": 0, + "LATERAL_FORCE": 0, + "STRAFE_POWER": 0, + "TRAIL_PERSISTENCE": 0, + "TRAIL_DIFFUSION": 0, + "HAZARD_RATE": 0 + } + }, + "jitters": { + "SENSOR_GAIN": 0, + "SENSOR_ANGLE": 0, + "SENSOR_DISTANCE": 0, + "MUTATION_SCALE": 0, + "GLOBAL_FORCE_MULT": 0, + "DRAG": 0, + "AXIAL_FORCE": 0, + "LATERAL_FORCE": 0, + "STRAFE_POWER": 0, + "TRAIL_PERSISTENCE": 0, + "TRAIL_DIFFUSION": 0, + "HAZARD_RATE": 0 + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1, + "boundary_conditions": 0, + "initial_conditions": 0, + "num_cohorts": 4, + "rule_seed": 0.4521218902904375 + }, + "appearance": { + "ink_weight": 1, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 0.34513160586357117, + -0.23101577162742615, + -1.6938691139221191, + -0.7888087630271912, + -0.3539271652698517, + -0.11866800487041473, + 0.17200735211372375, + -0.12324413657188416, + -0.7464677691459656, + -1.037899136543274, + 0.4891033172607422, + 1.019127368927002, + -0.9706709384918213, + -0.049504511058330536, + -0.8493560552597046, + -1.1318684816360474, + 2.189014196395874, + -1.9420307874679565, + -2.301650047302246, + 0.3169112801551819, + -0.34902989864349365, + -1.0204535722732544, + 0.33717966079711914, + -0.27692633867263794, + -0.02195948176085949, + 1.4695334434509277, + -0.1859910935163498, + -1.332200288772583, + -0.5941867232322693, + -1.0471662282943726, + -0.6947325468063354, + 1.1413326263427734, + 0.5683327317237854, + -0.7681652903556824, + 1.1634560823440552, + 1.3924566507339478, + 0.4468306005001068, + 0.024955183267593384, + 0.17531196773052216, + -0.08953696489334106, + -0.8101181387901306, + 0.9406931400299072, + -1.0658708810806274, + 1.0017993450164795, + -0.8081346750259399, + -0.7110112309455872, + -0.8682109713554382, + -0.45268863439559937, + -0.09068065136671066, + -0.6868197917938232, + 0.08579745888710022, + -0.09496477991342545, + -0.22782465815544128, + -1.0074563026428223, + 0.4414946436882019, + -0.0010524652898311615, + 0.8313080668449402, + -0.42973434925079346, + -1.906126856803894, + -1.8164727687835693, + -0.6802549362182617, + -0.2929144501686096, + -0.6259016394615173, + 0.058163128793239594, + -0.7319051623344421, + 0.23495523631572723, + 0.49595892429351807, + 0.19568903744220734, + -0.013631479814648628, + 0.6493415832519531, + -0.3335883319377899, + 0.06437807530164719, + 0.777104914188385, + -0.5019206404685974, + 0.9921175837516785, + 0.7213947176933289, + 0.49667882919311523, + 0.14342403411865234, + 0.7654822468757629, + -1.119443416595459 + ], + "notes": "" +} \ No newline at end of file diff --git a/docs/presets/core/Streamers.json b/docs/presets/core/Streamers.json new file mode 100644 index 0000000..75d0606 --- /dev/null +++ b/docs/presets/core/Streamers.json @@ -0,0 +1,239 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 1.8175716400146484, + "mutation_scale": 0.009999999776482582, + "drag": -0.7378671765327454, + "strafe_power": 0.21639500558376312, + "sensor_angle": 0.612864077091217, + "global_force_mult": 0.17868953943252563, + "sensor_distance": 1.7143139839172363, + "trail_persistence": 0.9810000061988831, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 0, + "initial_conditions": 0, + "num_cohorts": 64, + "rule_seed": 0.42 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.4059999883174896, + "color_by_cohort": false, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + -0.7691723108291626, + 0.8446578979492188, + 0.3456740975379944, + -1.023170828819275, + -0.3548876643180847, + -0.9090896248817444, + 0.9379512071609497, + 0.4174051880836487, + 0.48838353157043457, + 1.6430031061172485, + 0.9988017678260803, + 1.6146143674850464, + 0.34126630425453186, + 0.761618971824646, + 0.24146762490272522, + 0.07485903799533844, + 0.27792927622795105, + 0.767452597618103, + -1.6269375085830688, + 0.6782735586166382, + -0.5600290298461914, + 0.46246886253356934, + 0.9700115323066711, + -0.2495093196630478, + -0.8009893298149109, + -0.4759942293167114, + -0.11749374866485596, + 0.10261670500040054, + -0.18004630506038666, + -0.29716941714286804, + -0.09714485704898834, + 0.23314033448696136, + 2.499704122543335, + 1.4606657028198242, + 0.7934204339981079, + 1.3058174848556519, + -0.6878454089164734, + 0.45391517877578735, + -0.8986194133758545, + -0.6179986000061035, + 0.38995879888534546, + -1.543121576309204, + -0.3736369013786316, + 0.7325944900512695, + 0.1606704741716385, + 0.1802220344543457, + 0.12055987864732742, + 0.33288082480430603, + -0.10958827286958694, + 0.39906761050224304, + -0.45383670926094055, + -0.7132377028465271, + -0.5315554738044739, + 0.5152052640914917, + 0.1323889046907425, + -0.9815861582756042, + 0.7888328433036804, + -0.2792457938194275, + -0.8010979294776917, + 0.5024539828300476, + -0.7361526489257812, + 0.35094624757766724, + -0.6826602220535278, + -0.8457057476043701, + 2.452975034713745, + 1.8384150266647339, + -1.573983073234558, + -1.7372642755508423, + -0.8296285271644592, + 0.9981461763381958, + -0.4068804383277893, + 0.5425400137901306, + -0.3064458668231964, + 0.16600964963436127, + 0.5891270041465759, + -0.7028345465660095, + -0.8308908343315125, + 0.7084700465202332, + -0.3210565745830536, + 0.8515345454216003 + ] +} \ No newline at end of file diff --git a/docs/presets/core/TV.json b/docs/presets/core/TV.json new file mode 100644 index 0000000..2f60037 --- /dev/null +++ b/docs/presets/core/TV.json @@ -0,0 +1,240 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 1.0, + "mutation_scale": 0.3109999895095825, + "drag": 0.21799999475479126, + "strafe_power": 0.2240000069141388, + "sensor_angle": 0.44999998807907104, + "global_force_mult": 0.8080000281333923, + "sensor_distance": 1.0, + "trail_persistence": 0.9380000233650208, + "trail_diffusion": 1.0, + "hazard_rate": 0.007000000216066837 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 2, + "orientation_mix": 0.20000000298023224, + "boundary_conditions": 2, + "initial_conditions": 1, + "num_cohorts": 11, + "rule_seed": 0.7700012339228404 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 2.0058090686798096, + 1.3254951238632202, + -2.383983612060547, + 1.621467113494873, + -0.20380741357803345, + -0.9644530415534973, + -0.4776250720024109, + -0.5895876288414001, + 0.8816604614257812, + 0.38754525780677795, + -1.538420557975769, + 1.4541047811508179, + 0.13323521614074707, + 0.8640880584716797, + 1.2316771745681763, + -0.7430392503738403, + 0.0232215765863657, + -0.6609129309654236, + -0.6266880035400391, + 0.8437315225601196, + 1.207242488861084, + 0.9727073907852173, + -0.34009310603141785, + 0.12655039131641388, + -0.5901418924331665, + -0.441928505897522, + 0.5644032955169678, + 0.14014840126037598, + 0.7772883772850037, + 0.9221358299255371, + -0.026374392211437225, + 0.706885814666748, + 2.6291420459747314, + 2.9046099185943604, + 0.07814008742570877, + -1.53895902633667, + -1.2011001110076904, + 0.7453765869140625, + 0.3137178421020508, + -0.19585001468658447, + -0.5954500436782837, + 0.5991657376289368, + -0.8506117463111877, + -0.9064181447029114, + 0.7612756490707397, + -0.33943474292755127, + -0.16470977663993835, + -0.49205484986305237, + -0.682990550994873, + 0.5240815281867981, + -0.4365279972553253, + 0.22581805288791656, + -0.5766181349754333, + 1.1247432231903076, + 0.2676098942756653, + 0.6632397174835205, + -0.5462008118629456, + 0.05923872068524361, + -0.08660107851028442, + -0.7098156213760376, + -0.9376726150512695, + -0.05412650853395462, + -0.43112844228744507, + 0.18142545223236084, + -0.6399610042572021, + -0.4273906946182251, + -0.49262210726737976, + 0.6714775562286377, + -0.4431686997413635, + -0.21603432297706604, + 0.4683718681335449, + -0.3427976667881012, + -0.6613206267356873, + 0.6132037043571472, + -0.6465063691139221, + 0.880239725112915, + -0.8507751226425171, + -0.012731969356536865, + 0.428029328584671, + 0.06468112766742706 + ], + "notes": "Just as good as the real thing! Randomize mutation seed to 'change the channel'. (Default keybinding: press \"G\") " +} \ No newline at end of file diff --git a/docs/presets/core/Tadpole.json b/docs/presets/core/Tadpole.json new file mode 100644 index 0000000..1fd7ad6 --- /dev/null +++ b/docs/presets/core/Tadpole.json @@ -0,0 +1,239 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.16899999976158142, + "lateral_force": -0.7070000171661377, + "sensor_gain": 3.661529541015625, + "mutation_scale": 0.012000000104308128, + "drag": 0.30300000309944153, + "strafe_power": 0.12200000137090683, + "sensor_angle": 1.0, + "global_force_mult": 0.9096810221672058, + "sensor_distance": 1.8919999599456787, + "trail_persistence": 0.9909999966621399, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 1, + "initial_conditions": 0, + "num_cohorts": 64, + "rule_seed": 0.42 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.3959999978542328, + "color_by_cohort": false, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + -0.5687156319618225, + -0.019212355837225914, + -0.6291296482086182, + 1.0467994213104248, + -0.47275710105895996, + -0.2882027328014374, + -0.003995969891548157, + -0.5798956155776978, + 0.2227855622768402, + -0.9401910901069641, + 1.069818377494812, + -1.3625887632369995, + -0.6935809850692749, + 0.5710856318473816, + -0.983105480670929, + -0.69366455078125, + -0.8927759528160095, + 0.9821441769599915, + 0.12402746826410294, + 0.047941382974386215, + 0.6388659477233887, + -0.16573989391326904, + 0.022205322980880737, + -0.11264187097549438, + 2.8604576587677, + 2.23034405708313, + -0.5420015454292297, + -0.03417930752038956, + -0.885158121585846, + 0.08203853666782379, + 0.04322613775730133, + -1.018068552017212, + -0.8526624441146851, + 0.2654583156108856, + -0.5654355883598328, + -0.953521728515625, + -0.7508615255355835, + -1.0200400352478027, + -0.6693049669265747, + 0.5907139778137207, + -0.558128833770752, + -1.003287434577942, + -0.5638831853866577, + 0.3783856928348541, + -0.8313382863998413, + -0.08942519128322601, + -1.1664531230926514, + 0.257120817899704, + 0.5199418663978577, + -1.4210134744644165, + 0.603924572467804, + -0.9134316444396973, + -0.7814725637435913, + -0.885208010673523, + -0.8818115592002869, + -0.09846803545951843, + 0.9361667633056641, + -1.1216789484024048, + -1.1624441146850586, + 1.965901494026184, + -0.6635431051254272, + 0.7292540073394775, + 0.3835628926753998, + 0.7107999324798584, + 0.24753345549106598, + -1.1618223190307617, + -1.1342118978500366, + -0.410914808511734, + 0.6244849562644958, + 0.24566029012203217, + -0.7591726779937744, + -0.7641135454177856, + 2.323139190673828, + -0.9494490623474121, + -0.5612487196922302, + 0.04672682285308838, + -0.018319249153137207, + 0.0026612579822540283, + -0.7185051441192627, + 0.6256998777389526 + ] +} \ No newline at end of file diff --git a/docs/presets/core/Veins.json b/docs/presets/core/Veins.json new file mode 100644 index 0000000..a673a3e --- /dev/null +++ b/docs/presets/core/Veins.json @@ -0,0 +1,226 @@ +{ + "version": 7, + "physics": { + "axial_force": -0.8177437782287598, + "lateral_force": 1.531107783317566, + "sensor_gain": 0.9078231453895569, + "mutation_scale": 0.32600000500679016, + "drag": 0.5608117580413818, + "strafe_power": 0.07624772191047668, + "sensor_angle": -0.728590726852417, + "global_force_mult": 0.2850841283798218, + "sensor_distance": -1.0521172285079956, + "trail_persistence": 0.9819999933242798, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.531107783317566, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + -1.0521172285079956, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "boundary_conditions": 0, + "initial_conditions": 1, + "num_cohorts": 8, + "rule_seed": 0.29228493571281433, + "orientation_mix": 1.0 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 1.151353359222412, + 1.0184153318405151, + 1.157827615737915, + -0.11927471309900284, + 1.418188452720642, + -0.5800003409385681, + -1.1334673166275024, + 1.5076943635940552, + -0.8148168921470642, + 0.8890601992607117, + 0.7771922945976257, + 0.8767459988594055, + -0.4412537217140198, + 0.13649854063987732, + -0.3682264983654022, + -0.8189635276794434, + 3.5766801834106445, + 3.113884925842285, + 1.476556658744812, + 2.2932095527648926, + -2.4232563972473145, + 0.01846747100353241, + -0.1540985107421875, + 0.8174383640289307, + 1.1871684789657593, + 1.2869046926498413, + -0.9750646352767944, + -0.6413060426712036, + -0.18586017191410065, + 0.4966796338558197, + 0.024860471487045288, + 0.4035947918891907, + 1.392426609992981, + 1.0051649808883667, + 1.4332093000411987, + -0.8641541600227356, + -0.34493935108184814, + -1.217240571975708, + 0.011060446500778198, + -1.1007364988327026, + -0.5298953652381897, + 0.6574280261993408, + 0.5120542645454407, + -0.8212929964065552, + 0.966643750667572, + -2.3035309314727783, + 0.5831085443496704, + 0.6055876016616821, + -0.8335413336753845, + -0.9351246356964111, + -0.2467387467622757, + -0.2747800052165985, + 0.41582539677619934, + 1.032418131828308, + 1.3915684223175049, + -0.3765832483768463, + 0.3976888060569763, + -1.2039923667907715, + 0.06743588298559189, + 0.1540830135345459, + -0.004152089357376099, + -0.5749210119247437, + 1.0506117343902588, + -0.14410382509231567, + -0.10600219666957855, + -0.000926519394852221, + -0.7081452012062073, + -0.9980681538581848, + 0.6947017908096313, + -0.139384463429451, + 1.0821667909622192, + -1.2910594940185547, + 2.617424726486206, + 1.839587688446045, + -1.0751310586929321, + 2.1860389709472656, + -0.7894070744514465, + -1.4018723964691162, + 0.1559181660413742, + 0.02430066466331482 + ] +} \ No newline at end of file diff --git a/docs/presets/core/Wreath.json b/docs/presets/core/Wreath.json new file mode 100644 index 0000000..d8b3627 --- /dev/null +++ b/docs/presets/core/Wreath.json @@ -0,0 +1,226 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 4.8871307373046875, + "mutation_scale": 0.008999999612569809, + "drag": -0.3228692412376404, + "strafe_power": 0.20407265424728394, + "sensor_angle": 0.8160717487335205, + "global_force_mult": -0.3707774579524994, + "sensor_distance": 1.0, + "trail_persistence": 0.984000027179718, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + -0.3707774579524994, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "boundary_conditions": 1, + "initial_conditions": 2, + "num_cohorts": 36, + "rule_seed": 0.9004840850830078, + "orientation_mix": 1.0 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + -0.33967509865760803, + -0.4188750982284546, + 0.2786863446235657, + 0.7573131322860718, + 0.3347606062889099, + -0.6217454671859741, + 0.10351081192493439, + -0.3816167712211609, + -0.7922551035881042, + 0.870474636554718, + 0.30260297656059265, + 0.36775413155555725, + 0.3538398742675781, + 0.8950082063674927, + 0.6258067488670349, + -0.6057696342468262, + 0.5928220748901367, + 0.3592648208141327, + -0.4358600974082947, + 1.4911240339279175, + -0.7085703611373901, + -0.015007779002189636, + -0.880923867225647, + 0.5303869843482971, + -0.7412267923355103, + 1.0277730226516724, + -1.0679383277893066, + -0.08781953155994415, + -0.3891335129737854, + 0.04339352250099182, + 0.04884374514222145, + 0.6833065748214722, + 0.017522430047392845, + -0.8342196941375732, + -0.4082278609275818, + -0.1738988161087036, + 0.715833306312561, + -0.490119993686676, + -0.3777133524417877, + -0.23858138918876648, + 2.531334161758423, + 0.8645631670951843, + -0.060079190880060196, + -0.12093651294708252, + 0.1628890037536621, + -0.009356990456581116, + -0.35982996225357056, + -0.12460321187973022, + -0.06678225845098495, + -1.1091089248657227, + -0.6546632051467896, + 1.2665554285049438, + -0.48525846004486084, + -0.05938923358917236, + -0.453723281621933, + 0.3426112234592438, + 0.5652095675468445, + 0.4659399092197418, + 1.4577761888504028, + -0.28920450806617737, + -0.7361046075820923, + 0.5881294012069702, + 0.39055299758911133, + -0.8392434120178223, + 0.48222050070762634, + 1.6966853141784668, + -0.315633624792099, + 1.015781283378601, + -0.2932857871055603, + -0.7893275022506714, + 0.13201503455638885, + 0.27559715509414673, + -0.6684353351593018, + 0.1518058329820633, + 0.764444887638092, + -0.4463328719139099, + -0.9792826771736145, + 0.06276579946279526, + -0.36797672510147095, + 0.13360300660133362 + ] +} \ No newline at end of file diff --git a/docs/presets/core/Zipper.json b/docs/presets/core/Zipper.json new file mode 100644 index 0000000..39c8d61 --- /dev/null +++ b/docs/presets/core/Zipper.json @@ -0,0 +1,239 @@ +{ + "version": 7, + "physics": { + "axial_force": -0.8177437782287598, + "lateral_force": 1.531107783317566, + "sensor_gain": -0.10833899676799774, + "mutation_scale": -0.0, + "drag": 0.25172317028045654, + "strafe_power": -0.06524357199668884, + "sensor_angle": 0.5493626594543457, + "global_force_mult": 1.7744646072387695, + "sensor_distance": 0.6355574131011963, + "trail_persistence": 0.9879999756813049, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.531107783317566, + -1.0, + 1.0 + ], + "Sensor Gain": [ + -0.10833899676799774, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + -0.06524357199668884, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "HAZARD_RATE": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "orientation_mix": 1.0, + "boundary_conditions": 0, + "initial_conditions": 0, + "num_cohorts": 64, + "rule_seed": 0.42 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": false, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + -0.5982322096824646, + -0.7349532842636108, + -0.003975238185375929, + -0.8845033645629883, + 0.6245116591453552, + 0.11185863614082336, + -0.4321691393852234, + 0.4824192225933075, + 1.5102975368499756, + -0.38148197531700134, + -0.534827709197998, + -1.8816479444503784, + -0.7885998487472534, + -0.4654752016067505, + 0.3031598627567291, + 1.0035396814346313, + -0.41165050864219666, + 1.0825395584106445, + -1.1581135988235474, + -0.7904091477394104, + -0.4863359332084656, + -0.05937785282731056, + -0.2891945242881775, + 0.5337312817573547, + 2.3055784702301025, + -1.6439704895019531, + 0.43881499767303467, + -1.9701443910598755, + 0.3193802535533905, + 0.7322874069213867, + 0.5808846950531006, + -0.4821581542491913, + -0.2719165086746216, + -0.3649941384792328, + -1.1915838718414307, + 0.21518351137638092, + 0.8419345021247864, + 0.02852519601583481, + -0.1604989916086197, + 0.010981839150190353, + -0.33305343985557556, + -1.2313710451126099, + 0.5547576546669006, + -0.49785634875297546, + -0.380415678024292, + -0.6315397024154663, + 1.0587741136550903, + 0.36082205176353455, + 1.7563940286636353, + -1.1522307395935059, + 0.3497185707092285, + 1.6062133312225342, + -0.6436144113540649, + -0.6055201888084412, + 0.6736294031143188, + -0.5190730690956116, + 0.22310969233512878, + 1.2845937013626099, + 1.0724124908447266, + 1.5714844465255737, + 0.3505682349205017, + -0.22673043608665466, + 0.6814932823181152, + 0.1566402018070221, + 0.7403777837753296, + -0.022617226466536522, + -0.5974658727645874, + -1.5610368251800537, + -0.7348349094390869, + -0.8815715909004211, + 0.4595828354358673, + -0.14574548602104187, + 0.4483734667301178, + 1.3404704332351685, + 1.747036337852478, + 1.2052255868911743, + -0.030463943257927895, + 0.013277452439069748, + -0.090946726500988, + -0.44288569688796997 + ] +} \ No newline at end of file diff --git a/docs/presets/core/_Default.json b/docs/presets/core/_Default.json new file mode 100644 index 0000000..f914973 --- /dev/null +++ b/docs/presets/core/_Default.json @@ -0,0 +1,236 @@ +{ + "version": 7, + "physics": { + "axial_force": 0.3709999918937683, + "lateral_force": -0.7070000171661377, + "sensor_gain": 1.0, + "mutation_scale": 0.13699999451637268, + "drag": 0.5040000081062317, + "strafe_power": 0.2240000069141388, + "sensor_angle": 0.44999998807907104, + "global_force_mult": 0.39899998903274536, + "sensor_distance": 1.0, + "trail_persistence": 0.9380000233650208, + "trail_diffusion": 1.0, + "hazard_rate": 0.0 + }, + "slider_ranges": { + "Axial Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Lateral Force": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Sensor Gain": [ + 0.0, + 10.0, + 0.0, + 10.0 + ], + "Mutation Scale": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Drag": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Strafe Power": [ + 0.0, + 0.5, + 0.0, + 0.5 + ], + "Sensor Angle": [ + -1.0, + 1.0, + -1.0, + 1.0 + ], + "Global Force Mult": [ + 0.0, + 2.0, + 0.0, + 2.0 + ], + "Sensor Distance": [ + 0.0, + 3.0, + 0.0, + 3.0 + ], + "Trail Persistence": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Trail Diffusion": [ + 0.0, + 1.0, + 0.0, + 1.0 + ], + "Hazard Rate": [ + 0.0, + 0.05, + 0.0, + 0.05 + ] + }, + "sweeps": { + "x": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "x": 0.0 + }, + "y": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "y": 0.0 + }, + "cohort": { + "AXIAL_FORCE": 0.0, + "LATERAL_FORCE": 0.0, + "SENSOR_GAIN": 0.0, + "MUTATION_SCALE": 0.0, + "DRAG": 0.0, + "STRAFE_POWER": 0.0, + "SENSOR_ANGLE": 0.0, + "GLOBAL_FORCE_MULT": 0.0, + "SENSOR_DISTANCE": 0.0, + "TRAIL_PERSISTENCE": 0.0, + "TRAIL_DIFFUSION": 0.0, + "cohort": 0.0 + } + }, + "parameter_sweeps_enabled": false, + "settings": { + "disable_symmetry": false, + "absolute_orientation": 0, + "boundary_conditions": 0, + "initial_conditions": 0, + "num_cohorts": 64, + "rule_seed": 0.42, + "orientation_mix": 1.0 + }, + "appearance": { + "ink_weight": 1.0, + "hue_sensitivity": 0.5, + "color_by_cohort": true, + "watercolor_mode": false, + "emboss_mode": 0, + "emboss_intensity": 0.5, + "emboss_smoothness": 0.1 + }, + "rule": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] +} \ No newline at end of file diff --git a/src/App.svelte b/src/App.svelte index b76727f..ede3cad 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -9,13 +9,13 @@ // serializable params are reactive. import { onMount } from "svelte"; import { Engine } from "./engine/Engine"; - import { presetByName } from "./engine/presets"; import { organism } from "./state/organism.svelte"; import { view } from "./state/view.svelte"; import { substrateParams } from "./state/substrate.svelte"; - import { environment } from "./state/environment.svelte"; - import { genome, compileActive, setGenome } from "./state/genome.svelte"; + import { environment, boundaryCode } from "./state/environment.svelte"; + import { genome, activeRule, setGenome } from "./state/genome.svelte"; import { setSimPins, focusCandidate, prepareBreed, newLineage, loadOrganism } from "./state/breeder.svelte"; + import { seedCoreImports } from "./persistence/seedImports"; import { overview, loadOverview, overviewSpecs } from "./state/overview.svelte"; import { generation, @@ -40,14 +40,6 @@ let lastGenNonce = 0; let lastOverviewNonce = -1; - // The rule the focus sim renders: a selected built-in preset (Wild7/desktop creatures) bypasses - // the CPPN genome, exactly as the old Wild7-anchor toggle did. presetByName falls back to - // compiling the genome if the name is unknown (defensive — the picker only offers valid names). - function activeRule() { - const name = genome.presetName; - return name ? (presetByName(name)?.rule ?? compileActive()) : compileActive(); - } - onMount(() => { try { engine = new Engine(canvas, { @@ -57,6 +49,7 @@ }); engine.setDepositGain(organism.depositGain); engine.setWorldScale(Math.sqrt(environment.worldSize)); + engine.setBoundary(boundaryCode(environment.boundary)); engine.setExposure(view.exposure); engine.setDebug(view.debug); // Clear whichever view's "building" flag once the engine finishes warming its thumbnails. @@ -66,7 +59,9 @@ }); setSimPins(engine.config()); // saved records pin the engine's real repro settings engine.start(); - void loadOverview(); // home: the forest of every saved organism + // Seed the desktop Core library (idempotent) THEN load the forest, so the imports appear on + // first run. Both are async; chaining keeps the initial overview build from racing the seed. + void seedCoreImports().then(() => loadOverview()); (window as unknown as { __engine?: Engine }).__engine = engine; // dev hook } catch (e) { error = e instanceof Error ? e.message : String(e); @@ -93,11 +88,13 @@ const params = substrateParams(); const depositGain = organism.depositGain; const worldScale = Math.sqrt(environment.worldSize); + const boundary = boundaryCode(environment.boundary); const { exposure, debug } = view; if (!engine) return; engine.setParams(params); engine.setDepositGain(depositGain); engine.setWorldScale(worldScale); + engine.setBoundary(boundary); engine.setExposure(exposure); engine.setDebug(debug); }); @@ -118,7 +115,7 @@ const n = genome.nonce; const mode = view.mode; if (!engine || mode !== "focus") return; - if (n === lastGenomeNonce) return; // selectPreset bumps the nonce too, so this covers presets + if (n === lastGenomeNonce) return; // loadRuleGenome bumps too, so this covers sterile imports lastGenomeNonce = n; engine.setRule(activeRule()); engine.reset(); @@ -199,6 +196,8 @@ await loadOrganism(id); engine.setParams(substrateParams()); engine.setDepositGain(organism.depositGain); + engine.setWorldScale(Math.sqrt(environment.worldSize)); // imports load a different worldSize + engine.setBoundary(boundaryCode(environment.boundary)); // …and possibly a different boundary engine.setExposure(view.exposure); engine.setDebug(view.debug); } diff --git a/src/engine/Engine.ts b/src/engine/Engine.ts index f4f0270..5881cb8 100644 --- a/src/engine/Engine.ts +++ b/src/engine/Engine.ts @@ -40,6 +40,9 @@ export interface GenSpec { * ran at √0.40≈0.632. An environment property (one per world) — it rides per-spec only * because the grid/forest render many independent worlds, each pinning its own environment. */ worldScale: number; + /** Edge behaviour code (uBoundary): 0 bounce · 1 reset · 2 wrap. Like worldScale, an environment + * property carried per-spec so the grid/forest can render worlds with different boundaries. */ + boundary: number; /** Stable organism id (overview/DAG). Captured thumbnails are cached + reused under it, so * revisiting the forest only warms NEW organisms. Omit for transient breeder candidates. */ id?: string; @@ -122,6 +125,7 @@ export class Engine { private debug = false; // diagnostic display mode (red=NaN, blue=zero, log-mag otherwise) private depositGain = 30.0; // behavioral energy knob; sweep via setDepositGain() private worldScale = 1.0; // √(world_size); 1.0 = the v0 fixed frame. setWorldScale() / per-spec. + private boundary = 2; // edge mode (uBoundary): 2 = wrap (v0 default). setBoundary() / per-spec. private steps = 0; private running = false; private raf = 0; @@ -308,6 +312,11 @@ export class Engine { this.worldScale = s; } + /** Boundary mode (uBoundary code) for the single (focus) sim. Tiles set it per-spec in buildTile. */ + setBoundary(b: number) { + this.boundary = b; + } + /** * Diagnostics for the console (dev only). Deliberately no readPixels: it's blocked/ * randomized by Firefox's anti-fingerprinting, so the field can't be measured CPU-side — @@ -427,6 +436,7 @@ export class Engine { this.params = s.params; this.depositGain = s.depositGain; this.worldScale = s.worldScale; + this.boundary = s.boundary; this.reset(this.seed); // same seed for every candidate -> a fair comparison this.warmup(); this.captureThumb(i); @@ -517,6 +527,7 @@ export class Engine { gl.uniform1f(pp.loc("uAxialForce"), p.axialForce); gl.uniform1f(pp.loc("uLateralForce"), p.lateralForce); gl.uniform1f(pp.loc("uWorldScale"), this.worldScale); + gl.uniform1i(pp.loc("uBoundary"), this.boundary); gl.drawArrays(gl.TRIANGLES, 0, 3); this.particles.swap(); // particles.read is now the updated state diff --git a/src/engine/presets.ts b/src/engine/presets.ts deleted file mode 100644 index c451f00..0000000 --- a/src/engine/presets.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Built-in presets ported from the desktop Fluoddity app's physics-config library -// (physics_configs/Core/*.json). Each desktop config stores an 80-float legacy GPU rule plus -// the 12 desktop physics params; here we fold the rule to the 244-float generalized form -// (see foldGpuRule / docs/generalized_engine_spec.md) and map the params onto the 10 v0 -// dynamics knobs (docs/v0_normalization.md §5 — same meaning at world_size=1). -// -// These are NOT CPPN genomes — like the Wild7 anchor they're direct rules that bypass the -// genome layer, used to confirm the substrate faithfully runs the original creatures. - -import Wild7 from "../../docs/golden/Wild7-tweak3.json"; -import Butterflies from "../../docs/presets/core/Butterflies.json"; -import { foldGpuRule, toRule, type Rule } from "./rule"; -import type { SubstrateParams } from "./params"; - -// The slice of a desktop physics-config JSON we actually consume. The files carry much more -// (slider_ranges, sweeps, appearance, cohorts…) that v0 drops or fixes — see CLAUDE.md. -interface DesktopConfig { - physics: Record; - rule: number[]; -} - -export interface Preset { - name: string; - rule: Rule; - params: SubstrateParams; -} - -// The desktop keeps the legacy key `global_force_mult` (== forceGain); the rest map 1:1. -function paramsFromPhysics(p: Record): SubstrateParams { - return { - sensorGain: p.sensor_gain, - sensorAngle: p.sensor_angle, - sensorDistance: p.sensor_distance, - forceGain: p.global_force_mult, - drag: p.drag, - strafePower: p.strafe_power, - axialForce: p.axial_force, - lateralForce: p.lateral_force, - trailPersistence: p.trail_persistence, - trailDiffusion: p.trail_diffusion, - }; -} - -// A rule may be 80 floats (legacy desktop GPU rule → fold) or already 244 (generalized). -function ruleOf(cfg: DesktopConfig): Rule { - return cfg.rule.length === 80 ? foldGpuRule(cfg.rule) : toRule(cfg.rule); -} - -function preset(name: string, cfg: DesktopConfig): Preset { - return { name, rule: ruleOf(cfg), params: paramsFromPhysics(cfg.physics) }; -} - -export const PRESETS: Preset[] = [ - preset("Wild7 (anchor)", Wild7 as DesktopConfig), - preset("Butterflies", Butterflies as DesktopConfig), -]; - -export function presetByName(name: string): Preset | undefined { - return PRESETS.find((p) => p.name === name); -} diff --git a/src/engine/shaders/particle_update.frag b/src/engine/shaders/particle_update.frag index 1c81b06..ccd9ec8 100644 --- a/src/engine/shaders/particle_update.frag +++ b/src/engine/shaders/particle_update.frag @@ -26,6 +26,11 @@ uniform float uLateralForce; // uWorldScale=1.0 every term below reduces to the old hardcoded constant. uniform float uWorldScale; +// Boundary mode (mirrors desktop entity_update.glsl): 0 = bounce (reflect + flip velocity), +// 1 = reset, 2 = wrap. v0 historically hardcoded wrap. RESET IS NOT YET PORTED — it falls back +// to wrap here, so reset-mode imports render as wrap for now (see seedImports.ts). +uniform int uBoundary; + out vec4 outColor; const float PI = 3.14159265358979; @@ -106,7 +111,17 @@ void main() { vel = vel * uDrag + force; pos += vel; pos += strafe * uStrafePower; - pos = mod(pos + 1.0, 2.0) - 1.0; // v0 boundary = wrap, into [-1, 1] + + // Boundary. The world is [-1, 1]^2. Bounce reflects off the edges and flips the crossing + // velocity component (edgeflect is identity inside [-1,1], a single reflection just outside, + // matching desktop). Wrap (and reset, until ported) folds toroidally. + if (uBoundary == 0) { + if (abs(pos.x) > 1.0) vel.x = -vel.x; + if (abs(pos.y) > 1.0) vel.y = -vel.y; + pos = sign(pos) * (1.0 - abs(1.0 - abs(pos))); // edgeflect + } else { + pos = mod(pos + 1.0, 2.0) - 1.0; + } outColor = vec4(pos, vel); } diff --git a/src/persistence/LocalRepository.ts b/src/persistence/LocalRepository.ts index 73c127f..be21c66 100644 --- a/src/persistence/LocalRepository.ts +++ b/src/persistence/LocalRepository.ts @@ -57,6 +57,11 @@ export class LocalRepository implements Repository { return row?.record; } + async delete(id: string): Promise { + const store = await this.objectStore("readwrite"); + await idb(store.delete(id)); + } + async list(): Promise { const store = await this.objectStore("readonly"); const rows = (await idb(store.getAll())) as Row[]; diff --git a/src/persistence/MemoryRepository.ts b/src/persistence/MemoryRepository.ts index ec5a334..a7e6d7c 100644 --- a/src/persistence/MemoryRepository.ts +++ b/src/persistence/MemoryRepository.ts @@ -19,6 +19,10 @@ export class MemoryRepository implements Repository { return this.store.get(id); } + async delete(id: string): Promise { + this.store.delete(id); + } + async list(): Promise { return [...this.store.entries()].map(([id, record]) => ({ id, record })); } diff --git a/src/persistence/Repository.ts b/src/persistence/Repository.ts index f3f34d1..09997d0 100644 --- a/src/persistence/Repository.ts +++ b/src/persistence/Repository.ts @@ -16,6 +16,9 @@ export interface Repository { /** Persist a record; returns its freshly assigned id. */ save(record: OrganismRecord): Promise; get(id: string): Promise; + /** Remove a record by id. Used to refresh regenerable built-in imports (which, being sterile, + * are never anyone's parent, so deletion can't orphan a lineage). */ + delete(id: string): Promise; list(): Promise; /** Records that name `id` among their parents (one step down the DAG). */ children(id: string): Promise; diff --git a/src/persistence/record.ts b/src/persistence/record.ts index c426de6..9293829 100644 --- a/src/persistence/record.ts +++ b/src/persistence/record.ts @@ -35,18 +35,28 @@ export interface Morphology { dragCoefficient: number; // default 1.0; the agent half of Stokes drag (medium half is environment.drag) } -/** The heritable organism. cppn is truth; the compiled 244-float rule is a cache (see rule?). */ +/** + * The heritable organism. Two flavours, distinguished by whether `cppn` is present: + * - bred organism : `cppn` is truth; the record's 244-float `rule` is a regenerable cache. + * - sterile import: no `cppn` (the desktop Core creatures have no genome); the record's `rule` + * is then CANONICAL — there's nothing to recompile it from. Such organisms can't mutate/breed. + * See `isSterile`. + */ export interface Genome { - cppn: CppnDict; + cppn?: CppnDict; morphology: Morphology; } +/** Edge behaviour for the [-1,1]^2 world (mirrors desktop boundary_conditions). `reset` is stored + * but not yet rendered — the engine falls back to wrap for it (see particle_update.frag). */ +export type Boundary = "wrap" | "bounce" | "reset"; + /** The shared substrate — one per world; multiple organisms reference/share it. */ export interface Environment { trailPersistence: number; trailDiffusion: number; drag: number; // medium-viscosity baseline (the μ half of Stokes drag) - boundary: "wrap"; // reserved: "bounce" | "reset" + boundary: Boundary; worldSize: number; // 1 in v0 } @@ -85,11 +95,21 @@ export interface OrganismRecord { environment: Environment; sim: SimPins; view?: ViewSettings; - rule?: number[]; // 244-float compile cache — regenerable from genome.cppn, stored for fast load/feeds + // 244-float rule. A compile cache when genome.cppn is present (regenerable); CANONICAL when it's + // absent (a sterile import — see Genome). Either way the engine renders this directly. + rule?: number[]; + // Stable provenance key for idempotent seeding of built-in imports (e.g. "core/Butterflies"). + // Absent on user-bred organisms. Survives renames, so the seeder dedupes on this, not the id. + importKey?: string; +} + +/** A sterile organism has no CPPN: it can't mutate, breed, or be saved as a continuation. */ +export function isSterile(record: OrganismRecord): boolean { + return !record.genome.cppn; } export interface RecordParts { - cppn: CppnDict; + cppn?: CppnDict; // omitted for sterile imports (rule is then canonical) morphology: Morphology; environment: Environment; sim: SimPins; @@ -99,6 +119,7 @@ export interface RecordParts { origin: Origin; depth: number; name?: string; + importKey?: string; } export function buildOrganismRecord(p: RecordParts): OrganismRecord { @@ -110,10 +131,11 @@ export function buildOrganismRecord(p: RecordParts): OrganismRecord { parents: p.parents, origin: p.origin, depth: p.depth, - genome: { cppn: p.cppn, morphology: p.morphology }, + genome: p.cppn ? { cppn: p.cppn, morphology: p.morphology } : { morphology: p.morphology }, environment: p.environment, sim: p.sim, view: p.view, rule: p.rule, + importKey: p.importKey, }; } diff --git a/src/persistence/seedImports.ts b/src/persistence/seedImports.ts new file mode 100644 index 0000000..6b53669 --- /dev/null +++ b/src/persistence/seedImports.ts @@ -0,0 +1,138 @@ +// Seed the desktop Fluoddity "Core" creature library into the local store as regular organisms. +// +// These were previously special-cased "presets" (a built-in rule that bypassed the genome). Now +// they're just ordinary records — sterile root organisms with a canonical 244-float `rule` and no +// CPPN (the desktop creatures have no genome). They appear in the forest, open in focus for +// inspection, and carry their own environment + morphology like anything else; they simply can't +// mutate or breed (see isSterile / docs/v0_normalization.md). +// +// The desktop configs (docs/presets/core/*.json) store an 80-float legacy GPU rule + 12 physics +// params. We fold the rule to the generalized 244-float form (foldGpuRule) and map the params onto +// the v0 dynamics knobs. Seeding is idempotent: each record carries a stable `importKey`, and we +// insert only the keys not already present — so a refresh never duplicates, and a renamed import +// is still recognized. + +import { repo } from "./repo"; +import { + buildOrganismRecord, + RENDER_STEPS, + type Boundary, + type Environment, + type Morphology, + type OrganismRecord, + type SimPins, +} from "./record"; +import { foldGpuRule } from "../engine/rule"; + +// The slice of a desktop physics-config we consume; the files carry much more (slider_ranges, +// sweeps, appearance, cohorts…) that v0 drops or fixes — see CLAUDE.md. +interface DesktopConfig { + physics: Record; + rule: number[]; + settings?: { boundary_conditions?: number }; +} + +// Desktop entity_update.glsl: boundary_conditions 0/1/2 == BOUNCE/RESET/WRAP. (reset renders as +// wrap for now — not yet ported — but we still store the true mode so it's faithful once it lands.) +const BOUNDARY_FROM_DESKTOP: Record = { 0: "bounce", 1: "reset", 2: "wrap" }; + +// All Core configs, eagerly bundled. Keyed by module path; `import: "default"` yields the parsed +// JSON object directly. Adding a file to docs/presets/core/ adds an import with zero code change. +const CONFIGS = import.meta.glob("../../docs/presets/core/*.json", { + eager: true, + import: "default", +}); + +// depositGain has no desktop analog (brush.frag has no gain term); it compensates for the web's +// particle-density/field-resolution normalization. 5 is the empirically "decent" working point — +// a per-organism gene the user can retune later (exact-match calibration is deferred). +const IMPORT_DEPOSIT_GAIN = 5; +// Desktop's global default world_size (preferences_state.py); not stored per-config. +const IMPORT_WORLD_SIZE = 0.4; + +function morphologyFromPhysics(p: Record): Morphology { + return { + sensorGain: p.sensor_gain, + sensorAngle: p.sensor_angle, + sensorDistance: p.sensor_distance, + strafePower: p.strafe_power, + axialForce: p.axial_force, + lateralForce: p.lateral_force, + forceGain: p.global_force_mult, // desktop's legacy key for forceGain + depositGain: IMPORT_DEPOSIT_GAIN, + dragCoefficient: 1.0, + }; +} + +function environmentFromConfig(cfg: DesktopConfig): Environment { + const p = cfg.physics; + return { + trailPersistence: p.trail_persistence, + trailDiffusion: p.trail_diffusion, + drag: p.drag, + boundary: BOUNDARY_FROM_DESKTOP[cfg.settings?.boundary_conditions ?? 2] ?? "wrap", + worldSize: IMPORT_WORLD_SIZE, + }; +} + +function importSim(): SimPins { + return { seed: 1, warmup: 80, steps: RENDER_STEPS, fieldRes: 1024, particleCount: 512 * 512, init: "uniform" }; +} + +/** base name from a config path: "../../docs/presets/core/Butterflies.json" -> "Butterflies". */ +function baseName(path: string): string { + return path.slice(path.lastIndexOf("/") + 1).replace(/\.json$/, ""); +} + +interface Importable { + key: string; + record: OrganismRecord; +} + +/** Build a sterile root record for every bundled Core config. */ +function buildImportRecords(): Importable[] { + return Object.entries(CONFIGS) + .map(([path, cfg]) => { + const base = baseName(path); + const key = `core/${base}`; + const record = buildOrganismRecord({ + // no cppn -> sterile; the folded rule is canonical + morphology: morphologyFromPhysics(cfg.physics), + environment: environmentFromConfig(cfg), + sim: importSim(), + rule: Array.from(foldGpuRule(cfg.rule)), + parents: [], + origin: "root", + depth: 0, + name: base.replace(/^_/, ""), // "_Default" -> "Default" + importKey: key, + }); + return { key, record }; + }) + .sort((a, b) => a.record.name!.localeCompare(b.record.name!)); +} + +/** The content that defines an import's phenotype — what we compare to decide if a stored import is + * stale. Excludes id/createdAt (which always differ) so an unchanged import keeps its id across + * launches (and so its cached forest thumbnail). */ +function importSignature(r: OrganismRecord): string { + return JSON.stringify({ rule: r.rule, env: r.environment, morph: r.genome.morphology }); +} + +/** + * Seed/refresh the Core imports. Idempotent AND self-healing: for each desired import we keep the + * stored copy if its content matches; otherwise we delete the stale copy (or copies) and insert the + * fresh one. So changing the import logic — e.g. adding the real boundary mode — silently updates + * the existing records on next launch, with no migration and no manual DB clear. Safe because + * imports are sterile, hence never anyone's parent: deleting one can't orphan a lineage. + */ +export async function seedCoreImports(): Promise { + const all = await repo.list(); + for (const { key, record } of buildImportRecords()) { + const matches = all.filter((s) => s.record.importKey === key); + const upToDate = matches.length === 1 && importSignature(matches[0].record) === importSignature(record); + if (upToDate) continue; + for (const s of matches) await repo.delete(s.id); // remove stale (or duplicate) copies + await repo.save(record); + } +} diff --git a/src/state/breeder.svelte.ts b/src/state/breeder.svelte.ts index 6b8021a..f65a3e9 100644 --- a/src/state/breeder.svelte.ts +++ b/src/state/breeder.svelte.ts @@ -31,14 +31,14 @@ import type { Morph } from "../evolution/morph"; import { organism } from "./organism.svelte"; import { environment } from "./environment.svelte"; import { view } from "./view.svelte"; -import { activeGenome, compileActive, setGenome } from "./genome.svelte"; +import { activeGenome, compileActive, setGenome, loadRuleGenome } from "./genome.svelte"; /** A provisional lineage node: an organism we know about but may not have persisted yet. It holds * a full record snapshot minus real parent ids — `provParents` point at other ledger nodes, and * `savedId`/`savedDepth` are filled in once it's flushed to the repo. */ interface LineageNode { provId: string; - cppn: CppnDict; + cppn?: CppnDict; // absent for a loaded sterile import (never re-flushed: savedId is set) morphology: Morphology; environment: Environment; view: ViewSettings; @@ -102,7 +102,7 @@ function environmentNow(): Environment { trailPersistence: environment.trailPersistence, trailDiffusion: environment.trailDiffusion, drag: environment.drag, - boundary: "wrap", + boundary: environment.boundary, worldSize: environment.worldSize, }; } @@ -375,11 +375,14 @@ function applyRecord(r: OrganismRecord): void { trailDiffusion: e.trailDiffusion, drag: e.drag, worldSize: e.worldSize ?? 1, // legacy records lacking it rendered at the old fixed ws=1 + boundary: e.boundary ?? "wrap", // legacy records were all wrap }); if (r.view) view.exposure = r.view.exposure; - // setGenome bumps the genome nonce -> App recompiles the rule and restarts the sim. The cached - // record.rule is intentionally ignored: recompiling from the cppn is canonical and consistent. - setGenome(r.genome.cppn); + // Both paths bump the genome nonce -> App reselects the rule and restarts the sim. + // - bred organism : recompile from the cppn (canonical; the cached record.rule is ignored). + // - sterile import: no cppn, so the record's `rule` IS canonical — render it directly. + if (r.genome.cppn) setGenome(r.genome.cppn); + else loadRuleGenome(r.rule ?? []); } // Populate the saved list from the persisted store on startup (fire-and-forget; the list updates diff --git a/src/state/environment.svelte.ts b/src/state/environment.svelte.ts index 9843f10..aa0a818 100644 --- a/src/state/environment.svelte.ts +++ b/src/state/environment.svelte.ts @@ -1,8 +1,9 @@ // Live ENVIRONMENT (substrate / "dish") state — the knobs shared by every organism in a world. // trailPersistence + trailDiffusion act on the shared field, not per-particle; drag is the medium- // viscosity baseline (the μ half of Stokes drag; the organism's dragCoefficient is the other half). -// boundary (wrap) is fixed in v0; worldSize is now a live knob (engine derives worldScale=√ws). +// boundary picks the edge behaviour; worldSize is a live knob (engine derives worldScale=√ws). +import type { Boundary } from "../persistence/record"; import { WILD7_PARAMS } from "../engine/golden"; export const ENVIRONMENT_DEFAULTS = { @@ -13,6 +14,14 @@ export const ENVIRONMENT_DEFAULTS = { // faithful 0.40 (engine derives worldScale=√worldSize). Existing saved records pin their own // worldSize (all 1.0), so they keep rendering unchanged — see [[worldsize-faithfulness]]. worldSize: 0.4, + boundary: "wrap" as Boundary, }; export const environment = $state({ ...ENVIRONMENT_DEFAULTS }); + +// Engine encoding for the boundary mode, mirroring desktop entity_update.glsl. The engine consumes +// the int (uBoundary uniform); the string union is the schema/UI vocabulary. One mapping, here. +const BOUNDARY_CODE: Record = { bounce: 0, reset: 1, wrap: 2 }; +export function boundaryCode(b: Boundary): number { + return BOUNDARY_CODE[b]; +} diff --git a/src/state/generation.svelte.ts b/src/state/generation.svelte.ts index c4530c6..f828e19 100644 --- a/src/state/generation.svelte.ts +++ b/src/state/generation.svelte.ts @@ -16,7 +16,7 @@ import type { Rule } from "../engine/rule"; import type { SubstrateParams } from "../engine/params"; import type { GenSpec } from "../engine/Engine"; import { activeGenome } from "./genome.svelte"; -import { environment } from "./environment.svelte"; +import { environment, boundaryCode } from "./environment.svelte"; import { organism } from "./organism.svelte"; const SIZE = 9; @@ -97,11 +97,13 @@ export function memberMorph(i: number): Morph { * AND morphology). The engine already takes per-tile params, so this needs no engine change. */ export function generationSpecs(): { specs: GenSpec[]; cols: number } { const worldScale = Math.sqrt(environment.worldSize); // shared dish -> same for every candidate + const boundary = boundaryCode(environment.boundary); const specs = memberRules.map((rule, i) => ({ rule, params: paramsFrom(memberMorphs[i]), depositGain: memberMorphs[i].depositGain, worldScale, + boundary, })); return { specs, cols: COLS }; } diff --git a/src/state/genome.svelte.ts b/src/state/genome.svelte.ts index 3fa6a08..a00d47e 100644 --- a/src/state/genome.svelte.ts +++ b/src/state/genome.svelte.ts @@ -9,12 +9,16 @@ import { CPPN, type CppnDict } from "../genome/cppn"; import { Rng } from "../genome/rng"; import { compileGenome, type CompileOptions } from "../genome/compile"; import { freshGenome } from "../evolution/spawn"; -import type { Rule } from "../engine/rule"; +import { toRule, type Rule } from "../engine/rule"; const COMPILE_OPTS: CompileOptions = {}; // defaults (see compile.ts) let current = freshGenome(1); let lineageSeed = 1; +// Non-reactive held rule for a sterile (CPPN-less) organism — a desktop Core import loaded into +// focus. When set, it's rendered directly and `current` (a stale CPPN) is ignored; cleared by any +// CPPN transition (see bump()). Kept out of $state like every other rule/GL object. +let loadedRule: Rule | null = null; export const genome = $state({ nonce: 0, // bump on any genome change -> orchestrator recompiles + restarts the sim @@ -23,19 +27,31 @@ export const genome = $state({ hidden: 0, // hidden-node count connections: 0, // enabled-connection count fitError: 0, // last compile relative-L2 error (0 = perfect, 1 = captured nothing) - presetName: null as string | null, // when set, bypass the genome and render a built-in preset + sterile: false, // true when rendering a CPPN-less import: no mutate/breed/save (loadedRule is set) }); /** * Bump the genome nonce so the orchestrator reselects the rule + restarts the sim, WITHOUT * recounting CPPN stats (cf. the private `bump()`). Used when switching the rendered rule away - * from the live genome — e.g. selecting a built-in preset — where hidden/connection counts are + * from the live genome — e.g. loading a sterile import — where hidden/connection counts are * dimmed and irrelevant. Keeps the "each module owns its own nonce" convention. */ export function bumpGenome() { genome.nonce++; } +/** The rule the focus sim should render: a loaded sterile rule, else the compiled live genome. */ +export function activeRule(): Rule { + return loadedRule ?? compileActive(); +} + +/** Load a sterile (CPPN-less) organism's canonical 244-float rule for direct rendering. */ +export function loadRuleGenome(rule: number[]): void { + loadedRule = toRule(rule); + genome.sterile = true; + bumpGenome(); +} + function syncStats() { const [h, c] = current.complexity(); genome.hidden = h; @@ -56,6 +72,8 @@ export function compileActive(): Rule { } function bump() { + loadedRule = null; // a CPPN transition: leave the sterile-import rendering path + genome.sterile = false; syncStats(); genome.nonce++; } diff --git a/src/state/overview.svelte.ts b/src/state/overview.svelte.ts index 0ceb1ed..3339405 100644 --- a/src/state/overview.svelte.ts +++ b/src/state/overview.svelte.ts @@ -10,11 +10,12 @@ import { repo } from "../persistence/repo"; import type { OrganismRecord, Origin } from "../persistence/record"; -import { CPPN, type CppnDict } from "../genome/cppn"; +import { CPPN } from "../genome/cppn"; import { compileGenome } from "../genome/compile"; import type { GenSpec } from "../engine/Engine"; import type { SubstrateParams } from "../engine/params"; -import type { Rule } from "../engine/rule"; +import { toRule, type Rule } from "../engine/rule"; +import { boundaryCode } from "./environment.svelte"; /** A laid-out node. `gridX`/`gridY` are abstract units (column, row); the UI scales them to pixels * and applies pan/zoom, so layout stays independent of the viewport. */ @@ -35,11 +36,14 @@ let specs: GenSpec[] = []; // the forest with cached thumbnails compiles nothing and is effectively instant. const ruleCache = new Map(); -function ruleThunk(id: string, cppn: CppnDict): () => Rule { +function ruleThunk(id: string, record: OrganismRecord): () => Rule { return () => { let r = ruleCache.get(id); if (!r) { - r = compileGenome(CPPN.fromJSON(cppn)).rule; + // Bred organism -> compile the CPPN (the expensive Fourier fit). Sterile import -> its `rule` + // is canonical, so use it directly (no genome to compile). + const cppn = record.genome.cppn; + r = cppn ? compileGenome(CPPN.fromJSON(cppn)).rule : toRule(record.rule ?? []); ruleCache.set(id, r); } return r; @@ -136,12 +140,13 @@ export async function loadOverview(): Promise { // cached organism's CPPN is never (re)compiled. specs = all.map(({ id, record }) => ({ id, - rule: ruleThunk(id, record.genome.cppn), + rule: ruleThunk(id, record), params: paramsFromRecord(record), depositGain: record.genome.morphology.depositGain, // Each record pins its own worldSize; legacy records lacking it rendered at the old fixed // ws=1, so default missing -> 1.0 (not the new 0.4 live default). worldScale: Math.sqrt(record.environment.worldSize ?? 1), + boundary: boundaryCode(record.environment.boundary ?? "wrap"), // legacy records were wrap })); overview.nodes = nodes; diff --git a/src/state/preset.svelte.ts b/src/state/preset.svelte.ts deleted file mode 100644 index 3c17aae..0000000 --- a/src/state/preset.svelte.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Built-in preset selection. A preset (Wild7, the ported desktop creatures) is a direct rule + -// dynamics params that bypass the CPPN genome — the focus view's "render this exact creature" -// path, generalizing the old Wild7-anchor toggle. Selecting one loads its params into the live -// organism/environment stores (so the sliders reflect it and stay editable) and bumps the genome -// nonce so the orchestrator reselects the rule and restarts the sim. - -import { genome, bumpGenome } from "./genome.svelte"; -import { organism } from "./organism.svelte"; -import { environment } from "./environment.svelte"; -import { presetByName } from "../engine/presets"; - -export function selectPreset(name: string | null) { - genome.presetName = name; - if (name) { - const p = presetByName(name); - if (p) { - const q = p.params; - organism.sensorGain = q.sensorGain; - organism.sensorAngle = q.sensorAngle; - organism.sensorDistance = q.sensorDistance; - organism.forceGain = q.forceGain; - organism.strafePower = q.strafePower; - organism.axialForce = q.axialForce; - organism.lateralForce = q.lateralForce; - environment.drag = q.drag; - environment.trailPersistence = q.trailPersistence; - environment.trailDiffusion = q.trailDiffusion; - } - } - bumpGenome(); -} diff --git a/src/ui/BreederGrid.svelte b/src/ui/BreederGrid.svelte index 7a4f23f..a0daf25 100644 --- a/src/ui/BreederGrid.svelte +++ b/src/ui/BreederGrid.svelte @@ -7,6 +7,7 @@ // All behaviour is delegated to App via callbacks (App owns the imperative Engine). import { view } from "../state/view.svelte"; import { generation } from "../state/generation.svelte"; + import { genome } from "../state/genome.svelte"; let { onHover, @@ -67,7 +68,11 @@ {/if} - + {#if genome.sterile} + sterile import — can't breed + {:else} + + {/if} {/if} @@ -139,6 +144,10 @@ backdrop-filter: blur(6px); } .spacer { flex: 1; } + .sterilenote { + font: 11px/1.2 ui-monospace, monospace; color: #e8d7a0; + padding: 0.4rem 0.6rem; opacity: 0.85; + } .navbtn { font: 12px/1.2 ui-monospace, monospace; color: #ddd; diff --git a/src/ui/Controls.svelte b/src/ui/Controls.svelte index 5fae1dc..ac14b15 100644 --- a/src/ui/Controls.svelte +++ b/src/ui/Controls.svelte @@ -7,7 +7,10 @@ import { view, VIEW_DEFAULTS } from "../state/view.svelte"; import { MORPH_PARAMS } from "../evolution/morph"; - type Slider = { key: keyof T; label: string; min: number; max: number; step?: number }; + // Only number-valued keys are sliderable — excludes e.g. environment.boundary (a string union, + // which has its own + + + + +
View — display only
+ {#if genome.sterile} +

Imported creature — rule-only, no genome. Sterile: can't mutate or breed.

+ {/if} -
+
generation{genome.generation}
seed{genome.seed}
hidden nodes{genome.hidden}
@@ -51,9 +36,9 @@
- - - + + +

Mutate and watch — each step recompiles the rule and restarts the sim.

@@ -75,12 +60,10 @@ } .title { font-size: 12px; opacity: 0.7; margin-bottom: 0.5rem; } .row { display: flex; align-items: center; gap: 0.5rem; margin: 0.25rem 0; } - .pick { gap: 0.5rem; margin-bottom: 0.5rem; } - .pick span { opacity: 0.7; flex: 0 0 auto; } - .pick select { - flex: 1; min-width: 0; padding: 0.2rem; font: inherit; color: #ddd; cursor: pointer; - background: rgba(255, 255, 255, 0.08); - border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 5px; + .sterile { + margin: 0 0 0.5rem; padding: 0.35rem 0.45rem; font-size: 10px; line-height: 1.35; + color: #e8d7a0; background: rgba(200, 160, 60, 0.12); + border: 1px solid rgba(200, 160, 60, 0.3); border-radius: 5px; } .stats { margin: 0.4rem 0; } .stats.dim { opacity: 0.4; } diff --git a/src/ui/LineagePanel.svelte b/src/ui/LineagePanel.svelte index 4b10259..e6532b4 100644 --- a/src/ui/LineagePanel.svelte +++ b/src/ui/LineagePanel.svelte @@ -3,6 +3,7 @@ // as a child of the current lineage context; click a saved organism to load it and continue // breeding from there. Logic lives in state/breeder.svelte.ts. import { breeder, saveCurrent, loadOrganism, currentRecord, importRecord, lineageContext } from "../state/breeder.svelte"; + import { genome } from "../state/genome.svelte"; import type { OrganismRecord } from "../persistence/record"; let name = $state(""); @@ -102,13 +103,17 @@
{/if} + {#if genome.sterile} +
imported creature — read-only (sterile)
+ {/if} +
- - + +
- +
@@ -174,7 +179,8 @@ .saverow button { padding: 0.3rem 0.6rem; } .iorow { margin-bottom: 0.5rem; } .iorow button { flex: 1; padding: 0.3rem; } - button:hover { background: rgba(255, 255, 255, 0.15); } + button:hover:not(:disabled) { background: rgba(255, 255, 255, 0.15); } + button:disabled, .nameinput:disabled { opacity: 0.4; cursor: default; } .list { overflow-y: auto; display: flex; flex-direction: column; gap: 0.15rem; } .empty { padding: 0.3rem 0; } .item {