Game

Dependencies:   mbed

Maps.h

Committer:
HenryWTriff
Date:
2020-05-22
Revision:
27:7e230a7891f8
Parent:
26:f1d3b7e31091

File content as of revision 27:7e230a7891f8:

//--------
//  MAPS
//--------

/** All Map Data
* @file Maps.h
* @brief Contains all the data required for each track.
* @author Henry W Triff
* @date Mar, 2020
*/

/**
* @code
* 
* //        How maps are drawn:
* //        > It is drawn very similar to the way a map is drawn
* //        > I used grid paper and drew the maps then inputted the information by hand
* //        > It uses a coordinate system where the origin point is where the car starts
* //        
* //        Explanation of each part of track:
* //        > Track Lines = Lines showing the inside and outside of the track
* //            - There is a 'to' point
* //            - There is a 'from' point
* //            - It does not matter which way around these are noted
* //        > Dotted lines = Same as Track Lines bit with alternating pixels
* //        > Flags = Starting / Finish line flags
* //        > Walls = These are walls that indicate to the player that this area is out of bounds
* //            - This works the same way as Track Lines except when drawn, the 4 (or however many specified) pixels above
* //              are also drawn giving the impression of height
* //            - There is a 'to' point
* //            - There is a 'from' point
* //            - It does not matter which way around these are noted
* //        > Off Track square = These are square areas that are deemed off the track
* //            - When the game runs, it checks to see if the players car is in these squares
* //            - There is a 'TL' point
* //            - There is a 'BR' point
* //            - It is important that TL is always the top left point when drawing the map
* //            - It is important that BR is always the bottom left point when drawing the map
* //        > Off Track Triangle = These are triangular areas that are deemed off the track
* //            - Very similar to Off Track Squares
* //            - When the game runs, it checks to see if the players car is in these triangles
* //            - There is a 'TL' point
* //            - There is a 'BR' point
* //            - There is a 'Type' int
* //            - It is important that TL is always the top left point when drawing the map
* //            - It is important that BR is always the bottom left point when drawing the map
* //            - The Type is the direction the triangle is drawn (Where the Hypotenuse is)
* //                - Types: (1 = Hyp in Top Right, 2 = Hyp in Bottom Right, 3 = Hyp in Bottom Left, 4 = Hyp in Top Left) 
* //                - Exampe: The following triangle is type 2
* //                _____
* //                |   /
* //                |  /
* //                | /
* //                |/
* //                
* //        > Out Of Bounds Square = These are square areas that are deemed out of bounds
* //            - Works exactly the same as Off Track Square
* //        > Out Of Bounds Triangle = These are triangular areas that are deemed off the track
* //            - Works exactly the same as Off Track Triangle
* //        > Gates = Used to check if a full lap has been completed
* //            - For a player to complete a full lap, their car must pass through these gates as they do their lap
* //            - If a gate is missed, then a lap is not completed
* //            - This is used to prevent the player from reversing at the start and moving behind the finish line
* //              then moving forward and the game thinking that a lap has been completed
* //        > Boost plates = These are parts of the track that make cars go extra fast
* //            - There is a 'TL' point
* //            - There is a 'BR' point
* //            - There is a 'Type' int
* //            - It is important that TL is always the top left point when drawing the map
* //            - It is important that BR is always the bottom left point when drawing the map
* //            - The type is the direction of the arrow drawn on the boost plates
* //            - Types: (1 = Pointing up, 2 = Pointing right, 3 = Pointing down, 4 = Pointing left)
* //            - Example: The following boost plate is type 3
* //            ______
* //            |\  /|
* //            | \/ |
* //            ------ 
* @endcode
*/

//MAP - 1
const Map_Data Map_1 = {36,1,18,20,14,20,9,5,12,0};

