The sequel of Midtown Madness 2, Midtown Madness 3 has been released only on Xbox. This sequel takes the player around two cities, Paris and Washington D.C., with 40 cars from both France and the United States. With multiplayer support and DLC, the game fully took advantage of Xbox Live.
Unused Vehicles#
Several unused vehicles are referred to by text in prototype versions of the game, as well as released versions, including:
- BMW
- Citroen 2CV
- Ford Mustang GT Bullitt
- Mercedes-Benz SL 600
- Nissan 350Z
- Peugeot 206 2.0 GTI
- Smart Cabrio
- Smart fortwo
Uncompiled Code#
Data\Data_hd\Scripts#
"Data\Data_hd\Scripts" contains 49 files with debugging features, complete game-mode scripts and other interesting stuff like E3 settings.
Note: Out of respect and to avoid copyright issues, the main files are not posted here (i.e. full game-mode scripts...).
aidebug.lua#
----
--
-- Debug script for AI
--
--
----
function onInit()
--setPedDebugFlags()
--doAiTest()
--debugPedestrians()
--doSearchForStartSlowdown()
--doTestSpawner()
--doTestCinematicPeds()
doSearchForAmbientCarLeak()
end
function loadCurves()
setLogLevel( "projects/mmx/main/game/profiletools", "info" )
loadModule( "profiletools" )
profilerGraphAddCurve( "Main_update/ai", 255,255,255 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects",0,255,0 )
-- profilerGraphAddCurve( "Main_update/ai/SphereOfInterest", 0,0,255 )
profilerGraphAddCurve( "Main_update/ai/UpdateWeb", 226,6,209 ) -- purple
-- profilerGraphAddCurve( "Main_update/ai/UpdateWeb/postUpdate/populateContainers", 0,215,232 ) -- light seablue
-- profilerGraphAddCurve( "Main_update/ai/ExternalTestLine", 255,0,0 )
-- profilerGraphAddCurve( "Main_update/ai/InternalTestLine", 0,255,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdatePedestrians",226,133,5 ) -- yellow
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdateAmbientCars",176,225,6 ) -- green
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdateSubwayCars",72,159,126 ) -- light window green/blue
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdatePedestrians/LocomotionUpdate",0,0,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdatePedestrians/LocomotionUpdate/advancePoint",0,0,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdatePedestrians/LocomotionUpdate/checkDrift",0,0,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateLocomotion",0,0,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateLocomotion/adjustLocalVelocity",0,0,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateLocomotion/advancePoint",0,0,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateGraphics",0,0,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateCollisionTransform",0,0,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateSound",0,0,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/UpdateAmbientCars/onPulse",0,0,0 )
profilerCounterToggle()
profilerCounterAdd( "Main_update/ai/UpdateWeb" )
profilerCounterAdd( "Main_update/ai/UpdateObjects" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdatePedestrians" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdateAmbientCars" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdateSubwayCars" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdatePedestrians/LocomotionUpdate" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdatePedestrians/LocomotionUpdate/advancePoint" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdatePedestrians/LocomotionUpdate/checkDrift" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateLocomotion" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateLocomotion/adjustLocalVelocity" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateLocomotion/advancePoint" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateGraphics" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateCollisionTransform" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdateAmbientCars/UpdateSound" )
profilerCounterAdd( "Main_update/ai/UpdateObjects/UpdateAmbientCars/onPulse" )
end
function enablePulseUpdate()
aiSetVariable( "objects::m_ambientCarUpdateFreq", 0.5 )
aiSetVariable( "objects::m_pedestrianUpdateFreq", 0.5 )
end
function disablePulseUpdate()
aiSetVariable( "objects::m_ambientCarUpdateFreq", 1 )
aiSetVariable( "objects::m_pedestrianUpdateFreq", 1 )
end
function disableGroundAdjusts()
-- Disable the ambient car reset stuff
aiSetVariable( "ac::m_cameraAdjustRadius", -1 )
aiSetVariable( "ac::m_useHeightReset", 0 )
aiSetVariable( "ped::m_pedUseHeightReset", 0 )
end
function enableGroundAdjusts()
aiSetVariable( "ac::m_cameraAdjustRadius", 30 )
aiSetVariable( "ac::m_useHeightReset", 1 )
aiSetVariable( "ped::m_pedUseHeightReset", 1 )
end
function enableOccluders()
aiSetVariable( "web::m_useOccluders", 1 )
aiSetVariable( "web::m_useLazyOcclusion", 0 )
end
function doSplitScreen()
job = 0
city = 0
weather = 0
timeOfDay = 1
race = 0
opponentCount = 4
playType = 1 -- SinglePlayer = 0, SplitScreen = 1, Client = 2, Host = 3
startCruiseRace(city, weather, timeOfDay, playType)
end
function setPedDebugFlags()
--aiSetVariable( "ped::m_maxAngleSpeed", 100 )
--aiSetVariable( "ped::m_avoidanceDistance", 150 )
--aiSetVariable( "system::m_cameraSphereRadius", 150 )
setLogLevel( "projects/mmx/main/shared/ai/engine/objects/pedestrian", "all" )
aiDebugSetPedestrianCount(1)
setFixedDeltaTime( 33 )
aiTogglePedestrianInfo()
aiSetFixedDeltaTime( 0.001 )
unloadModule( "dof" )
end
function doAiTest()
loadModule( "profiletools" )
unloadModule( "dof" )
toggleFps(1);
--aiTogglePopulationInfo()
profilerGraphSetSampleCount(128)
profilerGraphSetYScale(200.0)
setFixedDeltaTime(33)
deviceSetFlipSync(0)
profilerGraphSetSampleCount(128)
profilerGraphAddCurve( "Main_update/ai", 255,255,255 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects",0,255,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateWeb", 226,6,209 ) -- purple
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/pedestrians",226,133,5 ) -- yellow
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/ambientcars",0,0,255 ) -- green
-- renderSetViewDistance( 2000 )
-- aiSetVariable( "web::m_innerSphereRadius", 250 )
-- aiSetVariable( "web::m_maxContainerDistance", 400 )
-- aiSetVariable( "web::m_maxContainerPercentPopulatePerFrame", 0.2 )
-- aiSetVariable( "web::m_maxObjectSpawnedPerFrame", 3 )
end
function debugPedestrians()
memeDebug()
aiDebugSetPedestrianCount(1)
aiSetVariable( "ped::m_minorThreatFrequency", 1 )
aiSetVariable( "ped::m_majorThreatFrequency", 0.1 )
end
function doSearchForStartSlowdown()
loadModule( "profiletools" )
unloadModule( "dof" )
toggleFps(1);
--aiTogglePopulationInfo()
profilerGraphSetSampleCount(128)
profilerGraphSetYScale(200.0)
--setFixedDeltaTime(33)
deviceSetFlipSync(0)
profilerGraphSetSampleCount(128)
profilerGraphAddCurve( "Main_update/ai", 0,0,0 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects",0,0,0 )
-- profilerGraphAddCurve( "Main_update/ai/UpdateObjects/ambientcars",255,100,100 )
-- profilerGraphAddCurve( "Main_update/ai/UpdateObjects/ambientcars/onPulse",0,10,255 )
-- profilerGraphAddCurve( "Main_update/ai/UpdateObjects/ambientcars/Update",0,255,10 )
-- profilerGraphAddCurve( "Main_update/ai/UpdateObjects/ambientcars/UpdateObjectCache",255,255,255 )
profilerGraphAddCurve( "Main_update/ai/UpdateObjects/pedestrians",0,0,0 )
end
function doTestSpawner()
setFixedDeltaTime(33)
memeDebug()
aiToggleCameraInfo(1)
aiToggleContainerSortingInfo(1)
aiToggleAmbientCarInfo(1)
aiToggleAmbientCarStateInfo(1)
aiToggleUpdateWebInfo(1)
aiToggleContainerSortingInfo(1)
renderSetViewDistance( 1000 )
aiSetVariable( "dbg::m_cameraRenderScale", 0.2 )
aiDebugSetPlayerCarPos(2075,29,556)
aiSetVariable( "web::m_trailingPopulateThresholdSpeed", -1 )
end
function doTestCinematicPeds()
setFixedDeltaTime(33)
memeDebug()
aiSetVariable( "level::m_disablePedInterpolate", 1 )
aiSetVariable( "cin::m_defaultGridSize",0.5 )
aiSetVariable( "cin::m_defaultGridWidth", 10 )
aiSetVariable( "cin::m_defaultGridExtraExtend", 10 )
aiTogglePedestrianInfo(1)
end
function doSearchForAmbientCarLeak()
cameraBindToPlayer( 1, "Comp--1", 0 )
aiTogglePopulationInfo(1)
end
broadcasters.lua#
With most of the file commented out, these functions were probably shown as part of an early version.
function onInit()
-- Creating services mail
mailRadius = 10
mailDuration = 5
aiCreateBroadCaster( 1332.65827 ,61.67926 - 1.811, 1258.69892 , mailRadius, mailDuration, 'mail' )
--aiCreateBroadCaster( 1274.43449 ,61.6671 - 1.811, 1162.96391 , mailRadius, mailDuration, 'mail' )
--aiCreateBroadCaster( 1226.28601 ,61.68954 - 1.811, 1260.2383 , mailRadius, mailDuration, 'mail' )
--aiCreateBroadCaster( 1141.48446 ,55.22907 - 1.811, 1204.47642 , mailRadius, mailDuration, 'mail' )
--aiCreateBroadCaster( 1112.94561 ,52.8401 - 1.811, 1275.65365 , mailRadius, mailDuration, 'mail' )
--aiCreateBroadCaster( 1272.41749 ,56.79825 - 1.811, 1350.84961 , mailRadius, mailDuration, 'mail' )
--aiCreateBroadCaster( 1048.79726 ,35.29428 - 1.811, 1444.6209 , mailRadius, mailDuration, 'mail' )
--aiCreateBroadCaster( 936.49465 ,33.27933 - 1.811, 1399.15838 , mailRadius, mailDuration, 'mail' )
--aiCreateBroadCaster( 744.93696 ,32.29973 - 1.811, 1353.62178 , mailRadius, mailDuration, 'mail' )
--aiCreateBroadCaster( 1028.98182 ,52.8028 - 1.811, 1243.46753 , mailRadius, mailDuration, 'mail' )
--aiCreateBroadCaster( 1059.20696 ,46.5964 - 1.811, 1171.77081 , mailRadius, mailDuration, 'mail' )
-- Creating services trash
trashRadius = 10
trashDuration = 2
aiCreateBroadCaster( 1168.38237 ,47.44184 , 1123.81628 , trashRadius, trashDuration, 'trash' )
--aiCreateBroadCaster( 1142.65054 ,53.70776 , 1187.22191 , trashRadius, trashDuration, 'trash' )
--aiCreateBroadCaster( 1120.24458 ,53.69802 , 1195.90994 , trashRadius, trashDuration, 'trash' )
--aiCreateBroadCaster( 1052.22699 ,45.20135 , 1175.18068 , trashRadius, trashDuration, 'trash' )
--aiCreateBroadCaster( 1026.6599 ,51.37973 , 1237.63743 , trashRadius, trashDuration, 'trash' )
--aiCreateBroadCaster( 1092.24607 ,51.42217 , 1266.99937 , trashRadius, trashDuration, 'trash' )
--aiCreateBroadCaster( 1097.926 ,51.08131 , 1296.06835 , trashRadius, trashDuration, 'trash' )
--aiCreateBroadCaster( 1211.73156 ,55.40998 , 1327.74428 , trashRadius, trashDuration, 'trash' )
--aiCreateBroadCaster( 1234.65614 ,60.28755 , 1239.43479 , trashRadius, trashDuration, 'trash' )
--aiCreateBroadCaster( 1253.72558 ,60.30076 , 1163.34658 , trashRadius, trashDuration, 'trash' )
-- Creating services rest
--aiCreateBroadCaster( 1128.53097 ,33.12035 ,-1030.56577 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1143.24641 ,33.32184 ,-1035.80347 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1160.74997 ,33.51633 ,-1042.40397 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1173.67495 ,33.64051 ,-1047.77536 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1085.17152 ,40.10253 ,-1111.47153 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1113.56825 ,52.10391 ,-1163.78372 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1291.76677 ,54.3735 ,-1130.81722 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1330.27836 ,54.38406 ,-1147.96944 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1328.47942 ,46.11142 ,-1126.74483 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1308.34283 ,46.13301 ,-1117.97723 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1320.17179 ,36.89738 ,-1090.53882 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1340.61473 ,36.89738 ,-1099.61113 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1076.94821 ,51.38193 ,-1282.39252 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1073.29597 ,51.39886 ,-1293.20315 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1069.20546 ,51.41205 ,-1306.35121 , 10, 120, 'rest' )
--aiCreateBroadCaster( 589.25034 ,26.31558 ,-1147.28401 , 10, 120, 'rest' )
--aiCreateBroadCaster( 588.75196 ,25.03382 ,-1121.76616 , 10, 120, 'rest' )
--aiCreateBroadCaster( 588.04408 ,24.63449 ,-1113.18482 , 10, 120, 'rest' )
--aiCreateBroadCaster( 642.19163 ,31.93389 ,-1263.42969 , 10, 120, 'rest' )
--aiCreateBroadCaster( 652.26072 ,31.93389 ,-1263.42969 , 10, 120, 'rest' )
--aiCreateBroadCaster( 631.8763 ,31.93389 ,-1275.5048 , 10, 120, 'rest' )
--aiCreateBroadCaster( 631.8763 ,31.93389 ,-1283.10207 , 10, 120, 'rest' )
--aiCreateBroadCaster( 631.8763 ,30.6975 ,-1319.81102 , 10, 120, 'rest' )
--aiCreateBroadCaster( 631.8763 ,30.83273 ,-1312.21375 , 10, 120, 'rest' )
--aiCreateBroadCaster( 679.75364 ,31.93389 ,-1263.42969 , 10, 120, 'rest' )
--aiCreateBroadCaster( 669.68455 ,31.93389 ,-1263.42969 , 10, 120, 'rest' )
--aiCreateBroadCaster( 713.613 ,31.93389 ,-1263.42969 , 10, 120, 'rest' )
--aiCreateBroadCaster( 703.54391 ,31.93389 ,-1263.42969 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1170.13041 ,28.47486 ,-975.24921 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1170.13041 ,28.95063 ,-988.15536 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1910.40571 ,19.067 ,-816.97786 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1918.75099 ,19.12645 ,-830.88665 , 10, 120, 'rest' )
--aiCreateBroadCaster( 1930.26073 ,19.22818 ,-847.19211 , 10, 120, 'rest' )
end
dopeddebug.lua#
Used for debug pedestrians.
function onInit()
doReloadPed()
end
function doReloadPed()
local pedCount = 1
local pedFile = "+Animation/Woman_Generic2/Woman_Generic2.mod"
local pedPersonality = "Paris_Woman_Generic1"
local pedFrequency = 1
aiClearCityProperties()
aiAddCityPropPededstrian( pedFile, pedPersonality, pedFrequency )
aiDebugSetPedestrianCount( pedCount )
end
E3settings.lua#
Settings for E3! Unfortunately, there isn't much to see here.
function onInit()
gameLog("E3settings\n")
renderSetCityLodZones(80, 100, 350)
renderSetFov(62)
renderFacadeSetMaxFloors(2)
soundEnableStreamingSounds(1)
gameLog("End E3settings\n")
end
logic_events.lua#
-- ********************************************************************************
-- ********************************************************************************
-- * Midtown Madness X *
-- * Event script *
-- * OBS: No modifications should be made to this file!!! *
-- ********************************************************************************
-- ********************************************************************************
-- ********************************************************************************
-- * Variables *
-- ********************************************************************************
event_prev_id = -1
event_obj_ids = 0
events = 4
-- ********************************************************************************
-- * Functions *
-- ********************************************************************************
-- Run the commands on startup of the race
function randomNewEvent()
local new_id
repeat
new_id = rand(events)
until not event_prev_id == new_id
event_prev_id = new_id
if new_id == 0 then
eventAmbulance()
end
end
function eventAmbulance()
end
function eventFiretruck()
end
function eventPoliceHunt()
end
function eventSpeeders()
end
function endEvents()
for i = 0, event_obj_ids, 1 do
endEvent(id)
end
end
function endEvent()
end
logic_events.lua#
Note: This starts from line 702. All lines before that contain the main part of the game, so these aren't shown.
-- ********************************************************************************
-- * Debug functions (should be removed in final version!) *
-- ********************************************************************************
function addTime() -- DEBUG
timerChangeDelta("race_timer", 60) -- DEBUG
gameLog("Added 60s to the counter ... enjoy!") -- DEBUG
end -- DEBUG
function setTime(new_time) -- DEBUG
timerChange("race_timer", new_time) -- DEBUG
gameLog("Set counter to " .. new_time .. "s ... enjoy!") -- DEBUG
end -- DEBUG
function forceWin() -- DEBUG
career_result = 1
for i = 0, players_human_amount - 1, 1 do -- DEBUG
raceFinish(1, ply_HUMAN_subname .. i) -- DEBUG
end -- DEBUG
if players_human_amount < players then -- DEBUG
for i = 0, players - players_human_amount - 1, 1 do -- DEBUG
raceFinish(0, ply_AI_subname .. i) -- DEBUG
end -- DEBUG
end -- DEBUG
raceFinish(1) -- DEBUG
end -- DEBUG
function forceLose() -- DEBUG
career_result = 0
for i = 0, players_human_amount - 1, 1 do -- DEBUG
raceFinish(0, ply_HUMAN_subname .. i) -- DEBUG
end -- DEBUG
if players_human_amount < players then -- DEBUG
for i = 0, players - players_human_amount - 1, 1 do -- DEBUG
raceFinish(1, ply_AI_subname .. i) -- DEBUG
end -- DEBUG
end -- DEBUG
raceFinish(0) -- DEBUG
end -- DEBUG
logic_multi_client.lua#
-- ********************************************************************************
-- ********************************************************************************
-- * Midtown Madness X *
-- * Generic multiplayer : Cruise *
-- * OBS: No modifications should be made to this file!!! *
-- ********************************************************************************
-- ********************************************************************************
-- Only InitAmbience() should be called in this script
gameLoadScript("logic_general.lua")
-- ********************************************************************************
-- * Startup functions *
-- ********************************************************************************
function generalOnRaceStart(player, view, timeLeft)
local timer_in = 0.15
local timer_out = 0
local timer_show = (timeLeft/6) - timer_in - timer_out
local timer_sound = 0
local timer_wait = (timeLeft/6) - timer_sound
if (timeLeft > 1) then
stack(0, "cameraPreRaceSweep(" .. view .. ", " .. (timeLeft/2) .. ")")
stack(timeLeft/2, "gameCountDownStart(3, " .. timer_in .. ", " .. timer_show .. ", " .. timer_out .. ")")
stack(timer_sound, "soundPlayEffect('321')")
stack(timer_wait, "gameCountDownStart(2, " .. timer_in .. ", " .. timer_show .. ", " .. timer_out .. ")")
stack(timer_sound, "soundPlayEffect('321')")
stack(timer_wait, "gameCountDownStart(1, " .. timer_in .. ", " .. timer_show .. ", " .. timer_out .. ")")
stack(timer_sound, "soundPlayEffect('321')")
stack(timer_wait, "gameCountDownStart(0, " .. timer_in .. ", " .. timer_show .. ", " .. timer_out .. ")")
stack(timer_sound, "soundPlayEffect('go')")
stack(timer_sound, "playerEnableInput('" .. player .. "')")
stack(timer_sound, "raceStart()")
else
gameLog("Quick countdown")
sweepTime = 2
stack(0, "cameraPreRaceSweep(" .. view .. ", " .. sweepTime .. ")")
stack(sweepTime, "playerEnableInput('" .. player .. "')")
stack(timer_sound, "raceStart()")
end
stackRun()
end
logic_multi_spawnlocations_paris.lua#
This file contains all multiplayer spawn locations for the Paris map.
-- ********************************************************************************
-- ********************************************************************************
-- * Midtown Madness X *
-- * Multiplayer Paris spawn-locations *
-- ********************************************************************************
-- ********************************************************************************
-- ********************************************************************************
-- * Variables *
-- ********************************************************************************
multi_spawn_location = {}
-- Arc de Triumph
multi_spawn_location[1] = {}
multi_spawn_location[1]["constrain"] = {-703.014038,28.599976,885.903259, 525;}
multi_spawn_location[1][1] = {-729.062622,28.860729,824.705627, 0.425785;}
multi_spawn_location[1][2] = {-677.116394,28.857939,949.094666, 3.571365;}
multi_spawn_location[1][3] = {-641.333069,28.863956,860.687378, 5.155476;}
multi_spawn_location[1][4] = {-766.623108,28.857964,912.715942, 1.978534;}
multi_spawn_location[1][5] = {-676.919922,28.857769,823.593689, 5.871404;}
multi_spawn_location[1][6] = {-728.254639,28.857880,948.912903, 2.760859;}
multi_spawn_location[1][7] = {-767.676270,28.857950,859.173645, 1.161324;}
multi_spawn_location[1][8] = {-638.290466,28.857740,913.429626, 4.350385;}
multi_spawn_location[1]["hunter"] = {-981.388855,23.768562,1018.33545, 2.041837;}
-- Madelene
multi_spawn_location[2] = {}
multi_spawn_location[2]["constrain"] = {422.957336,17.246643,612.156738, 525;}
multi_spawn_location[2][1] = {322.972992,16.837706,347.575134, 5.907536;}
multi_spawn_location[2][2] = {334.735931,16.837709,373.062439, 5.909806;}
multi_spawn_location[2][3] = {353.446503,16.837776,415.699432, 4.431984;}
multi_spawn_location[2][4] = {366.081696,16.837925,443.371582, 4.377823;}
multi_spawn_location[2][5] = {333.614349,16.837883,457.941254, 2.809117;}
multi_spawn_location[2][6] = {321.175781,16.837658,430.809875, 2.794186;}
multi_spawn_location[2][7] = {302.376709,16.837711,388.463440, 1.236599;}
multi_spawn_location[2][8] = {289.608276,16.837986,361.928284, 1.226411;}
multi_spawn_location[2]["hunter"] = {439.119110,17.847754,647.673523, 3.564979;}
-- Sacre Coeur
multi_spawn_location[3] = {}
multi_spawn_location[3]["constrain"] = {1325.210571,59.870087,1250.398804, 425;}
multi_spawn_location[3][1] = {1313.419067,60.337944,1194.342896, 3.189455;}
multi_spawn_location[3][2] = {1317.712891,60.337757,1194.975830, 2.936446;}
multi_spawn_location[3][3] = {1322.614136,60.337952,1196.053589, 2.857661;}
multi_spawn_location[3][4] = {1327.407104,60.337914,1197.515991, 2.719390;}
multi_spawn_location[3][5] = {1332.121338,60.337757,1200.257446, 2.714844;}
multi_spawn_location[3][6] = {1336.138672,60.337765,1203.317993, 2.504399;}
multi_spawn_location[3][7] = {1339.617676,60.337688,1207.518433, 2.518405;}
multi_spawn_location[3][8] = {1342.158447,60.337975,1211.277466, 2.424995;}
multi_spawn_location[3]["hunter"] = {1290.744629,60.334320,1284.734375, 2.759937;}
-- Eleftower
multi_spawn_location[4] = {}
multi_spawn_location[4]["constrain"] = {-696.029297,18.000000,-49.686310, 425;}
multi_spawn_location[4][1] = {-719.329651,18.447693,-26.505781, 2.349847;}
multi_spawn_location[4][2] = {-695.599915,18.447969,-15.732449, 3.137931;}
multi_spawn_location[4][3] = {-671.047241,18.447758,-25.033384, 3.931411;}
multi_spawn_location[4][4] = {-661.050720,18.448000,-50.882565, 4.715195;}
multi_spawn_location[4][5] = {-671.032288,18.447788,-74.669556, 5.502910;}
multi_spawn_location[4][6] = {-694.474854,18.447910,-83.900726, 0.000088;}
multi_spawn_location[4][7] = {-719.453979,18.447958,-74.749634, 0.810257;}
multi_spawn_location[4][8] = {-729.589783,18.447727,-50.130402, 1.580507;}
multi_spawn_location[4]["hunter"] = {-848.239014,18.347912,97.422989, 2.379388;}
-- Ivalides
multi_spawn_location[5] = {}
multi_spawn_location[5]["constrain"] = {28.115973,18.720947,-79.843658, 425;}
multi_spawn_location[5][1] = {69.609177,16.347717,54.545708, 3.918060;}
multi_spawn_location[5][2] = {46.931175,16.347748,54.368378, 3.826791;}
multi_spawn_location[5][3] = {6.487767,16.347996,54.640152, 2.510480;}
multi_spawn_location[5][4] = {-14.708457,16.347748,54.839447, 2.419253;}
multi_spawn_location[5][5] = {-14.491766,17.847687,-37.188122, 0.761890;}
multi_spawn_location[5][6] = {4.228920,17.847748,-36.878803, 0.687307;}
multi_spawn_location[5][7] = {49.918549,17.847965,-37.113750, 5.566256;}
multi_spawn_location[5][8] = {68.750893,17.847935,-36.856266, 5.562202;}
multi_spawn_location[5]["hunter"] = {27.721218,16.347717,331.313538, 3.157137;}
-- City Isle
multi_spawn_location[6] = {}
multi_spawn_location[6]["constrain"] = {1448.582764,16.400024,-313.651245, 450;}
multi_spawn_location[6][1] = {1393.877075,16.847881,-366.040558, 5.947467;}
multi_spawn_location[6][2] = {1402.866943,16.847683,-346.525665, 5.948645;}
multi_spawn_location[6][3] = {1419.379883,16.847746,-308.096161, 4.345691;}
multi_spawn_location[6][4] = {1410.813599,16.847914,-328.220581, 4.377406;}
multi_spawn_location[6][5] = {1348.520874,16.847792,-271.827545, 2.714844;}
multi_spawn_location[6][6] = {1341.157715,16.847725,-289.324158, 2.694270;}
multi_spawn_location[6][7] = {1333.005249,16.847767,-308.282532, 1.321308;}
multi_spawn_location[6][8] = {1323.927490,16.897749,-327.855591, 1.248204;}
multi_spawn_location[6]["hunter"] = {1166.150391,16.847935,-231.310135, 2.371164;}
-- Unlimited
multi_spawn_location[7] = {}
multi_spawn_location[7][1] = {1313.419067,60.337944,1194.342896, 3.189455;}
multi_spawn_location[7][2] = {1317.712891,60.337757,1194.975830, 2.936446;}
multi_spawn_location[7][3] = {1322.614136,60.337952,1196.053589, 2.857661;}
multi_spawn_location[7][4] = {1327.407104,60.337914,1197.515991, 2.719390;}
multi_spawn_location[7][5] = {1332.121338,60.337757,1200.257446, 2.714844;}
multi_spawn_location[7][6] = {1336.138672,60.337765,1203.317993, 2.504399;}
multi_spawn_location[7][7] = {1339.617676,60.337688,1207.518433, 2.518405;}
multi_spawn_location[7][8] = {1342.158447,60.337975,1211.277466, 2.424995;}
multi_spawn_location[7]["hunter"] = {1290.744629,60.334320,1284.734375, 2.759937;}
-- Cruise
multi_spawn_location[8] = {}
multi_spawn_location[8][1] = {180.986481,16.655756,58.177841, 1.593299;}
multi_spawn_location[8][2] = {-615.324341,21.842503,412.393097, 3.931410;}
multi_spawn_location[8][3] = {-1128.711670,24.289661,883.728882, 3.074329;}
multi_spawn_location[8][4] = {54.421188,23.347857,1386.962402, 3.079253;}
multi_spawn_location[8][5] = {1406.147461,53.851055,1266.255249, 1.336572;}
multi_spawn_location[8][6] = {1861.869995,19.371660,630.421021, 5.883550;}
multi_spawn_location[8][7] = {1497.211548,16.847780,-250.838928, 2.021087;}
multi_spawn_location[8][8] = {1539.080200,16.937584,-566.287537, 4.717976;}
-- Gold
multi_spawn_location["gold"] = {}
multi_spawn_location["gold"][1] = {27.619831,15.899979,151.004028;} -- 16
multi_spawn_location["gold"][2] = {510.128723,17.399979,802.096802;} -- 38
multi_spawn_location["gold"][3] = {637.825623,16.899979,439.395630;} -- 29
multi_spawn_location["gold"][4] = {70.373413,15.899979,594.340332;} -- 30
multi_spawn_location["gold"][5] = {325.681641,16.899979,-120.995880;} -- 17
multi_spawn_location["gold"][6] = {-137.839081,17.299988,729.480713;} -- 48
multi_spawn_location["gold"][7] = {613.216919,16.899979,-5.279836;} -- 23
multi_spawn_location["gold"][8] = {600.029785,17.310059,-145.191147;} -- 46
multi_spawn_location["gold"][9] = {-1555.703369,28.399979,-37.747147;}
multi_spawn_location["gold"][10] = {-1022.544434,15.399979,-559.657471;}
multi_spawn_location["gold"][11] = {-1355.485352,15.899979,-426.604187;}
multi_spawn_location["gold"][12] = {-800.916809,17.899963,51.394344;}
multi_spawn_location["gold"][13] = {-485.074951,17.899979,-451.198364;}
multi_spawn_location["gold"][14] = {-748.948853,16.399979,-715.916992;}
multi_spawn_location["gold"][15] = {-373.973633,16.899979,-5.527623;}
multi_spawn_location["gold"][16] = {-1070.768311,21.899979,1061.608154;}
multi_spawn_location["gold"][17] = {116.333023,17.899979,954.202881;}
multi_spawn_location["gold"][18] = {305.166138,19.899979,-622.457764;}
multi_spawn_location["gold"][19] = {49.180462,18.150024,-810.410339;}
multi_spawn_location["gold"][20] = {1261.429932,26.899979,-676.699585;}
multi_spawn_location["gold"][21] = {970.703003,21.899979,-359.442871;}
multi_spawn_location["gold"][22] = {1095.965698,16.400055,-113.556137;}
multi_spawn_location["gold"][23] = {-858.444824,28.899979,553.948975;}
multi_spawn_location["gold"][24] = {1624.031372,16.399963,-386.684357;}
multi_spawn_location["gold"][25] = {1481.129150,17.399979,77.869461;}
multi_spawn_location["gold"][26] = {1824.858643,16.899979,32.501091;}
multi_spawn_location["gold"][27] = {1876.052246,16.899979,442.743164;}
multi_spawn_location["gold"][28] = {1617.268066,18.399979,644.669800;}
multi_spawn_location["gold"][29] = {-437.763275,19.900024,1446.560913;}
multi_spawn_location["gold"][30] = {66.243362,22.899979,1338.643799;}
multi_spawn_location["gold"][31] = {772.134155,17.399979,846.217041;}
multi_spawn_location["gold"][32] = {1102.542725,18.899979,566.972046;}
multi_spawn_location["gold"][33] = {728.954590,31.899979,1194.063232;}
multi_spawn_location["gold"][34] = {1132.948730,53.274979,1195.590088;}
multi_spawn_location["gold"][35] = {1490.349609,35.900024,1392.827515;}
multi_spawn_location["gold"][36] = {1047.189331,51.008362,1298.597046;}
multi_spawn_location["gold"][37] = {361.496674,25.000000,1243.686157;}
multi_spawn_location["gold"][38] = {-702.358643,18.899979,1179.706787;}
multi_spawn_location["gold"][39] = {1630.941650,20.027954,838.434143;}
multi_spawn_location["gold"][40] = {1170.390991,17.495758,227.624176;}
multi_spawn_location["gold"][41] = {1516.652954,16.520050,-110.829979;}
multi_spawn_location["gold"][42] = {1917.501221,17.861328,-129.258087;}
multi_spawn_location["gold"][43] = {1703.364624,16.954834,-639.585083;}
multi_spawn_location["gold"][44] = {960.939392,22.020508,-624.539551;}
multi_spawn_location["gold"][45] = {543.715515,22.261963,-637.169373;}
multi_spawn_location["gold"][46] = {-1155.555908,36.899979,238.722473;}
multi_spawn_location["gold"][47] = {324.604584,16.499939,395.158051;}
multi_spawn_location["gold"][48] = {-85.309006,16.399979,820.480103;}
multi_spawn_location["gold"][49] = {-585.378174,21.987091,381.403778;}
multi_spawn_location["gold"][50] = {-325.806000,18.100006,-415.904602;}
multi_spawn_location["gold"][51] = {-695.418823,18.000000,-50.609802;}
multi_spawn_location["gold"][52] = {-968.724731,15.863190,-365.412994;}
multi_spawn_location["gold"][53] = {-1595.606934,28.481140,345.600647;}
multi_spawn_location["gold"][54] = {-1205.456787,27.510010,524.623840;}
multi_spawn_location["gold"][55] = {-964.912415,25.684845,884.870483;}
logic_multi_spawnlocations_washington.lua#
This file contains all mutiplayer spawn locations for the Washington D.C. map.
-- ********************************************************************************
-- ********************************************************************************
-- * Midtown Madness X *
-- * Multiplayer Paris spawn-locations *
-- ********************************************************************************
-- ********************************************************************************
-- ********************************************************************************
-- * Variables *
-- ********************************************************************************
multi_spawn_location = {}
-- Georgetown
multi_spawn_location[1] = {}
multi_spawn_location[1]["constrain"] = {-2406.284912,28.233459,257.859772, 457.336243;}
multi_spawn_location[1][1] = {-2312.196289,27.857698,273.762787, 6.264912;}
multi_spawn_location[1][2] = {-2312.310303,29.223230,331.034180, 6.269712;}
multi_spawn_location[1][3] = {-2298.087891,29.189545,346.298798, 1.559112;}
multi_spawn_location[1][4] = {-2256.141602,27.876236,346.296539, 1.591613;}
multi_spawn_location[1][5] = {-2241.240479,27.543348,331.015015, 3.143258;}
multi_spawn_location[1][6] = {-2241.197510,26.403000,275.176086, 3.113431;}
multi_spawn_location[1][7] = {-2255.969727,26.360155,259.507538, 4.702484;}
multi_spawn_location[1][8] = {-2297.729004,27.643274,258.402679, 4.682470;}
multi_spawn_location[1]["hunter"] = {-2148.211914,24.730377,306.304413, 4.709475;}
-- Foggy Bottom
multi_spawn_location[2] = {}
multi_spawn_location[2]["constrain"] = {-1274.151245,25.806458,237.514755, 525;}
multi_spawn_location[2][1] = {-1210.474854,26.254444,139.140472, 3.204724;}
multi_spawn_location[2][2] = {-1142.356934,26.254408,67.950684, 1.648010;}
multi_spawn_location[2][3] = {-1074.679199,26.254335,139.959030, 6.201978;}
multi_spawn_location[2][4] = {-1142.934937,26.254213,201.887405, 4.776656;}
multi_spawn_location[2][5] = {-1178.864380,26.254211,97.344765, 2.349544;}
multi_spawn_location[2][6] = {-1101.678711,26.254206,101.780121, 0.628363;}
multi_spawn_location[2][7] = {-1104.268799,26.254423,171.039917, 5.606558;}
multi_spawn_location[2][8] = {-1175.988281,26.254255,175.927887, 4.012073;}
multi_spawn_location[2]["hunter"] = {-906.435181,27.766840,346.279297, 4.008389;}
-- Old Downtown
multi_spawn_location[3] = {}
multi_spawn_location[3]["constrain"] = {154.533295,13.246826,-604.300781, 425;}
multi_spawn_location[3][1] = {253.174438,12.832956,-458.188568, 6.254433;}
multi_spawn_location[3][2] = {254.085526,13.595224,-362.554382, 6.261364;}
multi_spawn_location[3][3] = {212.474258,14.834875,-313.326752, 4.657073;}
multi_spawn_location[3][4] = {126.169525,18.095253,-312.895813, 4.667452;}
multi_spawn_location[3][5] = {86.928024,18.104650,-353.726746, 3.119173;}
multi_spawn_location[3][6] = {87.669640,13.472976,-459.261383, 3.092720;}
multi_spawn_location[3][7] = {123.060104,12.538389,-504.920013, 1.522342;}
multi_spawn_location[3][8] = {215.124588,12.538510,-504.384888, 1.566956;}
multi_spawn_location[3]["hunter"] = {399.824646,13.452885,-391.600189, 4.711599;}
-- Tidal Basin
multi_spawn_location[4] = {}
multi_spawn_location[4]["constrain"] = {-1751.606079,5.042877,-1244.110840, 425;}
multi_spawn_location[4][1] = {-1844.580811,4.047687,-1274.358765, 6.138587;}
multi_spawn_location[4][2] = {-1855.360107,4.968145,-1188.194336, 0.014566;}
multi_spawn_location[4][3] = {-1855.978149,6.616273,-997.628235, 3.269839;}
multi_spawn_location[4][4] = {-1864.538940,4.926413,-1075.166870, 3.184719;}
multi_spawn_location[4][5] = {-1728.561890,5.654915,-1138.595337, 4.932168;}
multi_spawn_location[4][6] = {-1777.593872,7.935446,-1127.870850, 4.845860;}
multi_spawn_location[4][7] = {-2000.258423,6.316060,-1142.433838, 1.308180;}
multi_spawn_location[4][8] = {-1916.541382,8.947168,-1134.218872, 1.522468;}
multi_spawn_location[4]["hunter"] = {-1554.485474,5.528229,-1138.989624, 4.696843;}
-- The Mall
multi_spawn_location[5] = {}
multi_spawn_location[5]["constrain"] = {-53.649681,68.835258,-1095.499878, 425;}
multi_spawn_location[5][1] = {-193.962738,9.486697,-745.444397, 1.572119;}
multi_spawn_location[5][2] = {-57.936405,7.360875,-730.081665, 4.676148;}
multi_spawn_location[5][3] = {-98.880318,7.730098,-735.058594, 4.718804;}
multi_spawn_location[5][4] = {-158.140762,8.988713,-740.526245, 1.529459;}
multi_spawn_location[5][5] = {-193.222382,7.961590,-811.556213, 1.561941;}
multi_spawn_location[5][6] = {-63.259972,6.446536,-796.941040, 4.710402;}
multi_spawn_location[5][7] = {-96.747589,6.737310,-801.879333, 4.681288;}
multi_spawn_location[5][8] = {-159.718521,7.662846,-806.645325, 1.571498;}
multi_spawn_location[5]["hunter"] = {197.416855,6.171320,-939.905396, 5.213995;}
-- Capitol Hill
multi_spawn_location[6] = {}
multi_spawn_location[6]["constrain"] = {979.961731,23.781250,-1375.919434, 450;}
multi_spawn_location[6][1] = {788.779358,5.832767,-1473.733887, 4.093361;}
multi_spawn_location[6][2] = {756.3,5.832571,-1496.8, 4.108547;}
multi_spawn_location[6][3] = {723.821838,5.832766,-1520.122192, 4.072991;}
multi_spawn_location[6][4] = {696.873413,5.832688,-1551.566040, 4.103737;}
multi_spawn_location[6][5] = {789.430298,5.832827,-1297.911377, 5.217075;}
multi_spawn_location[6][6] = {760.426453,5.832639,-1269.318604, 5.222821;}
multi_spawn_location[6][7] = {721.383362,5.832563,-1257.920898, 5.265994;}
multi_spawn_location[6][8] = {692.771240,5.832766,-1228.780396, 5.229215;}
multi_spawn_location[6]["hunter"] = {1035.887573,13.826936,-1613.959839, 4.726848;}
-- Unlimited
multi_spawn_location[7] = {}
multi_spawn_location[7][1] = {-193.962738,9.486697,-745.444397, 1.572119;}
multi_spawn_location[7][2] = {-57.936405,7.360875,-730.081665, 4.676148;}
multi_spawn_location[7][3] = {-98.880318,7.730098,-735.058594, 4.718804;}
multi_spawn_location[7][4] = {-158.140762,8.988713,-740.526245, 1.529459;}
multi_spawn_location[7][5] = {-193.222382,7.961590,-811.556213, 1.561941;}
multi_spawn_location[7][6] = {-63.259972,6.446536,-796.941040, 4.710402;}
multi_spawn_location[7][7] = {-96.747589,6.737310,-801.879333, 4.681288;}
multi_spawn_location[7][8] = {-159.718521,7.662846,-806.645325, 1.571498;}
multi_spawn_location[7]["hunter"] = {197.416855,6.171320,-939.905396, 5.213995;}
-- Cruise
multi_spawn_location[8] = {}
multi_spawn_location[8][1] = {1086.434570,13.006753,-691.295715, 3.161417;}
multi_spawn_location[8][2] = {97.657379,6.513629,-1028.308838, 0.000000;}
multi_spawn_location[8][3] = {-120.714798,21.335129,-308.182770, 4.716100;}
multi_spawn_location[8][4] = {-1267.814575,18.625660,-112.020821, 3.145168;}
multi_spawn_location[8][5] = {-2057.449219,28.237991,329.260193, 3.097996;}
multi_spawn_location[8][6] = {-2654.936035,9.911852,-257.709259, 1.567365;}
multi_spawn_location[8][7] = {-2086.356689,4.125021,-1158.038940, 2.287669;}
multi_spawn_location[8][8] = {-622.063171,3.861327,-2366.347168, 3.278423;}
multi_spawn_location["gold"] = {}
multi_spawn_location["gold"][1] = {-823.757080,9.042435,-807.373047;} -- 18
multi_spawn_location["gold"][2] = {-215.927460,5.376343,-1149.390381;} -- 11
multi_spawn_location["gold"][3] = {-560.312073,11.648438,-1416.510498;} -- 45
multi_spawn_location["gold"][4] = {-823.286560,3.797882,-1383.062256;} -- 17
multi_spawn_location["gold"][5] = {-1152.007813,7.518433,-994.587402;} -- 25
multi_spawn_location["gold"][6] = {-915.442261,16.482178,-500.939667;} -- 47
multi_spawn_location["gold"][7] = {1331.952271,25.035522,-1378.985352;} -- 18
multi_spawn_location["gold"][8] = {252.642960,13.614441,-315.798004;}
multi_spawn_location["gold"][9] = {90.469711,9.042435,-737.973389;}
multi_spawn_location["gold"][10] = {-204.500488,24.282425,-123.829163;}
multi_spawn_location["gold"][11] = {1226.847412,16.662430,-887.609253;}
multi_spawn_location["gold"][12] = {90.463791,7.518433,-1619.827637;}
multi_spawn_location["gold"][13] = {-373.016968,2.946426,-1915.495361;}
multi_spawn_location["gold"][14] = {-881.556641,2.946472,-2382.582275;}
multi_spawn_location["gold"][15] = {-1248.853638,2.946442,-1815.185059;}
multi_spawn_location["gold"][16] = {-1692.629150,3.556030,-1651.590576;}
multi_spawn_location["gold"][17] = {899.436768,11.898163,-1382.999512;}
multi_spawn_location["gold"][18] = {850.169312,13.614441,-469.590607;}
multi_spawn_location["gold"][19] = {-475.943298,16.662430,-460.694519;}
multi_spawn_location["gold"][20] = {-744.277466,18.186417,-189.698212;}
multi_spawn_location["gold"][21] = {-908.473938,26.092407,138.648117;}
multi_spawn_location["gold"][22] = {-569.073975,27.025635,331.281403;}
multi_spawn_location["gold"][23] = {-1409.874390,33.426453,592.885437;}
multi_spawn_location["gold"][24] = {-1259.039673,19.710449,-314.376343;}
multi_spawn_location["gold"][25] = {405.971344,7.017456,-1315.076416;}
multi_spawn_location["gold"][26] = {-1565.794678,19.710449,-605.743774;}
multi_spawn_location["gold"][27] = {-1812.878418,3.246796,-681.379578;}
multi_spawn_location["gold"][28] = {-1893.446777,9.278564,-1126.059570;}
multi_spawn_location["gold"][29] = {-2190.589844,4.420425,-426.005554;}
multi_spawn_location["gold"][30] = {-2379.901123,2.943787,-454.653198;}
multi_spawn_location["gold"][31] = {-2315.466309,15.419510,-60.655846;}
multi_spawn_location["gold"][32] = {-1689.187744,18.186417,-55.506271;}
multi_spawn_location["gold"][33] = {-2438.995605,33.426407,348.999146;}
multi_spawn_location["gold"][34] = {-2735.429443,54.762451,850.812134;}
multi_spawn_location["gold"][35] = {-1776.693481,22.532410,541.993652;}
multi_spawn_location["gold"][36] = {-2337.846680,30.378448,1067.245850;}
multi_spawn_location["gold"][37] = {-2147.818848,24.282425,305.503845;}
multi_spawn_location["gold"][38] = {-2820.763672,2.992188,-292.342377;}
multi_spawn_location["gold"][39] = {-1693.137329,20.848450,-313.710663;}
multi_spawn_location["gold"][40] = {-1769.080933,14.698730,-667.219421;}
multi_spawn_location["gold"][41] = {-1994.677490,16.113220,-994.193909;}
multi_spawn_location["gold"][42] = {-1550.736328,4.171875,-1445.967041;}
multi_spawn_location["gold"][43] = {-1006.503418,2.946411,-1639.946655;}
multi_spawn_location["gold"][44] = {-592.787354,3.231445,-2198.611328;}
multi_spawn_location["gold"][45] = {828.365845,6.604019,-1141.348633;}
multi_spawn_location["gold"][46] = {-593.308411,6.437500,-989.502014;}
multi_spawn_location["gold"][47] = {575.737183,12.040436,-871.566895;}
multi_spawn_location["gold"][48] = {-1185.986938,28.467407,473.999695;}
multi_spawn_location["gold"][49] = {-785.597656,24.601379,81.120331;}
multi_spawn_location["gold"][50] = {-498.295013,19.783508,-218.474136;}
multi_spawn_location["gold"][51] = {159.620483,5.681335,-1033.451904;}
multi_spawn_location["gold"][52] = {454.527954,12.440735,-684.490051;}
multi_spawn_location["gold"][53] = {1244.252930,12.734436,-694.813843;}
multi_spawn_location["gold"][54] = {1331.838745,25.806427,-1707.602295;}
multi_spawn_location["gold"][55] = {709.055664,5.384827,-1732.383423;}
PedDebugSetup.lua#
Another file for debugging pedestrians.
function peddebug()
objectCreate(1,"pedDebugTarget")
objectSetPos( 355, 16.40, 369 )
objectEnable( "pedDebugTarget" )
objectShow( "pedDebugTarget" )
objectCreate(6,"myPed")
objectSetParam( "Cinematic Pedestrian1" )
objectSetPos( 269, 16.40, 377 )
objectEnable( "myPed" )
objectShow( "myPed" )
objectUpdateAdd( "myPed" )
objectSetActive( "myPed" )
pedGoTo( "pedDebugTarget" )
end
unlockallskins.lua#
--
-- Unlocks all the skins.
--
function onInit()
local mytable = {
{"Ambulance", 2 },
{"ArmoredCar", 2 },
{"AudiTT", 2 },
--{"Avalanche", 0 },
{"Avant", 3 },
{"Cement", 2 },
{"ChevySSR", 3 },
{"Corvette", 2 },
{"Crossfire", 2 },
{"DCBus", 2 },
{"Escalade", 2 },
{"FireTruck", 2 },
{"Freightliner", 2 },
{"Garbage", 2 },
{"HummerH2", 2 },
{"Koenigsegg", 2 },
{"Limo", 2 },
{"Lotus", 2 },
{"MFastBack", 3 },
{"Microcar", 2 },
{"mini", 2 },
{"mv_badguy", 2 },
{"NewBeetle", 2 },
{"Opel_Astra", 0 },
{"ParisBus", 2 },
{"ParisPolice", 2 },
{"ParisTaxi", 2 },
{"Pt", 2 },
{"Renault5", 2 },
{"Saab93", 2 },
--{"SerpentMk2", 0 },
{"Seville", 2 },
{"WashingtonPolice", 2 },
{"WashingtonTaxi", 2 },
{"Viper", 0 },
}
local index = 0
for i,v in mytable do
index = 1
while index <= v[2] do
playerProfileAddKey( v[1] .. "." .. index )
index = index + 1
end
end
playerProfileAddKey( "Avalanche" )
playerProfileAddKey( "SerpentMk2" )
end
user.lua#
A basic initialization routine.
function onInit()
gameLog("running user init...\n")
cityAdd("Paris", "d:\\Data\\Shared\\Paris\\Paris", "d:\\Data\\Shared\\Paris\\ParisSplit")
cityAdd("Washington", "d:\\Data\\Shared\\Washington\\Washington", "d:\\Data\\Shared\\Washington\\WashingtonSplit")
gameLog("exiting user init...\n")
-- Moved to E3settings.lua
-- renderSetFov(65) -- 56
end
userSetup.lua#
-- Description:
-- Configure the game settings per user.
--
-- Dependencies:
-- [Which scripts / modules / states must be set/run/ok]
--
--
function onInit()
gameLog("running user setup...\n")
--
-- Disable some loglevels...
--
if queryBuildMode() == 1 then
-- NDEBUG
setLogLevel("", "warning")
else
setLogLevel("", "warning")
end
gameLog("exiting user setup...\n")
end
Data\Data_hd\Scripts\Test#
This folder and the AI subfolder contain seven files.
test_Base.lua#
-- callbacks that can be overloaded by other test scripts
function test_onEnterFrontEndFirstTime()
end
function test_onEnterFrontEnd()
end
function test_onStartRace()
end
function test_onFinishRace()
end
function test_onUpdate(deltaTime, state)
end
-- utility functions used by other test scripts
function test_exitToMenu()
input("s2dara")
end
test_CarsParisBlitz.lua#
test_isFirstTime = 0
function test_onEnterFrontEnd()
if (test_isFirstTime == 0) then
input("sdadaa2ra")
input("20la")
test_isFirstTime = 1
else
input("2ara")
end
end
function test_onStartRace()
input("s2da")
end
test_ParisCruise.lua#
test_isFirstTime = 0
function test_onEnterFrontEnd()
if (test_isFirstTime == 0) then
input("ad5a")
test_isFirstTime = 1
else
input("2a")
end
end
function test_onStartRace()
input("s2da")
end
test_RestartParisCruise.lua#
function test_onEnterFrontEndFirstTime()
input("ad6a")
end
test_firstTime = 0
function test_onStartRace()
if (firstTime == 0) then
input("sdala")
test_firstTime = 1
else
input("ala")
end
end
test_SwitchCity.lua#
test_isFirstTime = 0
test_city = 0
function test_onEnterFrontEndFirstTime()
input("ad5a")
end
function test_onEnterFrontEnd()
if (test_city == 0) then
input("br3a")
test_city = 1
else
input("bl3a")
test_city = 0
end
end
function test_onStartRace()
test_exitToMenu()
end
\AI\test_CruiseParis.lua#
test_haveRun = nil
function test_onEnterFrontEnd()
if( not test_haveRun ) then
command = ""
-- Enter profile menu
command = command .. "s"
-- Select default profile
command = command .. "a"
-- Enter single race
command = command .. "da"
-- Select cruise
command = command .. "a"
-- Select paris city
command = command .. "a"
-- Select the parameters (just accept the default)
command = command .. "a"
-- Select car and transmission (just take the default)
command = command .. "a"
-- Send command to MEME.
input( command );
-- Set flag to true
test_haveRun = 1
else
-- Restart race directly
-- input( "aaa" )
end
end
function test_onStartRace()
-- input("s2da")
end
\AI\test_TaxiCareer0103.lua#
test_haveRun = nil
function test_onEnterFrontEnd()
gameLog( "Automatic AI test script - starting taxi race" )
if( not test_haveRun ) then
command = ""
-- Enter main menu
command = command .. "s"
-- Enter career sub menu
command = command .. "a"
-- Select paris city
command = command .. "a"
-- This doesn't work ???
-- Skip movie
-- command = command .. "a"
-- Choose taxi
command = command .. "da"
-- Chose race 4
command = command .. "ddda"
-- Choose transmission automatic
command = command .. "a"
-- Send command to MEME.
input( command );
-- Set flag to true
test_haveRun = 1
else
-- Restart race directly
-- input( "aaa" )
end
end
function test_onStartRace()
-- input("s2da")
end
Debug Leftovers#
In 'Data\Data_hd\Menu' , there are two folders named 'Debug' and 'DebugHUD'. In 'Debug', a single file named DebugMenu is present. Inside 'DebugHUD', a file called DebugHUD is present.
DebugHUD#

The debug HUD shows car speed, RPM, gear, position (in X, Y and Z); brake, engine, gear and suspension damage; camera positions (in X, Y, Z and angle).
However, the final version only has engine damage. Gear, suspension and brake damage were probably present in an early version.
DebugMenu#
The debugMenu file can be loaded and we can extract the strings, that indicates the available options. This debug menu can change level-of-detail (draw distance), anti-aliasing, V-sync and AI options; Enable/Disable traffic, debug HUD, peds, skybox and a wireframe mode but in-game it is broken you only can select the options but they don't do anything.
dice::meme::NameNode
dice::meme::TabstopManagerNode
dice::meme::CullEventActionNode"dice::meme::TransitionalEffectNode
dice::meme::TransformNode
dice::meme::TextNode
variables/varFogLength
dice::meme::IntData
styles/styleDebugValue
dice::meme::Style
dice::meme::FocusEffectNode
dice::meme::TabstopNode dice::meme::ModifyVariableAction
dice::meme::ButtonEvent
dice::meme::WstringData
styles/styleDebugItem
dice::meme::RightAlignedStyle
dice::meme::ColorEffect
variables/varFarClip
variables/varLODFar
options/optionLODFar
variables/varLODNear
options/optionLODNear
dice::meme::IndexDataData
dice::meme::DataListData
variables/varAliasMode
options/optionAliasing
variables/enableVSync
dice::meme::BoolData dice::meme::ToggleVariableAction
options/optionVSync
variables/paintAiAmbientDebug
options/optionAiAmbientDebug
variables/paintAiGraph
options/optionAiGraph&variables/enableTrafficLightIndicators$options/optionTrafficLightIndicators
variables/enableDebugHud
options/optionDebugHud
ariables/enableTraffic
options/optionTraffic
variables/enablePeds
options/optionPedsvariables/enableWireframe
options/optionWireframe
variables/enableSkyBox
options/optionSkyBox
styles/styleDebugTitle
dice::meme::CenterAlignedStyle
dice::meme::EffectNode
dice::meme::PictureNode
dice::meme::AlphaFadeEffect
dice::meme::SetTabstopAction
optionsTab
dice::meme::TypeEvent
Strange Folder#
'Data\Data_dvd\Constrain' contains two files, 'MatrixCode.cdds' and 'Secret.cdds' and one subfolder 'bak' containing what appears to be an early version of 'MatrixCode.cdds', because both files have the same name.
Regional Differences#
'Data\Data_dvd\Menu\Gfx' contains error messages for dirty/damaged DVDs. 'badgamedisc.tga' contains an early version of this screen in English, with an edit date of February 23, 2003, compared to May 9, 2003 in the final version. The only change is that the small text blurb saying "Press A to continue" was removed. However, the file used for the Japanese version, 'BadGameDiscJapanese.tga', is a copy of the early version!
|
Early/Japan |
Final |
|---|---|
|
|
|
The Madness series | |
|---|---|
|
Monster Truck Madness | |
|
Windows |
|
|
Nintendo 64 |
|
|
Game Boy Advance |
|
|
Midtown Madness | |
|
Windows |
Midtown Madness (Prototypes) • Midtown Madness 2 (Prototypes) |
|
Xbox |
|