# HG changeset patch # User Wuzzy # Date 1479943241 -3600 # Node ID daf63e2a21d23e033da6cedf092c2caafeba9ce9 # Parent 030464f34d479eb039fbce3d053ee838838dcc3f Rewrite some help texts in the basic rope training mission Also make it impossible for the player to die diff -r 030464f34d47 -r daf63e2a21d2 ChangeLog.txt --- a/ChangeLog.txt Wed Nov 23 23:54:55 2016 +0100 +++ b/ChangeLog.txt Thu Nov 24 00:20:41 2016 +0100 @@ -91,6 +91,7 @@ + Rope-Knocking Challenge was improved (now awards score based on kills and time; taunts for knocking out hedgehogs) + A few campaign missions now save your personal best successes (e.g. fastest finish in Hard Flying) which get shown after you finish them agin + A Space Adventure shows 2 flowers over fully completed planets (with side missions) + + Rewrote some help texts in basic rope training * Portal Mind Challenge was cleaned up and reworked (especially less awful wording) * Fixed Target Practice missions getting stuck when a target dropped into water * Fixed mistakes and bad wording of strings in several missions, scripts and campaigns diff -r 030464f34d47 -r daf63e2a21d2 share/hedgewars/Data/Missions/Training/Basic_Training_-_Rope.lua --- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Rope.lua Wed Nov 23 23:54:55 2016 +0100 +++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Rope.lua Thu Nov 24 00:20:41 2016 +0100 @@ -14,8 +14,10 @@ local Target = nil -- Pointer to target hog local GameLost = false -- You lost the game local Objective = false -- Get to the target +local RopeMaster = false -- Achievement +local StatsSent = false -- Remember whether the stats have been sent already -local WaitTime = 10000 -- Wait 10sec before quit +local WaitTime = 1000 -- Wait 1sec before quit local FollowTime = 1500 -- For use with FollowGear local FollowingGear = false local BaseballIntro = false -- Fail safe for ticker @@ -26,20 +28,20 @@ local GetTime = 0 TargetPos[ 1 ] = { X = 1100, Y = 1100, Message = loc("Now find the next target! |Tip: Normally you lose health by falling down, so be careful!") } -TargetPos[ 2 ] = { X = 1500, Y = 1490, Message = loc("You're getting pretty good! |Tip: When you shorten you rope you move faster! |and when you lengthen it you move slower") } +TargetPos[ 2 ] = { X = 1500, Y = 1490, Message = loc("You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower.") } TargetPos[ 3 ] = { X = 2200, Y = 800, Message = loc("The next one is pretty hard! |Tip: You have to do multiple swings!") } -TargetPos[ 4 ] = { X = 2870, Y = 400, Message = loc("I don't know how you did that.. But good work! |The next one should be easy as cake for you!") } +TargetPos[ 4 ] = { X = 2870, Y = 400, Message = loc("I don't know how you did that .. But good work! |The next one should be easy as cake for you!") } TargetPos[ 5 ] = { X = 4000, Y = 1750, Message = "" } TargetPos[ 6 ] = { Modifier = true, Func = function() -- Last target is ALWAYS the "winning" target! - Info( loc("Congratulations"), loc("Congratulations! You've completed the Rope tutorial! |- Tutorial ends in 10 seconds!"), 0 ) -- Congrats - HogSay( Player, loc("Victory!"), SAY_SHOUT) -- You win! - PlaySound( sndVictory ) + Info( loc("Congratulations"), loc("Congratulations! You've completed the Basic Rope Training!"), 0 ) -- Congrats + PlaySound( sndVictory, Player ) + AddCaption( loc( "Victory!" )) if TurnTimeLeft >= 250000 then -- If you very fast, unlock the ahievement "Rope Master!" - AddCaption( loc( "Achievement Unlocked" ) .. ": " .. loc( "Rope Master!" ),0xffba00ff,capgrpAmmoinfo ) + RopeMaster = true + AddCaption( loc( "Achievement obtained: Rope Master!" ),0xffba00ff,capgrpAmmoinfo ) PlaySound( sndHomerun ) end - Objective = true end } @@ -67,7 +69,7 @@ end if TargetNumber > 1 then - Info(loc("Aiming Practice"), TargetPos[ TargetNumber - 1 ].Message, -amRope ) + Info(loc("Training"), TargetPos[ TargetNumber - 1 ].Message, -amRope ) end SpawnTarget( TargetPos[ TargetNumber ].X, TargetPos[ TargetNumber ].Y ) -- Spawn target on the next position @@ -83,7 +85,7 @@ if (not BaseballIntro and not Objective) and (CurrentHedgehog ~= nil) then --Fail safe check if InRange( Hog, 1100, 1100, Distance ) then -- Check if the player is within predefined position of the first target BaseballIntro = true - Info(loc("Aiming Practice"), loc("Great work! Now hit it with your Baseball Bat! |Tip: You can change weapon with 'Right Click'!"), -amRope ) -- Guide them + Info(loc("Training"), loc("Great work! Now hit it with your Baseball Bat! |Tip: You can change weapon with 'Right Click'!"), -amRope ) -- Guide them Timer( 10000, loc("Remember: The rope only bend around objects, |if it doesn't hit anything it's always stright!")) end end @@ -107,6 +109,10 @@ Delay = 1 -- We don't wont to wait between each round ( as the only is one ) Map = "Ropes" -- Map name Theme = "Nature" -- Map theme + -- Disable Sudden Death + SuddenDeathTurns = 50 + WaterRise = 0 + HealthDecrease = 0 AddTeam( loc( "Rope Team" ), 14483456, "Simple", "Island", "Default", "cm_shoppa" ) -- Lets make the team Player = AddHog( loc( "Hunter" ), 0, 1, "StrawHat" ) -- Add a hog for it, and name it "Hunter" @@ -116,12 +122,16 @@ end function onGameStart() -- Called when the game starts + SendHealthStatsOff() AutoSpawn() -- Spawn our 1st target using the wrapper function SetHealth( Player, 100 ) -- Give the player 100 Health points - Info(loc("Aiming Practice"), loc("Get to the target using your rope! |Controls: Left & Right to swing the rope - Up & Down to Contract and Expand!"), -amRope ) -- Short intro to tell the player what to do - Timer( 10000, loc("Tip: The rope physics are different than in the real world, |use it to your advantage!") ) -- After 15 sec, give them more help + PlaceGirder(46,1783, 0) -- Place a girder to prevent the player falling into the water + + local message = loc("Get to the target using your rope!") .. "|" .. loc("Controls: Hold the Attack key (space by default) to|fire the rope, then, once attached use:|Left and Right to swing the rope;|Up and Down to contract and expand.") + Info(loc("Training"), message, -amRope ) -- Short intro to tell the player what to do + Timer( 10000, message .. "|" .. loc("Tip: The rope physics are different than in the real world, |use it to your advantage!") ) -- After 15 sec, give them more help end function onNewTurn() @@ -131,7 +141,12 @@ function onGameTick20() if TurnTimeLeft < 40 and TurnTimeLeft > 0 then -- Round starts at 0, so we check if the round is finished by using 1 GameLost = true -- You lost the game - Info(loc("Aiming Practice"), loc("You did not make it in time, try again!"), -amSkip ) + Info(loc("Training"), loc("You did not make it in time, try again!"), -amSkip ) + if not StatsSent then + SendStat(siGameResult, loc("You failed!")) + SendStat(siCustomAchievement, loc("You did not make it in time, try again!")) + StatsSent = true + end SetHealth( Player, 0 ) -- Kill the player so he can't keep moving! SetEffect( Player, heResurrectable, 0 ) @@ -142,14 +157,15 @@ -- If round is finished and your not at the target you lose -- in either case, end the game if (Objective == true) or (GameLost == true) then - if (WaitTime == 0) then - DismissTeam(loc( "Rope Team" )) - - --SetHealth( Player, 0 ) -- Kill the player so he can't keep moving! - --SetEffect( Player, heResurrectable, 0 ) - TurnTimeLeft = 1 - - WaitTime = -1 + if (WaitTime == 0 and not StatsSent) then + SendStat(siGameResult, loc("You have finished the Basic Rope Training!")) + SendStat(siCustomAchievement, loc("Good job!")) + SendStat(siPlayerKills, "0", loc("Rope Team")) + if RopeMaster then + SendStat(siCustomAchievement, loc("You earned the \"Rope Master\" achievement for finishing in under 50 seconds.")) + end + StatsSent = true + EndGame() else WaitTime = WaitTime - 20 end @@ -167,7 +183,7 @@ for k, v in pairs( Timers ) do if v.End <= GetTime then - Info(loc("Aiming Practice"), v.Message, -amRope ) + Info(loc("Training"), v.Message, -amRope ) Timers[ k ] = nil end end @@ -182,16 +198,6 @@ SetAmmo( amBaseballBat, 9, 2, 0, 0 ) --Baseball bat end -function onGearResurrect( Gear ) - if TargetNumber > 1 then - SetGearPosition( Player, TargetPos[ TargetNumber - 1 ].X, TargetPos[ TargetNumber - 1 ].Y ) -- If the player dies spawn him where he last killed a target - Info(loc("Aiming Practice"), loc("You have been respawned, at your last checkpoint!"), -amRope ) - else - SetGearPosition( Player, 420, 1750 ) -- If the player dies and didn't kill a target just spawn him at the default spawn - Info(loc("Aiming Practice"), loc("You have been respawned, be more carefull next time!"), -amRope ) - end -end - function onGearDelete( Gear ) if GetGearType( Gear ) == gtTarget then AutoSpawn() -- When a target is deleted / destroyed, spawn a new one!