Hi there! You are currently browsing as a guest. Why not create an account? Then you get less ads, can thank creators, post feedback, keep a list of your favourites, and more!
Retired Duck
retired moderator
Original Poster
#1 Old 9th Jul 2007 at 10:42 AM Last edited by Echo : 9th Jul 2007 at 2:30 PM.
Default Tutorial: Making your first custom object animation
Making your first custom object animation

Hi everyone, welcome to the exciting world of custom object animation! Before we get too carried away, I'm going to go over what custom animations can and can't do, what you need to know before you begin, and make a couple of recommendations.

Introduction

When an object moves or does something in game, there are a lot of elements combining to produce that effect. Animations are responsible for making an object or parts of an object move or rotate according to a sequence of steps you set out. They are not able to change the way a sim uses an object, or change the effects that object has on anything else. For example, an animation can't boost motives or build skills. Those things are covered by BHAVs. Animations are also different to effects. Effects are things like flame, or smoke, which don't have solid moving parts.

Making custom object animations isn't easy. At the very least, you need to be very comfortable with SimPE, and have some familiarity with Milkshape 3D. In order to do anything really useful with new animations, you'll probably want at least a cursory understanding of BHAVs. You don't need to be a master coder, but you'll want to know how to add a command and connect commands together. If you aren't comfortable with all of these things, you might like to take a step back, do a few tutorials in those areas, then come back once you feel a bit more confident.

Finally, there are several things which must be considered in object animation which can be ignored in sim animation. I won't assume that you've done sim animation before, but you may find this tutorial easier to follow if you give sims a go first!

