Quick note that I forgot to include in the video. Set the "Default Blend TIme" in the Animation Player to 0.1 to get smooth transitions between states.
Just like you say in your channel description: Your videos are straight forward and to the point! Great for Godot Beginners like me. First time I did not need to speed up a video tutorial. And please keep your cool accent, it gives your Channel an individual touch.
Thank you for the kind words! I am doing speech excercises to improve my voice quality in general, but I love my accent and agree about the unique touch it brings to the channel, so no worries. It's here to stay. :D
Simple and precise with animations. Point of fact with complication to the bone structure but simple feature's for Animation and thankyou Game Endeavor ✔
Yo man thanks for the snappy little tutorial, very well done and I appreciate how you shared all of the aspects of how you got to where you did [using the square to line things up, that's kind of background stuff that I think other people leave out of their tutorials/systems when explaining without really realizing it.]
I came across this channel a few days back while looking for some support for building a State Machine. Really love the videos and the detailed way you explain why you do what you do. Going back through and watching them all. Looking forward to more Godot tutorials in the future :)
Thanks. :D Yeah, the state machine video did quite well. My goal with it was to help people understand state machines in as simple yet practical way as I possibly could. Given how well the community has taken to it, I'd say I succeeded. :) It's one of my favorite videos so far. I'm glad you like the channel and that you find them useful! More will be coming very soon. I have some very good ones I've been working on over the past few weeks. :)
Thank you! You're the second person to say that I speak clearly. I figured my accent would be too thick for people to effectively understand me. Good to know that isn't the case. Thank you for subscribing.
Wow! Some of the most information packed 6 minutes and 36 seconds on the Internet! :) Definitely subbed. New to Godot, and art. Bit of experience as a junior dev (intern) and about 4 years training in C/C++ (and 40 years as a prof before that). This method you show is fascinating and effective and I'm definitely going to take the time to slow play/pause through the whole video to get the full value. Even if I don't go with this particular technique for animating, this seems like an excellent exercise to learn more about how Godot's animation features function and make digging through the documentation more engaging. However, with all that said, a couple questions: (1) Would this method be effective for a top-down 2d pixel art game along the lines of Stardew Valley (in terms of game mechanics and look and feel, not content or themes); (2) Are there other methods I might want to consider? For example, with respect to (2): Aseprite has fairly rich animating functionalities, and I have not yet determined whether aseprite files can be imported in some way (although I have impored .png texture files for 2d sprites.
always great, thanks for the video. I think it would be cool if Godot had a character hub tool like RPG Maker. You basically choose parts to make up the character.
Thank you for watching. :) That kind of thing works with RPG Maker because most games made with RPG Maker have a similar style. Such a thing would be impossible with Godot seeing as how there's not one targeted genre or style. The possibilities are far too expansive for such a thing to be practical with Godot. That said, doesn't mean such a thing couldn't be a non-engine related tool. In fact I'd almost guarantee that such things already exists, and I seem to recall GameFromScratch doing a video on a community driven one. I don't recall the name though.
@@GameEndeavor Thanks for the extended feedback, I would think it's possible to create a plugin that does such a thing, even if much effort. I will check on GamesFromScratch, there probably is a tool out there. I think I remember seeing one at one point.
Oh, so much to learn, I see that I need an AnimationPlayer Node, but how do U add an animation there... let's look at a tutorial. And.... you just jumped it. Somehow you managed to create a tutorial for people who don't need one.
Can you link to where the artwork for the bear is found? Can you do a tutorial on how to create a character in the cut out animation style? I tried searching the net but didn't find how's to create that kind of art.
Helpful hint: If you scaled your player, you have to set the scaling this way: if(starting_point.x < path[0].x): $Torso.scale.x = abs($Torso.scale.x) if(starting_point.x > path[0].x): $Torso.scale.x = -abs($Torso.scale.x) $Torso is the parent-node of my character.
Any ideas how you might add a squash and stretch to this? I can think of using the transform property, but I cant think of any "warp" like property in godot analogous to Photoshop or whatever.
I don't, no. :) I don't use squash and stretch that often unless it's part of the animation or as placeholder for telegraphing. Personally not keen on the style.
By setting scale.x to the sign() of the direction the player is moving. I plan to do a video on my player controller in the next couple of videos where I'll show exactly how.
@@GameEndeavor I guess I don't quite understand how to do that. I have a scene that is just a single 2D node with polygon and skeleton children I made watching this tutorial. I have a separate scene with physics and a level, but I need to replace my placeholder sprite of that scene with the rigged character and I don't know how to do that. I can't simply copy the nodes from one scene to another and I can't find a way to import the character rigging scene into another one. Edit: I just found the "merge from scene" button. Should be good now.
@@GameEndeavor thanks GE! i was able to do it but the game crashes when i try to move forward. after adding $animationplayer.play("run") its tells me node not found (relative to root/world/player) my previous movement actions were scripted in a previous scene. do they need to be all in the same scene to be found? thanks for your time!
How did you make the character run to the left? From what I see you only do animation for running to the right. Is there a best way to make mirrored animation?
I just scale the rig on the x axis to -1, it inverts the sprites. :) You can see this done here if you need it: ua-cam.com/video/7JCRpY3biZg/v-deo.html
Is there any reason why you don't just use the 'is_on_floor' function (inherited from KinematicBody2D) instead of ray-casting to avoid the initiate-jump-in-air case?
When this video was made, using `is_on_floor()` didn't work with slopes. This was my attempt at addressing that. Now that we have `move_and_slide_with_snap()` I no longer use the raycast method. In fact I advise against it as there's a bug where you get extra jump height if you jump then jump again, due to being grounded before hitting the ground.
Nice tutorial! Can you please help me? I've ran into a problem when trying to animate my character like you did - when I open the AnimatePlayer menu and then click on the sprite I want to move/rotate etc, the AnimatePlayer window disappears and any changes I do to the sprite while the window is not present revert as soon as I select the AnimatePlayer object again.
That sounds familiar. There used to be an issue where the animation window would hide while you were animating, but I never had issues with it reverting unless you click the time in the animation window. However I haven't noticed this issue in a long time, or I've gotten used to it. Try clicking the `Animation` tab at the bottom of the editor when it happens? It should bring the window back up. Beyond that I wouldn't know. I suggest you join Godot's Discord server and ask there, perhaps there will be someone there more knowledgable as to what's going on.
@@GameEndeavor Thank you for a quick answer. The window indeed stopped disappearing after I clicked on the animation button, but even with it active if i do not change the parameters manually in the inspector, any changes I make while dragging or rotating sprites with my mouse reset as soon as I try to play the animation. (Yes, those parameters are in the animation track and yes, the keyframes are there as well) I will try and talk to someone on their discord server, thank you.
@@elgatodelamuerte Any time. :) Hope you get it sorted out. Just to be sure, when you modify the rotation or position of the sprite, you have to rekey the property. Unless you're using the auto-insert feature (car icon at the top in the toolbar).
Yes, but I've found it to be a little tricky. For example it doesn't work so well with blending in my experience. The frame lags a little. I really like blending though because it makes the cutout animation look so much smoother. Also you have to deal with making sure your frames are consistent from animation to animation. ie if you use a frame in the idle animation, but change it in the run animation, then when you change back to the idle animation you need to make sure that the frame changes back, otherwise it'll have the frame used in the running animation. This may be easy to achieve with the AnimationTree's StateMachine, but I'm not well versed enough in it yet to say for sure. Still studying that node.
@@GameEndeavor Okay thanks, when I have the limbs as a child of the torso, the torso is on top of everything. How can I still keep the torso as a parent while changing the depth of the limbs?
I can't find it either. So what I did was work with bezier curves... but boy did that make my life hell! Whenever I added a key in between or had to move keys (e.g. when trying to make the arms swing before the legs) everything got messed up and it would take me tweaking the curve over and over again. EDIT just realised it's still there. you have to select a key (when not using bezier curves) and check the inspector on the right. there is an easing window with a curve
I don´t get how I kan make body parts like the right arm or leg be behind the body. The link in the deskription says with "RemoteTransform2D" but when I use it that way I understand it, it make nothing rotade in a circle or make othe strange things but it don´t go behid the body. Can someone help me with my problem?
With the sprite selected, under CanvasItem Visibility, there's a checkbox for "Show Behind Parent". Select that. The link in the description is for how to set up inverse kinematics, so that joints move with each other when you reposition them. So it's not related to that.
@@esben181 That won't work if you have two of these rigs overlap. Say Rig1 is in front of Rig2. Rig1's arm and leg would go behind the body of Rig2, because their bodies are on the same z-index but both of their arms and legs are on the layer behind.
@@GameEndeavor, yeah. That's what I figured. But, the rectangle should follow the body movement, right? This means we're kind of manually moving a KinematicBody2D object without using native physics functions like move_and_slide. I wonder how that would break collisions with other physics bodies you happen to collide with along your way as this "hard-coded" movement implies infinite inertia.
@@rafaelgpontes if you're referring to the up and down movement then no, the collision doesn't move with that. The collision stays on the ground and just the sprites move up and down. Even if you were to move the shape, it'd just fall back to the ground.
Quick note that I forgot to include in the video. Set the "Default Blend TIme" in the Animation Player to 0.1 to get smooth transitions between states.
cutoff,how about clothes change system?
Somehow you manage to pack in more useful information in 8 minutes than many of your contemporaries do in 30 minutes. Thank you.
Jump cuts and not holding your hand really goes a long way.
Just like you say in your channel description: Your videos are straight forward and to the point!
Great for Godot Beginners like me.
First time I did not need to speed up a video tutorial.
And please keep your cool accent, it gives your Channel an individual touch.
Thank you for the kind words! I am doing speech excercises to improve my voice quality in general, but I love my accent and agree about the unique touch it brings to the channel, so no worries. It's here to stay. :D
5:32 I love that "comically snappy", very smooth. Love the video! Fantastic examples of the power of Godot's animation player.
Straight to the point + useful informations. Keep it up!
Holy shit dude, this video is 3 years old but damn, your tutorials are fantastic!
SUPER useful tutorial!! thank you, everyone elses are on pixel art sprite sheets
Simple and precise with animations. Point of fact with complication to the bone structure but simple feature's for Animation and thankyou Game Endeavor ✔
Congratulations on reaching 1,000 subscribers!! That's awesome, and I'm looking forward to your future content
Thank you! I have some pretty neat topics planned. I'm glad people have taken to it so well, looking forward to making the future content. :)
Yo man thanks for the snappy little tutorial, very well done and I appreciate how you shared all of the aspects of how you got to where you did [using the square to line things up, that's kind of background stuff that I think other people leave out of their tutorials/systems when explaining without really realizing it.]
Really enjoying these quick tutorials. The material is very useful, and the results are excellent. Thanks for taking the time to make these.
I'm glad they're useful! Thank you for watching.
I like that you aren't British like every other tutorial channel on UA-cam
I came across this channel a few days back while looking for some support for building a State Machine. Really love the videos and the detailed way you explain why you do what you do. Going back through and watching them all. Looking forward to more Godot tutorials in the future :)
Thanks. :D Yeah, the state machine video did quite well. My goal with it was to help people understand state machines in as simple yet practical way as I possibly could. Given how well the community has taken to it, I'd say I succeeded. :) It's one of my favorite videos so far.
I'm glad you like the channel and that you find them useful! More will be coming very soon. I have some very good ones I've been working on over the past few weeks. :)
Fantastic tutorial
I never thought, this is possible in Godot. You have given new understanding for the game.
Oh there are some fantastic things possible in Godot. Did you see the showcase reel they released recently? Mind blowing stuff.
@@GameEndeavor Yes I did. It is simply marvelous.
I believe you are referring to Godot Engine Desktop/Console Games Showcase | April 2020
@@syedrizvi6408 I am. :)
Your channel is very useful, you explain very well apart, that you speak very fluently and clearly, thank you, I subscribed
Thank you! You're the second person to say that I speak clearly. I figured my accent would be too thick for people to effectively understand me. Good to know that isn't the case. Thank you for subscribing.
Short and brief, just like Miziziziz wanted all tutorials to be
Great tutorial and animation tips. Thanks
Thank you southern man from 5 years ago
Very helpful video. Thanks.
Wow! Some of the most information packed 6 minutes and 36 seconds on the Internet! :) Definitely subbed.
New to Godot, and art. Bit of experience as a junior dev (intern) and about 4 years training in C/C++ (and 40 years as a prof before that).
This method you show is fascinating and effective and I'm definitely going to take the time to slow play/pause through the whole video to get the full value. Even if I don't go with this particular technique for animating, this seems like an excellent exercise to learn more about how Godot's animation features function and make digging through the documentation more engaging.
However, with all that said, a couple questions: (1) Would this method be effective for a top-down 2d pixel art game along the lines of Stardew Valley (in terms of game mechanics and look and feel, not content or themes); (2) Are there other methods I might want to consider?
For example, with respect to (2): Aseprite has fairly rich animating functionalities, and I have not yet determined whether aseprite files can be imported in some way (although I have impored .png texture files for 2d sprites.
Great tutorial man!
Well this was really helpful! Thank you
Thank you for watching. :D
Hi Game Endeavor. Great video as usual. You ask for topics to cover: I suggest you this "How to make a highscores or leaderboard in godot"
I haven't made tutorials in quite some time now, sorry. :) I make devlogs nowadays.
@@GameEndeavor thanks. Yeah I've seen your devlogs.
great tutorial. keep it up! i subbed!
thank you good tutorial
always great, thanks for the video. I think it would be cool if Godot had a character hub tool like RPG Maker. You basically choose parts to make up the character.
Thank you for watching. :) That kind of thing works with RPG Maker because most games made with RPG Maker have a similar style. Such a thing would be impossible with Godot seeing as how there's not one targeted genre or style. The possibilities are far too expansive for such a thing to be practical with Godot. That said, doesn't mean such a thing couldn't be a non-engine related tool. In fact I'd almost guarantee that such things already exists, and I seem to recall GameFromScratch doing a video on a community driven one. I don't recall the name though.
@@GameEndeavor Thanks for the extended feedback, I would think it's possible to create a plugin that does such a thing, even if much effort. I will check on GamesFromScratch, there probably is a tool out there. I think I remember seeing one at one point.
This tutorial is awesome+++++++
I'm glad you like it. :) It seems to be quite popular. I may have to do some more videos on animation in the future.
wow, that's a great video!
Great video!!
Can you make a tutorial in Krita to show how you make the sprit atlas?
My friend, if you would be so kind, could you explain how to apply the exact same animation to another set of sprites automaticaly?
thanks
Oh, so much to learn, I see that I need an AnimationPlayer Node, but how do U add an animation there... let's look at a tutorial. And.... you just jumped it. Somehow you managed to create a tutorial for people who don't need one.
Can you link to where the artwork for the bear is found? Can you do a tutorial on how to create a character in the cut out animation style? I tried searching the net but didn't find how's to create that kind of art.
Hey, how do you move your character in the animation and still walk in the game properly? My character gets stuck in the root node position...
How to I flip the animation so that my player can walk left?
+1
Same question here ... this would be helpful...
You scale the body node that stores your art to -1 on the x axis. Don't scale the Kinematic Body, it doesn't like that.
Helpful hint:
If you scaled your player, you have to set the scaling this way:
if(starting_point.x < path[0].x):
$Torso.scale.x = abs($Torso.scale.x)
if(starting_point.x > path[0].x):
$Torso.scale.x = -abs($Torso.scale.x)
$Torso is the parent-node of my character.
So Godot we do not need spine and adobe animate ?
❤
How to maje a perfect
flip
Krita gang!
lol, indeed. Fantastic software.
how do i flip the animation for the otherside
Broo how can i flip it in movement script? Pleeeesse
Oy how to place animation in texture rekt ?
What's the size of your character? This is important because of gravity, jump...
Noice :)
What if I need to flip the character? Can I reuse the animation with some flip method or do I have to make a new left run animation?
I just invert the scale on the x axis to -1.
How did u flip that 😭
Any ideas how you might add a squash and stretch to this? I can think of using the transform property, but I cant think of any "warp" like property in godot analogous to Photoshop or whatever.
I don't, no. :) I don't use squash and stretch that often unless it's part of the animation or as placeholder for telegraphing. Personally not keen on the style.
Is it possible to make a cut animation with interchangeable parts like say a hand that can open close and point if so how
Good video
How did you make your character flip vertically
By setting scale.x to the sign() of the direction the player is moving. I plan to do a video on my player controller in the next couple of videos where I'll show exactly how.
@@GameEndeavor Thanks for reply cant wait for the video
For 2D sprites, there's also the flip_h method, for flipping horizontally (x-axis). Also flip_v for vertical (y-axis) flipping.
@@sslaxx That won't work. Just tried it.
You can just do scale.x = -1 or scale.x = 0 on the CharacterRig node
Great video! I have a question, how did you get the left arm to stay behind the torso, since the arm is a child of the torso. thanks !
In the CanvasItem sections under the Visibility drop down, there's a "show behind parent" option. Enable that.
How do you made it so the one leg and arm are behind torso? I cant do it
Nice Video Thanks!, How you make that when he is running left then the "idle" animation is going to be flipped too?
By flipping the scale.x of the rig node. You can find an example of this in my player controller video: ua-cam.com/video/7JCRpY3biZg/v-deo.html
hi how did you get the back leg to be behind the torso
Howdy. :) In the Visibility category, there's an option to show_behind_parent.
Okay but how do I attach this rigged character to a separate 2D scene?
I don't know what you're asking. Once you've made the rig you just add it to your character scene. Do you need to know how to do that?
@@GameEndeavor I guess I don't quite understand how to do that. I have a scene that is just a single 2D node with polygon and skeleton children I made watching this tutorial. I have a separate scene with physics and a level, but I need to replace my placeholder sprite of that scene with the rigged character and I don't know how to do that. I can't simply copy the nodes from one scene to another and I can't find a way to import the character rigging scene into another one.
Edit: I just found the "merge from scene" button. Should be good now.
Hi, I can't seem to find the "key" button (which you tell us to click on at 3:01) in my version of Godot. Do you know where this button now is?
The key pops up when you click the animation player node
@@fractalchaos8245 a littleeee late but thanks, I appreciate it 😂
hi great video, how did you get your png to portion out all the different body parts? i didnt understand that part
By enabling the region option for the sprite. It lets you use only one section of the png.
@@GameEndeavor thanks GE! i was able to do it but the game crashes when i try to move forward. after adding $animationplayer.play("run") its tells me node not found (relative to root/world/player) my previous movement actions were scripted in a previous scene. do they need to be all in the same scene to be found? thanks for your time!
How did you make the character run to the left? From what I see you only do animation for running to the right. Is there a best way to make mirrored animation?
I just scale the rig on the x axis to -1, it inverts the sprites. :) You can see this done here if you need it: ua-cam.com/video/7JCRpY3biZg/v-deo.html
Is there any reason why you don't just use the 'is_on_floor' function (inherited from KinematicBody2D) instead of ray-casting to avoid the initiate-jump-in-air case?
When this video was made, using `is_on_floor()` didn't work with slopes. This was my attempt at addressing that. Now that we have `move_and_slide_with_snap()` I no longer use the raycast method. In fact I advise against it as there's a bug where you get extra jump height if you jump then jump again, due to being grounded before hitting the ground.
Game Endeavor Thanks for the explanation.
@@BrettKromkamp Any time. :)
Nice tutorial!
Can you please help me? I've ran into a problem when trying to animate my character like you did - when I open the AnimatePlayer menu and then click on the sprite I want to move/rotate etc, the AnimatePlayer window disappears and any changes I do to the sprite while the window is not present revert as soon as I select the AnimatePlayer object again.
That sounds familiar. There used to be an issue where the animation window would hide while you were animating, but I never had issues with it reverting unless you click the time in the animation window. However I haven't noticed this issue in a long time, or I've gotten used to it. Try clicking the `Animation` tab at the bottom of the editor when it happens? It should bring the window back up. Beyond that I wouldn't know. I suggest you join Godot's Discord server and ask there, perhaps there will be someone there more knowledgable as to what's going on.
@@GameEndeavor Thank you for a quick answer. The window indeed stopped disappearing after I clicked on the animation button, but even with it active if i do not change the parameters manually in the inspector, any changes I make while dragging or rotating sprites with my mouse reset as soon as I try to play the animation. (Yes, those parameters are in the animation track and yes, the keyframes are there as well)
I will try and talk to someone on their discord server, thank you.
@@elgatodelamuerte Any time. :) Hope you get it sorted out. Just to be sure, when you modify the rotation or position of the sprite, you have to rekey the property. Unless you're using the auto-insert feature (car icon at the top in the toolbar).
How do you flip the animation?
Is it possible to combine cutout animation with frame-by-frame animation, for more detailed types of things?
Nevermind, you answered that at around 2:20
Yes, but I've found it to be a little tricky. For example it doesn't work so well with blending in my experience. The frame lags a little. I really like blending though because it makes the cutout animation look so much smoother.
Also you have to deal with making sure your frames are consistent from animation to animation. ie if you use a frame in the idle animation, but change it in the run animation, then when you change back to the idle animation you need to make sure that the frame changes back, otherwise it'll have the frame used in the running animation.
This may be easy to achieve with the AnimationTree's StateMachine, but I'm not well versed enough in it yet to say for sure. Still studying that node.
In 3D animations, do you prefer doing it on blender or godot?
I've never worked in 3D animation. 2D only.
Can i do this in anything other than photoshop for example Krita or other digital painting programs?
Yup, in fact I made the bear in krita. It's just images, you could even use MSPaint.
@@GameEndeavor but mspaint cant setup rigging like that right?
@@boratsagdiyev1586 The rigging is done via Godot. The images are imported into Godot, which doesn't care what program was used to make the images.
@@GameEndeavor Thanks man!
Any time! :)
How do you handle collision when uses cut out sprites? Do you create a individual collision shape for each limb? Thanks
No, just create a single shape as you would if it were a single sprite. It doesn't need to be precise, a simple square will do perfectly.
@@GameEndeavor Thank you! I'll use that instead
I can't find the transition panel of the AnimationPlayer in Godot 3.2. Did they remove it?
It's been changed. If you click the keyframe to edit its values, you'll find an easing property in the inspector.
Did you use krita to create the cutout?
Yes. I use it for most of my art / assets.
this was so confusing
What fileformat do you export the spritesheet with the limbs on it?
.png
@@GameEndeavor Okay thanks, when I have the limbs as a child of the torso, the torso is on top of everything. How can I still keep the torso as a parent while changing the depth of the limbs?
@@JVJF7 On the limb in the `Visibility` section under `CanvasItem` will be a `Show Behind Parent` option.
@@GameEndeavor thankyou
@@JVJF7 Any time. :)
flip_h ?
flip_h only works for a sprite and doesn't work on it's children, at least at the time of writing this video.
I used 2 sprites while animating, I added flip in both of them, but the animation does not flip.
I don't use flip_h, I scale the x axis. Thought you were asking why I don't use flip_h.
Is the easing editor gone in Godot 3.2.1?
When I select a keyframe in the inspector I just see Time, Value, In Handle, and Out Handle.
I can't find it either. So what I did was work with bezier curves... but boy did that make my life hell! Whenever I added a key in between or had to move keys (e.g. when trying to make the arms swing before the legs) everything got messed up and it would take me tweaking the curve over and over again.
EDIT
just realised it's still there. you have to select a key (when not using bezier curves) and check the inspector on the right. there is an easing window with a curve
I don´t get how I kan make body parts like the right arm or leg be behind the body. The link in the deskription says with "RemoteTransform2D" but when I use it that way I understand it, it make nothing rotade in a circle or make othe strange things but it don´t go behid the body. Can someone help me with my problem?
With the sprite selected, under CanvasItem Visibility, there's a checkbox for "Show Behind Parent". Select that.
The link in the description is for how to set up inverse kinematics, so that joints move with each other when you reposition them. So it's not related to that.
I simple set the Z-index to -1 on the ones behind
@@esben181 That won't work if you have two of these rigs overlap. Say Rig1 is in front of Rig2. Rig1's arm and leg would go behind the body of Rig2, because their bodies are on the same z-index but both of their arms and legs are on the layer behind.
@@GameEndeavor ah, ok. thanks!
@@esben181 Any time. :)
Hey, what about the collision shapes?
Just use a single square shape that covers the entire body. No need to be precise with each part.
@@GameEndeavor, yeah. That's what I figured. But, the rectangle should follow the body movement, right? This means we're kind of manually moving a KinematicBody2D object without using native physics functions like move_and_slide. I wonder how that would break collisions with other physics bodies you happen to collide with along your way as this "hard-coded" movement implies infinite inertia.
@@rafaelgpontes if you're referring to the up and down movement then no, the collision doesn't move with that. The collision stays on the ground and just the sprites move up and down. Even if you were to move the shape, it'd just fall back to the ground.
In fact the rig won't even know about the shape. I save it as a PackedScene and just call the AnimationPlayer from outside.
Toooooo fastttttt
*Bear minimum* I see what you did there