Re: [stella] acceleration and inertia

Subject: Re: [stella] acceleration and inertia
From: Manuel Rotschkar <cybergoth@xxxxxxxx>
Date: Wed, 07 Jan 2004 08:59:29 +0100
Hi there!

> When I start thinking about modeling all these 
> attributes I can't help but start to roll my eyes over 
> the sheer amount of processing it will take to get to 
> the point where I apply a change to the x and y of 
> each car.

> Any tips?

Don't start with the full blown thing. Start with the 
very basic things, that is:



For your needs, The Position values are two bytes:

X-Pixel and X-Float
Y-Pixel and Y-Float

And the Speed is basically the sum of all other effects 
like traction and acceleration.

Now. Assume we're driving straight right and all we 
consider is "full" speed:

X-Speed = 100
Y-Speed = 0

So we can ignore th Y-Axxis for the moment.

Look at this code snippet

    LDA xPosfloat,X	; Load current float value
    ADC xPosadd,X    ; Add current speed
    STA xPosfloat,X  ; Save current float value

    LDA xPosabs,X	; Load absolute x pixel position
    ADC #$00		; If float value exceeded 255
    STA xPosabs,X    ; Increment it by one
    STA xPosabs,X    ; Store away pixel position

What the code does is this:

Frame 1:
XPos   = 0
Xfloat = 100

Frame 2:
XPos   = 0
Xfloat = 200

Frame 3:
XPos   = 1
Xfloat = 45

Frame 4:
XPos   = 1
Xfloat = 45

Frame 5:
XPos   = 1
Xfloat = 145

Frame 6:
XPos   = 1
Xfloat = 245

Frame 7:
XPos   = 2
Xfloat = 90


You see, it's moving a pixel ~ every 2.5 frames.

Now this has everything moving 0-1 pixel per frame.

To achieve higher Speeds, just add the addvalue 2 or 3 
or more times per frame.

To get the basic movement of your car going like this 
for the start, you'd need tables for every possible 
angle like in:

up     x=0  *speed,    y=1  *speed
down   x=0  *speed,    y=-1 *speed
left   x=-1 *speed,    y=0  *speed
right  x=1  *speed,    y=0  *speed

So you'd divide 360 by any "power of 2" of your choice 
and calculate the sine and cosine values for each of 
these angles. Above is the simplest case for 360/4, 
you'l probably need 360/16 or 360/32.


Ok, that was just a quick start to get you an idea.


Archives (includes files) at
Unsub & more at

Current Thread