//Lines
const Line_2D Map_1_Track_Lines[36] = {
    //Inside Line
    {{-20,0},{-20,80}},
    {{-20,80},{-40,100}},
    {{-40,100},{-80,100}},
    {{-80,100},{-100,80}},
    {{-100,80},{-100,40}},
    {{-100,40},{-140,0}},
    {{-140,0},{-220,0}},
    {{-220,0},{-260,40}},
    {{-260,40},{-260,80}},
    {{-260,80},{-280,100}},
    {{-280,100},{-320,100}},
    {{-320,100},{-360,60}},
    {{-360,60},{-360,-100}},
    {{-360,-100},{-300,-160}},
    {{-300,-160},{-220,-80}},
    {{-220,-80},{-100,-80}},
    {{-100,-80},{-20,0}},
    //Outside Line
    {{20,-20},{20,100}},
    {{20,100},{-20,140}},
    {{-20,140},{-100,140}},
    {{-100,140},{-140,100}},
    {{-140,100},{-140,60}},
    {{-140,60},{-160,40}},
    {{-160,40},{-200,40}},
    {{-200,40},{-220,60}},
    {{-220,60},{-220,100}},
    {{-220,100},{-260,140}},
    {{-260,140},{-340,140}},
    {{-340,140},{-400,80}},
    {{-400,80},{-400,-120}},
    {{-400,-120},{-320,-200}},
    {{-320,-200},{-280,-200}},
    {{-280,-200},{-200,-120}},
    {{-200,-120},{-80,-120}},
    {{-80,-120},{20,-20}},
};

//Dotted Lines
const Line_2D Map_1_Track_Dotted_Lines[1] = {
    {{-20,0},{20,0}},
};

//Flags
const Sprite_2D Map_1_Sprites[18] = {
    {-24,0, Flag},
    {24,0, Flag},
    {-300,-50, Helicopter},
    
    {-40,162, People_Cheering},
    {-50,162, People_Standing_1},
    {-70,162, People_Standing_2},
    
    {42,-20, People_Cheering},
    {42,-10, People_Standing_1},
    {42,0, People_Cheering},
    {42,10, People_Standing_2},
    
    {-422,60, People_Cheering},
    {-422,50, People_Standing_1},
    {-422,40, People_Cheering},
    {-422,30, People_Standing_2},
    {-422,20, People_Standing_1},
    
    {-200,-58, People_Cheering},
    {-180,-58, People_Standing_1},
    {-170,-58, People_Standing_2}
};

//Walls
const Line_2D Map_1_Walls[20] = {
    //Inside
    {{-40,80},{-40,0}},
    {{-40,0},{-100,-60}},
    {{-100,-60},{-240,-60}},
    {{-240,-60},{-300,-120}},
    {{-300,-120},{-340,-60}},
    {{-340,-60},{-340,60}},
    {{-340,60},{-280,60}},
    {{-280,60},{-280,-20}},
    {{-280,-20},{-100,-20}},
    {{-100,-20},{-80,0}},
    {{-80,0},{-80,80}},
    {{-80,80},{-40,80}},
    //Outside
    {{40,160},{40,-220}},
    {{40,-220},{-420,-220}},
    {{-420,-220},{-420,160}},
    {{-420,160},{-200,160}},
    {{-200,160},{-200,60}},
    {{-200,60},{-160,60}},
    {{-160,60},{-160,160}},
    {{-160,160},{40,160}},
};

//Off track? objects
const Square_2D Map_1_Off_Track_Square[14] = {
    //Inside
    {{-100,80},{-20,0}},
    {{-80,100},{-40,80}},
    {{-260,0},{-100,-80}},
    {{-360,60},{-260,-100}},
    {{-320,100},{-280,60}},
    {{-280,80},{-260,60}},
    {{-300,-100},{-260,-120}},
    {{-200,60},{-160,40}},
    {{-220,140},{-140,60}},
    {{-200,-120},{20,-200}},
    {{-400,200},{20,140}},
    {{-500,200},{-400,-300}},
    {{20,200},{100,-300}},
    {{-400,-200},{20,-300}}
};

//Off track? objects
const Triangle_2D Map_1_Off_Track_Triangle[20] = {
    {{-40,100},{-20,80},1},
    {{-100,100},{-80,80},4},
    {{-140,40},{-100,0},4},
    {{-100,0},{-20,-80},2}, //
    {{-260,40},{-220,0},1},
    {{-260,-80},{-220,-120},2},
    {{-200,-120},{-260,-160},2},
    {{-280,100},{-260,80},1},
    {{-360,100},{-320,60},4},
    {{-360,-100},{-300,-160},3},
    {{-300,-100},{-240,-160},2},
    //Outside
    {{-20,140},{20,100},3},
    {{-80,-20},{20,-120},4},
    {{-140,140},{-100,100},2},
    {{-160,60},{-140,40},2}, //
    {{-220,60},{-200,40},3},
    {{-280,-120},{-200,-200},4},
    {{-260,140},{-240,100},3},
    {{-400,140},{-340,80},2}, //
    {{-400,-120},{-320,-200},1}
};

