Spitter Development Thread

Released! - TresCom Ops' TC Act 2 Archive Forum.

Moderators: scallenger, Hilwo, Kovu

Locked
User avatar
Rebel
-=TresCom Developer=-
-=TresCom Developer=-
Posts: 6121
Joined: Sun Nov 10, 2002 10:26 pm
Location: That country nobody likes (you know the one)
Contact:

Spitter Development Thread

Post by Rebel »

To maintain the original thread, this thread has been manually
copied and transferred. Author of Posts are denoted bold, all
Quotes in Italics.

Original Title: I Propose.....
Original Author: Big Red

BIG RED POST:

... That we give another go to the spitting dilo. Of course, we know we can't implement it directly in the AI, but I was thinking that we could instead use the ActBite command in the same fashion as the jumping dinos and matrix effects to trigger dilo spitting.

Here's how it would work. You would have an external INI in one of the MAPS ATX sub-folders, just like the dino randomizer, which would designate the levels and dinos the spitting would be applied to, along with all other spitting settings. In the INI, you would specify an object or several objects (cycled) that would be used as projectiles, already present in the level. These should have very low mass.

Now, everytime the dino would initiate ActBite in-game, those projectile instances would be teleported right in front of the dilo's head and given its orientation, and then set to a certain velocity using ActionType 10 implicitly (the direction calculated from the dino head's orientation as well). The process would of course only happen at certain specifiable intervals and probabilities, just like ActJumpNew. If I could figure out the math, it could even be set to fire only when the dino's head is facing at a certain angle from the player's position (but don't count on that). You could also use the "BiteTargetDistance" float script to force the dilo to bite and thus spit from further away from player (and another minimum distance value to keep the dilo from spitting too close to the player).

As for the damage, we could use CCollisionTriggers (as you would have guessed) for every projectile, and assign the Player as second element, and maybe secondary CCollisionTriggers for when the projectile hits anything else (if that works). The projectile would be teleported out of view upon impact, or maybe after some animation. Of course, this wouldn't work if the dilo was attacking other dinos, but I'm sure we could figure out a way around that.

I haven't really followed what you guys have tried so far, so if any of this doesn't add up, let me know. There's an endless list of things I could work on, but I think this is what people would be most interested in, and also whathat would put the most focus on Trescom itself.

REBEL POST:

Yea, I actually pondered the spittter spitting on occasion,
though never too seriously. I already considered using a var-
iation of actbite that could potentially unfurl the frill (that'd be
an animation attached directly to the animal). Technically, if 1
could, meaning you, of course Wink, determine the best time dur-
ing the attack as to when the spitter would actually 'spit, then
it might work. I assume you're considering using the existing
particle system for this? Again, I considered how well sprayin'
with the spray can worked and thought that might easily be
adapted to the spitting action (so, animation again). Since I
work with the animations invariably my methods of achieving
the desired effects would be dumbed down compared to the
more involved and technical aspects of a programming solution.
Of course, even with animations they're not entirely simple ei-
ther. I generally lean on Remdul's artistic talent for that as my
own are rather limited.

I was generally planning on having the spitter make a reap-
pearence in some project though beyond the frill and try-
ing to get it to unfurl just before an attack was what was ori-
ginally on my mind. If we could get it to 'spit', well, that'd be
awesome, of course.

*If you really wanted to get looney with spitter effects, you
could probably hang a face plate in front of anne and have
that action cue in a semi-transparent anim. which could serve
as a blurred vision effect afterwards.

BIG RED POST:

Quote (Rebel):
I assume you're considering using the existing
particle system for this? Again, I considered how well sprayin'
with the spray can worked and thought that might easily be
adapted to the spitting action (so, animation again).


I was planning on using just a standard instance as projectile, a very fast-moving one to be precise (so you wouldn't see the details), and have whatever animation or particle effect trigger only upon impact, to make sure it works at all ranges. I figured if it sprayed at the beginning of every spit, it'd be harder to get it to look acceptable at long range... unless you guys figured out a way around that with the 'spray can'...

... and honestly, *gasp*, I haven't seen the spray can (haven't played much as of recently). Where is it? Does it use CParticles, texture animations, or *.asa animations?

Quote (Rebel):
*If you really wanted to get looney with spitter effects, you
could probably hang a face plate in front of anne and have
that action cue in a semi-transparent anim. which could serve
as a blurred vision effect afterwards.


Definitely! That would be a great addition. My visual 'artistic talent' isn't too developped much (either, though I wouldn't add that myself), so I'd probably need your help on that.