To complete this tutorial you will need three of Wes’ Milkshape plugins:
- UniMesh Import/Export ( http://www.modthesims2.com/showthread.php?t=122399 )
- Cres Import, and
- Animations Export ( http://www.modthesims2.com/showthread.php?t=239060 )

(The last two are available from the same thread)

You will, of course, also need Milkshape itself, and an up to date version of SimPE with the PJSE BHAV plugins (these normally come as default now).

Finally, grab the "base object" file attached to this post. It's the object/mesh you're going to be working with for this tutorial. There's also a "one I prepared earlier" attached, in case you need something to compare to.

Now that that's all out of the way, let's get started!

Choosing a base object

Not all objects are designed to be animated. Some of the objects which do support animations cannot be read by milkshape. While it is possible to get around both of these restrictions, the steps involved are worthy of a full tutorial all by themselves. Fortunately, it's relatively simple to tell if an object can be animated as-is.

The first test is the simplest. Does it animate in-game? If there is no time during the course of game play at which the object animates, then odds are that it is not enabled for animation.

The second test is whether the object is jointed. Allow me to digress with a little bit of animation theory.

A person is jointed. A door is jointed. A bean bag is not jointed. A jointed object has one or more defined points called joints, which are connected to each other with solid lines called bones. These joints can be moved (aka translated) or rotated. When that happens, any vertices which are attached to that joint with be translated or rotated in the same way. Because a person is jointed, we can rotate the joint in our elbow to make out arm straight or bent, but we can't rotate any parts of our arm which is not a joint.



A bean bag is different. There are no particular joints, instead the whole shape of the object changes or "morphs" into a different shape. This is called a "morph" animation. In these cases it is a lot like there are two complete meshes, and every vertex from one gets moved to the equivalent vertex in the other. Morphs exist in the sims in objects like food and sofa cushions, as well as in sims themselves - the "fat" body type is a morph of the "thin" body type.

This tutorial is only concerned with animating jointed objects. You can tell if your object is jointed by opening its CRES file. If you go into the "hierarchy" tab, you should see that some of the nodes in the tree have the word "Joint" in their title. If there aren't any "joint" nodes, then your object doesn't support jointed animation.

There is also a third test, although this one is less important. In most animated objects, the joints exist inside the mesh, and these are used to move parts of the object around independently of other parts. However, a lot of objects also (or in some cases, only) have joints which are higher up in the hierarchy than the mesh. These joints can only affect the mesh as a whole, and are generally called "root_rot" or "root_trans". These are relatively easy to work around, but there are a few extra steps which I won't cover here. For now, try and use objects where all of the joints are inside the mesh.

The good news is, for this tutorial I've put together an object which meets all of these criteria. Download it from wherever you got this tutorial so you're right to follow along. (I'd suggest that you go and check yourself that the object meets all of these criteria, so that you know what you're looking for next time.)

Getting your skeleton into Milkshape

Before you can animate a jointed object, you have to have a copy of the skeleton to work with. That means that we need some way to get the information about the joints and the hierarchy and the vertices' assignments out of the package and into Milkshape.

The first step to this is one that most milkshape users should be quite familiar with. You need to export the GMDC from SimPE, and import it into Milkshape. Here's how.

Open up the object's GMDC in SimPE. To double check that you're working with a properly jointed object, you can take a look at the "Joints" tab. That should list all the joints in your object (or at least, all the joints which are below the GMDC in the hierarchy!). Select this file in the resource list, right click, and select "extract". You'll be prompted to save the file somewhere. Make sure you put it somewhere you will be able to find it again in a minute, and give it a sensible filename.

Now that the GMDC has been exported, you need to import it into Milkshape. Start up Milkshape, and import the mesh by going to "File", "Import", then "Sims2 Unimesh Import Vx.xx".



The mesh should appear. Make sure that all the joints exist by opening the "Joints" tab and making sure that the right number of bones are there.



So far so good, but this file doesn't have the right names for the joints, and none of the joints are connected to each other. As you saw earlier, the information about the joints' hierarchy is stored in the CRES, so we need to go and get that now.

Go back to SimPE, and find the CRES file. Extract that file the same way you did with the GMDC, then go back to Milkshape. Without closing the file you imported the mesh into, go to "File", "Import", then "Sims2 Unimesh CRES Skeleton Import Vx.xx". Select the CRES file you just saved, and open it. You'll get a couple of messages popping up, to which you should click "OK". These messages are telling you about what it is doing, but assuming that you've done everything right so far it should work correctly.



Now you should see that the Joints tab lists the correct names for all of the joints, and that the joints are connected by bones. Well done, your animation template is ready to go! You might want to save a copy of the ms3d file at this point, so that you can revert back to it if you make any mistakes later.



Once you've saved a copy, take the opportunity to move some of the joints around, rotate a few of them, see how everything fits together. Just don't save any of your changes. When you're ready to go on, just revert to your saved copy and continue reading.
Screenshots
Attached files:
File Type: zip  baseobject.zip (14.1 KB, 1228 downloads) - View custom content
File Type: zip  oneIPreparedEarlier.zip (14.6 KB, 976 downloads) - View custom content
38 users say thanks for this. (Who?)
Advertisement
Retired Duck
retired moderator
Original Poster
#2 Old 9th Jul 2007 at 10:52 AM
Recording your animation

There is a naming convention used for the joints that is very important here. Joints in sims objects can be either rotation joints or translation joints, never both! If a joint has '_trans' in its name, then it is a translation joint. If not, then it is a rotation joint. This part is important - as long as it doesn't say "_trans" then it's still a rotation joint, even if it doesn't have "_rot" at the end! Milkshape will actually let you move a rot joint and rotate a trans joint, but those changes won't get exported with your sim animation. Only rotations can be exported for rot joints, and translations for trans joints.

So keeping that in mind, let's start animating. Look at the bottom of your window for a bar that looks like this:



If you don't have it, go to "Window" in the drop down menus, and select "Show Keyframer". That should make it appear.

This is your animation timeline. Each of the little vertical lines represents a "frame", which is point at which you could change the arrangement of the bones in some way. The further right along the line, the later in the animation that frame will run. To start making an animation, click the "Anim" button on the far right. The timeline window should become editable.

Grab the slider on the timeline and drag it from left to right. Not a lot happens yet, but it will soon. Move it all the way to the far left, then using the drop down menus select "Animate" then "Set keyframe". The nodes and joints should change colour. (If they don't check that the "Animate" "Operate on selected joints only" option does NOT have a tick next to it. I'll explain what this means a bit later on).



Now, move the slider a few frames to the right. Using the "joints" tab, double click on one of the rot joints. Now go back to the "model" tab and select "rotate". Use this tool to rotate that joint, and see what happens. Try it with a few different rot joints. When you've made a change which is significant enough to see clearly, go to "Animate" and "Set Keyframe" again. Now, drag the slider backwards and forwards between the first frame and the frame you were just on. You should see all the parts moving between the locations you set them to!

That's the basic principle behind setting up an animation. You select frames where you want some significant change to happen, you make the change, then you set it as a "keyframe". If a frame is a keyframe, that means that no matter what, once the animation reaches that point then all of the joints must be in that position. Once you've set your keyframes, then Milkshape (and the game) will fill in the regular frames in between with sensible mid-points between the locations you've set in key frames. This is called "interpolation".

Now you need to set a few more keyframes at different points along your timeline, and use the rotation joints to make it look like the flag is fluttering in the wind. Take your time, this is a good opportunity to play around with animations and see what you are and aren't able to do with them. There are a lot of tutorials on the internet which will go into more detail on animating in Milkshape, after you finish this tutorial you might like to visit and read through some of those.

Getting your animation back into the package

Once you're happy that your animation looks sufficiently like a fluttering flag to fool the average downloader, click the "Anim" button again to disable the timeline view and save a copy of the ms3d file somewhere safe.

To export your animation into a format which SimPE can understand, use the drop down menus to select "File", "Export", "Sims2 ANIM Exporter". Give it a file name and hit enter. You will see a form which looks like this:



The important sections here are the "ANIM Type" drop down menu on the bottom left, which needs to be set to "Object Animation", and the "duration" field. The duration is the number of milliseconds from the first keyframe you defined to the last keyframe you defined. There are 1000 milliseconds to a second, so if your animation should go for 5 seconds then you would need to enter 5000 in this box. As a side note, the exporter will ignore anything you have before the first keyframe or after the last keyframe in your animation.

The exporter window should look something like this now:



Click "Export" and save the file somewhere you can find it. This is the new animation resource for your package.

The good news is that you're now done with Milkshape, so you can close it and go back in to SimPE.

Open up your package in SimPE, then right click on some white space area in the file list and select "add" from the pop up menu. Find the file you exported from Milkshape, and open it. You will get a new file in SimPE called "Unknown Resource". That's your animation, we've just got to let SimPE know that. Open that file, then open the "Resource" tab at the bottom of the SimPE window. There is a drop down list in this window called "Resource Type". Using that, select the entry called "Animation (ANIM)". Press the "force commit" link, and the record in the file list should change to an animation. Well done! Your animation is in the package!



Animations in the sims are found by name (well, technically they're found by their TGI values, but that's generated from the name). That means that the name of your animation needs to be completely unique, even considering other users. You also want to make sure that it follows naming conventions, to make things easier on you as a modder.

The first part of an animation name specifies what it is used for. 'a' means it's an adult animation, 'c' a child animation, 'o' an object animation. If it's an animation between two parties, it will use a '2'. For example, a2o is an animation between an adult and an object. Since this is an object animation, we'll prefix the name with 'o-'.

The next part is the actual name of the animation. To reduce the likelyhood of name conflicts with other users' animations, get the has value from your object. To find that, open up the cres and copy everything in the filename before the "_cres". That will be the second part of your animation name, so add that to the "o-".

Now give your animation a name describing it. For example, "wave". Add that to the animation name, then end it with "_anim". So you should have something a bit like:
o-flagpole-[echo-3.7.2007-1652c]-wave_anim. Put this in the "filename" box for the animation resource.



Commit the changes, then select "Tools", "Object Tools", then "Fix Integrity". You'll notice that the group and two instance fields get a new value. Save your file.



Now you have a complete animation ready for use. You just need to use it!

(As a side note, if you use the correct animation name when exporting the animation from Milkshape, you do not need to rename it in SimPE. I made you do it that way here so you'd be confident in changing the name later if needs be. )
Screenshots
Retired Duck
retired moderator
Original Poster
#3 Old 9th Jul 2007 at 10:59 AM Last edited by Echo : 9th Jul 2007 at 2:35 PM.
Making your animation play

Now it's time to delve into the BHAVs. Animating objects isn't one of the easiest tasks in BHAVs, and could benefit from a long discussion by itself, so I'll just give a fairly simple example. We're going to start the animation a few seconds after the game goes into live mode for the first time, then just let it loop indefinitely. That won't take too much time, and you won't have the overhead of creating an interaction.

To get the animation to start automatically when we first enter live mode after placing the object, we need to edit the object's "main" function. Main runs continuously for the entire time the object exists in game. In most objects it just loops idle, and that's what this object does at the moment. We want to change it so that it does basically this:

- Wait for a few seconds after the game enters live mode
- Start the animation and leave it running indefinitely
- Keep idling forever

At the moment the code just keeps idling forever, so that's the last line sorted out.



You'll need to add four commands before this, then connect them all up to each other in order.

Command 0 should be to wait for a few seconds. Make that an "idle" command too, then set the first parameter to a very small value, say, 0x5.

Now you need to set up the function for animation. Because the "main" function gets called from the game engine via the OBJf, when it starts "Me" will be the object, but "Stack Object" may not point to anything. To get around this, just set the Stack Object to My Object ID using "Expression" (opcode 0x2) in command 1:

[prim 0x0002] Expression (Stack Object ID 0x0000 := My 0x000B (object id))

Skip command 2 for now, we'll come back to that one in a minute. Go to command 3, and set it to use opcode 0x0069 - "Animate Object". Like all animation primitives, it draws the name of the animation from a text list, so we'll go and set this up now.

Open the text list 0x86. This is the text list that stores the names of the object animations you want to use. In line zero, put the name of your animation (but without the "_anim" on the end). Commit the change and go back over to the main BHAV.



For the "Animate Object" primitive, enter these values into the " instruction wizard:

0000202000000A000002000200000000

then open the tool wizard and take a look. You'll notice that it's looking in text list 0x86 line 0 for the name of the animation. That should be fine, since we already added it in there. The other thing you'll notice is that the "Loop count in Temp1" field is checked. That's necessary if we want to be able to set the animation to run indefinitely, since a loop count of -1 means "just keep looping". If you only want an animation to play once, then you shouldn't have this box checked. Click "okay" to close that window. Familiarize yourself with these options, you'll find them quite useful in your future animation experiments. But for now, just leave it with the values listed above.



Now, the animation command is expecting the loop count to be in Temp 1, and we want the loop count to be -1. We need to set Temp 1 to hold the correct value just before the "Animate Object" line. That's what line 2 is for. Set that to "Expression", and use the tool wizard to set it to:

[prim 0x0002] Expression (Temp 0x0001 := Literal 0xFFFF)

By now the BHAV should look pretty close to this:



Commit, save, and try out the object in game. The flag should flap around in the wind!

A couple of bits and pieces before you go...

Now you've got a working animation, you're probably feeling all set to go out and populate the world with any number of new and exciting animations. That's great! But before you do, there are a couple of things in this tutorial which I either glossed over or showed you a less-than-ideal way to do things. I'm going to run through these now, so that you'll know what's happening in your future project.

If you open up the ANIM resource in SimPE, you'll notice in the "joint" drop down list that every joint has a set of coordinates for every keyframe, even if that joint hasn't moved at all. (In my case, that's 6 keyframes each).



That is because, as instructed, you turned off the "Operate on selected joints only" option in Milkshape. When that is off, every keyframe you set is a keyframe on all bones. If you uncheck that, you can specify keyframes just for the bones you want to move. That is a much better way to create animations that you intend to keep, especially if you intend to re-use them in other objects!

If we'd created the animation that way, the "flamingo" and "pulley_trans" joints would not appear in this list, and the flag joints would only have contained frames where they actually needed them.

The other benefit to animating only the frames you care about is that you can use the animations as overlays. That is, you can run multiple animations on the same object at the same time using a slightly different set of primitives. For example, you could make an animation which lowered the flag to half mast using the pulley_trans, and run that at the same time as the flag waving animation, and the flag would wave as it lowered. Nifty, huh?

So next time you run through an animation, try it with "Operate on selected joints only" checked and take a look at the output.

The next really important thing to note is that there is a "common mistakes and issues" document in this forum. Please read it. Most of the stuff in it wasn't very relevant in this example, but if you want to create complex animations or use them in interactions or anything along those lines, you'll come across a few tricky situations and the information in there will be invaluable!

Third point, when you're testing animations in game, always turn testing cheats on. Lots of different things can go wrong at different points in the development of these objects, and testing cheats can often give you a hint about why objects are misbehaving.

Finally, if you have trouble with something in this tutorial, please post a message in this thread. Make sure you attach a copy of the object as it currently stands, along with a detailed explanation about where you got up to, and what's not working. We can't help if we can't see what's gone wrong!

If you're just having general trouble with animations that are not directly related to this tutorial then you should start a new thread, but still include all the details specified above. You can also mention any related tutorials you've done, because it helps us to gauge your experience level.

Good luck everyone, and well done on getting custom animations working!

Thanks...

Must go, of course, to Wes. He made all of the milkshape tools which make these projects possible, and even more amazing he put up with all my questions and pestering and sending-to-him-of-broken-objects!

Also deserving of significant recognition, Quaxi of SimPE fame, Peter Jones of the PJSE tools, and Delphy for hosting such a great learning and sharing resource!
Screenshots
Lab Assistant
#4 Old 14th Jul 2007 at 7:39 AM
thank you i will try tomorrow

TASH

http://passionssims2com.page.tl/

my own website. check it out
Instructor
#5 Old 18th Jul 2007 at 3:40 PM
Thanks for the tutorial. Here's a pdf version of your tutorial for those like me who like to keep offline copies of tutorials.
Attached files:
File Type: zip  Making Your First Custom Object Animation.zip (103.4 KB, 678 downloads) - View custom content
Lab Assistant
#6 Old 20th Aug 2007 at 5:28 AM
I´m a noob at this but I really want to learn. I dont know how to find the GMDC´s in SimPE. I think I have the Milkshape part figured out somewhat, but i suck at SimPE. I need to know how to extract the human "skeleton" from PE and inport it to Milkshape. Then I suppose going back again is going to present another problem, but I need help on this matter. I stayed up all night reading tutorials and this is as far I can get without help....
Retired Duck
retired moderator
Original Poster
#7 Old 20th Aug 2007 at 11:09 AM
Hey Mailman,

Are you trying to make sim animations? If so, you don't really need to get the human skeleton, since DrPixel's done all that for us here:
http://www.modthesims2.com/showthread.php?t=239172
Test Subject
#8 Old 27th Aug 2007 at 8:22 PM Last edited by wzy1985 : 27th Aug 2007 at 8:56 PM.


how to show this window,I can't find it,and can't open Pie Menu Functions/string in the plugin view

if I click the plugin view,It will make this kind of mistake
Retired Duck
retired moderator
Original Poster
#9 Old 28th Aug 2007 at 12:34 PM
That is a SimPE error, you'd be better off asking about that in the SimPE forums, since it's not actually related to this tutorial.
Test Subject
#10 Old 28th Aug 2007 at 4:08 PM
Thank you,I know what's wrong with it today.When install the SimPe,If there is a window ask if you want to connect to the Internet to have new load automatismly,choose "NO",it will be OK.The plungin window will show.
Lab Assistant
#11 Old 1st Sep 2007 at 9:40 AM
Thank you so much Echo! As always an exelent and easy to understand tutorial.
I managed to make an animated flag and I was so proud to look at it in game!

I tried to make a new thing from the flamingo and from the garden gnome as it seems you used one of them as a base when making the flag pole. It seems as it has bones but it does not show any joints in the GMDC. I am going to try other objects but I was curios how you made it?

Anyway a big thank you for this great tutorial!
Retired Duck
retired moderator
Original Poster
#12 Old 1st Sep 2007 at 10:28 AM
Hey solfal! You are of course quite welcome, and thank you for the lovely comments!

As you noted, I did originally clone the flag from the flamingo, but I modified it pretty heavily before I posted it up as the template, otherwise I would have just said to clone the flamingo. In this case I actually built a complete new bone structure in the cres and gmdc from the ground up so that it would meet the needs of the tutorial. If you're interested I can put together some quick notes on how I did it (since I know you're pretty competent with SimPE! ), but I'm not sure I could put together a complete tutorial on the process just at the moment.
Lab Assistant
#13 Old 1st Sep 2007 at 11:00 AM
Hi Echo! If you have the time to put up some notes I would be very greatfull

As I understand it I can change the placement of the joints by changing the XYZ values in the CRES and I guess adding joints is similar to adding slots?

I did change the placement of the joints and got them into Milkshape in their new positions but then I am stucked.

This is so much fun!
Retired Duck
retired moderator
Original Poster
#14 Old 1st Sep 2007 at 1:34 PM
Indeed, the modifications to the cres are almost exactly the same as adding slots, with the exception that you have to put a number in the "GMDC joint index" box under the cTransformNode to specify a unique joint number. (It's above the rotation boxes). If you're comfortable with that, you should have no trouble adding joints to the cres.

The real trick is making sure that the joints you create in the cres match up correctly with the joints you add in the GMDC. You can add joints easily enough using Milkshape, and exporting the mesh should export the new joints with it. You have to be careful though, because the joints in the GMDC don't have any of the hierarchy information, they're positioned using absolute coordinates. Basically, you have to make sure that your joints are positioned in Milkshape in such a way that if you were to import the cres over the top of them, they would not move at all.

There are a couple of ways to do this, and I haven't tested them out very well because I've only done it once or twice, but very quickly:
Option 1: Move them manually to the correct position. You can do this by moving all the joints to an initial position of (0,0,0), then stepping through each of the nodes down to your created joint making the necessary movements along the way. That's the technique I used for the flag, so I know it works, but it's pretty slow and messy.

Option 2: You can try importing the cres into your mesh, then going through the comments in each of the joints and changing the "PRelQuatDat"s into "ImpQuatDat"s. I understand that's how Jasana has done it, but I only tried that once when I was first playing with the plugins so I'm not certain how accurate that would be.

Was that any help?
Lab Assistant
#15 Old 1st Sep 2007 at 1:34 PM
Thank you so much Echo! It was a great help and gives me a lot to try and mess around with :D
Alchemist
#16 Old 2nd Sep 2007 at 3:00 AM
Let me suggest a way to start with the mesh and work backwards to the CRES. For all of this, I am describing the process using joints with no rotation. I do not mean they can't be rotated, just that, at the start, they have a default rotation of 0,0,0. Joints with native rotations require much more complex calculations than I feel like I could write a mini-tutorial on.

First, make the basic mesh and create the joints in the order you expect to list them in the CRES. You do this by adding a joints and moving it to where you want it to be (say, the center of the bathtub faucet knob). Go ahead and name your joints, using the Maxis conventions (_trans or _rot). Save this file to work on your MESH from later.

I created a simple MilkShape plugin to help with all this called "Sims2 AniMesh Adjust Joint" (it is in the AniMesh download zip file). All it does is allow a joint to be selected and specify a new parent (or no parent). When you change the parent, the plugin recalculates the position as parent-relative. This ruins the file for UniMesh export, but prepares it for AniMesh work.

Note that, to make MilkShape work correctly, you need to have a parent joint higher on the list (lower number) than the child. A few Maxis models do not do this, and they create problems. I believe the Adjust Joint plugin will refuse to create a child-before-parent situation.

So, using the Adjust Joint tool, structure your joint heirarchy in MilkShape to the way it is supposed to be. Save this file for later ANIMATION work.

Now, go to the Tools menu in MilkShape and select the "Model Information 1.7" plugin. In the window it brings up, you can find a section named joints, and when you click on the plus, you can review each of the joints, and obtain the X, Y and Z positions for each bone. Write these all down.

Now, we can set up our CRES. Adding in, or renaming existing joints, is done like Echo describes. For the rotation, leave that at zero (in the quaternion, that is 0,0,0,1). For the Translation, use the numbers you got from MilkShape, BUT, you need to negate the X values (1.2 becomes -1.2 or -0.9 becomes 0.9) and swap the Y and Z values. UniMesh and AniMesh will automatically do that with the mesh and animation for you.

Now, you should have the right joint layout in the GMDC, in your .ms3d for AniMesh and in the CRES. Now you can make the keyframes and so on to animate your mesh.

<* Wes *>

If you like to say what you think, be sure you know which to do first.
Lab Assistant
#17 Old 2nd Sep 2007 at 8:45 PM
Great information Wes. I do hope I will be able to understand it! I am learning this in baby steps. Making a new animation from an object that is animated and has the joints in the CRES is no problem. (after tearing my hair for hours and then realise I had forgot fix integrity!)

Beeing able to import joints in the GMDC is worse. I was able to add joints in milkshape and renamed them to the names the joints has in the CRES. (At least I think that was what I did!) I exported as a milkshape 3D ASCII file, and imported to milkshape, but no joints appears. I trid to tick different boxes while importing but no change.
Screenshots
Alchemist
#18 Old 3rd Sep 2007 at 12:07 AM
You want to create the joints for the mesh right in MilkShape. If you are starting with some existing mesh as a base, exporting it with MilkShape ASCII should get you the names and heirarchy.

In MilkShape, on the Model tab is a button called Joint. If you depress this, and then click somewhere in a window, a new joint appears. You can then select it, and move it around where you want. On the Joints panel, you can rename it.

This is now where the "Sims2 AniMesh Adjust Joint" plugin is most usable. Run the plugin, select the new joint name and then pick a new parent.

Remember, a joint that has a parent will be moved along with the parent. If you were making a wagon, the joint for the wheel would be a child of the wagon itself, which might be something like root_trans. As the wagon moved, the joint would follow along. You would make the wheel spin on that joint, but the center of that spinning would stay at the same location relative to the wagon body, even as the wagon was turned to a new direction.

<* Wes *>

If you like to say what you think, be sure you know which to do first.
Lab Assistant
#19 Old 3rd Sep 2007 at 3:10 PM
Quote: Originally posted by wes_h
You want to create the joints for the mesh right in MilkShape. If you are starting with some existing mesh as a base, exporting it with MilkShape ASCII should get you the names and heirarchy.

<* Wes *>


I think I went over my head here. I started with the gnome as I thought it would be a great base object if I got it to work. But as it doesn´t show any joints in the GMDC even if there is joints in the cres it was to complicated.
The joints I made in milkshape does not import back to milkshape with the ASCII.

I think I better let it go for a while and try to move a joint in an object that already has joints in the GMDC Thank you for the information :D
Alchemist
#20 Old 4th Sep 2007 at 2:04 AM
There are other issues starting with an unanimated object like the gnome or one of the statues and making it into an animated object. So I agree, starting with something that is closer to what you want and working from there is easier, and less error prone.

Lots of people start with the flamingo. It already has some joints, and some BHAVs (so your sims can kick it over).

<* Wes *>

If you like to say what you think, be sure you know which to do first.
Retired Duck
retired moderator
Original Poster
#21 Old 4th Sep 2007 at 11:11 AM
I'd suggest checking out the mini-golf game, since it actually has its joints inside the GMDC. The flamingo doesn't include any joints inside the GMDC, it depends on root_rot and root_trans, which are in the CRES outside the mesh.
Lab Assistant
#22 Old 4th Sep 2007 at 6:52 PM
Thank you Wes and Echo. I cloned the microwave and made it to be placeble on floor and got a nice little package to start fiddeling with. I made a little flip flop toy and went on to make a toddler animation that puts it (an animation i realy have been wanting to have) And all works. I am so thrilled.

Thank you both for making it possible to have this much fun :D
Lab Assistant
#23 Old 22nd Sep 2007 at 8:19 PM
When I make an animaiton and have the "operate on selected joints only" It still sets the ferst keyframe for all joints, then only sets them for the ones I have moved. As a result I have a sim with arms reach out to the sides when I havn´t moved the arms at all. I thought it would then blend with the former animation. Have I missed something?
Instructor
#24 Old 22nd Sep 2007 at 10:27 PM Last edited by marvine : 22nd Sep 2007 at 10:36 PM.
Solfal, it should blend (still depends on the "blend" settings in the "animate sim" expression), but unlike with Miche's exporter, the first frame will be taken into account; so you should set your first keyframe with the arms down and relaxed, or a pose close to the last frame of the former animation - works fine for me, and the blending makes up for the smaller differences
Lab Assistant
#25 Old 23rd Sep 2007 at 7:14 PM
Thank you Marvine!
I have read somevere that you could just make a wave with one arm, and the sim will wave from the position it is in. Thats why I woundered if I made it the wrong way.
Page 1 of 7
Back to top