const Square_2D Map_1_Out_Of_Bounds_Square[9] = {
    //Inside
    {{-80,80},{-40,0}},
    {{-340,60},{-280,-60}},
    {{-280,-20},{-100,-60}},
    {{-80,0},{-60,-20}},
    //Outside
    {{40,160},{60,-220}},
    {{-420,-220},{40,-240}},
    {{-440,160},{-420,-220}},
    {{-420,180},{40,160}},
    {{-200,160},{-160,60}}
};

const Triangle_2D Map_1_Out_Of_Bounds_Triangle[5] = {
    //Inside
    {{-60,0},{-40,-20},2},
    {{-100,0},{-80,-20},4},
    {{-100,-20},{-60,-60},2},
    {{-300,-60},{-240,-120},2},
    {{-340,-60},{-300,-120},3}
};

const Square_2D Map_1_Gates[12] = {
    {{-40,0},{40,-10}},
    {{-40,80},{40,70}},
    {{-80,160},{-70,80}},
    {{-160,70},{-80,60}},
    {{-200,60},{-190,-20}},
    {{-310,160},{-300,60}},
    {{-420,10},{-340,0}},
    {{-420,-90},{-300, -100}},
    {{-300,-100},{-290,-220}},
    {{-200,-60},{-190,-220}},
    {{-110,-60},{-100,-220}},
    {{-100,-40},{40,-60}}
};

const Triangle_2D Map_1_Boost_Plates[0] = {
};

//MAP - 2
const Map_Data Map_2 = {64,1,38,36,21,37,12,27,19,3};

//Lines
const Line_2D Map_2_Track_Lines[64] = {
    //Inside Line
    {{20,280},{20,-80}},
    {{20,-80},{-20,-120}},
    {{-20,-120},{-80,-120}},
    {{-80,-120},{-200,0}},
    {{-200,0},{-420,0}},
    {{-420,0},{-440,-20}},
    {{-440,-20},{-440,-40}},
    {{-440,-40},{-420,-60}},
    {{-420,-60},{-400,-60}},
    {{-400,-60},{-380,-40}},
    {{-380,-40},{-300,-40}},
    {{-300,-40},{-280,-60}},
    {{-280,-60},{-200,-60}},
    {{-200,-60},{-100,-160}},
    {{-100,-160},{0,-160}},
    {{0,-160},{60,-100}},
    {{60,-100},{60,300}},
    {{60,300},{0,360}},
    {{0,360},{-320,360}},
    {{-320,360},{-380,300}},
    {{-380,300},{-380,180}},
    {{-380,180},{-360,160}},
    {{-360,160},{-340,160}},
    {{-340,160},{-320,180}},
    {{-320,180},{-320,280}},
    {{-320,280},{-280,320}},
    {{-280,320},{-20,320}},
    {{-20,320},{20,280}},
    //Inside Circle
    {{-120,260},{-120,180}},
    {{-120,180},{-120,160}},
    {{-120,160},{-260,160}},
    {{-260,160},{-280,180}},
    {{-280,180},{-280,260}},
    {{-280,260},{-260,280}},
    {{-260,280},{-140,280}},
    {{-140,280},{-120,260}},
    //Outside Line
    {{100,320},{100,-120}},
    {{100,-120},{20,-200}},
    {{20,-200},{-120,-200}},
    {{-120,-200},{-220,-100}},
    {{-220,-100},{-280,-100}},
    {{-280,-100},{-300,-120}},
    {{-300,-120},{-380,-120}},
    {{-380,-120},{-400,-100}},
    {{-400,-100},{-440,-100}},
    {{-440,-100},{-480,-60}},
    {{-480,-60},{-480,0}},
    {{-480,0},{-440,40}},
    {{-440,40},{-180,40}},
    {{-180,40},{-60,-80}},
    {{-60,-80},{-40,-80}},
    {{-40,-80},{-20,-60}},
    {{-20,-60},{-20,260}},
    {{-20,260},{-40,280}},
    {{-40,280},{-60,280}},
    {{-60,280},{-80,260}},
    {{-80,260},{-80,160}},
    {{-80,160},{-120,120}},
    {{-120,120},{-380,120}},
    {{-380,120},{-420,160}},
    {{-420,160},{-420,320}},
    {{-420,320},{-340,400}},
    {{-340,400},{20,400}},
    {{20,400},{100,320}}
};

//Dotted Lines
const Line_2D Map_2_Track_Dotted_Lines[1] = {
    {{-20,0},{20,0}},
};

