News | Forum | People | FAQ | Links | Search | Register | Log in
Mapping Help
This is the place to ask about mapping problems, techniques, and bug fixing, and pretty much anything else you want to do in the level editor.

For questions about coding, check out the Coding Help thread: https://www.celephais.net/board/view_thread.php?id=60097
First | Previous | Next | Last
Sorry To Interupt The Highbrow Stuff.... 
Does anyone know of a cut-scene module for Quake1SP apart from the Custents one? 
Low Accuracy 
Yeah, that's probably because I'm a muppet and can't do simultaneous equations. So the expressions given for a and b are wrong by a few constants. If you solve them correctly, you get
b = 12*( (v / (2*t*t)) - (x / (t*t*t)) )
a = ( (6*x) / (t*t) ) - ( (3*v)/t )


Plugged into the expression for velocity, that gives you:

velocity = (( (6*x) / (t*t) ) - ( (3*v)/t ) * k) + 0.5*12*( (v / (2*t*t)) - (x / (t*t*t)) )*(k*k)

Obviously 0.5*12 can be simplified, but it's clearer where the terms come from like this. I'd expect maybe a few units out, but certainly not 30, if it keeps doing that I'll take another look. 
Woah 
using the new eqtn, it now starts with a speed of 192, decelerates to 0, then goes to -192 in the 2 second span. o.0

sorry to do this to ya, man... o.o 
One Further Correction 
There's a 3 where it should be a 2 in the expression for a, I'll get there in the end...

b = 12*( (v / (2*t*t)) - (x / (t*t*t)) )
a = ( (6*x) / (t*t) ) - ( (2*v)/t )


velocity = (( (6*x) / (t*t) ) - ( (2*v)/t ) * k) + 0.5*12*( (v / (2*t*t)) - (x / (t*t*t)) )*(k*k)


I'm not entirely convinced that's going fix the behaviour you described though. I can't see how the velocity can start at anything but 0, since both of the velocity terms are multiplied by at least one factor of k...anyway, try that and see, it might get the velocity to -128 at least. 
Oh, Wait 
No, I see the other problem, there's a bracket in the wrong place in the velocity equation. The entire a term should be multiplied by k, not just the latter half

velocity = (( (6*x) / (t*t) ) - ( (2*v)/t ) )* k + 0.5*12*( (v / (2*t*t)) - (x / (t*t*t)) )*(k*k)
 
Cool! 
it's definatly getting there. time, velocity and position are all pretty much in sync (off by about 0.3 units) but there is still the problem that the velocity passes the max velocity for a bit before coming back down to the max velocity.

max = 5
it's like: 1, 2, 3, 4, 5, 6, 6.5, 6, 5, done
instead of: 1, 2, 3, 4, 4.5, 5, done

in any case, thanks tons for helping me out here with this. i couldn't have figured this math out on my own. :) 
Time To Max 
Does it reach the maximum of 5 at the correct time before it goes over? At the moment, the equations don't have any consideration for a "maximum speed" as such, they are set up just to reach the right speed at time = t. What they do after that I hadn't thought about - I assumed they'd just get faster and faster until they reached the maximum quake speed(2000 units normally). If you want to clamp the speed at v, then you should just check if k > t, and if it is forget the calculations and set velocity equal to v.

There's probably a better design for the original acceleration model so that it goes to zero as the velocity tends to v. Then again, it would probably involve an exponential function, which isn't good for quake - numerical approximations in quake c are expensive operations. I might have a think about that tomorrow... 
Hijack Velocity... 
In another attempt to change the subject, what's up with Worldcraft confusing textures?

I have "karch1" and "karch1l" (Hi, Kell) in a map but only "karch1l" ever gets used. The map looks fine in the editor but, when I try checking the Face Properties on a "karch1" brush, I always get "karch1l" :| Anyone out there figure their way around this one? 
Nevermind... 
After some simple renaming, "karch1l" to "karch1_l," all seems to be made right...Does that count as modifying a texture? If so, I should probably get permission (o_0) 
No, That's The Thing 
it goes over the max speed before the correct time, then it reduces speed so that it's at the right speed at the correct time. if i were too simply cap the speed at a maximum, it wouldn't move far enough, because it wouldn't get that 'boost' in distance from going over the limit. 
 