According to my reasoning (which isn't too great right now), the biggest problem will probably be getting CCollisionTriggers to work properly. That and the artistic issue I will most likely be needing your help with.

REBEL POST:

SprayCan is lying on the ground, backside of the pens where
the contest sigs are (on wall). Hit the right spot on the wall
to the right and hit action (works only once) it'll spray 'Anne
Waz Here'. (uses 16bit anims)

Yea, particle system is probably of limited use. As far as the
artistic talent needed, I generally provide a proof of concept
to Remdul, proving of course that my insane idea will actually
work, then I generally left it up to the master to make every-
thing look right; I'd script it from that point. More or less, if
you're dealing with something complicated and as yet untried
and unproven, it normally takes a few heads put together to
come up with a workable prototype. As you no doubt know
from atx user input suggestions, ideas are a dime a dozen,
implimenting them is the hard part.

BIG RED POST:

Quote (Rebel):
As you no doubt know
from atx user input suggestions, ideas are a dime a dozen,
implimenting them is the hard part.


No doubt about that, heheh. From land/sea/air combo vehicles to emulating Half-Life 2, I'm sure I've heard it all by now. I think you end up disappointing people more than actually creating anything, but then again you can never really shape expectancy no matter how hard you try to down-hype it. Oh well.

HILWO POST:

My post won't really have anything useful to add, except for encouraging you guys Mr. Green That, and the fact that the Dilo is my favorite dinosaur in Trespasser... Go for it guys I hope you succeed!!

REBEL POST:

*Quote (Big Red):

No doubt about that, heheh. From land/sea/air combo vehicles to emulating Half-Life 2, I'm sure I've heard it all by now. I think you end up disappointing people more than actually creating anything, but then again you can never really shape expectancy no matter how hard you try to down-hype it. Oh well.


I like the down-hype term. Personally, I just don't like to promise
anything that may not be deliverable. If I understand this correct-
ly now, your aim is to use tangible (and available) instances to
detect collision and subsequently record damage while these par-
ticular events trigger presumed animations of spit projectile, do I
have this right...?

Currently in tc_isle, just before the spitter launches an attack it
makes that distinctive hissin' noise which btw is pretty much the
time when his frill should fan out. Each AI 'Act' command has an
audio attached to those particulars; unfortunately though, as far
I can recollect through past experimentation, audio collision de-
tection doesn't work with dinosaur sounds which if it had would
have made some of this considerably easier in as far as when a
particular add-on action should be cued in. As far as projectiles,
in a created level, you could simply create a limited amount of in-
visible cubes to be used for collision and detection and being in-
visible, there'd be no need to teleport them out of the area after
an event; you keep them extremely small as not to hinder any
walkover. Distinct particle effects, ie. size, speed and color can
be assigned to any given object using Tres' existing particle sys-
tem and also supplement an animated collision effect.

Quote (Hilwo):
My post won't really have anything useful to add, except for encouraging you guys


Your input is always welcome, Hilwo. Wink

BIG RED POST:

Quote (Rebel):
your aim is to use tangible (and available) instances to
detect collision and subsequently record damage while these par-
ticular events trigger presumed animations of spit projectile, do I
have this right...?


Pretty much. The idea is to have the launching of the projectile separate from the damage code/animation so as to make the launching re-usable in the future. Yes, the instances thrown would be tangible and already present in a level.

Quote (Rebel):
you could simply create a limited amount of in-
visible cubes to be used for collision and detection and being in-
visible, there'd be no need to teleport them out of the area after
an event; you keep them extremely small as not to hinder any
walkover. Distinct particle effects, ie. size, speed and color can
be assigned to any given object using Tres' existing particle sys-
tem and also supplement an animated collision effect


I'll consider that alternative, but I'd still rather have the projectiles visible so the player can dodge them. That is, unless the invisible object could leave a particle trail in the air...

Anyhow, I've got the basic launching system in place right now, and I can get dinos to launch objects using ActionType 10 with X,Y,Z velocities on ActBite. However, I don't know how to keep gravity from affecting an object. Even at high speeds and small or null masses, objects don't get very far before plunging down. Do you have any idea how to get around this? I noticed the elevator in the Isle moves up at a constant rate without the effect of gravity; how did you manage that?

REBEL POST:

I call 'um 'movers'. They're small tangible blocks I used
as a conduit to complete the mechanical circuit, via tele-
cubes which are positioned inside a fixed trigger. If the
object is present, constant force is applied to the eleva-
tor until other stop triggers (or player actions such as a
reverse direction button pushed). A duplicate setup ex-
ists as described above to handle downward motion.

Eh, can it be applied to your launch system? Hmm. Are
you using exterior code to simulate actiontype 10 or us-
ing standard, ingame triggers?

Considering that gravity is a global presence, I can't see
a way of defeating it for select objects.


Quote (Big Red):
but I'd still rather have the projectiles visible so the player can dodge them


In theory, I'm not even certain 'dodging' them is possible.
Our dear Anne isn't exactly a speed demon, B.R.. Even at
my grandfather age, my own reaction time is still faster
than what the game can emulate in realtime. The transfer
from brain to keyboard to actual game motion laspes to
several seconds time; probably, the spit projectile should
have already come n' gone even if the attack was launched
from several yards away. Applied to a real life situation, I'd
liken it to trying to dodge an attack from a water gun. At a
few yards in distance, near impossible.

BIG RED POST:

Quote (Rebel):
Eh, can it be applied to your launch system? Hmm. Are
you using exterior code to simulate actiontype 10 or us-
ing standard, ingame triggers?


Yikes, I doubt it will be possible from how you describe it. Seems like it's going to be a major issue. I'm using ActionType 10 very directly, almost like you would in a regular trigger, the only difference being that the velocity directions are calculated in real-time. The problem as you probably know is that you can't have speeds higher than the lower hundreds (it seems to be a physics engine limitation and not an actiontype-set limit).

The only way I see around it is to emulate your constant AT10 calls, which I can currently do, and have an in-level trigger call a new ActionType upon collision with any object to tell it when to stop setting the constant speed. But it will be tricky...

Quote (Rebel):
In theory, I'm not even certain 'dodging' them is possible.
Our dear Anne isn't exactly a speed demon, B.R.. Even at
my grandfather age, my own reaction time is still faster
than what the game can emulate in realtime. The transfer
from brain to keyboard to actual game motion laspes to
several seconds time; probably, the spit projectile should
have already come n' gone even if the attack was launched
from several yards away. Applied to a real life situation, I'd
liken it to trying to dodge an attack from a water gun. At a
few yards in distance, near impossible.


Yes, yes, I know that, but it's no fun! If you look at anything else in the game, the speed is decreased. Take the basketball, for instance. Take the _dinos_, for instance. For such a slow-paced game, wouldn't you find it odd to round a corner and die instantly from a dilo shot 3/4 of your way through a level?

Besides, from my current tests, the projectile speeds are high enough that they're hard to dodge, just not impossible.

REBEL POST:

I'll take your word for it, Big Red. I'm certain you have a
handle and sound perspective on this. Wink

BIG RED POST:

Quote (Rebel):
I'll take your word for it, Big Red. I'm certain you have a
handle and sound perspective on this.


No, please don't, heheh. If there's one thing I've learned from reading Trespasser interviews and writing ATX, it's that the programmer _never_ has the sound perspective on things; he just thinks he does. I do need all the input you can give me even if I may make you want to think otherwise.

I'm only adamant about using instance-projectiles because it's the only solution available to me right now, and trying to discredit it will bring me back to zero. In fact, I've pretty much gotten the actual projectile launching done.

Dead Link Removed...

(You'll need the DivX codec). This one was recorded a few days ago, and it shows the launching being adequate at very short range. However, as I mentioned, the projectiles would die out quickly and it was weak in the vertical department.

Dead Link Removed....

This was after a good amount of work from yesterday. I wrote a new ActionType that works just like your Isle elevator, renewing the instance's speed at every frame. In the video, the renewing only stops after a certain time-out value, because before recording I didn't bother putting the collision triggers in the level that would call a helper ActionType to turn the first one off.

I also found that the dinos' heads were very rarely perfectly aimed at their targets when launching projectiles, which made them very ineffective. The solution? Auto-aim. It turns out that all ActBite calls (and all other CActivity-based AI actions) are accompanied by a CInfluence temporary instance that gives the current target (thankfully). The auto-aim basically follows what ActBite says is the target. It doesn't try to predict target movement, just centers on its current position and launches. It was ineffective in the first video, because of the gravity issue, but in the second it just shoots in a straight line so there's no problem.

The actual shooting will only happen at certain time intervals, with certain random probability, at certain distance, and most importantly, with the dino facing its target within a certain specifiable angle. There are a few sections of 3D code I haven't written yet (the projectile isn't always facing in the right direction, for instance), but all the basic ridiculous 3D stuff I can't stand to write is there ;).

As you can see, the projectile speed isn't 100% of what I had hoped for, but I'd say it's about adequate at short range. If I have to assume that it's what will be used for now, we're left with figuring out how that damage will be handled, how things can be animated, how we'll get that "blur" effect to work, etc. The only thing that's definite for now if we use this system is that every projectile will have to have a CCollisionTrigger assigned to it for collision with any object, because it will have to call the new helper ActionType to turn off the fixed speed renewer when it hits anything (pretty much like the elevcage, I guess).


Quote (Hilwo):
My post won't really have anything useful to add, except for encouraging you guys, and the fact that the Dilo is my favorite dinosaur in Trespasser... Go for it guys I hope you succeed!!


(oops, skipped over that...)
Thanks, and so do I.

REBEL POST:

Well, I don't see collision detection triggers being much of a
problem, though the cueing in of the animations will have to
rely on the actbite command action, I'd think. Any later, it'll
(meaning the anims.) would be out of sequence. First, Frill,
spit n' projectile, then damage assessment.

*1st video must of corrupted during download, 2nd it was a
little distant to see clearly, though I thought I saw something
flashby and/or near the yellow raptor before he croaked and
before the pretend spitter was near enough to actually bite,
so it appears the action itself does indeed work. Cool

BIG RED POST:

I forgot to say that I had to encode the videos using the h.264 codec because all my computers are messed up at the moment (not DivX, or both, or something). You know, typical Windows stuff. You can get the codec from
http://www.cole2k.net
Sorry!

You should be able to see the stones being thrown around the raptors in the second video. I stayed on the platform to try to get a global view, because it's difficult to catch anything from the ground. I'll try to get a better one when Windows lets me.

Quote (Rebel):
Any later, it'll (meaning the anims.) would be out of sequence. First, Frill, spit n' projectile, then damage assessment.


Sounds good. Let's start with damage. The projectiles from the videos were simply outfitted with the...
float Damage = 50.00000
... value script. I think it worked, but I don't know if the damage was due to this script or to the high velocity and mass. Do you know if it does? And would it work for Anne, or also all dinos?

As for the frill, maybe the easiest way would be to leave that up to you guys. Instead of having ATX call the ActionTypes required for the animation, you could set up something like a CLocationTrigger with all the necessary anim info, and when ActBite is called, ATX would teleport a certain object inside the trigger to set it off. I could write an extra ActionType to teleport the "frill" to the dino's head if necessary.

I obviously haven't thought much about the frill; I wouldn't know how to make it look good. I haven't really seen what you've accomplished on that matter either. Let me know.

REBEL POST:

I've never assigned float Damage = # to anything other than
logical items before, though I know dreamworks used it so I'd
have to say that yes, it does work. Example wise, note that in
the demo that you're experimenting in the trailer has a damage
value (though I think it's zero 'for no damage'). If we assumed
as much, there'd be no need for collision detection/damage trig-
gers.

*Note that by not assigning mass to an object, it becomes in-
variably deadly.

Frill: I've used similar trickery before with triggers/teleporting,
so having a separate trigger holding control of the frill and the
anims in general sounds like a solid idea. Teleporting the frill it-
self won't be necessary; centity works just fine with intangibles
and any object using anims can be held in an invisible state by
using a simple full opacitymap.

*Beyond looking at a few jp pics of the spitter, I haven't touch-
ed on this yet, I'm somewhat hopin' Remdul stops by and jumps
in for the artistic stuff. Scripting the frill itself is not a big thing,
the quality of the bmp frames is what'll make it look right. Any-
ways, it'd be a simple face, modelling to match the vert points
forming the spittter's head, the anim itself would appear as if a
fan were unfurling. Defeating 2D, hence giving it that 3D look is
all in the illusion.
User avatar
Rebel
-=TresCom Developer=-
-=TresCom Developer=-
Posts: 6121
Joined: Sun Nov 10, 2002 10:26 pm
Location: That country nobody likes (you know the one)
Contact:

Post by Rebel »

BIG RED POST:

Again, sounds good. I wasn't sure if you could really attach the frill to the dino's head and have it follow its orientation and location.


Quote (Rebel):
*Note that by not assigning mass to an object, it becomes in-
variably deadly.


Yes, I learned that the hard way.


I do still have a question about triggers though. Say you have a CBooleanTrigger that is set to fire whenever a CVariableTrigger has Value = true (assuming this makes sense at all). Can you make the CBooleanTrigger reset the CVariableTrigger's value to false after all its other ActionTypes are run so that you can set off CBooleanTrigger (with FireCount = -1) at any time just by setting the variable trigger value to true (you probably know where I'm going with this)? If I can set off the planned animation trigger using ActionType 27 at any time, this would make coordination much easier (more so than the previous example).

REBEL POST:

Boolean Triggers are nasty and variable triggers having values
that change always reset to their original values during re-
starts and in saved_games.

*Complete shutdown/restarts, original values, reloads holds
current state values (I think I've got that right).

You can try what you described above, though all actions fire
immediately and not sequentially with Boolean Triggers and if
you add a ProcessStyle (ie. 3) it may only fire the 1st act-
tion and ignore all other group actions that follow. I had to do
a massive rewrite of tc_isle because of these things and their
unpredictable nature. In the end, I wound up using Booleans
only as a precursor in certain situations, relying upon its firing
to initiate other more stable triggers such as CLocation using
teleport in n' out as the switch, much like in the way that
the isle's elevators operate.

BIG RED POST:

Doesn't sound too reliable. Guess we'll stick with CLocationTriggers then.

How about this. We store all projectile instances inside a basement CLocationTrigger and specify...
bool ObjectExitTrigger = true
string TargetActivate = (none - all objects)
int FireCount = -1
... Everytime the projectile is teleported in front of the dino's mouth, the ObjectExitTrigger will automatically set the animation off (hopefully for any instance leaving), and after the projectile has collided with anything, a CCollisionTrigger will teleport it back inside the CLocationTrigger, being careful to have a different position in the volume for each projectile (with the current system, every dino can have a different projectile, and every dino can have more than one, "cycled" at every launch for variety).

In fact, if we do it this way, ATX wouldn't even need to set off the animation, it would be done automatically (and ATX wouldn't have to manage projectile locations). And I don't think it would cause any problems with savegames (not considering the animations themselves). Speaking of savegames, I'm trying to code an external saving for the constant projectile speed thing, so that shouldn't be an issue for savegames once it's done.

But I don't know exactly how CLocationTrigger behaves, so tell me if this makes sense.

edit: Since we would have to have one CCollisionTrigger for every projectile anyway, we might as well have one CLocationTrigger for each, so there wouldn't be a problem with the many objects in one trigger.

REBEL POST:

Agree, Location Triggers. Although Object Triggers don't show
the example below as valid, it may work. Basically, instead of
using bool pickupobject/putdownobject, you could try that simple
bool objectleavetrigger value. The benefit of the object trigger
would be that you can use string A%d to denote numerous objects where any of those listed would fire the trigger. (object triggers
also use 'useobject')

string Class = "CObjectTrigger"
bool ObjectLeaveTrigger = true
bool PointTrigger = false
string A00 = "projectile-00"
string A01 = "projectile-01"
string A02 = "projectile-02"
int ProcessStyle = 3
int FireCount = -1


*I'm not familiar with 'Exit Trigger', is that valid...? In any event,
using numerous triggers is fine as well.

**btw, would it be possible to migrate the cloak cheat into an
actiontype? I want to create an area that the player can hide
from a dino, just as you might be able to do in real life. Naturally,
once player leaves that 'hiding spot', it'd be turned off and she'd
be poor ol' vulnerable anne again.

HILWO POST:

That sounds great, I also thought it was a shame that 'ol Rexy would always see you, even if you were standing still before he would even appear...

BIG RED POST:

Quote (Rebel):
*I'm not familiar with 'Exit Trigger', is that valid...? In any event, using numerous triggers is fine as well.


I copied that from Andres's T-Script reference page, so I'd assume so. Here:

Trigger fires when Anne or an object enters/is in/leaves a certain area.
Type Name Default Description
bool PlayerEnterTrigger false If true, fire trigger when player enters.
bool PlayerInTrigger false If true, fire trigger (constantly?) while player is in the bounding volume. Perhaps use RepeatPeriod to limit frequency.
bool PlayerExitTrigger false If true, fire trigger when player exits.
bool ObjectEnterTrigger false See PlayerEnter etc., but might use the TriggerActivate object.
bool ObjectInTrigger false
bool ObjectExitTrigger false
string TriggerActivate none ? Object that activates trigger. If not set, will any object fire the trigger? If set, do Player* flags still work? (Named object must exist.)
bool PointTrigger true ? Use (center) point for bounding volume of trigger? Or use point for bounding volume of object?

Probable additional values (but not used in original levels): CreatureEnterTrigger, CreatureInTrigger, CreatureLeaveTrigger, CreatureEnterCount, CreatureLeaveCount.

There's no description, but I'd assume it works. I think I used it a year ago for the Matrix thing, though I don't quite recall.

Quote (Rebel):
**btw, would it be possible to migrate the cloak cheat into an
actiontype? I want to create an area that the player can hide
from a dino, just as you might be able to do in real life. Naturally,
once player leaves that 'hiding spot', it'd be turned off and she'd
be poor ol' vulnerable anne again.


All CLOAK does is swith Anne's AIType from 0 to 5 or vice-versa, so it wouldn't be too complicated. I guess I'd just call it "Set Player AIType", because toggling is often a problem. If you used it in an ActionType, though, you'd have to be careful to trigger it before the dino can recognize Anne's presence, because as you probably noticed, if you switch the AIType when a dino's after you, he'll still come after your position for a little. There's also a chance it would have to be saved explicitly by ATX for savegames, which isn't tempting, but doable.

I think the only real problem with implementing these kinds of things is that they're used by the cheats, so if players use these cheats during the specified period, everything will mess up. Then again, you can argue that it's not your problem ;) .