//Flags
const Sprite_2D Map_2_Sprites[38] = {
    {-20,0, Flag},
    {24,0, Flag},
    
    {-80,40, Helicopter},
    
    {-42,-10, People_Cheering},
    {-42,0, People_Standing_1},
    {-42,10, People_Standing_2},
    {-42,20, People_Cheering},
    {-52,20, People_Standing_1},
    {-52,10, People_Cheering},
    
    {-160,258, People_Cheering},
    {-150,258, People_Cheering},
    {-142,250, People_Standing_2},
    {-142,240, People_Standing_2},
    {-150,250, People_Standing_1},
    {-150,240, People_Cheering},
    
    {-460,360, Helicopter},
    
    {-280,98, People_Cheering},
    {-290,98, People_Cheering},
    {-300,98, People_Standing_2},
    {-310,98, People_Standing_2},
    {-320,98, People_Standing_1},
    {-330,98, People_Cheering},
    
    {48,280, People_Standing_1},
    {48,270, People_Cheering},
    {48,260, People_Standing_2},
    
    {48,-70, People_Standing_2},
    {48,-80, People_Standing_2},
    {48,-90, People_Cheering},
    
    {-210,-28, People_Standing_1},
    {-220,-28, People_Standing_1},
    {-240,-28, People_Cheering},
    {-250,-28, People_Standing_2},
    
    {-380,-28, People_Standing_1},
    {-390,-28, People_Cheering},
    
    {-200,62, People_Cheering},
    {-210,62, People_Standing_1},
    {-220,62, People_Cheering},
    {-230,62, People_Standing_2},
};

//Walls
const Line_2D Map_2_Walls[36] = {
    //Outside
    {{-500,60},{-500,-300}},
    {{-500,-300},{200,-300}},
    {{200,-300},{200,500}},
    {{200,500},{-500,500}},
    {{-500,500},{-500,100}},
    {{-500,100},{-60,100}},
    {{-60,100},{-60,260}},
    {{-60,260},{-40,260}},
    {{-40,260},{-40,-60}},
    {{-40,-60},{-60,-60}},
    {{-60,-60},{-180,60}},
    {{-180,60},{-500,60}},
    //Inside Circle
    {{-260,260},{-140,260}},
    {{-140,260},{-140,180}},
    {{-140,180},{-260,180}},
    {{-260,180},{-260,260}},
    //Inside
    {{-360,180},{-360,300}},
    {{-360,300},{-310,350}},
    {{-310,350},{-10,350}},
    {{-10,350},{50,290}},
    {{50,290},{50,-90}},
    {{50,-90},{-10,-150}},
    {{-10,-150},{-90,-150}},
    {{-90,-150},{-210,-30}},
    {{-210,-30},{-400,-30}},
    {{-400,-30},{-400,-10}},
    {{-400,-10},{-210,-10}},
    {{-210,-10},{-90,-130}},
    {{-90,-130},{-10,-130}},
    {{-10,-130},{30,-90}},
    {{30,-90},{30,290}},
    {{30,290},{-10,330}},
    {{-10,330},{-290,330}},
    {{-290,330},{-340,280}},
    {{-340,280},{-340,180}},
    {{-340,180},{-360,180}}
};

//Off track? objects
const Square_2D Map_2_Off_Track_Square[21] = {
    //Inside
    {{-380,300},{-320,180}},
    {{-360,180},{-340,160}},
    {{-320,360},{0,320}},
    {{20,300},{60,-100}},
    {{-420,0},{-200,-40}},
    {{-440,-20},{-420,-40}},
    {{-420,-40},{-400,-60}},
    {{-280,-40},{-200,-60}},
    {{-100,-120},{0,-160}},
    //Inside Circle
    {{-280,260},{-120,180}},
    {{-260,280},{-140,260}},
    {{-260,180},{-140,160}},
    //Outside
    {{-500,120},{-80,40}},
    {{-80,260},{-20,-60}},
    {{-60,280},{-40,260}},
    {{-60,-60},{-40,-80}},
    {{-500,40},{-480,-100}},
    {{-500,-100},{-400,-200}},
    {{-400,-120},{-280,-200}},
    {{-280,-100},{-220,-200}},
    {{-500,400},{-420,120}}
};