I have "karch1" and "karch1l" (Hi, Kell)

Hi generic

Does that count as modifying a texture? If so, I should probably get permission

Heh, you have my permission to modify the texture. You also have my permission to slap Worldcraft's texture browser :P 
Over The Limit 
The final velocity shouldn't be thought of as the "maximum velocity", there's no reason that these equations should lead to strictly increasing speed. From what you describe, it sounds like if you evaluate the values of a and b, you'll get a positive and b negative. I should stress that this is only because of the particular values of v, x and t you have chosen. Set v = 200, t = 6 and x = 600 and you'll see not only a constantly increasing speed, but in fact you'll find the acceleration is constant(b = 0). When I get back, I'll post a solution where the final velocity is a maximum. 
Maximum Velocity 
Ok, did this in the gap between lectures today.

To make sure the velocity is a maximum at time delta_t, we want there to be no acceleration at delta_t. This is another constraint to the problem, so we're going to add a third term to the acceleration. I'll do using t for the time variable and delta_t as the interval required because it's more natural:

x'' = a + b*t + c*t^2
We can already solve for a in terms of b and c, as we know x'' = 0 at t = delta_t
0 = a + b*delta_t + c*delta_t^2
x'' = b*(t - delta_t) + c*(t^2 - delta_t^2)

Integrate
x' = (1/2 * b * t^2) - (delta_t * b * t) + (1/3 * c * t^3) - (delta_t * c * t)
x = (1/6)*b*t^3 - (1/2)*delta_t*b*t^2 + (1/12)*c*t^4 - (1/2)*delta_t^2*c*t^2

