# HG changeset patch # User alfadur # Date 1558469090 -10800 # Node ID af2f6f4074deca62ffd02bcfaff7f5f21f99366c # Parent 9a8c678df7d99afc8cc54ed61fe85655f4eb72c9 add rope layers diff -r 9a8c678df7d9 -r af2f6f4074de hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Tue May 21 16:45:16 2019 +0200 +++ b/hedgewars/uConsts.pas Tue May 21 23:04:50 2019 +0300 @@ -155,6 +155,7 @@ MAXNAMELEN = 192; MAXROPEPOINTS = 3840; + MAXROPELAYERS = 16; {$IFNDEF PAS2C} // some opengl headers do not have these macros diff -r 9a8c678df7d9 -r af2f6f4074de hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Tue May 21 16:45:16 2019 +0200 +++ b/hedgewars/uGearsRender.pas Tue May 21 23:04:50 2019 +0300 @@ -95,7 +95,7 @@ end; -function DrawRopeLine(X1, Y1, X2, Y2, roplen: LongInt): LongInt; +function DrawRopeLine(X1, Y1, X2, Y2, roplen: LongInt; LayerIndex: Longword): LongInt; var eX, eY, dX, dY: LongInt; i, sX, sY, x, y, d: LongInt; b: boolean; @@ -162,42 +162,46 @@ if b then begin inc(roplen); - if (roplen mod cRopeNodeStep) = 0 then + if (roplen mod (cRopeNodeStep * cRopeLayers)) = (cRopeNodeStep * LayerIndex) then DrawSpriteRotatedF(sprRopeNode, x, y, roplen div cRopeNodeStep, 1, angle); end end; DrawRopeLine:= roplen; end; +procedure DrawRopeLayer(Gear: PGear; LayerIndex: LongWord); +var roplen, i: LongInt; +begin + roplen:= 0; + if RopePoints.Count > 0 then + begin + i:= 0; + while i < Pred(RopePoints.Count) do + begin + roplen:= DrawRopeLine(hwRound(RopePoints.ar[i].X) + WorldDx, hwRound(RopePoints.ar[i].Y) + WorldDy, + hwRound(RopePoints.ar[Succ(i)].X) + WorldDx, hwRound(RopePoints.ar[Succ(i)].Y) + WorldDy, roplen, LayerIndex); + inc(i) + end; + roplen:= DrawRopeLine(hwRound(RopePoints.ar[i].X) + WorldDx, hwRound(RopePoints.ar[i].Y) + WorldDy, + hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, roplen, LayerIndex); + roplen:= DrawRopeLine(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, + hwRound(Gear^.Hedgehog^.Gear^.X) + WorldDx, hwRound(Gear^.Hedgehog^.Gear^.Y) + WorldDy, roplen, LayerIndex); + end + else + if Gear^.Elasticity.QWordValue > 0 then + roplen:= DrawRopeLine(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, + hwRound(Gear^.Hedgehog^.Gear^.X) + WorldDx, hwRound(Gear^.Hedgehog^.Gear^.Y) + WorldDy, roplen, LayerIndex); +end; + procedure DrawRope(Gear: PGear); -var roplen, i: LongInt; +var i: LongInt; begin if Gear^.Hedgehog^.Gear = nil then exit; if (Gear^.Tag = 1) or ((cReducedQuality and rqSimpleRope) <> 0) then DrawRopeLinesRQ(Gear) else - begin - roplen:= 0; - if RopePoints.Count > 0 then - begin - i:= 0; - while i < Pred(RopePoints.Count) do - begin - roplen:= DrawRopeLine(hwRound(RopePoints.ar[i].X) + WorldDx, hwRound(RopePoints.ar[i].Y) + WorldDy, - hwRound(RopePoints.ar[Succ(i)].X) + WorldDx, hwRound(RopePoints.ar[Succ(i)].Y) + WorldDy, roplen); - inc(i) - end; - roplen:= DrawRopeLine(hwRound(RopePoints.ar[i].X) + WorldDx, hwRound(RopePoints.ar[i].Y) + WorldDy, - hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, roplen); - roplen:= DrawRopeLine(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, - hwRound(Gear^.Hedgehog^.Gear^.X) + WorldDx, hwRound(Gear^.Hedgehog^.Gear^.Y) + WorldDy, roplen); - end - else - if Gear^.Elasticity.QWordValue > 0 then - roplen:= DrawRopeLine(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, - hwRound(Gear^.Hedgehog^.Gear^.X) + WorldDx, hwRound(Gear^.Hedgehog^.Gear^.Y) + WorldDy, roplen); - end; - + for i := 0 to cRopeLayers - 1 do + DrawRopeLayer(Gear, i); if RopePoints.Count > 0 then DrawSpriteRotated(sprRopeHook, hwRound(RopePoints.ar[0].X) + WorldDx, hwRound(RopePoints.ar[0].Y) + WorldDy, 1, RopePoints.HookAngle) diff -r 9a8c678df7d9 -r af2f6f4074de hedgewars/uLandObjects.pas --- a/hedgewars/uLandObjects.pas Tue May 21 16:45:16 2019 +0200 +++ b/hedgewars/uLandObjects.pas Tue May 21 23:04:50 2019 +0300 @@ -1062,6 +1062,8 @@ cSnow:= true else if key = 'rope-step' then cRopeNodeStep:= StrToInt(s) + else if key = 'rope-layers' then + cRopeLayers:= max(1, min(MAXROPELAYERS, StrToInt(s))) else if key = 'sd-water-top' then begin i:= Pos(',', s); diff -r 9a8c678df7d9 -r af2f6f4074de hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Tue May 21 16:45:16 2019 +0200 +++ b/hedgewars/uVariables.pas Tue May 21 23:04:50 2019 +0300 @@ -117,6 +117,7 @@ cMapGen : TMapGen; cRopePercent : LongWord; cRopeNodeStep : LongWord; + cRopeLayers : LongInt; cGetAwayTime : LongWord; cAdvancedMapGenMode: boolean; @@ -2883,6 +2884,7 @@ cDamagePercent := 100; cRopePercent := 100; cRopeNodeStep := 4; + cRopeLayers := 1; cGetAwayTime := 100; cMineDudPercent := 0; cTemplateFilter := 0;