Here's a new recording of the projectile system, it's a bit clearer now (I think they're DivX, or DivX ;), whatever the latter is supposed to be):
http://www.geocities.com/trespasserhacks/spitvids.zip
I can't remember what I set as mass for the projectiles, but they're pretty powerful.

I still have a few things to implement, though, namely the projectile orientation. It's those frickin' quaternions all over again. Once most of it's together (can't say when), I'll upload a test version of ATX (for this forum only).

REBEL POST:

Hmm... I think it's (meaning, exittrigger) a typo, but maybe I'm
wrong. I thought leave was the only valid name since it's
the only one that exists inside the exe.

Video: Farout. Looks accurate, and quite deadly....


Hide me: Well, if someone has the cheat enabled beforehand
they wouldn't be in danger anyhoo, so I don't see that as too
much a problem. What you describe is right on anyways, if the
player is already being chased hot on the heels, you wouldn't
really be able to hide since you've already been targeted. I'm
talking a small area too, like an outcrop of rock and anne must
duck down before being made.

Quote (Big Red):
It's those frickin' quaternions all over again


Can't help you there, I hate those things. Sick

BIG RED POST:

Quote (Rebel):
Well, if someone has the cheat enabled beforehand
they wouldn't be in danger anyhoo, so I don't see that as too
much a problem.