//Off track? objects
const Triangle_2D Map_2_Off_Track_Triangle[37] = {
    //Inside
    {{-380,180},{-360,160},3},
    {{-340,180},{-320,160},2},
    {{-380,360},{-320,300},4},
    {{-320,320},{-280,280},2},
    {{0,360},{60,300},1},
    {{-20,320},{0,300},3},
    {{0,300},{20,280},3},
    {{-440,0},{-420,-20},4},
    {{-440,-40},{-420,-60},3},
    {{-400,-40},{-380,-60},2},
    {{-300,-40},{-280,-60},3},
    {{-200,0},{-140,-60},1},
    {{-200,-60},{-140,-120},3},
    {{-140,-60},{-80,-120},1},
    {{-140,-120},{-100,-160},3},
    {{-20,-100},{0,-120},4},
    {{0,-80},{20,-100},4},
    {{0,-100},{60,-160},2},
    //Inside Circle
    {{-280,280},{-260,260},4},
    {{-140,280},{-120,260},1},
    {{-140,180},{-120,160},2},
    {{-280,180},{-260,160},3},
    //Outside
    {{-420,400},{-340,320},2},
    {{-420,160},{-380,120},1},
    {{-120,160},{-80,120},4},
    {{-80,280},{-60,260},4},
    {{-40,280},{-20,260},1},
    {{20,400},{100,320},3},
    {{-480,40},{-440,0},2},
    {{-480,-60},{-440,-100},1},
    {{-400,-100},{-380,-120},1},
    {{-300,-100},{-280,-120},4},
    {{-220,-100},{-120,-200},1},
    {{-180,40},{-80,-60},3},
    {{-80,-60},{-60,-80},3},
    {{-40,-60},{-20,-80},2},
    {{20,-120},{100,-200},4},
};

const Square_2D Map_2_Out_Of_Bounds_Square[12] = {
    //Outside
    {{-500,100},{-60,60}},
    {{-60,260},{-40,-60}},
    {{-600,500},{-500,-400}},
    {{-500,-300},{200,-400}},
    {{200,600},{300,-400}},
    {{-500,600},{200,500}},
    //Inside Circle
    {{-260,260},{-140,180}},
    //Inside
    {{-360,300},{-340,180}},
    {{-310,350},{-10,330}},
    {{-400,-10},{-210,-30}},
    {{-90,-130},{-10,-150}},
    {{30,290},{50,-90}}
};

const Triangle_2D Map_2_Out_Of_Bounds_Triangle[27] = {
    //Outside
    {{-180,60},{-60,-60},3},
    //Inside
    {{-360,340},{-320,300},4},
    {{-340,300},{-320,280},2},
    {{-320,340},{-280,300},2},
    {{-320,350},{-310,340},4},
    {{-10,350},{10,330},1},
    {{-10,330},{10,310},3},
    {{10,330},{30,310},1},
    {{10,310},{30,290},3},
    {{30,310},{50,290},1},
    {{-10,-130},{10,-150},2},
    {{-10,-110},{10,-130},4},
    {{10,-110},{30,-130},2},
    {{10,-90},{30,-110},4},
    {{30,-90},{50,-110},2},
    {{-210,-10},{-190,-30},1},
    {{-210,-30},{-190,-50},3},
    {{-190,-30},{-170,-50},1},
    {{-190,-50},{-170,-70},3},
    {{-170,-50},{-150,-70},1},
    {{-170,-70},{-150,-90},3},
    {{-150,-70},{-130,-90},1},
    {{-150,-90},{-130,-110},3},
    {{-130,-90},{-110,-110},1},
    {{-130,-110},{-110,-130},3},
    {{-110,-110},{-90,-130},1},
    {{-110,-130},{-90,-150},3}
};

const Square_2D Map_2_Gates[19] = {
    {{-40,0},{30,-10}},
    {{-40,110},{30,100}},
    {{-40,210},{30,200}},
    {{-60,330},{-50,260}},
    {{-210,330},{-200,100}},
    {{-350,180},{-340,100}},
    {{-600,210},{-360,200}},
    {{-600,310},{-350,300}},
    {{-300,500},{-290,350}},
    {{-100,500},{-90,350}},
    {{40,300},{200,290}},
    {{50,110},{200,100}},
    {{50,0},{200,-10}},
    {{-20,-150},{-10,-300}},
    {{-280,-30},{-270,-300}},
    {{-600,-20},{-400,-30}},
    {{-310,60},{-300,-10}},
    {{-140,20},{-130,-90}},
    {{-50,-60},{-40,-130}}
};

const Triangle_2D Map_2_Boost_Plates[3] = {
    {{60,280},{80,260},3},
    {{-420,40},{-400,20},2},
    {{-280,400},{-260,380},2}
};





//MAP - 3
const Map_Data Map_3 = {102,1,52,44,35,50,18,12,17,5};