Then you plug in delta_t, delta_x and v to these two equations, and if you still trust my ability to solve these after last night, you get:
b = ((30 * v) / (delta_t^2)) - ((48 * delta_x) / (delta_t^3)
c = 24 * ( ((3 * delta_x) / (delta_t^4)) - ((2 * v) / (delta_t^3)) )


You can then plug these into the equation for x', but I'll summarise both of these things in terms of the variables v,t,x and k:

velocity = ((1/2) * b * k^2) - (t * b * k) + ((1/3) * c * k^3) - (t^2 * c * k)
where:
b = ((30 * v) / (t^2)) - ((48 * x) / (t^3)
c = 24 * ( ((3 * x) / (t^4)) - ((2 * v) / (t^3)) )

For safety's sake I've not substituted the values of b and c into the velocity expression, you're free to do that of your own accord.


Ok, so that's the actual content, the rest of this is just rambling. One nice feature of this is that the acceleration is now a continuous function in the sense that it reaches 0 at time delta_t, which is when you stop applying the velocity equation and fix the velocity constant. If you didn't do this, then it would start slowing down again, in fact going down to negative velocity with no limit. We set the acceleration to 0 so the point delta_t would be a maximum, and it is in fact the maximum positive velocity, but not negative :- ).

My only other comment would be a possible improvement to the scheme if you needed improved accuracy. The idea is this: use the expression for distance rather than velocity(!)
What you do is calculate the point that the projectile *should* be at in 0.1 seconds time(the moment you next think). Since you have the equation in full, this is quite possible. Then, since you know you're going to be travelling at a constant velocity until that point, work out the distance between your current location and that target spot, and use the normal equation for working out constant speed:
speed = distance / time

This velocity should very closely match the calculated one, but because it takes into account the position you actually reached, it'll be better at matching the positions given by x. Will it be perfect?

Well, no, it won't, even if you ignore floating point precision. The problem is that when you tell quake to think in 0.1 seconds, it actually thinks at the start of the next frame which is rendered not less than 0.1 seconds later. This could be different from 0.1 by 1/fps - and in fact this affects everything in the quake world, monster animations, player attack rates. So there's still that extra 1/fps * velocity that you'll overshoot by. The important thing about this iterative method is the next think will take into account the overshoot you performed, so you should only ever have one frame's worth of inaccuracy.

You could even attempt to correct for this factor by assuming that the framerate at the time of the nextthink will probably be similar to the current framerate(in QC the global float frametime denotes the time taken to render the last frame). Of course, there is such thing as taking it too far...

The last, is it only four paragraphs? - aren't actually suggestions you need to impliment, the velocity method you've been using before should be fine if you just use this new formula with it. It's more just me putting some ideas out there on how inaccuracy in quake thanks to the framerate can be handled better. And if you do decide you want the extra precision, do let us know how it goes, most of these thoughts are theoretical...
 
Preach 
My brain don't 'alf 'urt! 
 
I am making a counter strike mod for quake. And i want to make a new func_ brush for the escape zone for VIPs how would i go about doing this? 
Taking A Break From Uber Math 
(i need time to digest that...)

in response to 5515:
you could probably just use the trigger_multiple code and change it so that it can be triggered only by monsters (or in this case vips).

however, the question is so general in nature, it's really hard to help beyond that. also, why would you make a counter strike mod for quake? it doesn't seem to make sense, since the original counter strike was for Half life, which itself was an updated version of the quake engine, you're basically taking a step back. just play the HL version. that's just my gripe, anyway. :P

now, on to the math... o.o 
Hmmm 
maybe the radiosity used for lighting in the original Half Life makes his eyes bleed and he is looking for something more sedate for his optical nerves.

But, still, Counterstrike ? Just kidding. It could present some interesting AI challenges but the game isn't my cup of tea. 
Also, 
You may find it useful to read through the QuakeC tutorials on http://minion.planetquake.gamespy.com/index3.html

He covers how to build several different multiplayer oriented game modes in QuakeC. You'll probably get a good grasp on how to approach doing a CounterStrike mod. 
 
Well its not really counter strike. I am taking quake engine and making and Terrorist vs Counter-Terrorist game. So i have to make my own textures, i have to change the engine a little, need to edit the weapons, i have the models already. So if anyone wants to help me out email me hawkins83@gmail.com 
Preach 
hopefully you're not getting tired of doing math... hehehe, there is still a problem with it :P

first: there were some brackets missing. i added them in as best as i could figure out, and i have:

b = (((30 * v) / (t*t)) - ((48 * x) / (t*t*t)));
c = (24 * ( ((3 * x) / (t*t*t*t)) - ((2 * v) / (t*t*t)) ));
velocity = vector * ( ((1/2) * b * k*k) - (t * b * k) + ((1/3) * c * k*k*k) - (t*t * c * k) );

(got quake to sub it for me, yay!)

i think you're really close now. the movement is look good, but it goes to much to fast a speed, as well as goes in the wrong direction. i'm guess it's just a couple of bad constants and possibly a flipped sign? i hope anyway...
i'm actually surprised quake can handle all that math... i was bracing myself for some kind of error: zomg, let me shoot grenades already!

i'll make sure there's a big phat thank you in the read me. :P 
One Constant 
I think I've spotted a constant that's wrong, change c to
c = (12 * ( ((3 * x) / (t*t*t*t)) - ((2 * v) / (t*t*t)) ));
Having looked at the graph of this function, I still get the feeling it's not working correctly, I'll have another think. 
Kell... 
...in the Chapters pack, upon returning to the start map once a level was completed the entrance to that level was blocked. Is this a hack? If not, is the code required incorporated into Quoth? If not, might you or necros slip it in...as I'm beginning to toy with an Id base start map. 
it is part of the quoth progs. see the quoth tutorial: mapindex info on how it works. 
 
necros or kell!!!

http://trinca.no.sapo.pt/why.jpg

monster spawn right away :| and only should when trigger are active!!! any idear? 
because you don't have the right spawnflags set. i see the vore's spawnflags are set to 7, but the trigger_spawn flag is 64.

spawnflag 7 means bit 1,2 and 4 are set, but bits 2 and 4 aren't anything at all. i see the ambush flag is set, so the true spawnflag value should be 65 (64 + 1). 
First | Previous | Next | Last
You must be logged in to post in this thread.
Website copyright © 2002-2024 John Fitzgibbons. All posts are copyright their respective authors.