Yes, but if the cheat was already enabled and the player entered the area and set off the ActionType (which would thus do nothing), if the cheat was re-entered in front of the dino, then visibility would be reactivated earlier than your script would dictate.

But the problem is a lot more general, as in it applies to pretty much everything, which is why I thought it was worth mentioning. For examples, the disabling in-game keys thing would interfere with FOLLOWDINO and FLY, the camera animations would interfere with FOLLOWDINO, FLY and THIRDP, etc.

Quote (Rebel):
Can't help you there, I hate those things.


Don't worry, I don't think anybody could. It's getting pretty involved now. I've found out that for some reason, putting quaternion values the game doesn't expect for just one object reduces the framerate to about 6 fps, whereas erronous FPU values are usually simply ignored by the game. Very odd.

Quote (Rebel):
Hmm... I think it's (meaning, exittrigger) a typo, but maybe I'm
wrong. I thought leave was the only valid name since it's
the only one that exists inside the exe.


Well, if it's not the exe, it's not used, so you're probably right then. As long as it does the same thing, I'm happy.

REBEL POST:

B.R., if you think it's going to cause too many headaches, then
maybe we should just nix the idea. The hide was just a quick
thought, but not incredibly important.

*You've got enough on your plate.

BIG RED POST:

Well, thanks for considering that, for I assure you few people do ;), but don't get the wrong idea; I've already implemented the ActionType, and it's not a problem on its own. You'll be able to use it. But I probably won't try to coordinate with the cheats, which is all I'm saying; so, if you use it in a level, just make sure the player knows he shouldn't use them.

REBEL POST:

eh, thanks for doing it. Wink

Technically, and I know you probably won't care for the idea, we
could simply disable that cheat. Or, as you said, implement
that almighty excuse, user beware.

*What annoys me about that is that no one ever seems to read
the readme files. But then, that's their problem --

BIG RED POST:

Quote (Rebel):
Or, as you said, implement that almighty excuse, user beware.



Yes, that'd be preferable. Maybe you could simply get a subtitle to pop up for a few seconds when the game starts?

Quote (Rebel):
*What annoys me about that is that no one ever seems to read
the readme files. But then, that's their problem --


You're telling me! The ATX docs are what now, 50-60 pages? It's a frickin thesis and half the people ignore it. But you're right, if they don't want to know, they don't want to know.

REBEL POST:

Heehee. I'm probably one of the few people who have actually
read that thesis. Thing is, if more people did they'd be asking
you fewer, repetitive questions.

REBEL POST:

http://www.geocities.com/yankeetrex/Jur ... itter.html

I don't particularly care for the frill in the pic above (too car-
toony), but what I'm looking for is a picture as clear as this
and from the jp movie which I can't seem to find. Mad

Mike (theRaptor), do you have anything lying around on your
harddrive like that...?

I need some type of decent screenies to work with, I'm by no
means artistic enough to spray this in paintshop. Since we're
working with a plane here, if we could get an acceptable unfurl-
ed frill texture, I'd have a decent start point.

I hate dial-up, I soooo miss my cable modem (just not the ridi-
culous price). Sad Takes forever to skim through sites....

REMDUL POST:

Hey that spitting thing is awesome. Sorry I missed this thread before.

As far as the frill thing concerned, consider it done. Smile
User avatar
Rebel
-=TresCom Developer=-
-=TresCom Developer=-
Posts: 6121
Joined: Sun Nov 10, 2002 10:26 pm
Location: That country nobody likes (you know the one)
Contact:

Post by Rebel »

REBEL POST:

You da man, Remdul! Once the animations are done, they can
be incorporated into Big Red's work. Smile

BIG RED POST:

Excellent! I think we were all hoping for this ;).

Anyhow, I've tried implementing the basic location and collision triggers for the projectile launching, and so far so good. The location trigger (intended animations trigger) fires properly on every launch and the collision trigger brings it back home as it should. The only issue I've had is with the float Damage = xx.xxxxxx script. It will substract health from the player right before the collision trigger, which is perfect, but whenever the player dies because of a hit, he'll go right through whatever he was standing on, i.e., the demo level platforms. I really don't know why. I don't think it happens on terrain, though.

REBEL POST:

Well, it's not really a quark that causes Anne to fall through
intangibles after death, but omissions.

Add and/or change Anne's $ Object values to:

float AIMass = 0.600000
float Danger = 0.300000
bool OnTerrain = false

I don't believe that OnTerrain is valid beyond at 18 use-
age, though add it just to be sure (been a while since I mes-
ed with this. Originally, I tossed about a dino encounter on
the venture deck. Never happened, but it seems research is
never wasted.

Anyhoo, that'll stop Anne from falling through the helipad, but
sometimes the camera position may still fall below the plane of
a particular model. I also think that the helipads have occlusion
objects, so after you die Anne will probably be lying directly be-
tween that plane (remove or lower it first, I guess).


*Just tested. I think it's the AIMass that does it, though it still
doesn't prevent partial player submersion into the model. I'm
only guessing, but it could be the differences between skeletal
(bones) frame between a CAnimal and Player. If you kill a rap-
tor on the helipad, it falls into that standard death pose. Once
the legs collaspe the model itself is more or less evenly balanc-
ed with head/body/tail which prevent the type of unpredictable
physics collaspe with player.

Eh, play with it. Maybe you can nurture it further --

REMDUL POST:

I have the frill done Reb, here it is:

Dead Link Removed....

Includes the frill model and of bmp frames. May want to drop a few to save texture space though. Loop the last few frames while the frill is unfolded to give it that slithery look.

REBEL POST:

Now that is what I call artistic, Remdul. Beautiful work. Wink

What I'll try to do beyond setting this up and alter our spraycan
spray to fascillate the dilo's spit.

*Once I get all elements into my hands, I will create the mini
test for our own amusement and/or comments, of course.

REBEL POST:

<insert numerous cuss words here>

Seems my reasoning has a flaw: The entity object follows the
movement and rotation of the dino, though I failed to take into
account that the dino's head, via bones, moves independently.
Therefore, the frill will not follow head movements!

D'oh!

At the moment, I can't think of any normal scripting solutions.

Confused

[back to the simpsons]

REMDUL POST:

Yeah, I thought about that too, but wasn't sure whether it would work when attached to the head/neck physics box (even if that's possible it would not follow the head seamlessly).

Any chance of animating the texture if I attach the frill model to the skin itself? It works on Anne right? (texture animated tatoo)

REBEL POST:

Had the exact ahha last nite, Remdul.... sub anims. If you want,
go on ahead and add the frill to the dilo. I plan on testing all of
this sub anim stuff out after work. I'm hoping that it'll work on
other objects other than Anne.

.... and naw, won't work attempting to latch onto neck/head
physics box. That crashes the level....

Appears anims is the new approach. One of the possibilities
dealing with this that also crossed my mind is that assuming
the dilo accepts the sub-anim material the animation itself might
be tied into Anne's, meaning of course that if anne is injured,
the frill's anim would react as well.

This is uncharted ground here, so I'm just guessing. The other
related question would be then, can the dilo's anim be accessed
separately and if so, how?

