For the vehicle in Grand Theft Auto: Liberty City Stories, see V8 Ghost.
“We did a demo doing some spy stuff in San Andreas. I think there was a hang glider and a car turning into a submarine or something.”
The Lotus is the internal name of a test/concept vehicle for Rockstar North's Agent, first tested in Grand Theft Auto: San Andreas.
Design
The name "Lotus" comes from the variables for the vehicle's weapons[2], while the vehicle is simply referred to as the "Jimmy Bond" car in developer notes. Due to its internal name and use, it is suggested to be a 1976–78 Lotus Esprit S1-inspired vehicle, more specifically the custom Esprit "Wet Nellie" from the 1977 James Bond movie The Spy Who Loved Me.
Performance
While underwater, the vehicle is controlled using plane controls. [3] Upon switching to submarine mode, the vehicle renders trails similarly to the existing planes (although underwater) and, for particle effects, bubbles from the cockpit.[4][5]
See Also
- Stromberg – Grand Theft Auto Online equivalent vehicle.
References
- ↑ Website(02/15/2025)https://web.archive.org/web/20231122113849/https://insiderockstarnorth.blogspot.com/2023/11/distractions-agent-z.html
"Distractions: Agent & Z" - Obbe Vermeij's "Inside Rockstar North" blog (Archived) - ↑ Script data(02/15/2025)Lines 12098-12099
gtasrc\Automobile.cpp
CVector vecLotusRocketPos(0.7f, 2.5f, 0.0f); CVector vecLotusGrenadePos(0.0f, -1.9f, 0.1f);
- ↑ Script data(02/15/2025)Lines 4150-4161
gtasrc\Automobile.cpp
/* // JIMMY BOND CODE if(GetModelIndex()==MODELID_CAR_SENTINEL) { bIsDrowning = false; IsInWater = false; CentreOfBuoyancy += MOVE_UNDERWATER_CAR_COB*GetMatrix().GetForward(); if(fBuoyancyFraction > 0.4f && m_fTransformPosition==JIMMY_TRANSFORM_TOTAL_TIME) { FlyingControl(FLIGHTMODEL_PLANE); bMessingAboutInWater = true; }
- ↑ Script data(02/15/2025)Lines 4181-4200
gtasrc\Automobile.cpp
// do trails from fins /* CVector vecFinPos(0.0f,0.0f,0.0f); GetComponentWorldPosition(CAR_FIN_RF, vecFinPos); vecFinPos += 0.25f*GetMatrix().GetRight(); CParticle::AddParticle(PARTICLE_BOAT_SPLASH, vecFinPos, 0.75f*m_vecMoveSpeed, NULL, 0.2f , rgbaSplashWaterColor, CGeneral::GetRandomNumberInRange(0.0f, 0.4f), CGeneral::GetRandomNumberInRange(0.0f, 45.0f), 0, CGeneral::GetRandomNumberInRange(200, 600)); vecFinPos = CVector(0.0f,0.0f,0.0f); GetComponentWorldPosition(CAR_FIN_RR, vecFinPos); vecFinPos += 0.25f*GetMatrix().GetRight(); CParticle::AddParticle(PARTICLE_BOAT_SPLASH, vecFinPos, 0.75f*m_vecMoveSpeed, NULL, 0.2f , rgbaSplashWaterColor, CGeneral::GetRandomNumberInRange(0.0f, 0.4f), CGeneral::GetRandomNumberInRange(0.0f, 45.0f), 0, CGeneral::GetRandomNumberInRange(200, 600)); vecFinPos = CVector(0.0f,0.0f,0.0f); GetComponentWorldPosition(CAR_FIN_LF, vecFinPos); vecFinPos -= 0.25f*GetMatrix().GetRight(); CParticle::AddParticle(PARTICLE_BOAT_SPLASH, vecFinPos, 0.75f*m_vecMoveSpeed, NULL, 0.2f , rgbaSplashWaterColor, CGeneral::GetRandomNumberInRange(0.0f, 0.4f), CGeneral::GetRandomNumberInRange(0.0f, 45.0f), 0, CGeneral::GetRandomNumberInRange(200, 600)); vecFinPos = CVector(0.0f,0.0f,0.0f); GetComponentWorldPosition(CAR_FIN_LR, vecFinPos); vecFinPos -= 0.25f*GetMatrix().GetRight(); CParticle::AddParticle(PARTICLE_BOAT_SPLASH, vecFinPos, 0.75f*m_vecMoveSpeed, NULL, 0.2f , rgbaSplashWaterColor, CGeneral::GetRandomNumberInRange(0.0f, 0.4f), CGeneral::GetRandomNumberInRange(0.0f, 45.0f), 0, CGeneral::GetRandomNumberInRange(200, 600));
- ↑ Script data(02/15/2025)Lines 4204-4213
gtasrc\Automobile.cpp
if( (CTimer::GetTimeInMilliseconds()&15) < (CGeneral::GetRandomNumber() &7) ) { // do bubbles from cockpit } if((CGeneral::GetRandomNumber() &255) > 240) { AudioManager.ProcessUnderWaterCar(2000); }