The Millionth Monkey Gets Its Typewriter.
Moderator: Moderators
-
- Posts: 854
- Joined: 28 Jan 2005, 18:15
Argh, how am I supposed to know to check out a thread when its name involves monkeys and typewriters? Surely you don't assume I'll check just because you started it?
Perhaps I should try rewriting all the mech scripts to use this. Though really, if their walks are getting rewritten they should be getting improved too, and I just don't have those skills.
Should those sleeps be inside the second if()? That would make it not sleep when it is moving, of which I am unsure of the wisdom. I would think the sleep ought to be just outside that bracket.
Perhaps I should try rewriting all the mech scripts to use this. Though really, if their walks are getting rewritten they should be getting improved too, and I just don't have those skills.
Should those sleeps be inside the second if()? That would make it not sleep when it is moving, of which I am unsure of the wisdom. I would think the sleep ought to be just outside that bracket.
@JC whenever y'all want us to start proposing specifications, I would have to say that every modder is probably game.
The big trouble is going to be how to Make it Work in a way that preserves the strengths of BOS and eliminates the weaknesses. We need something like SupCom's system of IK + scripting, but we're also going to need it to be lightning-fast, and bug-free... a very, very tall order.
COB, as a bunch of assembler with a few names thrown in, is pretty darn close to ideal... I don't suppose that Scriptor's source is around anywhere? We could just extend the BOS format with the relatively few (but, to be admitted, oh-so-powerful) things we need, edit S3O so that it preseved 3DS IK bones (Milkshape3D can export 3DS with IK, I believe, just not some of the advanced things, like blend zones) and slightly change a few of the things that are currently in BOS to better fit our needs, such as passing ROTATE and MOVE commands with packed-coordinates in three dimensions, etc... most of this is fairly minor...
The big trouble is going to be how to Make it Work in a way that preserves the strengths of BOS and eliminates the weaknesses. We need something like SupCom's system of IK + scripting, but we're also going to need it to be lightning-fast, and bug-free... a very, very tall order.
COB, as a bunch of assembler with a few names thrown in, is pretty darn close to ideal... I don't suppose that Scriptor's source is around anywhere? We could just extend the BOS format with the relatively few (but, to be admitted, oh-so-powerful) things we need, edit S3O so that it preseved 3DS IK bones (Milkshape3D can export 3DS with IK, I believe, just not some of the advanced things, like blend zones) and slightly change a few of the things that are currently in BOS to better fit our needs, such as passing ROTATE and MOVE commands with packed-coordinates in three dimensions, etc... most of this is fairly minor...
Scriptre has been OS for some time now actually. The problem is that (as with most projects that seem to be around the community) it was only developed by a single dude and the code is pretty hacky at some points. I tried to modify some things once for a similar project for Spring and it was a nightmare to figure out what did what.
- LathanStanley
- Posts: 1429
- Joined: 20 Jun 2005, 05:16
- Wolf-In-Exile
- Posts: 497
- Joined: 21 Nov 2005, 13:40
- LathanStanley
- Posts: 1429
- Joined: 20 Jun 2005, 05:16
well.... I "thought" I had it set up right... but the spring modifiers that moved all the joints in the legs back to the "natural standing" state... never worked right... the mech I animated would start off standing right, take about 4 steps ok, then it would act like it was russian dancing whatever thing and squat real low and kick like crazy as it bounced like a superball... then it would just REALLY walk strange, or float...
I just think it was the setup... but I spent 3 months farting with it, re-doing it, over and over, teaching myself everything I could learn by trial and error, and no book/manual to help...
that was years ago, on 3dsmax 1....
haven't given it much effort since...
I just think it was the setup... but I spent 3 months farting with it, re-doing it, over and over, teaching myself everything I could learn by trial and error, and no book/manual to help...
that was years ago, on 3dsmax 1....
haven't given it much effort since...
- Wolf-In-Exile
- Posts: 497
- Joined: 21 Nov 2005, 13:40
IK solving is sloooooooow. The only way to have that in a game with this many units is to make regular snapshots of the skeleton shape and save those. Blender was capable of that some time ago but I think they broke it again. Then there's the trouble of converting that to BOS which I'm currently trying and failing horribly at (no idea in relation to what Blender gives those quaternions).
Realtime IK solving is really too slow yeah, not to mention a lot of work.
IMO A high level lua script that starts specific animation scripts would work best. You would still be able to control the bones manually, but most of the animation would be made in a normal 3D editor.
BOS is old and limited, extending something like that is a bad idea in my opinion.
IMO A high level lua script that starts specific animation scripts would work best. You would still be able to control the bones manually, but most of the animation would be made in a normal 3D editor.
BOS is old and limited, extending something like that is a bad idea in my opinion.
lua havign mroe support for thigns liek classes and objects would be betetr.
All fo Arghs Go1 Go2 etc functiosn and Motion1 2 3 etc could be encapsulated into a Limb class.
I know lua doesnt natively support classes exactly but luabind adds them, and we're using luabind to bind lua to spring....
I suggest we try to integrate the code in the TA -> supcom animation tools that're being worked on then expand from there.
All fo Arghs Go1 Go2 etc functiosn and Motion1 2 3 etc could be encapsulated into a Limb class.
I know lua doesnt natively support classes exactly but luabind adds them, and we're using luabind to bind lua to spring....
I suggest we try to integrate the code in the TA -> supcom animation tools that're being worked on then expand from there.
- Wolf-In-Exile
- Posts: 497
- Joined: 21 Nov 2005, 13:40
Lol, I know anim scripts would be better for ingame anims, that's what I meant. I wasn't sure if Spring had support for those and I was answering Stanley's question based on the symptoms he described.
I'm sure SupCom handles animations similarly, as they said the anims would use a skeleton anim system.
I'm sure SupCom handles animations similarly, as they said the anims would use a skeleton anim system.
So, what's so great in that script bit? All I see is that you kept the ultra messy and confusing way of the Cavedog scripting, with the incomprehensible MotionControl() function, and that you've got several similar function, which I guess does not good for the engine stressing (I kept the habit to limit the number of function running at once because old TA couldn't handle more than about 8 or 10, btw).
The walkscript of my latest unit, an eight legged scorpion, looks like that:
Uh, ok, it looks long when posted like that, but don't worry, most of that code was done by copy'n'paste'n'replace all "..." with "..."
Anyway, what I wanted to show, is how a broad use of macros can make the code very easily configurable. I want to speed up the walkspeed? I juse modify the #define BASE_TIME 179. One single change in the bos, and the speed values of hundred of "turn" command adjust. I want all 8 legs to go higher when raised? I just modify #define LEG__1_UP_ANGLE <10>. Etc.....
Oh, and I tried to treat piecename as variable, as after all they're number, but, while Scriptor agree to assign a piece to a variable, it refuses to use a variable in a show/turn/etc.. commands. I believe it's a problem with Scriptor and not the COB system. I tried to use with macros with piecenames as argument, but Scriptor didn't like it either.
The walkscript of my latest unit, an eight legged scorpion, looks like that:
Code: Select all
// Les temps sont en millisecondes
//
// Tourner vers l'avant: +
// Tourner vers l'arrière: -
// Tourner vers le haut: +
// Tourner vers le base: -
//
// Cela correspond aux angles des pattes de droite (leg2**)
// Attention, dans 3do Builder l'axe z est invers├â┬®.
// Attention, dans UpSpring les axe x et z sont invers├â┬®.
// (Mais les pattes ne tournent pas selon x de toute façon.)
//
// Les angles de "UP" doivent être plus grand que ceux de "DOWN"
// et les angles de "FRONT" doivent être plus grand que ceux de "BACK"
// sinon la vitesse est n├â┬®gative et ├â┬ºa tourne dans le mauvais sens.
// Why am I commenting in French? Sorry about that:
//
// Times are in milliseconds
//
// Turn legs forward: +
// Turn legs backward: -
// Turn legs upward: +
// Turn legs downward: -
//
// It corresponds to the angles of the right sided legs.
// Beware, in 3do Builder the z axis is inverted.
// Beware, in UpSpring the x and z axis ared inverted.
// (But legs don't turn around x anyway.)
//
// The "UP" angles must be higher than the "DOWN" angles
// and the "FRONT" angles must be higher than the "BACK" angles
// otherwise speed becomes negative and it turns the wrong way.
#define BASE_TIME 179// This is the only time to change if you wish to speed up or slow down the leg animation.
#define LIFT_TIME (BASE_TIME)
#define LOWER_TIME (BASE_TIME)
#define FRONT_TIME (BASE_TIME)
#define BACK_TIME ((BASE_TIME)*12)
// The current "PAUSE_LEGS" macro and "HazyShadeOfWinter()" function suppose times follow those relations.
#define LEG_11_FRONT_ANGLE <20>// y angle of the front-front left & right legs, when in front
#define LEG_21_FRONT_ANGLE <15>// y angle of the middle-front left & right legs, when in front
#define LEG_31_FRONT_ANGLE <10>// y angle of the middle-rear left & right legs, when in front
#define LEG_41_FRONT_ANGLE <5>// y angle of the rear-rear left & right legs, when in front
#define LEG_11_BACK_ANGLE <-10>// y angle of the front-front left & right legs, when backward
#define LEG_21_BACK_ANGLE <-20>// y angle of the middle-front left & right legs, when backward
#define LEG_31_BACK_ANGLE <-30>// y angle of the middle-rear left & right legs, when backward
#define LEG_41_BACK_ANGLE <-40>// y angle of the rear-rear left & right legs, when backward
#define LEG_11_REST_ANGLE <20>// y angle of the front-front left & right legs, when in resting position
#define LEG_21_REST_ANGLE <4>// y angle of the middle-front left & right legs, when in resting position
#define LEG_31_REST_ANGLE <-15>// y angle of the middle-rear left & right legs, when in resting position
#define LEG_41_REST_ANGLE <-38>// y angle of the rear-rear left & right legs, when in resting position
#define LEG__1_DOWN_ANGLE <10>// z angle between body and first segment of all legs, when down
#define LEG__2_DOWN_ANGLE <-20>// z angle of the second segment of all legs, when down
#define LEG__3_DOWN_ANGLE <-20>// z angle of the third segment of all legs, when down
#define LEG__4_DOWN_ANGLE <-20>// z angle of the fourth segment of all legs, when down
#define LEG__5_DOWN_ANGLE <-20>// z angle of the fifth segment of all legs, when down
#define LEG__1_UP_ANGLE <20>// z angle between body and first segment of all legs, when up
#define LEG__2_UP_ANGLE <-10>// z angle of the second segment of all legs, when up
#define LEG__3_UP_ANGLE <-10>// z angle of the third segment of all legs, when up
#define LEG__4_UP_ANGLE <-10>// z angle of the fourth segment of all legs, when up
#define LEG__5_UP_ANGLE <-10>// z angle of the fift segment of all legs, when up
#define RESET_ALL_LEGS \
turn leg111 to y-axis 0 - (LEG_11_REST_ANGLE) now;\
turn leg121 to y-axis 0 - (LEG_21_REST_ANGLE) now;\
turn leg131 to y-axis 0 - (LEG_31_REST_ANGLE) now;\
turn leg141 to y-axis 0 - (LEG_41_REST_ANGLE) now;\
turn leg211 to y-axis (LEG_11_REST_ANGLE) now;\
turn leg221 to y-axis (LEG_21_REST_ANGLE) now;\
turn leg231 to y-axis (LEG_31_REST_ANGLE) now;\
turn leg241 to y-axis (LEG_41_REST_ANGLE) now;\
\
turn leg111 to z-axis 0 - (LEG__1_DOWN_ANGLE) now;\
turn leg112 to z-axis 0 - (LEG__2_DOWN_ANGLE) now;\
turn leg113 to z-axis 0 - (LEG__3_DOWN_ANGLE) now;\
turn leg114 to z-axis 0 - (LEG__4_DOWN_ANGLE) now;\
turn leg115 to z-axis 0 - (LEG__5_DOWN_ANGLE) now;\
turn leg121 to z-axis 0 - (LEG__1_DOWN_ANGLE) now;\
turn leg122 to z-axis 0 - (LEG__2_DOWN_ANGLE) now;\
turn leg123 to z-axis 0 - (LEG__3_DOWN_ANGLE) now;\
turn leg124 to z-axis 0 - (LEG__4_DOWN_ANGLE) now;\
turn leg125 to z-axis 0 - (LEG__5_DOWN_ANGLE) now;\
turn leg131 to z-axis 0 - (LEG__1_DOWN_ANGLE) now;\
turn leg132 to z-axis 0 - (LEG__2_DOWN_ANGLE) now;\
turn leg133 to z-axis 0 - (LEG__3_DOWN_ANGLE) now;\
turn leg134 to z-axis 0 - (LEG__4_DOWN_ANGLE) now;\
turn leg135 to z-axis 0 - (LEG__5_DOWN_ANGLE) now;\
turn leg141 to z-axis 0 - (LEG__1_DOWN_ANGLE) now;\
turn leg142 to z-axis 0 - (LEG__2_DOWN_ANGLE) now;\
turn leg143 to z-axis 0 - (LEG__3_DOWN_ANGLE) now;\
turn leg144 to z-axis 0 - (LEG__4_DOWN_ANGLE) now;\
turn leg145 to z-axis 0 - (LEG__5_DOWN_ANGLE) now;\
\
turn leg211 to z-axis (LEG__1_DOWN_ANGLE) now;\
turn leg212 to z-axis (LEG__2_DOWN_ANGLE) now;\
turn leg213 to z-axis (LEG__3_DOWN_ANGLE) now;\
turn leg214 to z-axis (LEG__4_DOWN_ANGLE) now;\
turn leg215 to z-axis (LEG__5_DOWN_ANGLE) now;\
turn leg221 to z-axis (LEG__1_DOWN_ANGLE) now;\
turn leg222 to z-axis (LEG__2_DOWN_ANGLE) now;\
turn leg223 to z-axis (LEG__3_DOWN_ANGLE) now;\
turn leg224 to z-axis (LEG__4_DOWN_ANGLE) now;\
turn leg225 to z-axis (LEG__5_DOWN_ANGLE) now;\
turn leg231 to z-axis (LEG__1_DOWN_ANGLE) now;\
turn leg232 to z-axis (LEG__2_DOWN_ANGLE) now;\
turn leg233 to z-axis (LEG__3_DOWN_ANGLE) now;\
turn leg234 to z-axis (LEG__4_DOWN_ANGLE) now;\
turn leg235 to z-axis (LEG__5_DOWN_ANGLE) now;\
turn leg241 to z-axis (LEG__1_DOWN_ANGLE) now;\
turn leg242 to z-axis (LEG__2_DOWN_ANGLE) now;\
turn leg243 to z-axis (LEG__3_DOWN_ANGLE) now;\
turn leg244 to z-axis (LEG__4_DOWN_ANGLE) now;\
turn leg245 to z-axis (LEG__5_DOWN_ANGLE) now;\
#define LIFT_1_LEFT\
turn leg111 to z-axis 0 - (LEG__1_UP_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg112 to z-axis 0 - (LEG__2_UP_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg113 to z-axis 0 - (LEG__3_UP_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg114 to z-axis 0 - (LEG__4_UP_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg115 to z-axis 0 - (LEG__5_UP_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LIFT_TIME);\
#define LIFT_2_LEFT\
turn leg121 to z-axis 0 - (LEG__1_UP_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg122 to z-axis 0 - (LEG__2_UP_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg123 to z-axis 0 - (LEG__3_UP_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg124 to z-axis 0 - (LEG__4_UP_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg125 to z-axis 0 - (LEG__5_UP_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LIFT_TIME);\
#define LIFT_3_LEFT\
turn leg131 to z-axis 0 - (LEG__1_UP_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg132 to z-axis 0 - (LEG__2_UP_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg133 to z-axis 0 - (LEG__3_UP_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg134 to z-axis 0 - (LEG__4_UP_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg135 to z-axis 0 - (LEG__5_UP_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LIFT_TIME);\
#define LIFT_4_LEFT\
turn leg141 to z-axis 0 - (LEG__1_UP_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg142 to z-axis 0 - (LEG__2_UP_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg143 to z-axis 0 - (LEG__3_UP_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg144 to z-axis 0 - (LEG__4_UP_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg145 to z-axis 0 - (LEG__5_UP_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LIFT_TIME);\
#define LIFT_1_RIGHT\
turn leg211 to z-axis (LEG__1_UP_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg212 to z-axis (LEG__2_UP_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg213 to z-axis (LEG__3_UP_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg214 to z-axis (LEG__4_UP_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg215 to z-axis (LEG__5_UP_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LIFT_TIME);\
#define LIFT_2_RIGHT\
turn leg221 to z-axis (LEG__1_UP_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg222 to z-axis (LEG__2_UP_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg223 to z-axis (LEG__3_UP_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg224 to z-axis (LEG__4_UP_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg225 to z-axis (LEG__5_UP_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LIFT_TIME);\
#define LIFT_3_RIGHT\
turn leg231 to z-axis (LEG__1_UP_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg232 to z-axis (LEG__2_UP_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg233 to z-axis (LEG__3_UP_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg234 to z-axis (LEG__4_UP_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg235 to z-axis (LEG__5_UP_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LIFT_TIME);\
#define LIFT_4_RIGHT\
turn leg241 to z-axis (LEG__1_UP_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg242 to z-axis (LEG__2_UP_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg243 to z-axis (LEG__3_UP_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg244 to z-axis (LEG__4_UP_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LIFT_TIME);\
turn leg245 to z-axis (LEG__5_UP_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LIFT_TIME);\
#define LOWER_1_LEFT\
turn leg111 to z-axis 0 - (LEG__1_DOWN_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg112 to z-axis 0 - (LEG__2_DOWN_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg113 to z-axis 0 - (LEG__3_DOWN_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg114 to z-axis 0 - (LEG__4_DOWN_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg115 to z-axis 0 - (LEG__5_DOWN_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LOWER_TIME);\
#define LOWER_2_LEFT\
turn leg121 to z-axis 0 - (LEG__1_DOWN_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg122 to z-axis 0 - (LEG__2_DOWN_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg123 to z-axis 0 - (LEG__3_DOWN_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg124 to z-axis 0 - (LEG__4_DOWN_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg125 to z-axis 0 - (LEG__5_DOWN_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LOWER_TIME);\
#define LOWER_3_LEFT\
turn leg131 to z-axis 0 - (LEG__1_DOWN_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg132 to z-axis 0 - (LEG__2_DOWN_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg133 to z-axis 0 - (LEG__3_DOWN_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg134 to z-axis 0 - (LEG__4_DOWN_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg135 to z-axis 0 - (LEG__5_DOWN_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LOWER_TIME);\
#define LOWER_4_LEFT\
turn leg141 to z-axis 0 - (LEG__1_DOWN_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg142 to z-axis 0 - (LEG__2_DOWN_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg143 to z-axis 0 - (LEG__3_DOWN_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg144 to z-axis 0 - (LEG__4_DOWN_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg145 to z-axis 0 - (LEG__5_DOWN_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LOWER_TIME);\
#define LOWER_1_RIGHT\
turn leg211 to z-axis (LEG__1_DOWN_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg212 to z-axis (LEG__2_DOWN_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg213 to z-axis (LEG__3_DOWN_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg214 to z-axis (LEG__4_DOWN_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg215 to z-axis (LEG__5_DOWN_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LOWER_TIME);\
#define LOWER_2_RIGHT\
turn leg221 to z-axis (LEG__1_DOWN_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg222 to z-axis (LEG__2_DOWN_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg223 to z-axis (LEG__3_DOWN_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg224 to z-axis (LEG__4_DOWN_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg225 to z-axis (LEG__5_DOWN_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LOWER_TIME);\
#define LOWER_3_RIGHT\
turn leg231 to z-axis (LEG__1_DOWN_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg232 to z-axis (LEG__2_DOWN_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg233 to z-axis (LEG__3_DOWN_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg234 to z-axis (LEG__4_DOWN_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg235 to z-axis (LEG__5_DOWN_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LOWER_TIME);\
#define LOWER_4_RIGHT\
turn leg241 to z-axis (LEG__1_DOWN_ANGLE) speed ((LEG__1_UP_ANGLE) - (LEG__1_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg242 to z-axis (LEG__2_DOWN_ANGLE) speed ((LEG__2_UP_ANGLE) - (LEG__2_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg243 to z-axis (LEG__3_DOWN_ANGLE) speed ((LEG__3_UP_ANGLE) - (LEG__3_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg244 to z-axis (LEG__4_DOWN_ANGLE) speed ((LEG__4_UP_ANGLE) - (LEG__4_DOWN_ANGLE))*1000/(LOWER_TIME);\
turn leg245 to z-axis (LEG__5_DOWN_ANGLE) speed ((LEG__5_UP_ANGLE) - (LEG__5_DOWN_ANGLE))*1000/(LOWER_TIME);\
#define FRONT_1_LEFT\
turn leg111 to y-axis 0 - (LEG_11_FRONT_ANGLE) speed ((LEG_11_FRONT_ANGLE) - (LEG_11_BACK_ANGLE))*1000/(FRONT_TIME);
#define FRONT_2_LEFT\
turn leg121 to y-axis 0 - (LEG_21_FRONT_ANGLE) speed ((LEG_21_FRONT_ANGLE) - (LEG_21_BACK_ANGLE))*1000/(FRONT_TIME);
#define FRONT_3_LEFT\
turn leg131 to y-axis 0 - (LEG_31_FRONT_ANGLE) speed ((LEG_31_FRONT_ANGLE) - (LEG_31_BACK_ANGLE))*1000/(FRONT_TIME);
#define FRONT_4_LEFT\
turn leg141 to y-axis 0 - (LEG_41_FRONT_ANGLE) speed ((LEG_41_FRONT_ANGLE) - (LEG_41_BACK_ANGLE))*1000/(FRONT_TIME);
#define FRONT_1_RIGHT\
turn leg211 to y-axis (LEG_11_FRONT_ANGLE) speed ((LEG_11_FRONT_ANGLE) - (LEG_11_BACK_ANGLE))*1000/(FRONT_TIME);
#define FRONT_2_RIGHT\
turn leg221 to y-axis (LEG_21_FRONT_ANGLE) speed ((LEG_21_FRONT_ANGLE) - (LEG_21_BACK_ANGLE))*1000/(FRONT_TIME);
#define FRONT_3_RIGHT\
turn leg231 to y-axis (LEG_31_FRONT_ANGLE) speed ((LEG_31_FRONT_ANGLE) - (LEG_31_BACK_ANGLE))*1000/(FRONT_TIME);
#define FRONT_4_RIGHT\
turn leg241 to y-axis (LEG_41_FRONT_ANGLE) speed ((LEG_41_FRONT_ANGLE) - (LEG_41_BACK_ANGLE))*1000/(FRONT_TIME);
#define BACK_1_LEFT\
turn leg111 to y-axis 0 - (LEG_11_BACK_ANGLE) speed ((LEG_11_FRONT_ANGLE) - (LEG_11_BACK_ANGLE))*1000/(BACK_TIME);
#define BACK_2_LEFT\
turn leg121 to y-axis 0 - (LEG_21_BACK_ANGLE) speed ((LEG_21_FRONT_ANGLE) - (LEG_21_BACK_ANGLE))*1000/(BACK_TIME);
#define BACK_3_LEFT\
turn leg131 to y-axis 0 - (LEG_31_BACK_ANGLE) speed ((LEG_31_FRONT_ANGLE) - (LEG_31_BACK_ANGLE))*1000/(BACK_TIME);
#define BACK_4_LEFT\
turn leg141 to y-axis 0 - (LEG_41_BACK_ANGLE) speed ((LEG_41_FRONT_ANGLE) - (LEG_41_BACK_ANGLE))*1000/(BACK_TIME);
#define BACK_1_RIGHT\
turn leg211 to y-axis (LEG_11_BACK_ANGLE) speed ((LEG_11_FRONT_ANGLE) - (LEG_11_BACK_ANGLE))*1000/(BACK_TIME);
#define BACK_2_RIGHT\
turn leg221 to y-axis (LEG_21_BACK_ANGLE) speed ((LEG_21_FRONT_ANGLE) - (LEG_21_BACK_ANGLE))*1000/(BACK_TIME);
#define BACK_3_RIGHT\
turn leg231 to y-axis (LEG_31_BACK_ANGLE) speed ((LEG_31_FRONT_ANGLE) - (LEG_31_BACK_ANGLE))*1000/(BACK_TIME);
#define BACK_4_RIGHT\
turn leg241 to y-axis (LEG_41_BACK_ANGLE) speed ((LEG_41_FRONT_ANGLE) - (LEG_41_BACK_ANGLE))*1000/(BACK_TIME);
#define REST_1_LEFT\
turn leg111 to y-axis 0 - (LEG_11_REST_ANGLE) speed ((LEG_11_FRONT_ANGLE) - (LEG_11_BACK_ANGLE))*1000/(FRONT_TIME);
#define REST_2_LEFT\
turn leg121 to y-axis 0 - (LEG_21_REST_ANGLE) speed ((LEG_21_FRONT_ANGLE) - (LEG_21_BACK_ANGLE))*1000/(FRONT_TIME);
#define REST_3_LEFT\
turn leg131 to y-axis 0 - (LEG_31_REST_ANGLE) speed ((LEG_31_FRONT_ANGLE) - (LEG_31_BACK_ANGLE))*1000/(FRONT_TIME);
#define REST_4_LEFT\
turn leg141 to y-axis 0 - (LEG_41_REST_ANGLE) speed ((LEG_41_FRONT_ANGLE) - (LEG_41_BACK_ANGLE))*1000/(FRONT_TIME);
#define REST_1_RIGHT\
turn leg211 to y-axis (LEG_11_REST_ANGLE) speed ((LEG_11_FRONT_ANGLE) - (LEG_11_BACK_ANGLE))*1000/(FRONT_TIME);
#define REST_2_RIGHT\
turn leg221 to y-axis (LEG_21_REST_ANGLE) speed ((LEG_21_FRONT_ANGLE) - (LEG_21_BACK_ANGLE))*1000/(FRONT_TIME);
#define REST_3_RIGHT\
turn leg231 to y-axis (LEG_31_REST_ANGLE) speed ((LEG_31_FRONT_ANGLE) - (LEG_31_BACK_ANGLE))*1000/(FRONT_TIME);
#define REST_4_RIGHT\
turn leg241 to y-axis (LEG_41_REST_ANGLE) speed ((LEG_41_FRONT_ANGLE) - (LEG_41_BACK_ANGLE))*1000/(FRONT_TIME);
#define PAUSE_LEGS\
sleep (LIFT_TIME);\
while(!moving)\
{\
sleep (LIFT_TIME);\
}
piece base, body,
mawleft, mawright,
armleft, fire1left, fire2left, fire3left, fire4left,
armright, fire1right, fire2right, fire3right, fire4right,
tail01, tail02, tail03, tail04, tail05, tail06, tail07, tail08, tail09, tail10,
tail11, tail12, tail13, tail14, tail15, tail16, tail17, tail18, tail19, tailend, firetail,
leg111, leg112, leg113, leg114, leg115,
leg121, leg122, leg123, leg124, leg125,
leg131, leg132, leg133, leg134, leg135,
leg141, leg142, leg143, leg144, leg145,
leg211, leg212, leg213, leg214, leg215,
leg221, leg222, leg223, leg224, leg225,
leg231, leg232, leg233, leg234, leg235,
leg241, leg242, leg243, leg244, leg245,
centerer;//73 pieces, max 128
static-var moving, rocket_tube, aimtype, maxreloadtime;
#include "exptype.h"
#include "sfxtype.h"
#define SIG_AIM1 2
#define SIG_AIM2 4
#define SIG_AIM3 8
#define SIG_MOVE 16
HazyShadeOfWinter()
{
while(1)
{
BACK_4_LEFT
LIFT_1_LEFT
LOWER_2_RIGHT
PAUSE_LEGS
FRONT_1_LEFT
BACK_2_RIGHT
LIFT_3_RIGHT
PAUSE_LEGS
LOWER_1_LEFT
FRONT_3_RIGHT
PAUSE_LEGS
BACK_1_LEFT
LIFT_2_LEFT
LOWER_3_RIGHT
PAUSE_LEGS
FRONT_2_LEFT
BACK_3_RIGHT
LIFT_4_RIGHT
PAUSE_LEGS
LOWER_2_LEFT
FRONT_4_RIGHT
PAUSE_LEGS
BACK_2_LEFT
LIFT_3_LEFT
LOWER_4_RIGHT
PAUSE_LEGS
FRONT_3_LEFT
BACK_4_RIGHT
LIFT_1_RIGHT
PAUSE_LEGS
LOWER_3_LEFT
FRONT_1_RIGHT
PAUSE_LEGS
BACK_3_LEFT
LIFT_4_LEFT
LOWER_1_RIGHT
PAUSE_LEGS
FRONT_4_LEFT
BACK_1_RIGHT
LIFT_2_RIGHT
PAUSE_LEGS
LOWER_4_LEFT
FRONT_2_RIGHT
PAUSE_LEGS
}
}
StartMoving()
{
moving=TRUE;
}
StopMoving()
{
moving=FALSE;
}
Create()
{
moving=FALSE;
....
RESET_ALL_LEGS
while(get BUILD_PERCENT_LEFT)
{
sleep 500;
}
start-script HazyShadeOfWinter();
....
}
(I cut out the tail aiming animation, the random munching, the turning legs to rest position after a while, and other irrelevant bits.)
Anyway, what I wanted to show, is how a broad use of macros can make the code very easily configurable. I want to speed up the walkspeed? I juse modify the #define BASE_TIME 179. One single change in the bos, and the speed values of hundred of "turn" command adjust. I want all 8 legs to go higher when raised? I just modify #define LEG__1_UP_ANGLE <10>. Etc.....
Oh, and I tried to treat piecename as variable, as after all they're number, but, while Scriptor agree to assign a piece to a variable, it refuses to use a variable in a show/turn/etc.. commands. I believe it's a problem with Scriptor and not the COB system. I tried to use with macros with piecenames as argument, but Scriptor didn't like it either.
No. What we need is you to fix UpSpring axis inversion and wrong axis order. Cob/Bos does 3 axis rotation in realtime very well, but they're hard to write only because UpSpring reports the angle wrong.jcnossen wrote:wow we really need a new format :/and do one of the Holy Grails... 3-axis rotation in "realtime"...
Yeah, apparently they removed the commander movement class in XTA, which is the one I used for my scorpion, so try in a mod more based on OTA, and then it works:
http://www.youtube.com/watch?v=50xwy5kvjU8
Aiming from a piece moved by the aiming wasn't a great idea for Spring constant reaiming, and there's other little bugs here and here, but overall it works.
http://www.youtube.com/watch?v=50xwy5kvjU8
Aiming from a piece moved by the aiming wasn't a great idea for Spring constant reaiming, and there's other little bugs here and here, but overall it works.