Gotta go.... later.

REMDUL POST:

Ok, have uploaded the new skin here:

Dead Link Removed....

May need to change the skin name, but otherwise it is identical to the original spitter + frill attached.

You probably need to set the AnimSubMaterial property on the skin to 9 (it is 8 on Anne's skin) which points to the material index. From what I can see it seems to be a very generic animation mechanism, so I hope it's not limited to Anne. Even if it is limited like you suggested, then BigRed may be able to override it.

However, if this does work, we might be able to pull off similar things with the other dinos as well. Stuff like scars depending on the dinos health, or something as subtle as blinking eyes.

BIG RED POST:

Quote (Rebel):
Eh, play with it. Maybe you can nurture it further --


Well it's pure scripting, so I'd rather leave that up to you, if you don't mind (?) ;) . You seem to have it figured out. I still don't really get it.

Quote (Remdul):
Includes the frill model and of bmp frames. May want to drop a few to save texture space though. Loop the last few frames while the frill is unfolded to give it that slithery look.


Wow, looks great!

Quote (Rebel):
The entity object follows the
movement and rotation of the dino, though I failed to take into
account that the dino's head, via bones, moves independently.
Therefore, the frill will not follow head movements!



Hmmm... sort of expected that (read earlier posts). What I
can do right now is teleport an object relatively to another one at every frame, taking into account orientation and position. I have full access to any dino's Head, Body, Tail, Foot, etc. object's position and orientation (they all inherit CInstance and CBoundaryBox, so it's all the same). If your animation was in the form of an object and the animation itself was not affected by teleportation, I could almost easily tag it along a dino's head.

But that's the problem. I have no idea how you guys get your animations to work...

Quote (Remdul):
You probably need to set the AnimSubMaterial property on the skin to 9 (it is 8 on Anne's skin) which points to the material index. From what I can see it seems to be a very generic animation mechanism, so I hope it's not limited to Anne. Even if it is limited like you suggested, then BigRed may be able to override it.



... as I said, I have no idea how any of this works. You'd have to help me out on that first ;).

REBEL POST:

Well, I just got back home (long day). I'll take a quick shower,
grab a bite to eat and then do a little experimenting. We'll try
the sub_anims 1st and if that fails then we'll proceed with B.R.
razzle dazzle.

I'll post up when I've got something.....

*aimass: I screw around with it, B.R. No prob.


**Remdul, when you get the chance would you give that tpm
a lookover? I'm getting 'bad joint index errors from line 1395-
to vert end. Looks to be the actual dino model and not the sh
(shadow) mesh.

I'll look over it again as well, but I can't seem to find an error
with it.

.. the error begins at m = "frill"

for some reason or another, it's being considered a joint...?

User avatar
Rebel
-=TresCom Developer=-
-=TresCom Developer=-
Posts: 6121
Joined: Sun Nov 10, 2002 10:26 pm
Location: That country nobody likes (you know the one)
Contact:

Post by Rebel »

REBEL POST:

I must be going f**kin' senile. You mentioned the potential
name problem and I forgot all about it.

Anyways, got it now. Import ok. Onward.....


*Well gentlemen, nothing positive to report. Although I did
get the level not to crash (had to add the textures directly to
the dilo -- listed, though unused I suppose), though so far I
haven't been able to gain any response from the sub-anims.
Unfortunately, it may be class player specific unless there is
some other strings lurking in the exe that can activate such
a thing beyond the hard coded player anim. I'll fiddle with it
some more, though B.R.'s talents may be needed here....


Quote (Big Red):
If your animation was in the form of an object and the
animation itself was not affected by teleportation, I could
almost easily tag it along a dino's head.


But that's the problem. I have no idea how you guys get your
animations to work...


Well, the animation is an object with changeable textures.
I've never teleported an animation, though as an example, the
seagulls in tc_isle are moving during the active animation
sequence. As a matter of fact, the birds are multiple mesh with
multiple animations playing simultaneously, either held together
by standard mags or by centityattached class.

*If you mean how do we store the anim textures, we generally
slap them onto a multi-faced plane. Obviously they (meaning
the textures used by the animation) need to exist, so we follow
dw's method, although you could probably just assign them to
the model as I did above (even if they are technically unused).

**The more favorable option still is to have the frill with the dilo
constantly, though the doability (is that a word?) of that appears
froth with roadblocks.

REMDUL POST:

So, you can't get it to run automaticly either, like the waterfall anims in the original levels?

Have you tried the AnimSubMaterial value used on normal, static objects to see if it makes any difference (not sure it is used or required with all anims)? Try removing it on Anne and see what happens. Just a random idea...

REBEL POST:

Dead Link Removed....

Tried all of the above (plus a few others) so far. Uploaded a
dino prop (not a real dino, cinstance) with the subanim setup
already attached. Maybe I'm missing something, or there's a
few things I haven't thought of yet.

Give it a look. Maybe fresh eyes would see better --

If it is class specific, is there a potential for adding another
class to it...? (B.R., your input?)

Sux that we don't have the source. It's alot easier looking at
things in black and white than in abstract.

BIG RED POST:

Quote (Rebel):
Well, the animation is an object with changeable textures.
I've never teleported an animation, though as an example, the
seagulls in tc_isle are moving during the active animation
sequence. As a matter of fact, the birds are multiple mesh with
multiple animations playing simultaneously, either held together
by standard mags or by centityattached class.



If the seagulls were animated with the *.asa anims, then that should mean that you can teleport objects while playing animations. All the main *.asa functions seem to do is calculate positions and teleport objects (I don't believe they're integrated in the physics system at all).

So, as long as the object wasn't tangible and wouldn't cause collision with the dino head, for now I'd assume it would work.

Quote (Rebel):
Unfortunately, it may be class player specific unless there is
some other strings lurking in the exe that can activate such
a thing beyond the hard coded player anim. I'll fiddle with it
some more, though B.R.'s talents may be needed here....



If you want a list of used script values, you don't really need me. Just find a copy of W32Dasm v8.93 by Ursoft and choose a Tres EXE to disassemble. Then open the "Find" option, and type exactly:
"Class"
(with " " )
And it'll get you to an address with ALL the references of used script values. Just scroll down and they're all there, hardly any other strings in the way. When you find something that sounds interesting, just let me know and I'll try to find out what class uses it and how.

If you want a list of all possible class names used internally by Trespasser, go into the ATX_SOURCE\_vtableid\ folder of the ATX 1.51 package. Open one of the text files. All the class names are there. I'm not sure what we're looking for, so if you guys could give me a head start with the names of what sounds good, it would save me a lot of time.

Quote (Rebel):
If it is class specific, is there a potential for adding another
class to it...? (B.R., your input?)



That's a very broad question. If it's just code hiding in there, then probably, but that's assuming it's implemented in the first place.

Anyhow, nice job on the bitmaps guys, though I haven't had a chance to check out the models themselves.

Meanwhile, I'm going to start implementing the teleport thing. Might take awhile. There's nothing to lose even if we don't use it in the end (maybe somebody else would) and use the SubMaterial thing instead. On a side note, what does AnimSubMaterial refer to exactly?

REMDUL POST:

AnimSubMaterial refers to the material index in a mesh. Each mesh can have multiple materials, and this value points to the one that needs to be animated. For example, the animated tatoo on Anne is a quad. Those two triangles have the submaterial index 8, so AnimSubMaterial = 8 on Anne. The faces on the spitter use material 9, so that's why I mentioned.
Each material holds a pointer to a texture (and perhaps also other data, such as a pointer to a bump map). So if we animate the textures we are actually changing the texture pointer.

I'm not sure this value is required or optional, can't remember it was on the waterfall scripts (don't have my files here to check here right now). If an object has only one material then it could possibly be omitted. Rebel?

I think you are mixing things up a bit. The seagull animation work differently than what we're trying on the frill.
What we wan't is to animate only the textures (just swapping a number of bitmaps), while the seagulls are a number of different objects being hidden and shown.
Or am I the one who's confused?

* But the stuff you posted is correct afaik.

* If you'd be able to detect the swapping of the tatoo texture on Anne, then maybe you can use that knowledge to code a similar event on dino meshes. I think this should be possible as there seems to be little difference between a dino skin and Anne. Presumably, a single pointer/index (to a texture unit, any of the bitmap frames) must be changed in the mesh material table. The faces that point to that material entry should then automaticly pick up that texture when they are processed and rendered to the screen. (FYI: To get a better idea of how the data would be stored in memory, just check out the TPM format, should be very similar).

* Another hint, to find pointers to textures, you may try a Direct3D tools that can intercept texture uploads. I don't know of any currently, but I suspect there may be some around (there are a few for OpenGL).

REBEL POST:

Quote (Big Red):
All the main *.asa functions seem to do is calculate positions and teleport objects (I don't believe they're integrated in the physics system at all).



Eh, I don't think so. These physical animations are way too
smooth to be handled by teleportation. I figure that it's more
an internal motion mechanism that handles the object motion.
Though true, the animated object acts independently and ap-
pears unaffected by the physics system. If teleporting is
involved, it must be dealt with in miliseconds since my eyes
can't pick up any flashing of the object.



Quote (Remdul):
Those two triangles have the submaterial index 8, so AnimSubMaterial = 8 on Anne. The faces on the spitter use material 9, so that's why I mentioned.
Each material holds a pointer to a texture (and perhaps also other data, such as a pointer to a bump map). So if we animate the textures we are actually changing the texture pointer.


I'm not sure this value is required or optional, can't remember it was on the waterfall scripts (don't have my files here to check here right now). If an object has only one material then it could possibly be omitted. Rebel?


Good point about the purpose of the index, I labeled it under
the pretense of number of anims. 9, is the correct number. I
don't quite get the last point you made: If an object has only
'one' material then it could be possibly omitted..?

Did you mean the subanim value? If so, yea, that's not used
in standard animation scripts. Technically, you could forgo al-
most all entries accept the anims00 themselves. They'll play
on their own at 1.00000 by default.

Quote (Big Red):
That's a very broad question. If it's just code hiding in there, then probably, but that's assuming it's implemented in the first place.



Well, I might be lost at what we're all referring to here, but if
you're speaking of the subanimmaterial animations, I'd say that
it's safe to assume that it's been implemented since Anne uses
it. The question is, why is it limited to only class 'player'? For
experimentation purposes, I even labeled my dino prop class
player to test the subanims out. Felt rather odd walking around
with a dummy dilo as my body. Anyhoo, I leapt off a cliff to cause
death but the anims still didn't play.

My only other thought about the application of the anim textures
themselves is perhaps they actually need to be applied to the
model. Note that Anne has that box with the anim textures.

BIG RED POST:

To Remdul:

Thank you, that was more precise. Now, what do you use to set off a specific texture animation for a specific SubMaterial? ActionType 21, I suppose? Andres' reference isn't too detailed on that... And how are the script values used (Frame, FreezeFrame, etc.) ? And, if you have more than one texture-animated SubMaterial, how do you set off only one of them (or is that part of the problem)?

I've found that tracking down such things is easier when done from an ActionType. For example, if there was a way to use AT21 (again, assuming) to set a material texture to a specific fixed frame, that would make it obvious, assuming we're dealing with just pointers and indexes here (and I've got the ActionTypes pretty well covered, so it can be intercepted easily when set off and debugged).

(normally, I'd look this up myself using your scripts but I don't have access to my computer)

Quote (Remdul):
I think you are mixing things up a bit. The seagull animation work differently than what we're trying on the frill.
What we wan't is to animate only the textures (just swapping a number of bitmaps), while the seagulls are a number of different objects being hidden and shown.
Or am I the one who's confused?



Yeah, I probably did. I guess the point is if you can have an object that's both *.asa-animated and texture-animated at the same time, there shouldn't be a problem with the new system. I didn't/don't know whether the seagull had/has texture swaps, I just assume(d) that from what Rebel said.

To Rebel:
(okay, this is really confusing, we're all posting at the same time, so I'll just make a new one further below)

REBEL POST:

I'm so smart, I scare myself (damn, I wish that were true). Very Happy

I was right, the textures have to be physically available for the
sub animation to play.

Remdul, take the prop I uploaded (B.R. can do so as well) and
replace all of the spitter textures with the frill textures 00 to 14
ie. 00, 02, 04 and up.

The sub anim now plays.... Of course the dilo looks rather silly,
but I assume that can easily be rectified by creating an internal
dummy box situated somewhere inside the belly of the beast.

Dead Link Removed....

Link, with the sub-anims working.....

BIG RED POST:

Quote (Rebel):
Eh, I don't think so. These physical animations are way too
smooth to be handled by teleportation. I figure that it's more
an internal motion mechanism that handles the object motion.
Though true, the animated object acts independently and ap-
pears unaffected by the physics system. If teleporting is
involved, it must be dealt with in miliseconds since my eyes
can't pick up any flashing of the object.



"Teleportation" is a very general term. For most CInstance-inherited classes, I use it to refer to the method that sets an object's orientation and location. As a fact, the main CAnimationsScript method calculates the position at every frame and calls the "Teleport" method itself, which it has to do to ensure all the sub-objects are moved as well. The FLY cheat does the same thing.

Quote (Rebel):
The sub anim now plays.... Of course the dilo looks rather silly,
but I assume that can easily be rectified by creating an internal
dummy box situated somewhere inside the belly of the beast.



So... it works? I don't get it, but I'll look at it when I get home.

REBEL POST:

Yes sir, that it does (at least on the dilo dummy cinstance). I'll
assume (and add a prayer, although I don't generally do that)
and see no reason why it won't work with our dinosaurs. The
next step after Remdul recreates the dilo once again is to see
if we can control the sub animation in the same manner as the
standard anims. If so, which I hope is likely, handling the frill
through standard trigger scripts should be doable.

*I added the working sub anim prop to a link above....

Quote (Big Red):
"Teleportation" is a very general term. For most CInstance-inherited classes, I use it to refer to the method that sets an object's orientation and location. As a fact, the main CAnimationsScript method calculates the position at every frame and calls the "Teleport" method itself, which it has to do to ensure all the sub-objects are moved as well. The FLY cheat does the same thing.



Hmm... I guess I stand corrected then. Must be really accurate
calculations.

REMDUL POST:

Quote (Big Red):
I don't quite get the last point you made: If an object has only
'one' material then it could be possibly omitted..?


If an object has only one material, and is animated then there's only one material to animate, so the value would be obsolete. I suspect that the default for AnimSubMaterial is simply 1. Either way, leaving it out just works.

Quote (Big Red):
Now, what do you use to set off a specific texture animation for a specific SubMaterial? ActionType 21, I suppose?


Yeah, I assumed that as well, using an ActionType. Are the waterfall anims triggered like that too Rebel?

Quote (Big Red):
And, if you have more than one texture-animated SubMaterial, how do you set off only one of them (or is that part of the problem)?


Not our problem, but it is a probably a limitation. An object can only have one texture-animation. It would not be technically impossible to animate more than one texture, but I think it simply wasn't necessary so it was never included.

Quote (Rebel):
I was right, the textures have to be physically available for the sub animation to play
.

Yeah, I was never sure these had to be part of the mesh itself, thought the reason there was a box on Anne with these materials was to make sure they where exported (my export script works the same, only materials that are used in the scene are exported).

/* Ignore the following, it is merely a theory and possibly confusing:
In one way the above is kinda odd, cos it is unlikely the texture animation works differently than I described in my previous post. It alsmost suggest that the materials are swapped, not textures. That could be done by looping thru all faces with the material, and changing that face material index, but that's not efficient, therefore unlikely. Still, worth consideration if we find out it doesn't work as I described.
Another reason these materials should be used in the mesh would be that the textures need to be in the same texture page, to make it more efficient to swap frames (not much in hardware mode, but might in software). Andres would be able to tell us more about this.
*/

Quote (Big Red):
calls the "Teleport" method itself


It would indeed make sense that the engine internally uses the same routine to move objects. Fortunately it also makes it easier for us.

Quote (Rebel):
and see no reason why it won't work with our dinosaurs


Agree with that, like I said, dinos are practically the same as Anne, just the way they are controlled is different. If Anne can do it, any dino can technically too.

@ BigRed, just play around with that sample Rebel uploaded. If we can reproduce the anim trigger on dinos, we're pretty much done.

@ Rebel, I'll get that model done asap.

* Kay got it:

Dead Link Removedl....

Materials are ordered differently again, so use AnimSubMaterial = 8 this time.

Btw, can you add materials in the TPM file manually, after the other m="blah" lines? Not sure GeomAdd ignores those, or that Trespasser simply requires there to be faces actually using the material.

REBEL POST:

Quote (Remdul):
Yeah, I assumed that as well, using an ActionType. Are the waterfall anims triggered like that too Rebel?



Actually, they run at all times. Other anims like the comp screens
are sometimes frozen to 1 frame or looped through several until
action21 (I believe that's it) changes that through triggers.


Back to the frill, I'm back to scratching my head again. I imported
the dilo, but again, no sub-anim playing again. I applied the same
technique to other cinstances and it works, so why not this damn
dinosaur? Arghh!

..... what are we missing now? The latest dummy dino that does
work;

Quote (Remdul):
Btw, can you add materials in the TPM file manually, after the other m="blah" lines? Not sure GeomAdd ignores those, or that Trespasser simply requires there to be faces actually using the material.


Yea, I've done that quite a bit actually. That's what I like about
the tpm format, easy to edit. About tres, it'll list textures that
are otherwise unassigned to a face, though I'm not quite sure
what that all means....

Gents, apparently we're back to square 1. The animation will
not play on the dino. To verify that it was textured and script-
ed correctly I reimported it (minus canimal class and omission
of bones, changed to type 2) and the sub_anim played fine. It
isn't model and/or the textures that stops it from working, but
it appears it is CAnimal Class that does it.

I'm about fresh out of ideas here. Now we know how to get
the sub anims to work, but I'm at a loss to explain why it works
on cinstances, anne but not a dinosaur. Confused

REBEL POST:

Ok, I've got something. Thinking along the lines that Anne's
subanim is controlled by some hardcode but likely by the sim-
ilar actiontype 21, I went the trigger route. I have to leave
for work shortly, but using standard trigger scripts we can
activate the frill's subanims on the dinosaur. Technically, that's
the manner in which we wanted to initiate the frill to begin with
so this is actually good news. There does seem to be some
quarks with it, such as float interval (time) doesn't appear to
apply, though I think we can easily circumvent that by adding
a time delay between each anim action00. Later today, I'll give
a search of Andres' values list and see if there are a few unused
and/or unknown values associated with at21 that may add to
trigger useage.

I don't enjoy leaping up and prematurely yelling hooray, but
from the limited experimentation performed this morning, this
looks once again, doable. Smile

BIG RED POST:

Sounds good. Haven't had a chance to look at the model in-game (sorry); I'm bad with importing stuff and levels in general. If there are problems with timing with AT21 and delay, there's most likely a hack around that (if the scripts don't work).

As it seems we're getting close, I'll upload the first test version of ATX 1.52 and an example as soon as I can, so we can test with the location trigger or such. There's still one last problem with the projectile orientation, though (anybody have a formula to convert a 3D vector to a 4D quaternion minus the 4th D, by any chance?).

Quote (Rebel):
I'll give a search of Andres' values list and see if there are a few unused and/or unknown values associated with at21 that may add to trigger useage
.


I should look into that as well. Generally, I could get you a list of all values recognized by AT21. I'll also do that as soon as I can.

On a now mostly unrelated note, the teleportation thing would have had a bug. It appears ATX teleports instances one frame late, that is, right after the back buffer has been drawn to. I now believe that's the reason for the THIRDP cheat's bobbing problem, and it could have affected the teleportation of the frill similarly (though not noticeably if the frill were unaffected by physics/collision). But I'll get around to that at some point anyway, so it would probably have been fixed then.

User avatar
Rebel
-=TresCom Developer=-
-=TresCom Developer=-
Posts: 6121
Joined: Sun Nov 10, 2002 10:26 pm
Location: That country nobody likes (you know the one)
Contact:

Post by Rebel »

BIG RED POST:

I just scanned the ActionType 21 initialization, and there are no new values other than the ones in the reference:

3D8 - string - Target
12D8 - float - Interval
14D0 - int - Frame
14D8 - int - FreezeFrame
14E0 - int - TrackTwo

That's all of it. The reference mentions "Toggle" as a possible value, but it isn't one.

Note: This is part two of a double-post; there's another one at the end of page 4.

REBEL POST:

Thanks, that'll save me wasted time.

Anyhoo, we'll get there. I think we've just about conquered all
the technical hurdles, it's just pulling it all together as a cohesive
unit that's left todo.

.... better go before I get fired! Very Happy

REMDUL POST:

Allright, good going Reb. Smile

Quote (Big Red):
(anybody have a formula to convert a 3D vector to a 4D quaternion minus the 4th D, by any chance



I happened to be messing with something similar all day today. I'm no hero with that sorta stuff, but I'll check it out tomorrow.

* I just did a quick search and came across this source file:

http://root.cern.ch/root/html//TQuaternion.h

This quaternion class probably hase some usefull functions.

BIG RED POST:

Okay, here's my share:

Dead Link Removed....

It's premature, and not for public use. There's a dedicated temporary readme in there. We're obviously not going to use the same example (demo level) for the spitter testing.

Let me know if this messes up anything (a lot of the data was reorganized). BTW, Rebel, two of the new ActionTypes we discussed are in there, but I've tested neither. They might crash, but try 'em out if you're up to it.

Quote (Remdul):
I happened to be messing with something similar all day today. I'm no hero with that sorta stuff, but I'll check it out tomorrow
.

* I just did a quick search and came across this source file:

http://root.cern.ch/root/html//TQuaternion.h

This quaternion class probably hase some usefull functions.


Thanks, but I saw that one before, and I wasn't sure exactly what it did. Anyhow, I worked on my own function yesterday, and so far it works fine. It orients the projectiles and is used in the package above.

REBEL POST:

Got it, B.R. Once I get a handle on what you did and am able
to get all elements to work in unison I'll upload for the crew. I
assume that it'll be a few days...

REBEL POST:

Get Spitter test-level here (Dead Link Removed).

(Not preassembled, but very easy steps)

I'll spare you gentlemen the babble since I did enough of that in
the readme. Though I will say that this was a nice piece of team
work. Cool

*B.R., didn't get the chance to test out the new ATs yet --

**Reckon that I should have mentioned all elements are working
here. Spit, Frill and Damage --

HILWO POST:

Again, it's too bad you guys aren't getting paid.

REBEL POST:

Yea, but there's an error in the frillspitter's tscript value.txt.
A few of the needed were placed outside the script's
brackets. (values txt file inside the Last_Import folder)

Should read;

Code:

int ext_GeometryType = 1
string Physics = "Dilophosaur"
string Mesh = "Dilophosaur"
int Dinosaur = 3
int Team = 15
bool ActOuch = true
bool ActSnarl = true
bool ActCroon = true
bool ActDie = true
bool ActCockHead = true
bool ActWander = true
bool ActStalk = true
bool ActFlee = true
bool ActSnarl = true
bool ActMoveToward = true
bool ActGetOut = true
float Hunger = 0.500000
float DamageAnger = 10.000000
float Anger = 0.000000
float Bravery = 0.500000
float Curiosity = 0.500000
bool ActApproach = true
bool ActGlare = true
bool ActBite = true
bool ActEat = true
bool ActDrink = true
bool ActLookAround = true
bool ActNothing = true
float MoveableMass = 0.650000
float Width = 0.750000
float HeadReach = 2.000000
float TailReach = 3.700000
float JumpDistance = 2.000000
float JumpUp = 2.000000
float JumpDown = 1.000000
float WalkUnder = 1.000000
float WalkOver = 4.000000
float JumpOver = 3.750000
float CrouchUnder = 1.000000
float HitPoints = 75.000000
float ReallyDie = -30.000000
float Regeneration = 1.000000
float CriticalHit = 35.000000
string Class = "CAnimal"
int PVA = -2
int NumJoints = 21
bool Shadow = false
int NumDoubleJoints = 6
int Normals = 0
bool Merge = false
bool Split = false
bool Wrap = false
bool Bumpmaps = false
int AnimSubMaterial = 8
string Anim00 = "frill00c.bmp"
string Anim01 = "frill02c.bmp"
string Anim02 = "frill04c.bmp"
string Anim03 = "frill06c.bmp"
string Anim04 = "frill08c.bmp"
string Anim05 = "frill10c.bmp"
string Anim06 = "frill12c.bmp"
string Anim07 = "frill14c.bmp"
string Anim08 = "frill12c.bmp"
string Anim09 = "frill14c.bmp"
string Anim10 = "frill14c.bmp"
float Interval = -1.000000
bool Curved = true
string Type = "Raptor"
string Head = "$DilophosaurHead-00"
string Body = "$DilophosaurBody-00"
string Tail = "$DilophosaurTail-00"
string SoundMaterial = "RAPTOR-FOOT"
float BiteTargetDistance = 10.250000
}


Even if you've already imported, you can simply edit the tscript
in tresed. No need to reimport.

Sorry 'bout that....

BIG RED POST:

Unfortunately, I get a "Page Not Available" error when clicking the link... #&*$*! geocities. Unworthy of capital lettering.

edit: Ok, never mind, works now.

Can't wait to try it out, won't be able to 'til tomorrow though...

And yeah, it was good teamwork. And surprisingly quick, too.

REBEL POST:

That's what this team does so well, B.R., create and conquer.
Makes it incredibly hard not to want to stay involved. Smile

BIG RED:

I just got a chance to try it out. First off, I'm having problems getting the dino to perform ActBite at all. I probably didn't import it right or something, because all the dino does is charge straight towards Anne and spins around her. I used the updated script you quoted and tried random things but couldn't get it to work. But again, I figure if you don't have this problem then it's probably me who imported it wrong.

Anyhow, I did get the dilo to spit a few times (it did perform ActBite at about every 6th level restart). I have to say that the spitting projectile itself is great! Great job, Rebel! It's honestly better than what I had in mind. I didn't even know you could have those kinds of models in the game. If we could have a few of those with different distributions firing alternately, it'd be perfect (sort of like the original UT flak cannon).

The frill looks absolutely great, too. I ran in software mode, and I can honestly say I had no idea it would look like that. It almost has a natural bump-mapped look, and the unfolding animation is just perfect.

Apart from the dino not biting porperly on my end (which happens both with ATX and the normal Tres EXE, using demo version, without audio additions), there's a few other things I should note.

Although it makes sense to code it this way, we should keep in mind that using float RepeatPeriod in the CLocationTrigger to delay the animations will un-coordinate them with the projectile launches (since they're not truly related in any direct way). Because you have RepeatPeriod set to 12000 and the projectile's MinLaunchInterval at 2000, you'll have many more projectile launches than frill expansions. This makes sense, and if it was intended this way it's fine, but if so I would suggest we either extend the duration of the open frill or diminish the RepeatPeriod. Or, we could just omit RepeatPeriod and set MinLaunchInterval to ~12000 so that every spit is automatically accompanied by a frill anim. Then again, I haven't seen the movie in awhile so I don't really remember the dilo behavior that well.

The other thing is possibly my fault. I noticed that the frill doesn't extend on the very first projectile launch. I'm just guessing, but it's probably because you need to teleport the projectile inside the CLocationTrigger at level start instead of having it originate inside when the level is built.

Anyhow, these are minor quibbles, and I have to say, great job. I'm honoured to work with such talented folk.

[Take note of Big Red's Problem with the Spitter not working properly and moi,
meaning Rebel, not picking up on it., ie Effects.tpa not being updated on Big
Red's end]


REBEL POST:

Good to hear that you checked it out and overall your opinion
sounds positive, B.R. The dilo has a rather odd script which I
put together so that this particular dino behaved completely
different from that of a raptor; it'll cock its head, stare at you,
et cetera. The ActBite command will eventually find its way in
though. The best method to getting this particular dinosaur
to freak out at you is take the route up the mound to your left
after level start; it'll generally start the actbite since it can't
physically get near you. (wounding it also pisses it off) Bas-
ically, I tried to get this thing to mimic as closely as possible
its behaviour from the 1st jp movie.

Ah, you're right. The floatrepeat period really isn't necessary
if the MinLaunchInterval at 2000 is changed to 12000. To be
honest, I wasn't quite certain how reliable it was, so I backed
it up with the floatrepeat (didn't want the frill to continually be
in use).

Spital, aka projectiles. Thanks, I thought it looked alright for
a quick render, although I do think that Remdul could come up
with an even better model (no doubt, you realize how artistic
that man is).

The Frill: Looks cool, doesn't it? Cool Yup, I noticed the launch
is ignored the 1st time around though as noted, works as in-
tended afterwards. I'm a little perplexed by that considering
that I used a location trigger with objectleavetrigger values,
so technically, it should fire normally the 1st time around too.
But, without looking for reasons, we could try teleporting the
object into the trigger upon startup as you suggest; if it does
the trick, that'll take care of that little snafu for us.

For the most part, like you, I'm quite pleased at our efforts. I
have to say, this was a great suggestion and great program-
ming work on your part. Six months ago I would never have
thought it possible.

Smile

*CStart Teleport trick worked. Considering the increase in the
time interval between spital launch, we can probably double

BIG RED POST:

Quote (Rebel):
The dilo has a rather odd script which I
put together so that this particular dino behaved completely
different from that of a raptor; it'll cock its head, stare at you,
et cetera. The ActBite command will eventually find its way in
though. The best method to getting this particular dinosaur
to freak out at you is take the route up the mound to your left
after level start; it'll generally start the actbite since it can't
physically get near you. (wounding it also pisses it off)



Oh. So I just need a gun. Heheh. It's all good, then.

Quote (Rebel):
For the most part, like you, I'm quite pleased at our efforts. I have to say, this was a great suggestion and great program-
ming work on your part. Six months ago I would never have
thought it possible.



Well, thanks. Don't care much for the programming itself, just like what you can do with it. Wasn't really my suggestion, though; I'm sure everybody on the board thought about it at least once. And there's no way I could've done this on my own, anyway.

Quote (Rebel):
*CStart Teleport trick worked. Considering the increase in the
time interval between spital launch, we can probably double
the damage inflicted as well
.


Great. Maybe we should test it with savegames, though. And increasing damage is always good. I'm sure everybody's played the game enough to need more of a challenge by now anyway.

REBEL POST:

Sounds good, Big Red. I've got to fly right now anyways, so I'll
download later this afternoon.

Quote (Big Red):
... wasn't really my idea.....



True, others have asked about the possibility of doing the
spitter thing, but until recently we didn't have the personnel or
ability to pull it off. Smile

After 7 plus years, I should realize never say never.

BIG RED POST:

Damn, I'm skipping over posts again.

Quote (Hilwo):
Again, it's too bad you guys aren't getting paid
.


That can be arranged ;).

(just kidding)

Quote (Rebel):
After 7 plus years, I should realize never say never
.


Indeed, and wow, I need to realize it's been 7 years...


Anyhow, I haven't produced anything in the past week(s) and I have some free time in the next, so if there's anything you need to be worked on or fixed, just let me know.
Locked