Joined: 2/16/2005
Posts: 462
I call the decreasing velocity you described friction.
This signature is much better than its previous version.
nesrocks
He/Him
Player (241)
Joined: 5/1/2004
Posts: 4096
Location: Rio, Brazil
it's not friction for 2 reasons: - the only value decreasing is acceleration, not actual speed. - it only happens in the air, not in the ground.
Joined: 2/16/2005
Posts: 462
1. If the velocity doesnt decrease what keeps the non-zero acceleration from building up? 2. Air friction
This signature is much better than its previous version.
nesrocks
He/Him
Player (241)
Joined: 5/1/2004
Posts: 4096
Location: Rio, Brazil
1. huh? it's a value that starts at let's say, 100 at the moment of the jump and then starts to decrease. that's how the jump was programmed. 2. there's no air friction in mario 64
Joined: 2/16/2005
Posts: 462
???? Velocity = Integral Acceleration dt Are you thinking like net acceleration or something? As in it starts positive and ends up negative and so the net is zero? I would call the negative part the friction. Air friction :) Really i think we are just using different terminology.
This signature is much better than its previous version.
nesrocks
He/Him
Player (241)
Joined: 5/1/2004
Posts: 4096
Location: Rio, Brazil
I have no idea what you're talking about. Integral dt net etc. Remember i'm brazilian so i'm not familiar with phisics terms in english. What i meant by speed = distance / time. And acceleration = distance / time²
Joined: 2/16/2005
Posts: 462
Im probably just speaking too much math/physics for my own good. Please disregard this if its boring. Well for every frame you have position p, velocity v, and acceleration a. If frame n is dt long then for frame n+1 we have p[n+1] = p[n] + v[n]*dt v[n+1] = v[n] + a[n]*dt ... extending this to k frames later p[n+k] = p[n] + v[n]*dt + v[n+1]*dt + v[n+2]*dt + .... + v[n+k-1]*dt v[n+k] = v[n] + a[n]*dt + a[n+1]*dt + a[n+2]*dt + .... + a[n+k-1]*dt factoring p[n+k] = p[n] + sum(v[n] ... v[n+k-1])*dt v[n+k] = v[n] + sum(a[n] ... a[n+k-1])*dt anyway the term sum(a[n] ... a[n+k-1])*dt is called an integral. sum(a[n] ... a[n+k-1])/k is the net accelleration (or average acceleration) As you can see the only way for the velocity to be constant is for that to be zero. If a[n] starts positive then it must later be negative for the velocity v[n+k] to equal v[n]. I am just calling the negative acceleration friction. I think I am spending too much time talking about this... sorry... please ignore me.
This signature is much better than its previous version.
Joined: 1/31/2005
Posts: 95
Does the game use calculus to begin with?
nesrocks
He/Him
Player (241)
Joined: 5/1/2004
Posts: 4096
Location: Rio, Brazil
why would it? it's as simple as it gets there's a value for speed and a value that changes the speed: a simple aceleration value.
Joined: 6/1/2006
Posts: 64
The universe doesn't use calculus either. Calculus is useful for creating accurate models of how the universe works, however.
Joined: 11/15/2004
Posts: 804
Location: Canada
Okay, sorry I mentioned the BLJ glitch.
TASing or playing back a DOS game? Make sure your files match the archive at RGB Classic Games.
Joined: 6/6/2005
Posts: 124
I find hopper's comment the most amusing. =P Anyway, my view of the BLJ and the physics model is this. Edit: after discussion in the chatrooms it's been determined that the movement system is most likely polar rather than cartesian (angle+velocity rather than x+y+z velocity) and so adjust everything following as necessary. The game engine (as is most game engines) is built on the principle of rendering textures in planes between vertices. The ground, for example. Everything. Well, enemies are a little different but they're irrelevant here. The point is that the game has models on the positions of planes within the game; it knows where the vertices are to render the graphics textures, and it can reuse that data for the physics engine. The physics engine, to keep it simple, probably works on one acceleration vector in terms of xaccel, yaccel, and zaccel for 3d space, and one velocity vector in terms of the three dimensions as well. The acceleration vector is quite simply, each frame, added to the velocity vector. There's presumably a detriment on the acceleration vector; friction, Asteron calls it. The velocity vector is also simple, it is simply added to the position value every frame. Before these additions occur, however, the game checks to see if the new position would violate any boundaries - if Mario's cylindrical bounding box would intersect any planes. If it does, it either allows the action by moving Mario vertically until he is in "valid" space (this would account for both stairs and slopes and as Asteron said, probably has a maximum amount) or disallows it by moving Mario as close as possible to the intended velocity vector solution without violating the boundary. Each set of vertices/each slope has an assigned friction value; this explains why you can walk up the really steep green slope or the cannon slope in BoB but not the pearly marble slope which is much flatter. I've said that much before. Issues: 1. Mario doesn't clip through the castle side walls, but he does clip through stuff like the door and the gate. After giving this issue some thought, I realized that the gate and door have one thing in common - they animate; they exist as programmable changeable objects. What I mean is that they are different in nature than walls; they must be programmable so that when Mario does the right things (gets X number of stars or sets the chain chomp free, for example), they must move out of the way or otherwise cease to exist. The walls do not. This means that they are likely handled by a different section of the engine or are handled by the physics engine differently. This is what allows Mario to pass through them but not the walls. The front of Tick Tock Clock, I guess, falls in the non-wall category. I have yet to explain this problem. Tell me if you know. edit: To clarify, I think that when the velocity vector intersects with a graphical plane, the game will test to see if moving Mario upwards up to the statically maximum allowed upwards shift (to allow for slopes and stairs) will relieve the boundary violation. When this doesn't happen, the game will simply put Mario as close as he will go before he would have clipped through the object which had intersected along the way of his next velocity-predicted position. In other words, all environmentally rendered objects (textures loaded as planes) will completely block Mario regardless of his speed. The only reason the gate and door does not is because they are handled differently, being animated and conditional; they are more sprites than environment or planes. 2. BLJ but not LJ? The biggest problem here of course is why BLJ works but not LJ because by knowing that we can explain the nature of the BLJ and use it better. There are I guess a few ways to explain the BLJ. a. There could be an artificial limit on how fast mario can accelerate which exactly equals his speed at the initial burst of a long jump, but the programmers could have limited this to a positive-only direction. This doesn't make that much sense, unless Mario works on a radial basis (angle and velocity in that angle) rather than a cartesian basis (x, y, z), but it could be. Who knows? edit: On further consideration and discussion, it's actually a given that the control scheme itself is radially based rather than cartesian. The only question left, then, is whether the physics engine itself is based on cartesian or polar coordinates. Zurreco proposes as well a hybrid system, wherein XY movement is determined radially and Z movement is an offset as it would be in cartesian systems. All three systems work in their own right, and Zurreco's hybrid system and the polar system would support this hypothesis. b. Asteron's hypothesis: the game artificially lifts you at the end of a jump. Unlikely though, you can still longjump in the single frame you have contact with the ground, and plus LJ would still boost on stairs if this were the case. c. When you BLJ, the angle of attack you come off of is different. When you LJ, you come off more horizontal, grinding you against the ground and causing ground friction before you hit the next step to longjump again. When you BLJ, you only hit the corner of the step and so friction does not occur and you can shoot right up. This would explain why some steps don't seem to work (stairs to basement, front steps), but it's kind of touch and go in that it would be pretty zany for the exact angle to have been programmed by accident to work. But hey, a glitch is a glitch, it wasn't supposed to happen anyway. d. Somehow, a BLJ isn't considered "finished" when you land. If the game considers that when you LJ again you're on the ground facing forward and it should jump again at the set velocity, then when you BLJ somehow it screws the system up. I haven't thought this one out. I think c is the most likely option here; because it seems to make the most logical sense and also it supports the only logical explanation for number 3: edit: of course, a is also likely now that we've decided that a radial system is the most logical. 3. Why BLJ doesn't work on slopes. BLJ must occur where Mario is allowed to jump again but he is not considered "on the ground" and thus a) there is no friction and b) the game doesn't jump with the same velocity but adds on to it. With a slope, Mario pushes into it differently and so he will always register as hitting the ground. So it's a combination of not being the right angle and containing contact to the ground. All that's the best I can think of right now. EDIT: For the lazy, this post could be considered long-winded and a pain to read. Heck, I had a headache rereading it. And thus, Zurreco has kindly offered this synopsis: therefore, the reason that mario can not work around static objects like walls and stairs is because they are not programmed with the ability to not exist. along with this, the BLJ has much more possibile applications than the LJ because the programmers put a velocity cap for mario only in a positive vector: when moving backwards mario is limitless
Joined: 6/14/2004
Posts: 646
In one phrase: The programmers forgot to set a maximum reverse speed.
I like my "thank you"s in monetary form.
Joined: 6/6/2005
Posts: 124
NrgSpoon wrote:
In one phrase: The programmers forgot to set a maximum reverse speed.
Well, that's letter a of number 2 in one phrase. =P
Post subject: A challenge
Joined: 11/15/2004
Posts: 804
Location: Canada
Okay, I've been trying to use the bob-omb to blow myself through the gate for quite some time now. I've watched this video several dozen times and learned to imitate it exactly. (Copy the link location to IE or Windows Media Player if you're using Firefox, which may try to open the WMV as a web page) I grab the bob-omb, jump four times, face the corner between the gate and the wall so that the bob-omb partially disappears into it, turn around, and jump. Sometimes the explosion doesn't hurt me, sometimes it does, but after several hundred attempts and several dozen lives, I have never been blasted through the wall. Therefor, I challenge, in fact, I double dog dare anyone here to pull off this trick without tool assistance.
TASing or playing back a DOS game? Make sure your files match the archive at RGB Classic Games.
nesrocks
He/Him
Player (241)
Joined: 5/1/2004
Posts: 4096
Location: Rio, Brazil
why complicate? i've already said it simple and precisely mario just has to jump many times per second. forget friction (there's no friction in air!) forget calculus forget math forget vectors. just jump 2 times/second or more while BLJ to get mario's speed above normal. no matter the means to do it.
Joined: 2/16/2005
Posts: 462
Well anyway good came out of this. You can BLJ up steepish slopes that you can stand on without sliding.
This signature is much better than its previous version.
Joined: 2/13/2006
Posts: 39
Location: Finland
I apologize for continuing this almost off-topic discussion, but something really hurt my eyes: Integral (Riemann) is only defined for continuous real valued functions. Asteron did really wrong, his post mixed integral and real valued sequences, sequence probably being non-continous function from the set of natural numbers to the field of real numbers. Asteron's post really convinced me, for a second.
Joined: 2/16/2005
Posts: 462
I really should stop but its so hard!!! Yeah integrals are continuous and reimann sums are not but they are really pretty much the same thing. Integrals are defined as the limit of a summation and the reason an integral symbol looks like an S is because it stands for the word 'summation' and can be thought of as such. The summation symbol is a Sigma which is just a greek S. As you noted there is a topological difference between the two operators in the spaces over which they work but it is still pretty much the same operator. There are tons of other operators out there (like the addition operator +) that we dont really bother defining seperately over different spaces like real numbers and integers. But yeah I am probably more likely to think of reimann sums as discrete integrals than think of integrals as continuous reimann sums.
This signature is much better than its previous version.
Joined: 6/6/2005
Posts: 124
An integral is a riemann sum which is set with limit h=0+ so that every possible infinitesimal value is calculated.
Player (104)
Joined: 1/30/2005
Posts: 562
Location: Québec, Canada
May I suggest something? Can a mod move all irrelevant calculus chatter to another topic in the Off Topic section, under a new topic named "Math stuff"? Honestly, this is a thread for Mario 64 ... not math stuff about friction and whatnot! ... what I'm trying to say is: just stop it. Nobody cares and it's irrelevant to the Mario 64 100% TAS. Thanks.
Joined: 12/1/2005
Posts: 107
How about the essential part of the BLJ? It would interest me, how the BLJ is done on an emulator. Maybe we could understand something more on how this BLJ is done after all. @FODA You did the BLJ by try and error? Did you use slow down? Did you use save states after EVERY BLJ and how did that affect the next BLJ (press A some frames slower)? Or you just kept trying from the very beginning of the stairs until it worked? Give a step-by-step guide, on how it can be done perfectly.
Joined: 6/6/2005
Posts: 124
Might I point out that you simply added another post regarding calculus to a discussion that was pretty much done? Anyway, I don't think anybody read my entire post so let me restate one of the more important points in it: The environment will stop Mario. Animated sprites like the door and the gate will not, which is why it is possible to glitch past them. Read point number 1 on my long post from this morning. edit: @Fil: I know on the upwards rising platforms he simply hits A every other frame for maximum boost. I just played the movie again and it looks like for stairs he hits A every time Mario raises up to the next step until he really gets going and then he hits A every other frame.
nesrocks
He/Him
Player (241)
Joined: 5/1/2004
Posts: 4096
Location: Rio, Brazil
i jump as early as possible so mario lands on the upper plataform. on stairs, this means that if i jump too early, mario will not land on the next step and will jump high, so i delay 1 frame and try again.
Emulator Coder, Skilled player (1300)
Joined: 12/21/2004
Posts: 2687
GWing_02 wrote:
The environment will stop Mario. Animated sprites like the door and the gate will not, which is why it is possible to glitch past them.
You can glitch through non-animated things as well, as long as you're going fast enough that you pass entirely through them in-between frames. If you get going fast enough you can actually glitch to a place outside of the entire level, not that it does you any good to stand around out there.