{
 "pack": 1,
 "id": "c4c:beh:cycle_walk",
 "type": "behaviour",
 "version": "1.0.0",
 "name": "Walk (in place)",
 "description": "Walks in place, the stride fitted to the speed so the feet do not slide: the walk of the game cycles. Played backwards it backs away.",
 "author": {
  "id": "c4c",
  "name": "Crafts4Class"
 },
 "license": "c4c-free",
 "remixable": true,
 "derived_from": [],
 "preview": {
  "moves": [
   "cycle_walk"
  ],
  "seconds": 3
 },
 "content_hash": "sha256:de4b62361bd0a34516494c6be14c4eaaa7bc77ecade84faadcca294fe6b5aec0",
 "content": {
  "v": 1,
  "kind": "behaviour",
  "name": "cycle_walk",
  "params": {
   "speed": 0.75,
   "h": 540,
   "leg": 0.24,
   "every": "=clamp(0.95 - 0.45*speed, 0.45, 0.85)",
   "stride": "=57.29578*((clamp(speed*every/(4*leg), 0, 0.6)) + pow(clamp(speed*every/(4*leg), 0, 0.6), 3)/6 + 3*pow(clamp(speed*every/(4*leg), 0, 0.6), 5)/40)",
   "give": 0,
   "bend": "=clamp(30 + 14*speed, 34, 50)",
   "feet": 0.5
  },
  "scripts": [
   {
    "hat": {
     "on": "start"
    },
    "body": [
     {
      "op": "set",
      "to": {
       "part:forearm:-1": 14,
       "part:forearm:1": 14,
       "part:torso": -2
      }
     },
     {
      "op": "view",
      "to": "side"
     },
     {
      "op": "drive",
      "ch": "part:leg:-1",
      "value": "=((1 - step(0.5, mod(local/every + 0, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 5)/40) + step(0.5, mod(local/every + 0, 1))*stride*(4*mod(local/every + 0, 1) - 3))"
     },
     {
      "op": "drive",
      "ch": "part:leg:1",
      "value": "=((1 - step(0.5, mod(local/every + 0.5, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 5)/40) + step(0.5, mod(local/every + 0.5, 1))*stride*(4*mod(local/every + 0.5, 1) - 3))"
     },
     {
      "op": "drive",
      "ch": "part:shin:-1",
      "value": "=(give*(1 - step(0.5, mod(local/every + 0, 1))) + bend*step(0.5, mod(local/every + 0, 1)))*sin(pi*(2*mod(local/every + 0, 1) - step(0.5, mod(local/every + 0, 1))))"
     },
     {
      "op": "drive",
      "ch": "part:shin:1",
      "value": "=(give*(1 - step(0.5, mod(local/every + 0.5, 1))) + bend*step(0.5, mod(local/every + 0.5, 1)))*sin(pi*(2*mod(local/every + 0.5, 1) - step(0.5, mod(local/every + 0.5, 1))))"
     },
     {
      "op": "drive",
      "ch": "part:arm:-1",
      "value": "=-0.8*((1 - step(0.5, mod(local/every + 0, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 5)/40) + step(0.5, mod(local/every + 0, 1))*stride*(4*mod(local/every + 0, 1) - 3))"
     },
     {
      "op": "drive",
      "ch": "part:arm:1",
      "value": "=-0.8*((1 - step(0.5, mod(local/every + 0.5, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 5)/40) + step(0.5, mod(local/every + 0.5, 1))*stride*(4*mod(local/every + 0.5, 1) - 3))"
     },
     {
      "op": "wave",
      "ch": "rot",
      "shape": "sin",
      "every": "=every",
      "amp": 1
     },
     {
      "op": "drive",
      "ch": "part:foot:-1",
      "value": "=feet*((give*(1 - step(0.5, mod(local/every + 0, 1))) + bend*step(0.5, mod(local/every + 0, 1)))*sin(pi*(2*mod(local/every + 0, 1) - step(0.5, mod(local/every + 0, 1)))) - ((1 - step(0.5, mod(local/every + 0, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 5)/40) + step(0.5, mod(local/every + 0, 1))*stride*(4*mod(local/every + 0, 1) - 3)))"
     },
     {
      "op": "drive",
      "ch": "part:foot:1",
      "value": "=feet*((give*(1 - step(0.5, mod(local/every + 0.5, 1))) + bend*step(0.5, mod(local/every + 0.5, 1)))*sin(pi*(2*mod(local/every + 0.5, 1) - step(0.5, mod(local/every + 0.5, 1)))) - ((1 - step(0.5, mod(local/every + 0.5, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 5)/40) + step(0.5, mod(local/every + 0.5, 1))*stride*(4*mod(local/every + 0.5, 1) - 3)))"
     },
     {
      "op": "drive",
      "ch": "lift:leg:-1",
      "value": "=step(0.5, mod(local/every + 0, 1))*max(0, h*leg/2*((cos((((1 - step(0.5, mod(local/every + 0, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 5)/40) + step(0.5, mod(local/every + 0, 1))*stride*(4*mod(local/every + 0, 1) - 3)))*pi/180) + cos(((((1 - step(0.5, mod(local/every + 0, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 5)/40) + step(0.5, mod(local/every + 0, 1))*stride*(4*mod(local/every + 0, 1) - 3))) - ((give*(1 - step(0.5, mod(local/every + 0, 1))) + bend*step(0.5, mod(local/every + 0, 1)))*sin(pi*(2*mod(local/every + 0, 1) - step(0.5, mod(local/every + 0, 1))))))*pi/180)) - (cos((((1 - step(0.5, mod(local/every + 0.5, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 5)/40) + step(0.5, mod(local/every + 0.5, 1))*stride*(4*mod(local/every + 0.5, 1) - 3)))*pi/180) + cos(((((1 - step(0.5, mod(local/every + 0.5, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 5)/40) + step(0.5, mod(local/every + 0.5, 1))*stride*(4*mod(local/every + 0.5, 1) - 3))) - ((give*(1 - step(0.5, mod(local/every + 0.5, 1))) + bend*step(0.5, mod(local/every + 0.5, 1)))*sin(pi*(2*mod(local/every + 0.5, 1) - step(0.5, mod(local/every + 0.5, 1))))))*pi/180))))"
     },
     {
      "op": "drive",
      "ch": "lift:leg:1",
      "value": "=step(0.5, mod(local/every + 0.5, 1))*max(0, h*leg/2*((cos((((1 - step(0.5, mod(local/every + 0.5, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 5)/40) + step(0.5, mod(local/every + 0.5, 1))*stride*(4*mod(local/every + 0.5, 1) - 3)))*pi/180) + cos(((((1 - step(0.5, mod(local/every + 0.5, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 5)/40) + step(0.5, mod(local/every + 0.5, 1))*stride*(4*mod(local/every + 0.5, 1) - 3))) - ((give*(1 - step(0.5, mod(local/every + 0.5, 1))) + bend*step(0.5, mod(local/every + 0.5, 1)))*sin(pi*(2*mod(local/every + 0.5, 1) - step(0.5, mod(local/every + 0.5, 1))))))*pi/180)) - (cos((((1 - step(0.5, mod(local/every + 1, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 1, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 1, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 1, 1)), 5)/40) + step(0.5, mod(local/every + 1, 1))*stride*(4*mod(local/every + 1, 1) - 3)))*pi/180) + cos(((((1 - step(0.5, mod(local/every + 1, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 1, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 1, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 1, 1)), 5)/40) + step(0.5, mod(local/every + 1, 1))*stride*(4*mod(local/every + 1, 1) - 3))) - ((give*(1 - step(0.5, mod(local/every + 1, 1))) + bend*step(0.5, mod(local/every + 1, 1)))*sin(pi*(2*mod(local/every + 1, 1) - step(0.5, mod(local/every + 1, 1))))))*pi/180))))"
     },
     {
      "op": "drive",
      "ch": "dy",
      "value": "=h*leg/2*min((2 - (1 - step(0.5, mod(local/every, 1)))*(cos((((1 - step(0.5, mod(local/every + 0, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 5)/40) + step(0.5, mod(local/every + 0, 1))*stride*(4*mod(local/every + 0, 1) - 3)))*pi/180) + cos(((((1 - step(0.5, mod(local/every + 0, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 5)/40) + step(0.5, mod(local/every + 0, 1))*stride*(4*mod(local/every + 0, 1) - 3))) - ((give*(1 - step(0.5, mod(local/every + 0, 1))) + bend*step(0.5, mod(local/every + 0, 1)))*sin(pi*(2*mod(local/every + 0, 1) - step(0.5, mod(local/every + 0, 1))))))*pi/180)) - step(0.5, mod(local/every, 1))*(cos((((1 - step(0.5, mod(local/every + 0.5, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 5)/40) + step(0.5, mod(local/every + 0.5, 1))*stride*(4*mod(local/every + 0.5, 1) - 3)))*pi/180) + cos(((((1 - step(0.5, mod(local/every + 0.5, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 5)/40) + step(0.5, mod(local/every + 0.5, 1))*stride*(4*mod(local/every + 0.5, 1) - 3))) - ((give*(1 - step(0.5, mod(local/every + 0.5, 1))) + bend*step(0.5, mod(local/every + 0.5, 1)))*sin(pi*(2*mod(local/every + 0.5, 1) - step(0.5, mod(local/every + 0.5, 1))))))*pi/180))), (2 - (1 - step(0.5, mod(local/every, 1)))*(cos((((1 - step(0.5, mod(local/every + 0, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0, 1)), 5)/40) + step(0.5, mod(local/every + 0, 1))*stride*(4*mod(local/every + 0, 1) - 3)))*pi/180) + cos(((give*(1 - step(0.5, mod(local/every + 0, 1))) + bend*step(0.5, mod(local/every + 0, 1)))*sin(pi*(2*mod(local/every + 0, 1) - step(0.5, mod(local/every + 0, 1)))))*pi/180) - 0.55*sin(((give*(1 - step(0.5, mod(local/every + 0, 1))) + bend*step(0.5, mod(local/every + 0, 1)))*sin(pi*(2*mod(local/every + 0, 1) - step(0.5, mod(local/every + 0, 1)))))*pi/180)) - step(0.5, mod(local/every, 1))*(cos((((1 - step(0.5, mod(local/every + 0.5, 1)))*57.29578*((sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1))) + pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 3)/6 + 3*pow(sin(stride*pi/180)*(1 - 4*mod(local/every + 0.5, 1)), 5)/40) + step(0.5, mod(local/every + 0.5, 1))*stride*(4*mod(local/every + 0.5, 1) - 3)))*pi/180) + cos(((give*(1 - step(0.5, mod(local/every + 0.5, 1))) + bend*step(0.5, mod(local/every + 0.5, 1)))*sin(pi*(2*mod(local/every + 0.5, 1) - step(0.5, mod(local/every + 0.5, 1)))))*pi/180) - 0.55*sin(((give*(1 - step(0.5, mod(local/every + 0.5, 1))) + bend*step(0.5, mod(local/every + 0.5, 1)))*sin(pi*(2*mod(local/every + 0.5, 1) - step(0.5, mod(local/every + 0.5, 1)))))*pi/180)))) - 0.005*h - 0.009*h*abs(sin(2*pi*mod(local/every, 1)))"
     },
     {
      "op": "wave",
      "ch": "part:head",
      "shape": "sin",
      "every": "=every/2",
      "amp": 1.5,
      "phase": 0.8
     },
     {
      "op": "wave",
      "ch": "part:tail",
      "shape": "sin",
      "every": "=every",
      "amp": 8,
      "phase": 1.6
     }
    ]
   }
  ]
 }
}
