// September 2015 // Levee Patroller / Dijk Patrouille // This source file is (c) by Deltares. This source file is open source but only available to select users. Do not redistribute without written permission of Stichting Deltares, Delft, The Netherlands. // This header has been automatically generated. //============================================================================= // GeoHUD // Started using MyFirstHUD (FROM UDN) // // IMPORTANT: FOR LOADING SCREEN WHEN STARTING FROM THE MENU HANDLE GeoHUDMenu.uc // FOR LOADING SCREEN WHEN SWITCHING LEVELS HANDLE HERE // //============================================================================= // Date Id Modification // 2006-09-13 gui Corrected problem of having several markers close by // 2006-09-18 bas Added ability to show a WarningMessage // 2006-09-22 bas Changed text for a WarningMessage // 2006-09-25 bas Added Blue Color for WarningMessage // 2006-10-06 bas Added arne's beloved timer function for debugging purposes // 2006-10-06 bas Added 'press leftmousebutton' image in bottom right corner // 2006-10-06 gui Added tips in game start also here so you can see on restart // 2006-10-09 gui initial call shows // 2006-12-08 zmr When bGameOver the wmsg won't be displayed // 2006-12-12 gui Informations in Complete exercise // 2006-12-13 gui Corrected thing in Complete exercise and new tips // 2007-02-07 gui Image for single exercise // 2007-05-31 wsl removed left mouse button image from End-of-Game HUD // 2007-06-07 wsl Images are square and centred on screen // 2007-06-08 wsl Images accompanying tip 0 are centred // 2007-07-25 mcb Modified the level loading tips // 2007-09-19 wsl Changed all occurrences of 'afstands-' to 'meet-' // 2008-02-12 wsl Corrected English texts //============================================================================= class GeoHUD extends HUD; var GeoPlayerController PlayerOwner; var() Material TitleMaterial, BackPicture; var() Material KeysImage; var() Material Mouse; var() Material LevelPreview; var string NL_MessagePlaceMarker, EN_MessagePlaceMarker, NL_MessageNearMarker , EN_MessageNearMarker, EN_Exercise, NL_Exercise, NL_MessagePlaceYellowMarker, EN_MessagePlaceYellowMarker, NL_MessageNearYellowMarker , EN_MessageNearYellowMarker, NL_MessageRememberWarning, EN_MessageRememberWarning, NL_MessageCorrectionWarning, EN_MessageCorrectionWarning, NL_MessageEndGame, EN_MessageEndGame, NL_MessagePlaceYellowMarker2, EN_MessagePlaceYellowMarker2, NL_MessagePlaceYellowMarker3, EN_MessagePlaceYellowMarker3; var() Material MouseLeft; var() Material MouseRight; var string currentTime; var string NL_LoadingMessage, EN_LoadingMessage; var array NL_Tip, EN_Tip; /// jln - 18-09-2008 Should we render bounding boxes? var bool ShowBoundingBoxes; Const URotToRadian = 0.000095873799; simulated function PostBeginPlay() { Super.PostBeginPlay(); PlayerOwner = GeoPlayerController(Owner); SaveConfig(); ShowboundingBoxes = bool(Localize("DebugInfo", "Showboxes", "GeoSimulator")); } //============================================================================= // OPEN MAP MENU // Date Id Modification // 2007-06-19 gui Created this function //============================================================================= exec function ShowScores() { PlayerOwner.ShowScoresNew(); } simulated event WorldSpaceOverlays() { local Vector corners[8]; Local LeveeFailure F; local vector minBounds, maxBounds, center; local Rotator NR; local int rotation; /// Return if nothing should happen: if (ShowboundingBoxes == false) return; ForEach DynamicActors( class 'LeveeFailure', F) { // F.DrawOBB(self); minBounds = F.vMin; maxBounds = F.vMax; center = (minbounds + maxbounds) / 2; minbounds -= center; maxbounds -= center; /// Kinda a hack, but there is no easy way to fix, especially not with level 2. NR = (F.Rotation); /// Not the best code there is, but it works... switch (F.Linkedtile.Rotation.Yaw) { case 32768: rotation = F.Linkedtile.rotation.Yaw; // - 32768; break; case 49158: rotation = F.Linkedtile.rotation.Yaw - 16384; // + 16384; break; default: rotation = (F.Linkedtile.rotation.Yaw - 16384); // + 16384; break; } /* if (NR.Yaw >= 0 && NR.Yaw <= 32768 ) { if (minBounds.y < 0) minBounds.y *= 1.05; else minBounds.y *= 0.90; if (maxBounds.y > 0) maxBounds.y *= 1.05; else maxBounds.y *= 0.90; } if (NR.Yaw < 0) { if (maxBounds.x > 0) maxBounds.x *= 1.05; else maxBounds.x *= 0.90; if (minBounds.x < 0) minBounds.x *= 1.05; else minBounds.x *= 0.90; } */ // We have min and max values, use these to get the 8 corners of the bounding box corners[0] = mvect( minBounds.x, minBounds.y, minBounds.z ); // xyz corners[1] = mvect( maxBounds.x, minBounds.y, minBounds.z ); // Xyz corners[2] = mvect( minBounds.x, maxBounds.y, minBounds.z ); // xYz corners[3] = mvect( maxBounds.x, maxBounds.y, minBounds.z ); // XYz corners[4] = mvect( minBounds.x, minBounds.y, maxBounds.z ); // xyZ corners[5] = mvect( maxBounds.x, minBounds.y, maxBounds.z ); // XyZ corners[6] = mvect( minBounds.x, maxBounds.y, maxBounds.z ); corners[7] = mvect( maxBounds.x, maxBounds.y, maxBounds.z ); // XYZ corners[0] = RotateVectorNoLocation(corners[0], rotation, 0); corners[1] = RotateVectorNoLocation(corners[1], rotation, 0); corners[2] = RotateVectorNoLocation(corners[2], rotation, 0); corners[3] = RotateVectorNoLocation(corners[3], rotation, 0); corners[4] = RotateVectorNoLocation(corners[4], rotation, 0); corners[5] = RotateVectorNoLocation(corners[5], rotation, 0); corners[6] = RotateVectorNoLocation(corners[6], rotation, 0); corners[7] = RotateVectorNoLocation(corners[7], rotation, 0); corners[0] += center; corners[1] += center; corners[2] += center; corners[3] += center; corners[4] += center; corners[5] += center; corners[6] += center; corners[7] += center; Draw3DLine(corners[0], corners[1], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[0], corners[2], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[0], corners[4], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[4], corners[6], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[4], corners[5], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[3], corners[1], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[7], corners[3], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[7], corners[6], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[7], corners[5], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[1], corners[5], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[2], corners[6], class'Canvas'.Static.MakeColor(255,0,255)); Draw3DLine(corners[2], corners[3], class'Canvas'.Static.MakeColor(255,0,255)); } } function vector RotateVectorNoLocation(vector pos, float YawAngle, float RelativeRotation) { local vector Loc; local float Yaw; Loc = vect(0,0,0); //LinkedTile.Location; //Loction of the Orginal Vector Yaw = (YawAngle + RelativeRotation ) * URotToRadian ; /// Rotate vector based on object rotation and position Loc.X += pos.x * cos(Yaw) - pos.y * sin(Yaw); Loc.Y += pos.x * sin(Yaw) + pos.y * cos(Yaw); Loc.Z += pos.z; return Loc; } function Vector mvect(float x, float y, float z) { local vector v; v.x = x; v.y = y; v.z = z; return v; } function DrawHUD(canvas Canvas) { local float YL; local float TitleXL; local string TitleString; local color WhiteColor; local color RedColor; local color YellowColor; local color BlueColor; local color PurpleColor; local color GreenColor; BlueColor = class'Canvas'.static.MakeColor(0,191,255); WhiteColor = class'Canvas'.static.MakeColor(255,255,225); RedColor = class'Canvas'.static.MakeColor(255,0,0); YellowColor = class'Canvas'.static.MakeColor(255,255,0); PurpleColor = class'Canvas'.static.MakeColor(160,32,240); GreenColor = class'Canvas'.static.MakeColor(0,255,0); //DRAW IN-GAME TIMER if(PlayerOwner.showTimer){ if(PlayerOwner.updateTimer){ PlayerOwner.updateTimer = false; currentTime = PlayerOwner.getTimer(); } PrintTimer(Canvas, ""@currentTime); } Canvas.Font = GetMediumFontFor(Canvas); //Canvas.StrLen("Test", XL, YL); // DRAW WARNING if(((PlayerOwner.PlayerReplicationInfo.PlayerVolume != none&& PlayerOwner.PlayerReplicationInfo.PlayerVolume.IsA('MapLimitVolume')) || PlayerOwner.PlacingMarker || PlayerOwner.NearByMarker!=None || PlayerOwner.NearByYellowMarker!=None || PlayerOwner.bGameStartingCall ||PlayerOwner.bIsGameOver||(!PlayerOwner.bIsGameOver && (PlayerOwner.bRememberWarning || PlayerOwner.bCorrectionWarning))) && !PlayerOwner.bInMenu) { Canvas.Style = ERenderStyle.STY_Normal; //Canvas.Font = LargerFontThan(Canvas.Font); Canvas.DrawColor = RedColor; if(PlayerOwner.PlayerReplicationInfo.PlayerVolume != none && PlayerOwner.PlayerReplicationInfo.PlayerVolume.IsA('MapLimitVolume')) { Canvas.DrawColor = PurpleColor; if(PlayerOwner.Dutch) titlestring = MapLimitVolume(PlayerOwner.PlayerReplicationInfo.PlayerVolume).NL_MessageNotLeave; else titlestring = MapLimitVolume(PlayerOwner.PlayerReplicationInfo.PlayerVolume).EN_MessageNotLeave; }else if((!PlayerOwner.bIsGameOver && PlayerOwner.bRememberWarning )|| PlayerOwner.bGameStartingCall){ //used for warning state, see GeoSimulator.WarningMessage - bas if(PlayerOwner.Dutch) titlestring = NL_MessageRememberWarning; else titlestring = EN_MessageRememberWarning; PrintMouse(Canvas, true); Canvas.DrawColor = BlueColor; }else if(!PlayerOwner.bIsGameOver && PlayerOwner.bCorrectionWarning){ //used for warning state, see GeoSimulator.WarningMessage - bas if(PlayerOwner.Dutch) titlestring = NL_MessageCorrectionWarning; else titlestring = EN_MessageCorrectionWarning; PrintMouse(Canvas, true); Canvas.DrawColor = BlueColor; }else if(PlayerOwner.PlacingMarker){ //log("GeoHud0"); if(PlayerOwner.MarkerType==MK_RED){ if(PlayerOwner.Dutch) titlestring = NL_MessagePlaceMarker; else titlestring = EN_MessagePlaceMarker; PrintMouse(Canvas, true); Canvas.DrawColor = RedColor; }else if(PlayerOwner.MarkerType==MK_YELLOW){ // log("GeoHud1"); if(PlayerOwner.PreviousYellowMarker==None) { // log("GeoHud2"); if(PlayerOwner.MovingMarker.OtherMarker == none ) { // log("GeoHud5"); if(PlayerOwner.Dutch) titlestring = NL_MessagePlaceYellowMarker; else titlestring = EN_MessagePlaceYellowMarker; // log("GeoHud6"); }else { //log("GeoHud3"); if(PlayerOwner.Dutch) titlestring = NL_MessagePlaceYellowMarker3; else titlestring = EN_MessagePlaceYellowMarker3; //log("GeoHud4"); } }else { // log("GeoHud7"); if(PlayerOwner.Dutch) titlestring = NL_MessagePlaceYellowMarker2; else titlestring = EN_MessagePlaceYellowMarker2; //log("GeoHud8"); } //log("GeoHud9"); PrintMouse(Canvas, true); Canvas.DrawColor = YellowColor; //log("GeoHud10"); } }else if(PlayerOwner.NearByMarker != None && PlayerOwner.NearByYellowMarker != None){ if(Abs(VSize(PlayerOwner.Pawn.Location - PlayerOwner.NearByMarker.Location)) < Abs(VSize(PlayerOwner.Pawn.Location - PlayerOwner.NearByYellowMarker.Location))){ if(PlayerOwner.Dutch) titlestring = NL_MessageNearMarker; else titlestring = EN_MessageNearMarker; PrintMouse(Canvas, true); Canvas.DrawColor = RedColor; }else{ if(PlayerOwner.Dutch) titlestring = NL_MessageNearYellowMarker; else titlestring = EN_MessageNearYellowMarker; PrintMouse(Canvas, true); Canvas.DrawColor = YellowColor; } }else if(PlayerOwner.NearByMarker != None){ if(PlayerOwner.Dutch) titlestring = NL_MessageNearMarker; else titlestring = EN_MessageNearMarker; PrintMouse(Canvas, true); Canvas.DrawColor = RedColor; }else if(PlayerOwner.NearByYellowMarker != None){ if(PlayerOwner.Dutch) titlestring = NL_MessageNearYellowMarker; else titlestring = EN_MessageNearYellowMarker; PrintMouse(Canvas, true); Canvas.DrawColor = YellowColor; }else if(PlayerOwner.bIsGameOver) { if(PlayerOwner.Dutch) titlestring = NL_MessageEndGame; else titlestring = EN_MessageEndGame; Canvas.DrawColor = GreenColor; }else { titlestring = "" ; } Canvas.StrLen(TitleString,TitleXL,YL); Canvas.Style = ERenderStyle.STY_Alpha; Canvas.SetPos(0, 0.25*YL); Canvas.DrawTileStretched( TitleMaterial, Canvas.ClipX, YL*1.5); Canvas.SetPos(0.5*(Canvas.ClipX-TitleXL), 0.5*YL); Canvas.DrawText(TitleString,true); } } /* Print a centered level action message with a drop shadow. */ function PrintActionMessage( Canvas C, string BigMessage ) { local float XL, YL; if ( Len(BigMessage) > 10 ) UseLargeFont(C); else UseHugeFont(C); C.bCenter = false; C.StrLen( BigMessage, XL, YL ); C.SetPos(0.5 * (C.ClipX - XL) + 1, 0.96 * C.ClipY - YL * 0.95 + 1); C.SetDrawColor(0,0,0); C.DrawText( BigMessage, false ); C.SetPos(0.5 * (C.ClipX - XL), 0.96 * C.ClipY - YL * 0.95); C.SetDrawColor(255,0,0);; C.DrawText( BigMessage, false ); } //============================================================================= // Date Id Modification // 2006-10-05 bas function created, changed parts of GeoHudTraining.uc //============================================================================= function PrintMouse(Canvas C, bool bLeftButton){ local float XL,YL, CNVS_X_I, CNVS_Y_I, CNVS_X_F, CNVS_Y_F; CNVS_X_I=4.0 * C.ClipX / 5.0; CNVS_Y_I=2.5 * C.ClipY / 4.0; CNVS_X_F=1.0 * C.ClipX / 5.0; CNVS_Y_F=1.5 * C.ClipY / 4.0; C.SetDrawColor(255,255,255); C.StrLen("XX", XL, YL); C.SetPos(CNVS_X_I + (0.9 * XL), CNVS_Y_I + (2.15 * YL)); if(bLeftButton){ C.DrawTileScaled( MouseLeft, 5/12, 5/12); }else{ C.DrawTileScaled( MouseRight, 5/12, 5/12); } } //============================================================================= // Date Id Modification // 2006-10-05 bas function created, changed copy of PrintActionMessage() //============================================================================= function PrintTimer( Canvas C, string BigMessage ) { local float XL, YL; if ( Len(BigMessage) > 10 ) UseLargeFont(C); else UseHugeFont(C); C.bCenter = false; C.StrLen( BigMessage, XL, YL ); C.SetPos(0.05 * (C.ClipX - XL) + 1, 0.96 * C.ClipY - YL * 0.95 + 1); C.SetDrawColor(0,0,0); C.DrawText( BigMessage, false ); C.SetPos(0.05 * (C.ClipX - XL), 0.96 * C.ClipY - YL * 0.95); C.SetDrawColor(255,255,255); C.DrawText( BigMessage, false ); C.SetPos(0.5 * (C.ClipX - XL), 0.96 * C.ClipY - YL * 0.95); } // ************************************** // Date Id Modification // 2006-10-06 gui Redo Draw the Level Action for both languages // 2006-12-12 gui New information for loading in complete exercise // ************************************** function bool DrawLevelAction( canvas C ) { local string BigMessage; local string TipMsg; local color WhiteColor; local float ImageX, ImageY; local float LevelImageScale, CPosX, CPosY; local GeoCompleteExercise GCE; local string ExerciseMessage; //local string DescriptionMessage; local int RandomTip; WhiteColor = class'Canvas'.static.MakeColor(255,255,255); if (Level.LevelAction == LEVACT_None ) { if ( (Level.Pauser != None) && (Level.TimeSeconds > Level.PauseDelay + 0.2) ) BigMessage = PausedMessage; // Add pauser name? else { BigMessage = ""; return false; } } // *************************************************************************** // THIS WILL LOAD ONLY FOR RESTART GAME OR TRAVELING BETWEEN LEVELS // FOR SCENARIO GEN, TRAINING, AND FIRST LEVE USE GEOHUDMENU // *************************************************************************** else if ( Level.LevelAction == LEVACT_Loading ) { GCE = new class'GeoCompleteExercise'; RandomTip=Rand(NL_Tip.Length); if(PlayerOwner.Dutch) { BigMessage = NL_LoadingMessage; ExerciseMessage = NL_Exercise @GCE.CurrentLevelInfo() @"/" @GCE.TotalLevels(); TipMsg = NL_Tip[RandomTip]; } else { BigMessage = EN_LoadingMessage; ExerciseMessage = EN_Exercise @GCE.CurrentLevelInfo() @"/" @GCE.TotalLevels(); TipMsg = EN_Tip[RandomTip]; } // BACKGROUND ON LOADING SCREEN C.DrawColor = WhiteColor; C.SetPos(0.0, 0.0); ImageX=C.ClipX / 1024.0; ImageY=C.ClipY / 1024.0; C.DrawTileScaled( BackPicture, ImageX, ImageY); // COMPLETE EXERCISE INFOS if(GCE.IsCompleteExercise && !GCE.bIsCompleteExerciseWinner) { C.SetPos(0.0,0.0); UseLargeFont(C); C.DrawTextJustified(ExerciseMessage, 1, 0, 0, C.ClipX, C.ClipY/3); } if(!GCE.bIsCompleteExerciseWinner) { // LOADING IMAGE (LEVEL SCREENSHOT) SetLoadingImage(GCE); // level pictures are 512x512, picture width should be screen width/2.5 LevelImageScale = C.ClipY / 512.0 / 2.5; CPosX = (C.ClipX / 2) - (LevelImageScale * 512.0 / 2); CPosY = 0.22 * C.ClipY; C.SetPos(CPosX, CPosY); // draw the picture as a square, because the texture used is also square C.DrawTileScaled(LevelPreview, LevelImageScale, LevelImageScale); // TIPS C.SetPos(0.0, 0.0); UseMediumFont(C); C.DrawTextJustified(TipMsg, 1, 0, 0.45 * C.ClipY, C.ClipX, C.ClipY); // IMAGES FOR TIP 0 if(RandomTip==0) { // Keyboard and Mouse image; are 512x512 and will be 1/7 of screen height //ImageX=C.ClipX / 512.0 / 10.0; ImageY = C.ClipY / 512.0 / 7.0; CPosX = 2 * C.ClipX / 5 - (ImageY * 512.0 / 2); CPosY = 0.75 * C.ClipY; C.SetPos(CPosX, CPosY); C.DrawTileScaled( KeysImage, ImageY, ImageY); CPosX = 3 * C.ClipX / 5 - (ImageY * 512.0 / 2); C.SetPos(CPosX, CPosY); C.DrawTileScaled( Mouse, ImageY, ImageY); } } } else if ( Level.LevelAction == LEVACT_Saving ) BigMessage = SavingMessage; else if ( Level.LevelAction == LEVACT_Connecting ) BigMessage = ConnectingMessage; else if ( Level.LevelAction == LEVACT_Precaching ) BigMessage = PrecachingMessage; if ( BigMessage != "" ) { C.Style = ERenderStyle.STY_Normal; UseLargeFont(C); PrintActionMessage(C, BigMessage); return true; } return false; } function SetLoadingImage(GeoCompleteExercise GeoCE) { local GeoLevelDetails GLD; GLD = new class'GeoLevelDetails'; Log("map num: " @ GLD.CurrentLevelScenarioNumber); Log("set loading image: " @ GLD.CurrentLevelImage); if(GeoCE.IsCompleteExercise) { LevelPreview = GeoCE.GetCurrentLevelScreenshot(); } else { LevelPreview = GLD.CurrentLevelImage; } } defaultproperties { TitleMaterial=Material'GUIContent.SquareBoxA' BackPicture=Material'GeoDelft.BackGround0' KeysImage=Material'InGameMenuImagesT.ImageButtons.ArrowKeys' Mouse=Material'InGameMenuImagesT.ImageButtons.Mouse' LevelPreview=Material'GeoDelft.MapPreview.LevelPreview' SmallFont=Font'ExampleFonts_T.ExampleFont10' MedFont=Font'ExampleFonts_T.ExampleFont14' BigFont=Font'ExampleFonts_T.ExampleFont18' LargeFont=Font'ExampleFonts_T.ExampleFont22' FontArrayNames(0)="ExampleFonts_T.ExampleFont38" FontArrayNames(1)="ExampleFonts_T.ExampleFont38" FontArrayNames(2)="ExampleFonts_T.ExampleFont34" FontArrayNames(3)="ExampleFonts_T.ExampleFont30" FontArrayNames(4)="ExampleFonts_T.ExampleFont26" FontArrayNames(5)="ExampleFonts_T.ExampleFont22" FontArrayNames(6)="ExampleFonts_T.ExampleFont18" FontArrayNames(7)="ExampleFonts_T.ExampleFont14" FontArrayNames(8)="ExampleFonts_T.ExampleFont10" FontScreenWidthMedium(0)=1600 FontScreenWidthMedium(1)=1600 FontScreenWidthMedium(2)=1600 FontScreenWidthMedium(3)=1600 FontScreenWidthMedium(4)=1280 FontScreenWidthMedium(5)=1024 FontScreenWidthMedium(6)=800 FontScreenWidthMedium(7)=640 FontScreenWidthMedium(8)=0 ConsoleMessageCount=4 ConsoleFontSize=5 MessageFontOffset=0 NL_MessagePlaceMarker="Plaats de Rapportpiket" EN_MessagePlaceMarker="Place the report marker" NL_MessageNearMarker="Druk op de linkermuisknop om het rapport menu te openen" EN_MessageNearMarker="Press the left mouse button to open the report menu" NL_MessagePlaceYellowMarker="Plaats de meetpiket" EN_MessagePlaceYellowMarker="Place the measurement marker" NL_MessagePlaceYellowMarker2="Plaats de tweede meetpiket" EN_MessagePlaceYellowMarker2="Place the second measurement marker" NL_MessagePlaceYellowMarker3="Verplaats de meetpiket" EN_MessagePlaceYellowMarker3="Move the measurement marker" NL_MessageNearYellowMarker="Druk op de linkermuisknop om het meetmenu te openen" EN_MessageNearYellowMarker="Press the left mouse button to open the measurement menu" NL_MessageRememberWarning="Druk op de linkermuisknop om de telefoon op te nemen" EN_MessageRememberWarning="Press the left mouse button to pick up the phone" NL_MessageCorrectionWarning="Druk op de linkermuisknop om de telefoon op te nemen" EN_MessageCorrectionWarning="Press the left mouse button to pick up the phone" MouseLeft=Material'InGameMenuImagesT.ImageButtons.MouseLeft' MouseRight=Material'InGameMenuImagesT.ImageButtons.MouseRight' EN_LoadingMessage="LOADING LEVEE PATROLLER..." NL_LoadingMessage="DIJK PATROUILLE LADEN..." EN_MessageEndGame="Press ESC to end game" NL_MessageEndGame="Druk ESC om het spel te eindigen" EN_Exercise="Exercise" NL_Exercise="Oefening" // ********************************************************************************* // TIPS FOR TRAINING, SINGLE EXERC and FIRST LEVEL IN COMPLETE STORY // (see GeoHUD for other tips during complete exercise) // ********************************************************************************* NL_Tip[0]="TIP: Optimaal spelplezier met de linkerhand op de pijltjestoetsen en de rechterhand op de muis." EN_Tip[0]="HINT: For optimal game play, use your left hand on the arrow keys and right hand on the mouse." NL_Tip[1]="TIP: Je kan altijd op 'K' drukken om de kaart te bekijken." EN_Tip[1]="HINT: You can press 'M' at any time to see the map." NL_Tip[2]="TIP: Je kan niet over de slootjes springen, dus let goed op waar hekken en overgangen zijn." EN_Tip[2]="HINT: You cannot jump over ditches, so look out for gates and bridges." NL_Tip[3]="TIP: Het is niet toegestaan de schapen te voederen!" EN_Tip[3]="HINT: Do not feed the sheep!" NL_Tip[4]="TIP: Je kan ook de toetsen W S A D gebruiken om te bewegen." EN_Tip[4]="HINT: You can also use the keys W S A D instead of the arrow keys." NL_Tip[5]="TIP: Het makkelijkst is om te meten vóórdat je je rapport invult." EN_Tip[5]="HINT: The easiest way is to take measurements before you fill in a report." NL_Tip[6]="TIP: Eén Rapportpiket plaatsen per faalmechanisme is genoeg." EN_Tip[6]="HINT: One report maker for each failure mechanism is enough." NL_Tip[7]="TIP: Als je meerdere signalen dicht bij elkaar ziet, is de kans groot dat ze bij het zelfde mechanisme horen." EN_Tip[7]="HINT: If you see multiple signals close to each other, it's likely they belong to the same failure mechanism." NL_Tip[8]="TIP: Op de kaart kun je zien waar je bent en waar de Rapportpiketten zijn." EN_Tip[8]="HINT: You can use the map to determine your location and the location of report markers." NL_Tip[9]="TIP: Als een signaal is veranderd is het wijzigen van een eerdere observatie soms voldoende." EN_Tip[9]="HINT: Sometimes, changing an old observation is enough to report that a signal has changed." }