On the other hand, the logic to automatically control the player's car during Attract Mode is a lot simpler. The code can be quite basic, because the traffic in OutRun intelligently attempts to move out of your way. A simple detail most home conversions didn't pick up upon.
Here's a simplified pseudo-code conversion if you're interested:
AttractModeAI()
{
// Check upcoming road segment for straight/curve.
// Choose route from pre defined table at road split.
AICheckRoad();
// Set steering value based on upcoming road segment
AISetSteering();
// If speed is below a certain amount, just accelerate
if (car_speed < 0xFA)
{
accelerator = MAX_VALUE;
return;
}
// If AI Traffic is close, set brake on
if (traffic_close)
{
traffic_close = false;
brake = 0xC0;
}
// If either wheel of the car is off-road
else if (wheels_offroad)
{
brake = 0xC0;
}
// Upcoming road: Straight Road
if (road_type == STRAIGHT)
{
curve_counter = 0;
}
// Upcoming road: Curved Road
else
{
if (++curve_counter == 1)
{
// Set road curve value based on hard coded road data.
// High value = Sharper Bend
road_curve_value = value - 1;
}
// toggle brake on bends.
// The brake flickers on/off in OutRun attract mode
else if (road_curve_value != 0 && ((road_curve_value <= 0xA)
|| (road_curve_value & 8)))
{
brake = 0xA0;
road_curve_value--;
return;
}
}
accelerator = MAX_VALUE;
return;
}
No comments:
Post a Comment