# HG changeset patch # User mikade # Date 1320082839 -7200 # Node ID d73317579ae4859ab3556f6a78c38b5d529521bf # Parent 8d598aa498b049ac9136b6a0d4e7c16182406262 Add "Surfer" achievement to Space Invasion. Balance "Shield Miser" in Space Invasion. Fix disappearing ghost bug in Racer Extend waypoint limit to 8 in Racer Lengthen ghost tracking interval to improve performance in Racer. Allow users to view score between turns now that HideMission() is fixed. diff -r 8d598aa498b0 -r d73317579ae4 share/hedgewars/Data/Scripts/Multiplayer/Racer.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Mon Oct 31 16:56:48 2011 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Mon Oct 31 19:40:39 2011 +0200 @@ -1,6 +1,6 @@ ------------------------------------------ --- RACER 0.4 +-- RACER 0.5 -- map-independant racing script -- by mikade ----------------------------------------- @@ -52,6 +52,15 @@ -- update user feedback -- add more sounds +------- +-- 0.5 +------- + +-- fix ghost disappearing if hog falls in water or somehow dies +-- lengthen ghost tracking interval to improve performance on slower machines +-- increase waypoint limit to 8 +-- allow for persistent showmission information + ----------------------------- -- SCRIPT BEGINS ----------------------------- @@ -116,7 +125,11 @@ local wpActive = {} local wpRad = 450 --75 local wpCount = 0 -local wpLimit = 5 +local wpLimit = 8 + +local roundN +local lastRound +local RoundHasChanged ------------------- -- general methods @@ -317,31 +330,50 @@ end +function onNewRound() + + roundNumber = roundNumber + 1 + + totalComment = "" + for i = 0, (TeamsCount-1) do + if teamNameArr[i] ~= " " then -- teamScore[teamClan[i]] + teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|") + totalComment = totalComment .. teamComment[i] + elseif teamNameArr[i] == " " then + teamComment[i] = "|" + end + end + + ShowMission( loc("RACER"), + loc("STATUS UPDATE"), + loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" .. + loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000) + + -- end game if its at round limit + if roundNumber == roundLimit then + for i = 0, (numhhs-1) do + if GetHogClan(hhs[i]) ~= bestClan then + SetEffect(hhs[i], heResurrectable, false) + SetHealth(hhs[i],0) + end + end + gameOver = true + TurnTimeLeft = 1 + end + +end + function CheckForNewRound() - if GetHogClan(CurrentHedgehog) == firstClan then - - roundNumber = roundNumber + 1 + ------------- + ------ new + ------------- - totalComment = "" - for i = 0, (TeamsCount-1) do - if teamNameArr[i] ~= " " then -- teamScore[teamClan[i]] - teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|") - totalComment = totalComment .. teamComment[i] - elseif teamNameArr[i] == " " then - teamComment[i] = "|" - end - end - - ShowMission( loc("RACER"), - loc("STATUS UPDATE"), - loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" .. - loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000) - - -- end game if its at round limit - if roundNumber == roundLimit then + --[[turnN = turnN + 1 + if gameBegun == false then + if turnN == 2 then for i = 0, (numhhs-1) do - if GetHogClan(hhs[i]) ~= bestClan then + if hhs[i] ~= nil then SetEffect(hhs[i], heResurrectable, false) SetHealth(hhs[i],0) end @@ -349,7 +381,39 @@ gameOver = true TurnTimeLeft = 1 end + else + + end]] + + --[[if roundBegun == true then + + if RoundHasChanged == true then + roundN = roundN + 1 + RoundHasChanged = false + onNewRound() + end + + if lastRound ~= TotalRounds then -- new round, but not really + + if RoundHasChanged == false then + RoundHasChanged = true + end + + end + + AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds) + + lastRound = TotalRounds + + end]] + + ------------ + ----- old + ------------ + + if GetHogClan(CurrentHedgehog) == firstClan then + onNewRound() end end @@ -402,6 +466,11 @@ function onGameStart() + + roundN = 0 + lastRound = TotalRounds + RoundHasChanged = false -- true + RebuildTeamInfo() ShowMission ( @@ -413,8 +482,6 @@ "", 4, 4000 ) - - end function PlaceWayPoint(x,y) @@ -490,7 +557,7 @@ -- airstrike detected, convert this into a potential waypoint spot if cGear ~= nil then x,y = GetGearTarget(cGear) - + DeleteGear(cGear) if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then @@ -525,7 +592,8 @@ SetGearPosition(CurrentHedgehog, wpX[0], wpY[0]) AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1) FollowGear(CurrentHedgehog) - ShowMission("...", "...", "...", 2, 1) + + HideMission() else -- still in placement mode @@ -546,7 +614,7 @@ --ghost gTimer = gTimer + 1 - if gTimer == 15 then + if gTimer == 40 then gTimer = 0 HandleGhost() end @@ -584,6 +652,10 @@ AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false) + if gear == CurrentHedgehog then + DisableTumbler() + end + -- if the player stops and "dies" or flies into water, stop him racing --[[if gear == CurrentHedgehog then DisableTumbler() diff -r 8d598aa498b0 -r d73317579ae4 share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua Mon Oct 31 16:56:48 2011 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua Mon Oct 31 19:40:39 2011 +0200 @@ -5,7 +5,7 @@ --------------------------------------------------- --------------------------------------------------- --------------------------------------------------- ---- Space Invasion Code Follows (0.9) +--- Space Invasion Code Follows (1.0) --------------------------------------------------- --------------------------------------------------- -- VERSION HISTORY @@ -86,7 +86,7 @@ -- Boss Slayer (Destroy 2 blue circles for +25 points) -- Shield Master (disolve 5 shells for +10 points) --- Shield Miser (don't use your shield at all (2.5*roundkills)+2 points) +-- Shield Miser (don't use your shield at all (3.5*roundkills)+2 points) -- Depleted Kamikaze! (kamikaze into a blue/red circ when you are out of ammo) 5pts -- Timed Kamikaze! (kamikaze into a blue/red circ when you only have 5s left) 10pts @@ -122,6 +122,16 @@ -- experimental radar (it's INTERACTIVE and math-heavy :D) (visual gears are safe... right? D:) -- bugfix and balance for multishot +------------------------ +-- version 1.0 +------------------------ + +-- if only version numbers actually worked like this, wouldn't that be awful :D + +-- added surfer achievement +-- increased value of shield miser by 1 point per kill (OP?) + + -------------------------- --notes for later -------------------------- @@ -152,6 +162,7 @@ AddCaption(LOC_NOT("BOOM! +50 points!"),0xffba00ff,capgrpVolume) AddCaption(LOC_NOT("BOOM! BOOM! BOOM! +100 points!"),0xffba00ff,capgrpVolume) AddCaption(LOC_NOT("Accuracy Bonus! +15 points!"),0xffba00ff,capgrpVolume) +AddCaption(loc("Surfer! +15 points!"),0xffba00ff,capgrpVolume) ----------------- capgrpMessage @@ -207,6 +218,10 @@ local sdName = {} local sdKills = {} +local roundN = 0 +local lastRound +local RoundHasChanged = true + -------------------------- -- hog and team tracking variales -------------------------- @@ -223,6 +238,7 @@ local teamComment = {} local teamScore = {} local teamCircsKilled = {} +local teamSurfer = {} -- stats variables --local teamRed = {} @@ -240,6 +256,7 @@ local chainLength = 0 local shotsFired = 0 local shotsHit = 0 +local SurfTime = 0 --------------------- -- tumbler goods @@ -382,6 +399,7 @@ teamIndex[i] = 0 teamScore[i] = 0 teamCircsKilled[i] = 0 + teamSurfer[i] = false end numTeams = 0 @@ -445,7 +463,7 @@ function AwardKills(t) roundKills = roundKills + 1 - + for i = 0,(TeamsCount-1) do if teamClan[i] == GetHogClan(CurrentHedgehog) then teamCircsKilled[i] = teamCircsKilled[i] + 1 @@ -533,36 +551,66 @@ end +function onNewRound() + roundNumber = roundNumber + 1 + + CommentOnScore() + + -- end game if its at round limit + if roundNumber == roundLimit then + + for i = 0, (TeamsCount-1) do + if teamScore[i] > bestScore then + bestScore = teamScore[i] + bestClan = teamClan[i] + end + end + + for i = 0, (numhhs-1) do + if GetHogClan(hhs[i]) ~= bestClan then + SetEffect(hhs[i], heResurrectable, false) + SetHealth(hhs[i],0) + end + end + gameOver = true + TurnTimeLeft = 0 --1 + TimeLeft = 0 + end +end + -- gaudy racer function CheckForNewRound() + ---------- + -- new + ---------- + + --[[if gameBegun == true then + + if RoundHasChanged == true then + roundN = roundN + 1 + RoundHasChanged = false + onNewRound() + end + + if lastRound ~= TotalRounds then -- new round, but not really + + if RoundHasChanged == false then + RoundHasChanged = true + end + + end + + --AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds) + lastRound = TotalRounds + + end]] + + ---------- + -- old + ---------- if GetHogClan(CurrentHedgehog) == firstClan then - - roundNumber = roundNumber + 1 - - CommentOnScore() - - -- end game if its at round limit - if roundNumber == roundLimit then - - for i = 0, (TeamsCount-1) do - if teamScore[i] > bestScore then - bestScore = teamScore[i] - bestClan = teamClan[i] - end - end - - for i = 0, (numhhs-1) do - if GetHogClan(hhs[i]) ~= bestClan then - SetEffect(hhs[i], heResurrectable, false) - SetHealth(hhs[i],0) - end - end - gameOver = true - TurnTimeLeft = 0 --1 - TimeLeft = 0 - end - + onNewRound() end end @@ -730,7 +778,7 @@ function onHJump() - if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and + if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and (rAlpha == 255) and (radShotsLeft > 0) then rPingTimer = 0 rAlpha = 0 @@ -833,6 +881,7 @@ CreateMeSomeCircles() RebuildTeamInfo() -- control + lastRound = TotalRounds end @@ -867,6 +916,7 @@ shotsHit = 0 chainLength = 0 chainCounter = 0 + SurfTime = 12 ------------------------- -- gaudy racer @@ -1024,12 +1074,8 @@ --nw WriteLnToConsole("Player is out of luck") if shieldMiser == true then - - p = (roundKills*2.5) - ((roundKills*2.5)%1) + 2 - --p = (roundKills*2.5) + 2 - --if (p%2 ~= 0) then - -- p = p -0.5 - --end + + p = (roundKills*3.5) - ((roundKills*3.5)%1) + 2 AddCaption(loc("Shield Miser!") .." +" .. p .." ".. loc("points") .. "!",0xffba00ff,capgrpAmmoinfo) AwardPoints(p) @@ -1073,6 +1119,30 @@ -------------- -------------- + ------------------------ + -- surfer achievement + ------------------------ + + if (WaterLine - GetY(CurrentHedgehog)) < 15 then + SurfTime = SurfTime -1 + end + + if SurfTime ~= 12 then + + SurfTime = SurfTime - 1 + if SurfTime <= 0 then + for i = 0,(TeamsCount-1) do + if teamClan[i] == GetHogClan(CurrentHedgehog) and (teamSurfer[i] == false) then + teamSurfer[i] = true + SurfTime = 12 + AddCaption(loc("Surfer! +15 points!"),0xffba00ff,capgrpVolume) + AwardPoints(15) + end + end + end + end + + dx, dy = GetGearVelocity(CurrentHedgehog) --WriteLnToConsole("I just got the velocity of currenthedgehog. It is dx: " .. dx .. "; dy: " .. dy) @@ -1123,7 +1193,7 @@ end --WriteLnToConsole("End of GameTick") - + end function onGearResurrect(gear) @@ -1211,31 +1281,31 @@ function DoHorribleThings(cUID) - -- maybe + -- maybe -- add a check to draw it inside the circ and not past it if -- it is closer than 150 or w/e - -- work out the distance to the target + -- work out the distance to the target g1X, g1Y = GetGearPosition(CurrentHedgehog) g2X, g2Y = vCircX[cUID], vCircY[cUID] - q = g1X - g2X - w = g1Y - g2Y + q = g1X - g2X + w = g1Y - g2Y r = math.sqrt( (q*q) + (w*w) ) --alternate - - - opp = w + + + opp = w if opp < 0 then opp = opp*-1 end -- work out the angle (theta) to the target t = math.deg ( math.asin(opp / r) ) - - -- based on the radius of the radar, calculate what x/y displacement should be + + -- based on the radius of the radar, calculate what x/y displacement should be NR = 150 -- radius at which to draw circs NX = math.cos( math.rad(t) ) * NR - NY = math.sin( math.rad(t) ) * NR - + NY = math.sin( math.rad(t) ) * NR + -- displace xy based on where this thing actually is if q > 0 then rCircX[cUID] = g1X - NX @@ -1248,7 +1318,7 @@ else rCircY[cUID] = g1Y + NY end - + end function PlayerIsFine() @@ -1573,7 +1643,7 @@ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(rCirc[i]) SetVisualGearValues(rCirc[i], 0, 0, g3, g4, g5, g6, g7, g8, g9, vCircCol[i]-0x000000ff) - + vCircActive[i] = true -- new @@ -1816,25 +1886,25 @@ end]] - + if rAlpha ~= 255 then - + rPingTimer = rPingTimer + 1 if rPingTimer == 100 then - rPingTimer = 0 - + rPingTimer = 0 + rAlpha = rAlpha + 5 if rAlpha >= 255 then rAlpha = 255 - end + end end - + end for i = 0,(vCCount-1) do --if (vCircActive[i] == true) then - SetVisualGearValues(rCirc[i], rCircX[i], rCircY[i], 100, 255, 1, 10, 0, 40, 3, vCircCol[i]-rAlpha) + SetVisualGearValues(rCirc[i], rCircX[i], rCircY[i], 100, 255, 1, 10, 0, 40, 3, vCircCol[i]-rAlpha) --end vCounter[i] = vCounter[i] + 1 @@ -1987,8 +2057,8 @@ vCircX[i] = vCircX[i] + vCircDX[i] vCircY[i] = vCircY[i] + vCircDY[i] - if (CurrentHedgehog ~= nil) and (rAlpha ~= 255) then - DoHorribleThings(i)--(i, g1X, g1Y, g2X, g2Y, dist) + if (CurrentHedgehog ~= nil) and (rAlpha ~= 255) then + DoHorribleThings(i)--(i, g1X, g1Y, g2X, g2Y, dist) end end