//Lines
const Line_2D Map_3_Track_Lines[106] = {
    //Inside
    {{20,40},{40,60}},
    {{40,60},{160,60}},
    {{160,60},{200,100}},
    {{200,100},{200,140}},
    {{200,140},{220,160}},
    {{220,160},{280,160}},
    {{280,160},{300,140}},
    {{300,140},{300,60}},
    {{300,60},{320,40}},
    {{320,40},{380,40}},
    {{380,40},{400,60}},
    {{400,60},{400,260}},
    {{400,260},{360,300}},
    {{360,300},{120,300}},
    {{120,300},{100,320}},
    {{100,320},{100,380}},
    {{100,380},{120,400}},
    {{120,400},{400,400}},
    {{400,400},{500,300}},
    {{500,300},{700,300}},
    {{700,300},{740,340}},
    {{740,340},{740,420}},
    {{740,420},{760,440}},
    {{760,440},{780,440}},
    {{780,440},{800,420}},
    {{800,420},{800,380}},
    {{800,380},{840,340}},
    {{840,340},{900,340}},
    {{900,340},{940,380}},
    {{940,380},{940,420}},
    {{940,420},{960,440}},
    {{960,440},{980,440}},
    {{980,440},{1000,420}},
    {{1000,420},{1000,320}},
    {{1000,320},{980,300}},
    {{980,300},{780,300}},
    {{780,300},{740,260}},
    {{740,260},{740,200}},
    {{740,200},{780,160}},
    {{780,160},{1140,160}},
    {{1140,160},{1160,140}},
    {{1160,140},{1160,-40}},
    {{1160,-40},{1140,-60}},
    {{1140,-60},{960,-60}},
    {{960,-60},{940,-40}},
    {{940,-40},{940,60}},
    {{940,60},{900,100}},
    {{900,100},{680,100}},
    {{680,100},{520,-60}},
    {{520,-60},{40,-60}},
    {{40,-60},{20,-40}},
    {{20,-40},{20,40}},
    //Outside
    {{-20,60},{20,100}},
    {{20,100},{140,100}},
    {{140,100},{160,120}},
    {{160,120},{160,160}},
    {{160,160},{200,200}},
    {{200,200},{300,200}},
    {{300,200},{340,160}},
    {{340,160},{340,100}},
    {{340,100},{360,100}},
    {{360,100},{360,240}},
    {{360,240},{340,260}},
    {{340,260},{100,260}},
    {{100,260},{60,300}},
    {{60,300},{60,400}},
    {{60,400},{100,440}},
    {{100,440},{420,440}},
    {{420,440},{520,340}},
    {{520,340},{680,340}},
    {{680,340},{700,360}},
    {{700,360},{700,440}},
    {{700,440},{740,480}},
    {{740,480},{800,480}},
    {{800,480},{840,440}},
    {{840,440},{840,400}},
    {{840,400},{860,380}},
    {{860,380},{880,380}},
    {{880,380},{900,400}},
    {{900,400},{900,440}},
    {{900,440},{940,480}},
    {{940,480},{1000,480}},
    {{1000,480},{1040,440}},
    {{1040,440},{1040,300}},
    {{1040,300},{1000,260}},
    {{1000,260},{800,260}},
    {{800,260},{780,240}},
    {{780,240},{780,220}},
    {{780,220},{800,200}},
    {{800,200},{1160,200}},
    {{1160,200},{1200,160}},
    {{1200,160},{1200,-60}},
    {{1200,-60},{1160,-100}},
    {{1160,-100},{940,-100}},
    {{940,-100},{900,-60}},
    {{900,-60},{900,40}},
    {{900,40},{880,60}},
    {{880,60},{700,60}},
    {{700,60},{540,-100}},
    {{540,-100},{20,-100}},
    {{20,-100},{-20,-60}},
    {{-20,-60},{-20,60}},
    {{-100,600},{0,-200}},
    {{0,600},{1200,500}},
    {{1200,600},{1300,-200}},
    {{0,-100},{1200,-200}}
};

//Dotted Lines
const Line_2D Map_3_Track_Dotted_Lines[1] = {
    {{-20,0},{20,0}}
};

