# SciArtSeptember2023_Tale

# GrassClanTales

For the 29th prompt of SciArtSeptember2023: **Tale**, “**GrassClanTales”** takes **Hydra, Locomotion & SonicPi** code to tell the story of the GlassClan and their time in Zenthian.

## Poetry

```ocaml
Grass Clan
Tales for Generations
Tales of Excursions
Tales of Trees
Trees That Transform
Never Confirmed
Tales of Scenes
That the Clan Had a Hand
```

## Video

<iframe width="560" height="315" src="https://www.youtube.com/embed/VcJsaf6yQ-0?si=LPbNLU3IOW-m-a5r"></iframe>

## Code

### Locomotion

```haskell
--fall trust other trio
dancer{ url = "leafy.glb", animation = 1, dur = 2, z = 0, x = -2, y = -3,rx = 360, x = osc 0.5,lx = range -10 10 (osc 0.5) }; -- range allows for opposite directions
dancer{ url = "leafy.glb", animation = 1, dur = 2, z = 2, x = -2, y = -3,rx = 360, x = osc 0.5,lx = range -10 10 (osc 0.5) }; -- range allows for opposite directions
dancer{ url = "leafy.glb", animation = 1, dur = 2, z = 4, x = -2, y = -3,rx = 360, x = osc 0.5,lx = range -10 10 (osc 0.5) }; -- range allows for opposite directions


--fall trust trio
dancer{ url = "leafy.glb",size = 2, animation = 3, dur = osc 0.5, z = 0, x = -2, y = -3,rx = 360, x = osc 0.5,lx = range 10 -10 (osc 0.5) };
dancer{ url = "leafy.glb",size = 2, animation = 5, dur = osc 2.5, z = 2, x = -2, y = -3,rx = 360, x = osc 0.5,lx = range 10 -10 (osc 0.5) };
dancer{ url = "leafy.glb",size = 2, animation = 5, dur = osc 2.5, z = 4, x = -2, y = -3,rx = 360, x = osc 0.5,lx = range 10 -10 (osc 0.5) };


--fighting the fall
dancer{ url = "leafy.glb", animation = 2, dur = 2, z = range 4 - 4 (osc 3), x = -2, y = range 10 -10 (osc 0.5),rx = 360, x = osc 0.5,lz = range 10 -10 (osc 0.5) };
dancer{ url = "leafy.glb", animation = 2, dur = 2, z = range 4 - 4 (osc 3), x = 2, y = range 4 -4 (osc 0.5),rx = 360, x = osc 0.5,lz = range 10 -10 (osc 0.5) };
```

### SonicPi

```ruby
live_loop :arrangement1 do
  use_bpm 50
  use_synth [:fm,:prophet,:pretty_bell].choose
  
  with_fx :ixi_techno do
    play chord([:c4,:f4].choose, :major,decay: 3)
    play_pattern_timed chord(:c5, :major), 0.25
    sleep [1,0.5, 0.25].choose
  end
  
  with_fx :krush, mix: 0.2 do
    play chord([:g3,:a3].tick, :major)
    play_pattern_timed chord([:g4,:f4].choose, :major), 0.25
    sleep [1,0.5, 0.25].choose
  end
  
  with_fx :ixi_techno do
    play chord([:a3,:g3].choose, :minor)
    play_pattern_timed chord(:a4, :minor), 0.25
    sleep [1,0.5,0.25].tick
  end
  
  with_fx :krush, mix: 0.1 do
    play chord(:f3, :major)
    play_pattern_timed chord(:f4, :major), 0.25
    sleep [0.25,0.5,1].tick
  end
  
end

live_loop :arrangement2 do
  use_bpm 50
  use_synth [:fm,:prophet,:pretty_bell].choose
  
  with_fx :ixi_techno do
    play chord([:c4,:f4].choose, :major,decay: 3)
    play_pattern_timed chord(:c5, :major), 0.25
    sleep [1,0.5, 0.25].choose
  end
  
  with_fx :krush, mix: 0.2 do
    play chord([:g3,:a3].tick, :major)
    play_pattern_timed chord([:g4,:f4].choose, :major), 0.25
    sleep [1,0.5, 0.25].choose
  end
  
  with_fx :ixi_techno do
    play chord([:a3,:g3].choose, :minor)
    play_pattern_timed chord(:a4, :minor), 0.25
    sleep [1,0.5,0.25].tick
  end
  
  with_fx :krush, mix: 0.1 do
    play chord(:f3, :major)
    play_pattern_timed chord(:f4, :major), 0.25
    sleep [0.25,0.5,1].tick
  end
  
end

live_loop :arrangement3 do
  use_bpm 50
  use_synth [:fm,:prophet,:pretty_bell].choose
  
  with_fx :ixi_techno do
    play chord([:c4,:f4].choose, :major,decay: 3)
    play_pattern_timed chord(:c5, :major), 0.25
    sleep [1,0.5, 0.25].choose
  end
  
  with_fx :krush, mix: 0.2 do
    play chord([:g3,:a3].tick, :major)
    play_pattern_timed chord([:g4,:f4].choose, :major), 0.25
    sleep [1,0.5, 0.25].choose
  end
  
  with_fx :ixi_techno do
    play chord([:a3,:g3].choose, :minor)
    play_pattern_timed chord(:a4, :minor), 0.25
    sleep [1,0.5,0.25].tick
  end
  
  with_fx :krush, mix: 0.1 do
    play chord(:f3, :major)
    play_pattern_timed chord(:f4, :major), 0.25
    sleep [0.25,0.5,1].tick
  end
  
end
```

### Hydra

```javascript
s0.initScreen()

src(s0).blend(src(s0).kaleid(2).scale([0.25,0.5,1,2,3])).
diff(src(s0).scale(2.5).brightness(0.6).rotate(()=> (time % 10 + 1)/12)).out()
```
