The Millionth Monkey Gets Its Typewriter. - Page 2

The Millionth Monkey Gets Its Typewriter.

Discuss game development here, from a distinct game project to an accessible third-party mutator, down to the interaction and design of individual units if you like.

Moderator: Moderators

Archangel of Death
Posts: 854
Joined: 28 Jan 2005, 18:15

Post by Archangel of Death »

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? :wink:

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.
User avatar
Buggi
Posts: 875
Joined: 29 Apr 2005, 07:46

Post by Buggi »

Maybe everything should just hover. LOL
User avatar
Argh
Posts: 10920
Joined: 21 Feb 2005, 03:38

Post by Argh »

@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...
User avatar
Dragon45
Posts: 2883
Joined: 16 Aug 2004, 04:36

Post by Dragon45 »

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.
User avatar
KDR_11k
Game Developer
Posts: 8293
Joined: 25 Jun 2006, 08:44

Post by KDR_11k »

I wouldn't want to see what realtime IK does to Spring's already abysmal performance.
User avatar
LathanStanley
Posts: 1429
Joined: 20 Jun 2005, 05:16

Post by LathanStanley »

I do have to say IK in 3DSMAX is hard enough to make it work right, as-is... automating it in spring, with hundreds of units, with dozens of parts each... :shock:

/me shudders
User avatar
Wolf-In-Exile
Posts: 497
Joined: 21 Nov 2005, 13:40

Post by Wolf-In-Exile »

IK is just a bother to set up, but once you've done it, the animating is much easier, much easier than the system TA/Spring uses at any rate.
User avatar
LathanStanley
Posts: 1429
Joined: 20 Jun 2005, 05:16

Post by LathanStanley »

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...
User avatar
Wolf-In-Exile
Posts: 497
Joined: 21 Nov 2005, 13:40

Post by Wolf-In-Exile »

Well, 3DSMax is currently at version 8 now, and the bone-animation support has been very much improved since then. :lol:

From your description, i'm guessing you had some problems with the IK solvers, particularly the IK limits.

Did you specify which axis the parts are allowed to bend/pivot and how much?
User avatar
KDR_11k
Game Developer
Posts: 8293
Joined: 25 Jun 2006, 08:44

Post by KDR_11k »

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).
User avatar
jcnossen
Former Engine Dev
Posts: 2440
Joined: 05 Jun 2005, 19:13

Post by jcnossen »

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.
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

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.
User avatar
Buggi
Posts: 875
Joined: 29 Apr 2005, 07:46

Post by Buggi »

Again, SupCom does NOT use IK for animation.

Again, SupCom does NOT use IK for animation.

Again, SupCom does NOT use IK for animation.

Again, SupCom does NOT use IK for animation.

Again, SupCom does NOT use IK for animation.
User avatar
Wolf-In-Exile
Posts: 497
Joined: 21 Nov 2005, 13:40

Post by Wolf-In-Exile »

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.
User avatar
zwzsg
Kernel Panic Co-Developer
Posts: 7049
Joined: 16 Nov 2004, 13:08

Post by zwzsg »

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:

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.)
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.


jcnossen wrote:
and do one of the Holy Grails... 3-axis rotation in "realtime"...
wow we really need a new format :/ ;)
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.
User avatar
jcnossen
Former Engine Dev
Posts: 2440
Joined: 05 Jun 2005, 19:13

Post by jcnossen »

:oops:
User avatar
unpossible
Posts: 871
Joined: 10 May 2005, 19:24

Post by unpossible »

so does that work in spring? genious :o
User avatar
Snipawolf
Posts: 4357
Joined: 12 Dec 2005, 01:49

Post by Snipawolf »

Eight legged skorp? Might need for my super unit in my mod...

I gotta see it :p

Edit: The model is missing something... I dunno what...
User avatar
zwzsg
Kernel Panic Co-Developer
Posts: 7049
Joined: 16 Nov 2004, 13:08

Post by zwzsg »

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.
User avatar
jcnossen
Former Engine Dev
Posts: 2440
Joined: 05 Jun 2005, 19:13

Post by jcnossen »

Wow the tail really rules
Post Reply

Return to “Game Development”