//Flags
const Sprite_2D Map_3_Sprites[52] = {
    {-20,0, Flag},
    {20,0, Flag},
    
    {200,350, Helicopter},
    {1000,0, Helicopter},
    {600,100, Helicopter},
    {1100,400, Helicopter},
    
    {52,-20,People_Cheering},
    {52,-10,People_Standing_1},
    {52,0,People_Standing_2},
    {52,10,People_Cheering},
    {52,20,People_Standing_1},
    {60,0,People_Standing_2},
    
    {320,8,People_Cheering},
    {330,8,People_Standing_2},
    {340,8,People_Standing_1},
    {350,8,People_Standing_2},
    
    {200,238,People_Cheering},
    {210,238,People_Standing_1},
    {220,238,People_Standing_2},
    
    {400,350,People_Cheering},
    {410,340,People_Standing_1},
    {420,330,People_Standing_2},
    {430,320,People_Cheering},
    {440,310,People_Standing_1},
    {450,300,People_Standing_2},
    
    {762,340,People_Cheering},
    {762,350,People_Standing_1},
    {762,360,People_Standing_2},
    
    {950,312,People_Cheering},
    {960,312,People_Standing_1},
    {978,330,People_Standing_2},
    {978,340,People_Standing_2},
    
    {802,222,People_Cheering},
    {802,238,People_Standing_2},
    
    {1138,110,People_Cheering},
    {1138,100,People_Standing_1},
    {1138,70,People_Standing_2},
    {1138,60,People_Cheering},
    {1138,50,People_Standing_1},
    {1138,30,People_Standing_2},
    
    {780,122,People_Cheering},
    {800,122,People_Standing_1},
    {810,122,People_Standing_2},
    
    {500,-28,People_Cheering},
    {520,-8,People_Standing_1},
    {530,2,People_Standing_2},
    {560,32,People_Cheering},
    {570,42,People_Standing_1},
    {580,52,People_Standing_2},
    {600,72,People_Cheering},
    {620,92,People_Standing_1},
    {630,102,People_Standing_2},
    
};

//Walls
const Line_2D Map_3_Walls[44] = {
    //Inside
    {{50,30},{230,30}},
    {{230,30},{230,130}},
    {{230,130},{270,130}},
    {{270,130},{270,10}},
    {{270,10},{430,10}},
    {{430,10},{430,270}},
    {{430,270},{370,330}},
    {{370,330},{130,330}},
    {{130,330},{130,370}},
    {{130,370},{390,370}},
    {{390,370},{490,270}},
    {{490,270},{700,270}},
    {{700,270},{760,330}},
    {{760,330},{760,420}},
    {{760,420},{780,420}},
    {{780,420},{780,330}},
    {{780,330},{960,330}},
    {{960,330},{960,420}},
    {{960,420},{980,420}},
    {{980,420},{980,330}},
    {{980,330},{960,310}},
    {{960,310},{760,310}},
    {{760,310},{710,260}},
    {{710,260},{710,140}},
    {{710,140},{1140,140}},
    {{1140,140},{1140,-40}},
    {{1140,-40},{960,-40}},
    {{960,-40},{960,120}},
    {{960,120},{660,120}},
    {{660,120},{510,-30}},
    {{510,-30},{50,-30}},
    {{50,-30},{50,30}},
    //Outside
    {{-100,220},{340,220}},
    {{340,220},{340,240}},
    {{340,240},{-100,240}},
    {{-100,240},{-100,600}},
    {{-100,600},{1300,600}},
    {{1300,600},{1300,240}},
    {{1300,240},{800,240}},
    {{800,240},{800,220}},
    {{800,220},{1300,220}},
    {{1300,220},{1300,-200}},
    {{1300,-200},{-100,-200}},
    {{-100,-200},{-100,220}}
};

//Off track? objects
const Square_2D Map_3_Off_Track_Square[35] = {
    //Inside
    {{20,40},{40,-40}},
    {{40,60},{200,40}},
    {{40,40},{520,-60}},
    {{100,380},{120,320}},
    {{120,400},{400,300}},
    {{200,140},{300,40}},
    {{220,160},{280,140}},
    {{400,300},{740,100}},
    {{400,100},{500,40}},
    {{740,420},{800,340}},
    {{740,340},{980,300}},
    {{740,160},{940,100}},
    {{940,420},{1000,340}},
    {{940,160},{1140,-40}},
    {{960,440},{980,420}},
    {{960,-40},{1140,-60}},
    {{980,340},{1000,320}},
    {{1140,140},{1160,-40}},
    {{760,440},{780,420}},
    //Outside
    {{-20,500},{60,100}},
    {{60,500},{700,440}},
    {{60,260},{340,200}},
    {{60,200},{160,120}},
    {{60,120},{140,100}},
    {{340,240},{360,100}},
    {{700,500},{1200,480}},
    {{520,440},{680,340}},
    {{680,440},{700,360}},
    {{700,60},{880,40}},
    {{700,40},{900,-100}},
    {{800,260},{1200,200}},
    {{780,240},{800,220}},
    {{1040,480},{1060,260}},
    {{840,480},{900,400}},
    {{860,400},{880,380}}
};

