# HG changeset patch # User unc0rr # Date 1169571545 0 # Node ID 236bbd12d4d9a82cdf341cbaa6d8137a01c0f301 # Parent 165a040e4cfaaec63f4dec14d8b24b9c532ed3b8 - New Land Generator - Some perfomance tricks - Some typo fixes diff -r 165a040e4cfa -r 236bbd12d4d9 hedgewars/CCHandlers.inc --- a/hedgewars/CCHandlers.inc Mon Jan 22 18:32:00 2007 +0000 +++ b/hedgewars/CCHandlers.inc Tue Jan 23 16:59:05 2007 +0000 @@ -414,7 +414,7 @@ if Length(s) = 0 then cFullScreen:= not cFullScreen else cFullScreen:= s = '1'; -flags:= SDL_HWSURFACE or SDL_hwFloatBUF or SDL_HWACCEL; +flags:= SDL_HWSURFACE or SDL_DOUBLEBUF or SDL_HWACCEL; if cFullScreen then flags:= flags or SDL_FULLSCREEN else SDL_WM_SetCaption('Hedgewars', nil); SDL_FreeSurface(SDLPrimSurface); diff -r 165a040e4cfa -r 236bbd12d4d9 hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Mon Jan 22 18:32:00 2007 +0000 +++ b/hedgewars/CMakeLists.txt Tue Jan 23 16:59:05 2007 +0000 @@ -56,7 +56,7 @@ string(REGEX MATCH "[0-9]+\\.[0-9]+" dcc32version "${dcc32_output}") if (dcc32version) set(pascal_compiler ${dcc32_executable}) - set(pascal_compiler_flags "-B" "-W" "-E${EXECUTABLE_OUTPUT_PATH}" ${hwengine_project}) + set(pascal_compiler_flags "-B" "-va" "-W" "-E${EXECUTABLE_OUTPUT_PATH}" ${hwengine_project}) else (dcc32version) string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" fpc_version "${fpc_output}") if (fpc_version) @@ -68,7 +68,7 @@ message("Minimum required version of FreePascal is 1.9.4") else (fpc_ver LESS "010904") set(pascal_compiler ${fpc_executable}) - set(pascal_compiler_flags "-FE../bin" "-Cs2000000" "-O2" ${hwengine_project}) + set(pascal_compiler_flags "-B" "-FE../bin" "-Cs2000000" "-O2" ${hwengine_project}) endif (fpc_ver LESS "010904") endif (fpc_version) endif (dcc32version) diff -r 165a040e4cfa -r 236bbd12d4d9 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Mon Jan 22 18:32:00 2007 +0000 +++ b/hedgewars/GSHandlers.inc Tue Jan 23 16:59:05 2007 +0000 @@ -426,7 +426,7 @@ end; //////////////////////////////////////////////////////////////////////////////// -var BTPrevAngle, BTSteps: Longword; +var BTPrevAngle, BTSteps: integer; procedure doStepBlowTorchWork(Gear: PGear); var HHGear: PGear; @@ -440,12 +440,12 @@ b:= false; -if (HHGear^.Angle <> BTPrevAngle) then +if abs(integer(HHGear^.Angle) - BTPrevAngle) > 7 then begin Gear^.dX:= hwSign(HHGear^.dX) * AngleSin(HHGear^.Angle) * _0_5; Gear^.dY:= AngleCos(HHGear^.Angle) * ( - _0_5); BTPrevAngle:= HHGear^.Angle; -// b:= true + b:= true end; if Gear^.Timer mod cHHStepTicks = 0 then @@ -488,7 +488,7 @@ procedure doStepBlowTorch(Gear: PGear); var HHGear: PGear; begin -BTPrevAngle:= High(Longword); +BTPrevAngle:= High(integer); BTSteps:= 0; HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; HHGear^.Message:= 0; diff -r 165a040e4cfa -r 236bbd12d4d9 hedgewars/SDLh.pas --- a/hedgewars/SDLh.pas Mon Jan 22 18:32:00 2007 +0000 +++ b/hedgewars/SDLh.pas Tue Jan 23 16:59:05 2007 +0000 @@ -47,7 +47,7 @@ SDL_ASYNCBLIT = $00000004; SDL_ANYFORMAT = $10000000; SDL_HWPALETTE = $20000000; - SDL_hwFloatBUF = $40000000; + SDL_DOUBLEBUF = $40000000; SDL_FULLSCREEN = $80000000; SDL_NOFRAME = $00000020; SDL_HWACCEL = $00000100; diff -r 165a040e4cfa -r 236bbd12d4d9 hedgewars/tunsetborder.inc --- a/hedgewars/tunsetborder.inc Mon Jan 22 18:32:00 2007 +0000 +++ b/hedgewars/tunsetborder.inc Tue Jan 23 16:59:05 2007 +0000 @@ -3,6 +3,7 @@ Y:= Y + dY; tx:= hwRound(X); ty:= hwRound(Y); - if ((ty and $FFFFFC00) = 0) and ((tx and $FFFFF800) = 0)and (Land[ty, tx] = $FFFFFF) then - SetLandPixel(ty, tx) + if ((ty and $FFFFFC00) = 0) and + ((tx and $FFFFF800) = 0) and + (Land[ty, tx] = $FFFFFF) then SetLandPixel(ty, tx) end; diff -r 165a040e4cfa -r 236bbd12d4d9 hedgewars/uFloat.pas --- a/hedgewars/uFloat.pas Mon Jan 22 18:32:00 2007 +0000 +++ b/hedgewars/uFloat.pas Tue Jan 23 16:59:05 2007 +0000 @@ -85,6 +85,7 @@ _0_5: hwFloat = (isNegative: false; QWordValue: 2147483648); _0_55: hwFloat = (isNegative: false; QWordValue: 2362232012); _0_6: hwFloat = (isNegative: false; QWordValue: 2576980377); + _0_7: hwFloat = (isNegative: false; QWordValue: 3006477107); _0_8: hwFloat = (isNegative: false; QWordValue: 3435973837); _0_84: hwFloat = (isNegative: false; QWordValue: 3607772528); _0_87: hwFloat = (isNegative: false; QWordValue: 3736621547); diff -r 165a040e4cfa -r 236bbd12d4d9 hedgewars/uGame.pas --- a/hedgewars/uGame.pas Mon Jan 22 18:32:00 2007 +0000 +++ b/hedgewars/uGame.pas Tue Jan 23 16:59:05 2007 +0000 @@ -35,7 +35,7 @@ if isPaused then exit; if not CurrentTeam^.ExtDriven then begin - NetGetNextCmd; // its for the case when receiving "/say" message + NetGetNextCmd; // its for the case of receiving "/say" message isInLag:= false; inc(SendEmptyPacketTicks, Lag); if SendEmptyPacketTicks >= cSendEmptyPacketTime then diff -r 165a040e4cfa -r 236bbd12d4d9 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Mon Jan 22 18:32:00 2007 +0000 +++ b/hedgewars/uLand.pas Tue Jan 23 16:59:05 2007 +0000 @@ -55,8 +55,61 @@ SendIPC('M' + s) end; +procedure DrawLine(X1, Y1, X2, Y2: integer; Color: Longword); +var + eX, eY, dX, dY: integer; + i, sX, sY, x, y, d: integer; +begin +eX:= 0; +eY:= 0; +dX:= X2 - X1; +dY:= Y2 - Y1; + +if (dX > 0) then sX:= 1 +else + if (dX < 0) then + begin + sX:= -1; + dX:= -dX + end else sX:= dX; + +if (dY > 0) then sY:= 1 + else + if (dY < 0) then + begin + sY:= -1; + dY:= -dY + end else sY:= dY; + +if (dX > dY) then d:= dX + else d:= dY; + +x:= X1; +y:= Y1; + +for i:= 0 to d do + begin + inc(eX, dX); + inc(eY, dY); + if (eX > d) then + begin + dec(eX, d); + inc(x, sX); + end; + if (eY > d) then + begin + dec(eY, d); + inc(y, sY); + end; + + if ((x and $FFFFF800) = 0) and ((y and $FFFFFC00) = 0) then + Land[y, x]:= Color; + end +end; + procedure DrawBezierEdge(var pa: TPixAr; Color: Longword); -var x, y, i: integer; +const dT: hwFloat = (isNegative: false; QWordValue: 85899346); +var x, y, i, px, py: integer; tx, ty, vx, vy, vlen, t: hwFloat; r1, r2, r3, r4: hwFloat; x1, y1, x2, y2, cx1, cy1, cx2, cy2, tsq, tcb: hwFloat; @@ -96,7 +149,9 @@ cy2:= ar[i+1].y + hwRound(ty); vx:= -tx; vy:= -ty; - t:= 0; + px:= hwRound(x1); + py:= hwRound(y1); + t:= dT; while t.Round = 0 do begin tsq:= t * t; @@ -111,79 +166,10 @@ r3:= ( 3*tsq - 3*tcb) * cy2; r4:= ( tcb) * y2; Y:= hwRound(r1 + r2 + r3 + r4); - t:= t + _1div1024; - if ((x and $FFFFF800) = 0) and ((y and $FFFFFC00) = 0) then - Land[y, x]:= Color; - end; - end; -end; - -procedure BezierizeEdge(var pa: TPixAr; Delta: hwFloat); -var x, y, i: integer; - tx, ty, vx, vy, vlen, t: hwFloat; - r1, r2, r3, r4: hwFloat; - x1, y1, x2, y2, cx1, cy1, cx2, cy2, tsq, tcb: hwFloat; - opa: TPixAr; -begin -opa:= pa; -pa.Count:= 0; -vx:= 0; -vy:= 0; -with opa do -for i:= 0 to Count-2 do - begin -addfilelog('50'); - vlen:= Distance(ar[i + 1].x - ar[i].X, ar[i + 1].y - ar[i].y); - t:= Distance(ar[i + 1].x - ar[i + 2].X,ar[i + 1].y - ar[i + 2].y); -addfilelog('51'); - if t