Interactive Animation – Everyday Mysteries

by Patrick Luck

I have been working on a Pikachu Rig in my spare time, so I thought it might be cool to try and make some animations using it.

I made an Idle animation that plays whenever you aren’t clicking.

Each animation is set to activate once you click on the proper spot.

I also found a fix for the glitch where holding the mouse button over a button causes the animation to glitch out. I did this by using a gate that opens only when the Idle animation is playing and closes when any other animation begins playing.

Here is the clipboard of the Max File:

{“patcher” : {“fileversion” : 1,”appversion” : {“major” : 8,”minor” : 0,”revision” : 6,”architecture” : “x64″,”modernui” : 1},”classnamespace” : “box”,”rect” : [ 995.0, 85.0, 890.0, 920.0 ],”bglocked” : 0,”openinpresentation” : 0,”default_fontsize” : 12.0,”default_fontface” : 0,”default_fontname” : “Arial”,”gridonopen” : 1,”gridsize” : [ 15.0, 15.0 ],”gridsnaponopen” : 1,”objectsnaponopen” : 1,”statusbarvisible” : 2,”toolbarvisible” : 1,”lefttoolbarpinned” : 0,”toptoolbarpinned” : 0,”righttoolbarpinned” : 0,”bottomtoolbarpinned” : 0,”toolbars_unpinned_last_save” : 0,”tallnewobj” : 0,”boxanimatetime” : 200,”enablehscroll” : 1,”enablevscroll” : 1,”devicewidth” : 0.0,”description” : “”,”digest” : “”,”tags” : “”,”style” : “”,”subpatcher_template” : “”,”boxes” : [ {“box” : {“id” : “obj-27″,”maxclass” : “newobj”,”numinlets” : 5,”numoutlets” : 5,”outlettype” : [ “bang”, “bang”, “bang”, “bang”, “” ],”patching_rect” : [ 246.0, 543.0, 64.0, 22.0 ],”text” : “sel 1 2 3 4”}}, {“box” : {“id” : “obj-26″,”maxclass” : “newobj”,”numinlets” : 2,”numoutlets” : 2,”outlettype” : [ “”, “” ],”patching_rect” : [ 246.0, 519.0, 63.0, 22.0 ],”text” : “route start”}}, {“box” : {“id” : “obj-25″,”maxclass” : “message”,”numinlets” : 2,”numoutlets” : 1,”outlettype” : [ “” ],”patching_rect” : [ 374.0, 376.0, 29.5, 22.0 ],”text” : “1”}}, {“box” : {“id” : “obj-24″,”maxclass” : “message”,”numinlets” : 2,”numoutlets” : 1,”outlettype” : [ “” ],”patching_rect” : [ 374.0, 344.0, 29.5, 22.0 ],”text” : “0”}}, {“box” : {“id” : “obj-23″,”maxclass” : “newobj”,”numinlets” : 2,”numoutlets” : 1,”outlettype” : [ “” ],”patching_rect” : [ 120.5, 332.0, 42.0, 22.0 ],”text” : “gate 1”}}, {“box” : {“id” : “obj-21″,”maxclass” : “newobj”,”numinlets” : 5,”numoutlets” : 5,”outlettype” : [ “bang”, “bang”, “bang”, “bang”, “” ],”patching_rect” : [ 169.5, 543.0, 64.0, 22.0 ],”text” : “sel 1 2 3 4”}}, {“box” : {“id” : “obj-20″,”maxclass” : “newobj”,”numinlets” : 2,”numoutlets” : 2,”outlettype” : [ “”, “” ],”patching_rect” : [ 169.5, 519.0, 66.0, 22.0 ],”text” : “route done”}}, {“box” : {“id” : “obj-15″,”linecount” : 2,”maxclass” : “newobj”,”numinlets” : 1,”numoutlets” : 2,”outlettype” : [ “jit_matrix”, “” ],”patching_rect” : [ 104.0, 588.0, 504.0, 36.0 ],”text” : “jit.gl.videoplane myWindow @blend_enable 1 @depth_enable 0 @layer 1 @scale 1 0.53384 1”}}, {“box” : {“id” : “obj-17″,”maxclass” : “message”,”numinlets” : 2,”numoutlets” : 1,”outlettype” : [ “” ],”patching_rect” : [ 386.0, 278.0, 29.5, 22.0 ],”text” : “1”}}, {“box” : {“id” : “obj-16″,”maxclass” : “message”,”numinlets” : 2,”numoutlets” : 1,”outlettype” : [ “” ],”patching_rect” : [ 292.0, 278.0, 29.5, 22.0 ],”text” : “4”}}, {“box” : {“id” : “obj-7″,”maxclass” : “message”,”numinlets” : 2,”numoutlets” : 1,”outlettype” : [ “” ],”patching_rect” : [ 198.0, 278.0, 29.5, 22.0 ],”text” : “3”}}, {“box” : {“id” : “obj-2″,”maxclass” : “message”,”numinlets” : 2,”numoutlets” : 1,”outlettype” : [ “” ],”patching_rect” : [ 104.0, 278.0, 29.5, 22.0 ],”text” : “2”}}, {“box” : {“id” : “obj-14″,”maxclass” : “newobj”,”numinlets” : 2,”numoutlets” : 2,”outlettype” : [ “bang”, “” ],”patching_rect” : [ 386.0, 249.0, 34.0, 22.0 ],”text” : “sel 1”}}, {“box” : {“id” : “obj-13″,”maxclass” : “newobj”,”numinlets” : 2,”numoutlets” : 2,”outlettype” : [ “bang”, “” ],”patching_rect” : [ 292.0, 249.0, 34.0, 22.0 ],”text” : “sel 1”}}, {“box” : {“id” : “obj-50″,”maxclass” : “newobj”,”numinlets” : 2,”numoutlets” : 2,”outlettype” : [ “bang”, “” ],”patching_rect” : [ 198.0, 249.0, 34.0, 22.0 ],”text” : “sel 1”}}, {“box” : {“id” : “obj-36″,”maxclass” : “newobj”,”numinlets” : 2,”numoutlets” : 2,”outlettype” : [ “bang”, “” ],”patching_rect” : [ 104.0, 249.0, 34.0, 22.0 ],”text” : “sel 1”}}, {“box” : {“id” : “obj-33″,”maxclass” : “newobj”,”numinlets” : 5,”numoutlets” : 5,”outlettype” : [ “”, “”, “”, “”, “” ],”patching_rect” : [ 104.0, 220.0, 395.0, 22.0 ],”text” : “route hitTargetCheekL hitTargetCheekR hitTargetForehead hitTargetBelly”}}, {“box” : {“id” : “obj-32″,”maxclass” : “newobj”,”numinlets” : 2,”numoutlets” : 2,”outlettype” : [ “”, “” ],”patching_rect” : [ 104.0, 193.0, 75.0, 22.0 ],”text” : “route mouse”}}, {“box” : {“id” : “obj-31″,”maxclass” : “newobj”,”numinlets” : 1,”numoutlets” : 2,”outlettype” : [ “”, “” ],”patching_rect” : [ 104.0, 165.0, 121.0, 22.0 ],”text” : “jit.gl.picker @hover 0”}}, {“box” : {“id” : “obj-12″,”linecount” : 2,”maxclass” : “newobj”,”numinlets” : 1,”numoutlets” : 2,”outlettype” : [ “jit_matrix”, “” ],”patching_rect” : [ 22.5, 852.0, 519.0, 36.0 ],”text” : “jit.gl.gridshape myWindow @name hitTargetBelly @shape circle @scale 0.1 0.15 1 @position 0 -0.15 0 @blend_enable 1 @depth_enable 0 @layer 0”}}, {“box” : {“id” : “obj-11″,”linecount” : 2,”maxclass” : “newobj”,”numinlets” : 1,”numoutlets” : 2,”outlettype” : [ “jit_matrix”, “” ],”patching_rect” : [ 24.5, 804.0, 477.0, 36.0 ],”text” : “jit.gl.gridshape myWindow @name hitTargetForehead @shape circle @scale 0.1 0.05 1 @position 0 0.225 0 @blend_enable 1 @depth_enable 0 @layer 0”}}, {“box” : {“id” : “obj-10″,”linecount” : 2,”maxclass” : “newobj”,”numinlets” : 1,”numoutlets” : 2,”outlettype” : [ “jit_matrix”, “” ],”patching_rect” : [ 24.5, 754.0, 476.0, 36.0 ],”text” : “jit.gl.gridshape myWindow @name hitTargetCheekR @shape circle @scale 0.03 0.05 1 @position -0.14 0.09 0 @blend_enable 1 @depth_enable 0 @layer 0”}}, {“box” : {“id” : “obj-4″,”linecount” : 2,”maxclass” : “newobj”,”numinlets” : 1,”numoutlets” : 2,”outlettype” : [ “jit_matrix”, “” ],”patching_rect” : [ 24.5, 708.0, 473.0, 36.0 ],”text” : “jit.gl.gridshape myWindow @name hitTargetCheekL @shape circle @scale 0.03 0.05 1 @position 0.14 0.09 0 @blend_enable 1 @depth_enable 0 @layer 0”}}, {“box” : {“id” : “obj-9″,”maxclass” : “message”,”numinlets” : 2,”numoutlets” : 1,”outlettype” : [ “” ],”patching_rect” : [ 16.0, 277.0, 29.5, 22.0 ],”text” : “5”}}, {“box” : {“id” : “obj-8″,”maxclass” : “newobj”,”numinlets” : 1,”numoutlets” : 1,”outlettype” : [ “bang” ],”patching_rect” : [ 16.0, 164.0, 58.0, 22.0 ],”text” : “loadbang”}}, {“box” : {“clipheight” : 29.0,”data” : {“clips” : [ {“absolutepath” : “C:/Users/prluck/Desktop/Animation/Videos/Belly.avi”,”filename” : “Belly.avi”,”filekind” : “moviefile”,”loop” : 0,”content_state” : {“outputmode” : [ 1 ],”out_name” : [ “u924000393″ ],”dim” : [ 1, 1 ],”adapt” : [ 1 ],”vol” : [ 1.0 ],”fps” : [ 0.0 ],”dstrect” : [ 0, 0, 1, 1 ],”drawto” : [ “” ],”srcrect” : [ 0, 0, 1, 1 ],”time_ms” : [ 0 ],”duration” : [ 0 ],”output_texture” : [ 0 ],”position” : [ 0.0 ],”time_secs” : [ 0.0 ],”usedstrect” : [ 0 ],”loopstart” : [ 0 ],”time” : [ 0 ],”framereport” : [ 0 ],”framecount” : [ 0 ],”colormode” : [ “argb” ],”looppoints” : [ 0, 0 ],”texture_name” : [ “u937000391″ ],”unique” : [ 0 ],”usesrcrect” : [ 0 ],”automatic” : [ 0 ],”interp” : [ 0 ],”autostart” : [ 1 ],”cache_size” : [ 0.100000001490116 ],”loopend” : [ 0 ],”looppoints_secs” : [ 0.0, 0.0 ],”timescale” : [ 600 ],”moviefile” : [ “” ],”loopreport” : [ 0 ],”engine” : [ “viddll” ],”looppoints_ms” : [ 0, 0 ],”rate” : [ 1.0 ]}}, {“absolutepath” : “C:/Users/prluck/Desktop/Animation/Videos/Cheek_L.avi”,”filename” : “Cheek_L.avi”,”filekind” : “moviefile”,”loop” : 0,”content_state” : {“outputmode” : [ 1 ],”out_name” : [ “u924000393″ ],”dim” : [ 1, 1 ],”adapt” : [ 1 ],”vol” : [ 1.0 ],”fps” : [ 0.0 ],”dstrect” : [ 0, 0, 1, 1 ],”drawto” : [ “” ],”srcrect” : [ 0, 0, 1, 1 ],”time_ms” : [ 0 ],”duration” : [ 0 ],”output_texture” : [ 0 ],”position” : [ 0.0 ],”time_secs” : [ 0.0 ],”usedstrect” : [ 0 ],”loopstart” : [ 0 ],”time” : [ 0 ],”framereport” : [ 0 ],”framecount” : [ 0 ],”colormode” : [ “argb” ],”looppoints” : [ 0, 0 ],”texture_name” : [ “u937000391″ ],”unique” : [ 0 ],”usesrcrect” : [ 0 ],”automatic” : [ 0 ],”interp” : [ 0 ],”autostart” : [ 1 ],”cache_size” : [ 0.100000001490116 ],”loopend” : [ 0 ],”looppoints_secs” : [ 0.0, 0.0 ],”timescale” : [ 600 ],”moviefile” : [ “” ],”loopreport” : [ 0 ],”engine” : [ “viddll” ],”looppoints_ms” : [ 0, 0 ],”rate” : [ 1.0 ]}}, {“absolutepath” : “C:/Users/prluck/Desktop/Animation/Videos/Cheek_R.avi”,”filename” : “Cheek_R.avi”,”filekind” : “moviefile”,”loop” : 0,”content_state” : {“outputmode” : [ 1 ],”out_name” : [ “u924000393″ ],”dim” : [ 1, 1 ],”adapt” : [ 1 ],”vol” : [ 1.0 ],”fps” : [ 0.0 ],”dstrect” : [ 0, 0, 1, 1 ],”drawto” : [ “” ],”srcrect” : [ 0, 0, 1, 1 ],”time_ms” : [ 0 ],”duration” : [ 0 ],”output_texture” : [ 0 ],”position” : [ 0.0 ],”time_secs” : [ 0.0 ],”usedstrect” : [ 0 ],”loopstart” : [ 0 ],”time” : [ 0 ],”framereport” : [ 0 ],”framecount” : [ 0 ],”colormode” : [ “argb” ],”looppoints” : [ 0, 0 ],”texture_name” : [ “u937000391″ ],”unique” : [ 0 ],”usesrcrect” : [ 0 ],”automatic” : [ 0 ],”interp” : [ 0 ],”autostart” : [ 1 ],”cache_size” : [ 0.100000001490116 ],”loopend” : [ 0 ],”looppoints_secs” : [ 0.0, 0.0 ],”timescale” : [ 600 ],”moviefile” : [ “” ],”loopreport” : [ 0 ],”engine” : [ “viddll” ],”looppoints_ms” : [ 0, 0 ],”rate” : [ 1.0 ]}}, {“absolutepath” : “C:/Users/prluck/Desktop/Animation/Videos/Forehead.avi”,”filename” : “Forehead.avi”,”filekind” : “moviefile”,”loop” : 0,”content_state” : {“outputmode” : [ 1 ],”out_name” : [ “u924000393″ ],”dim” : [ 1, 1 ],”adapt” : [ 1 ],”vol” : [ 1.0 ],”fps” : [ 0.0 ],”dstrect” : [ 0, 0, 1, 1 ],”drawto” : [ “” ],”srcrect” : [ 0, 0, 1, 1 ],”time_ms” : [ 0 ],”duration” : [ 0 ],”output_texture” : [ 0 ],”position” : [ 0.0 ],”time_secs” : [ 0.0 ],”usedstrect” : [ 0 ],”loopstart” : [ 0 ],”time” : [ 0 ],”framereport” : [ 0 ],”framecount” : [ 0 ],”colormode” : [ “argb” ],”looppoints” : [ 0, 0 ],”texture_name” : [ “u937000391″ ],”unique” : [ 0 ],”usesrcrect” : [ 0 ],”automatic” : [ 0 ],”interp” : [ 0 ],”autostart” : [ 1 ],”cache_size” : [ 0.100000001490116 ],”loopend” : [ 0 ],”looppoints_secs” : [ 0.0, 0.0 ],”timescale” : [ 600 ],”moviefile” : [ “” ],”loopreport” : [ 0 ],”engine” : [ “viddll” ],”looppoints_ms” : [ 0, 0 ],”rate” : [ 1.0 ]}}, {“absolutepath” : “C:/Users/prluck/Desktop/Animation/Videos/Idle.avi”,”filename” : “Idle.avi”,”filekind” : “moviefile”,”loop” : 1,”content_state” : {“outputmode” : [ 1 ],”out_name” : [ “u924000393″ ],”dim” : [ 1, 1 ],”adapt” : [ 1 ],”vol” : [ 1.0 ],”fps” : [ 0.0 ],”dstrect” : [ 0, 0, 1, 1 ],”drawto” : [ “” ],”srcrect” : [ 0, 0, 1, 1 ],”time_ms” : [ 0 ],”duration” : [ 0 ],”output_texture” : [ 0 ],”position” : [ 0.0 ],”time_secs” : [ 0.0 ],”usedstrect” : [ 0 ],”loopstart” : [ 0 ],”time” : [ 0 ],”framereport” : [ 0 ],”framecount” : [ 0 ],”colormode” : [ “argb” ],”looppoints” : [ 0, 0 ],”texture_name” : [ “u937000391″ ],”unique” : [ 0 ],”usesrcrect” : [ 0 ],”automatic” : [ 0 ],”interp” : [ 0 ],”autostart” : [ 1 ],”cache_size” : [ 0.100000001490116 ],”loopend” : [ 0 ],”looppoints_secs” : [ 0.0, 0.0 ],”timescale” : [ 600 ],”moviefile” : [ “” ],”loopreport” : [ 0 ],”engine” : [ “viddll” ],”looppoints_ms” : [ 0, 0 ],”rate” : [ 1.0 ]}} ]},”id” : “obj-5″,”maxclass” : “jit.playlist”,”numinlets” : 1,”numoutlets” : 3,”outlettype” : [ “jit_matrix”, “”, “dictionary” ],”patching_rect” : [ 104.0, 359.0, 150.0, 150.0 ]}}, {“box” : {“id” : “obj-3″,”maxclass” : “toggle”,”numinlets” : 1,”numoutlets” : 1,”outlettype” : [ “int” ],”parameter_enable” : 0,”patching_rect” : [ 11.0, 24.0, 24.0, 24.0 ]}}, {“box” : {“id” : “obj-1″,”maxclass” : “newobj”,”numinlets” : 1,”numoutlets” : 3,”outlettype” : [ “”, “bang”, “” ],”patching_rect” : [ 11.0, 91.0, 210.0, 22.0 ],”text” : “jit.world myWindow @fps 60 @fsaa 1″}} ],”lines” : [ {“patchline” : {“destination” : [ “obj-16″, 0 ],”source” : [ “obj-13”, 0 ]}}, {“patchline” : {“destination” : [ “obj-17″, 0 ],”source” : [ “obj-14”, 0 ]}}, {“patchline” : {“destination” : [ “obj-23″, 1 ],”source” : [ “obj-16”, 0 ]}}, {“patchline” : {“destination” : [ “obj-23″, 1 ],”source” : [ “obj-17”, 0 ]}}, {“patchline” : {“destination” : [ “obj-23″, 1 ],”source” : [ “obj-2”, 0 ]}}, {“patchline” : {“destination” : [ “obj-21″, 0 ],”source” : [ “obj-20”, 0 ]}}, {“patchline” : {“destination” : [ “obj-9″, 0 ],”midpoints” : [ 212.75, 569.0, 54.625, 569.0, 54.625, 266.0, 25.5, 266.0 ],”source” : [ “obj-21”, 3 ]}}, {“patchline” : {“destination” : [ “obj-9″, 0 ],”midpoints” : [ 201.5, 569.0, 49.0, 569.0, 49.0, 266.0, 25.5, 266.0 ],”source” : [ “obj-21”, 2 ]}}, {“patchline” : {“destination” : [ “obj-9″, 0 ],”midpoints” : [ 190.25, 569.0, 43.375, 569.0, 43.375, 266.0, 25.5, 266.0 ],”source” : [ “obj-21”, 1 ]}}, {“patchline” : {“destination” : [ “obj-9″, 0 ],”midpoints” : [ 179.0, 569.0, 37.75, 569.0, 37.75, 266.0, 25.5, 266.0 ],”source” : [ “obj-21”, 0 ]}}, {“patchline” : {“destination” : [ “obj-5″, 0 ],”source” : [ “obj-23”, 0 ]}}, {“patchline” : {“destination” : [ “obj-23″, 0 ],”source” : [ “obj-24”, 0 ]}}, {“patchline” : {“destination” : [ “obj-23″, 0 ],”source” : [ “obj-25”, 0 ]}}, {“patchline” : {“destination” : [ “obj-27″, 0 ],”source” : [ “obj-26”, 0 ]}}, {“patchline” : {“destination” : [ “obj-24″, 0 ],”source” : [ “obj-27”, 3 ]}}, {“patchline” : {“destination” : [ “obj-24″, 0 ],”source” : [ “obj-27”, 2 ]}}, {“patchline” : {“destination” : [ “obj-24″, 0 ],”source” : [ “obj-27”, 1 ]}}, {“patchline” : {“destination” : [ “obj-24″, 0 ],”source” : [ “obj-27”, 0 ]}}, {“patchline” : {“destination” : [ “obj-25″, 0 ],”source” : [ “obj-27”, 4 ]}}, {“patchline” : {“destination” : [ “obj-1″, 0 ],”source” : [ “obj-3”, 0 ]}}, {“patchline” : {“destination” : [ “obj-32″, 0 ],”source” : [ “obj-31”, 0 ]}}, {“patchline” : {“destination” : [ “obj-33″, 0 ],”source” : [ “obj-32”, 0 ]}}, {“patchline” : {“destination” : [ “obj-13″, 0 ],”source” : [ “obj-33”, 2 ]}}, {“patchline” : {“destination” : [ “obj-14″, 0 ],”source” : [ “obj-33”, 3 ]}}, {“patchline” : {“destination” : [ “obj-36″, 0 ],”source” : [ “obj-33”, 0 ]}}, {“patchline” : {“destination” : [ “obj-50″, 0 ],”source” : [ “obj-33”, 1 ]}}, {“patchline” : {“destination” : [ “obj-2″, 0 ],”source” : [ “obj-36”, 0 ]}}, {“patchline” : {“destination” : [ “obj-15″, 0 ],”source” : [ “obj-5”, 0 ]}}, {“patchline” : {“destination” : [ “obj-20″, 0 ],”order” : 1,”source” : [ “obj-5”, 1 ]}}, {“patchline” : {“destination” : [ “obj-26″, 0 ],”order” : 0,”source” : [ “obj-5”, 1 ]}}, {“patchline” : {“destination” : [ “obj-7″, 0 ],”source” : [ “obj-50”, 0 ]}}, {“patchline” : {“destination” : [ “obj-23″, 1 ],”source” : [ “obj-7”, 0 ]}}, {“patchline” : {“destination” : [ “obj-3″, 0 ],”order” : 1,”source” : [ “obj-8”, 0 ]}}, {“patchline” : {“destination” : [ “obj-9″, 0 ],”order” : 0,”source” : [ “obj-8”, 0 ]}}, {“patchline” : {“destination” : [ “obj-5″, 0 ],”source” : [ “obj-9″, 0 ]}} ],”dependency_cache” : [ {“name” : “Belly.avi”,”bootpath” : “~/Desktop/Animation/Videos”,”patcherrelativepath” : “./Animation/Videos”,”type” : “VfW”,”implicit” : 1}, {“name” : “Cheek_L.avi”,”bootpath” : “~/Desktop/Animation/Videos”,”patcherrelativepath” : “./Animation/Videos”,”type” : “VfW”,”implicit” : 1}, {“name” : “Cheek_R.avi”,”bootpath” : “~/Desktop/Animation/Videos”,”patcherrelativepath” : “./Animation/Videos”,”type” : “VfW”,”implicit” : 1}, {“name” : “Forehead.avi”,”bootpath” : “~/Desktop/Animation/Videos”,”patcherrelativepath” : “./Animation/Videos”,”type” : “VfW”,”implicit” : 1}, {“name” : “Idle.avi”,”bootpath” : “~/Desktop/Animation/Videos”,”patcherrelativepath” : “./Animation/Videos”,”type” : “VfW”,”implicit” : 1} ],”autosave” : 0}}

7 Comments Add yours

  1. Sylvia Lin says:

    This is sosososo cute! I am wondering if dragging the cursor (cursor paths) on the character can cause any different effect? Or does it only register clicks?

  2. Jonathan Shiery says:

    I like how cleverly connected all the animations are. They all make sense logically, as well as being extremely charming.

  3. Tom Towadros says:

    Impressive as always Patrick. Nice blending in and out of the idle animation. I would have loved some audio but, as I’m sure you know, Nintendo has eyes everywhere. They most likely would have used “Delete” on your post it probably would have been Super Effective.

  4. Joy Tartaglia says:

    Your animations give the Pikachu some character, and the idle animation also gives it life. Maybe you could have had an animation from bopping Pikachu’s nose or tapping its ears? You did a great job, overall.

  5. Ryan Doyle says:

    This is impressive! It has idle animations and everything.

  6. Jeremy Trilling says:

    The use of 3D animation is amazing! I am very interested in how you are able to get such fluid motion of the figure. I wonder how one could prevent overlapping of surfaces like in the shoulder area?

  7. Isaac Donkoh-Halm says:

    The idle animation is really strong, and the animation, in general, is really cute! Did the rig include mouth controls? I think that might be the next step to push it a little further.

Leave a Reply