//Off track? objects
const Triangle_2D Map_3_Off_Track_Triangle[50] = {
    //Inside
    {{20,60},{40,40},4},
    {{20,-40},{40,-60},3},
    {{100,400},{120,380},4},
    {{100,320},{120,300},3},
    {{160,100},{200,60},4},
    {{200,160},{220,140},4},
    {{280,160},{300,140},1},
    {{360,300},{400,260},3},
    {{400,400},{500,300},1},
    {{520,100},{680,-60},2},
    {{700,340},{740,300},4},
    {{300,60},{320,40},1},
    {{380,60},{400,40},4},
    {{740,440},{760,420},4},
    {{740,300},{780,260},2},
    {{740,200},{780,160},1},
    {{780,440},{800,420},1},
    {{800,380},{840,340},1},
    {{900,380},{940,340},4},
    {{900,100},{940,60},3},
    {{940,440},{960,420},4},
    {{940,-40},{960,-60},3},
    {{980,440},{1000,420},1},
    {{980,320},{1000,300},2},
    {{1140,160},{1160,140},1},
    {{1140,-40},{1160,-60},2},
    //Outside
    {{-20,100},{20,60},2},
    {{-20,-60},{20,-100},1},
    {{60,440},{100,400},2},
    {{60,300},{100,260},1},
    {{140,120},{160,100},2},
    {{160,200},{200,160},2},
    {{300,200},{340,160},3},
    {{340,260},{360,240},1},
    {{420,440},{520,340},3},
    {{540,60},{700,-100},4},
    {{680,360},{700,340},2},
    {{700,480},{740,440},2},
    {{780,260},{800,240},4},
    {{780,220},{800,200},3},
    {{800,480},{840,440},3},
    {{840,400},{860,380},3},
    {{880,400},{900,380},2},
    {{880,60},{900,40},1},
    {{900,480},{940,440},2},
    {{900,-60},{940,-100},1},
    {{1000,480},{1040,440},3},
    {{1000,300},{1040,260},4},
    {{1160,200},{1200,160},3},
    {{1160,-60},{1200,-100},4}
};

const Square_2D Map_3_Out_Of_Bounds_Square[18] = {
    //Inside
    {{50,30},{270,-30}},
    {{230,130},{270,30}},
    {{130,370},{390,330}},
    {{270,10},{430,-30}},
    {{430,120},{510,-30}},
    {{430,310},{450,270}},
    {{430,270},{710,120}},
    {{710,140},{960,120}},
    {{760,420},{780,310}},
    {{780,30},{960,310}},
    {{960,420},{980,330}},
    {{960,140},{1140,-40}},
    //Outside
    {{-100,240},{340,220}},
    {{800,240},{1300,220}},
    {{-200,700},{-100,-300}},
    {{-100,700},{1300,600}},
    {{1300,700},{1400,-300}},
    {{-100,-200},{1300,-300}}
};

const Triangle_2D Map_3_Out_Of_Bounds_Triangle[12] = {
    {{370,330},{390,310},3},
    {{390,370},{450,310},1},
    {{390,310},{430,270},3},
    {{450,310},{490,270},1},
    {{510,120},{660,-30},2},
    {{700,290},{720,270},4},
    {{710,270},{720,260},2},
    {{720,290},{740,270},2},
    {{720,310},{740,290},4},
    {{740,310},{760,290},2},
    {{740,330},{760,310},4},
    {{960,330},{980,310},2}
};

const Square_2D Map_3_Gates[17] = {
    {{-100,10},{50,0}},
    {{100,220},{110,30}},
    {{340,230},{430,220}},
    {{130,330},{140,240}},
    {{130,600},{140,370}},
    {{500,600},{510,270}},
    {{760,600},{770,420}},
    {{960,600},{970,420}},
    {{950,310},{960,240}},
    {{710,230},{800,220}},
    {{990,220},{1000,140}},
    {{1140,100},{1300,90}},
    {{1000,-40},{1010,-200}},
    {{700,120},{710,-200}},
    {{500,-30},{510,-200}},
    {{300,-30},{310,-200}},
    {{50,-30},{60,-200}}
};

const Triangle_2D Map_3_Boost_Plates[5] = {
    {{200,440},{220,420},2},
    {{520,340},{540,320},2},
    {{880,200},{900,180},2},
    {{460,-60},{480,-80},4},
    {{200,-60},{220,-80},4}
};