# HG changeset patch # User nemo # Date 1362748050 18000 # Node ID a59b35e3ad8f150edabefcdc446aaf79454d855f # Parent 158d7b36b18e0b0a296777e546ec3c8608ad89ce# Parent 01b59bb520d51c7377f056c7f4504296be175985 *sigh* sorry. I miss the old, don't-push-if-unsynced-remote-w/o-force. Keep forgetting to pull. diff -r 158d7b36b18e -r a59b35e3ad8f CMakeLists.txt --- a/CMakeLists.txt Fri Mar 08 08:06:13 2013 -0500 +++ b/CMakeLists.txt Fri Mar 08 08:07:30 2013 -0500 @@ -19,17 +19,19 @@ #possible cmake configuration -option(NOSERVER "Disable gameServer build [default: auto]" OFF) -option(NOPNG "Disable screenshoot compression [default: auto]" OFF) -option(NOVIDEOREC "Disable video recording [default: off]" OFF) +option(NOSERVER "Disable gameServer build (off)]" OFF) +option(NOPNG "Disable screenshoot compression (off)" OFF) +option(NOVIDEOREC "Disable video recording (off)" OFF) #set this to ON when 2.1.0 becomes more widespread (and only for linux) -option(SYSTEM_PHYSFS "Use system physfs [default:off]" OFF) +option(SYSTEM_PHYSFS "Use system physfs (off)" OFF) -option(BUILD_ENGINE_LIBRARY "Enable hwengine library [default: off]" OFF) -option(ANDROID "Enable Android build [default: off]" OFF) -option(MINIMAL_FLAGS "Respect system flags as much as possible [default: off]" OFF) -if(APPLE) +option(BUILD_ENGINE_LIBRARY "Enable hwengine library (off)" OFF) +option(ANDROID "Enable Android build (off)" OFF) + +if(UNIX AND NOT APPLE) + option(MINIMAL_FLAGS "Respect system flags as much as possible (off)" OFF) +else() option(NOAUTOUPDATE "Disable OS X Sparkle update checking" OFF) endif() @@ -282,6 +284,7 @@ ) endif() +include(${CMAKE_MODULE_PATH}/utils.cmake) #lua discovery find_package(Lua) @@ -330,14 +333,7 @@ list(APPEND pascal_flags "-XLAphysfs=${physfs_output_name}" "-dPHYSFS_INTERNAL") endif() -if(NOT ${NOVIDEOREC}) - find_package(FFMPEG) - if(NOT ${FFMPEG_FOUND}) - message(FATAL_ERROR "Missing FFMPEG/Libav! Rerun cmake with -DNOVIDEOREC=on to disable video recording") - endif() -else() - set(FFMPEG_FOUND false) -endif() +find_package_or_disable_msg(FFMPEG NOVIDEOREC "Video recording will not be built") #physfs helper library add_subdirectory(misc/libphyslayer) diff -r 158d7b36b18e -r a59b35e3ad8f QTfrontend/CMakeLists.txt --- a/QTfrontend/CMakeLists.txt Fri Mar 08 08:06:13 2013 -0500 +++ b/QTfrontend/CMakeLists.txt Fri Mar 08 08:07:30 2013 -0500 @@ -166,16 +166,13 @@ util/platform/M3InstallController.m util/platform/NSWorkspace_RBAdditions.m ) - if(NOT NOAUTOUPDATE) - find_package(Sparkle) - if(SPARKLE_FOUND) - add_definitions(-DSPARKLE_ENABLED) - list(APPEND hwfr_src util/platform/AutoUpdater.cpp - util/platform/SparkleAutoUpdater.mm) - list(APPEND HW_LINK_LIBS ${SPARKLE_LIBRARY}) - else() - message(FATAL_ERROR "Missing Sparkle! Rerun cmake with -DNOAUTOUPDATE=on to disable autoupdating") - endif() + include(${CMAKE_MODULE_PATH}/utils.cmake) + find_package_or_disable_msg(Sparkle NOAUTOUPDATE "Autoupdater will not be built.") + if(SPARKLE_FOUND) + add_definitions(-DSPARKLE_ENABLED) + list(APPEND hwfr_src util/platform/AutoUpdater.cpp + util/platform/SparkleAutoUpdater.mm) + list(APPEND HW_LINK_LIBS ${SPARKLE_LIBRARY}) endif() endif() diff -r 158d7b36b18e -r a59b35e3ad8f QTfrontend/ui/widget/feedbackdialog.cpp --- a/QTfrontend/ui/widget/feedbackdialog.cpp Fri Mar 08 08:06:13 2013 -0500 +++ b/QTfrontend/ui/widget/feedbackdialog.cpp Fri Mar 08 08:07:30 2013 -0500 @@ -324,7 +324,9 @@ + total_ram + screen_size + number_of_screens +#ifndef QT_NO_STL + QString::fromStdString(processor_name + "\n") +#endif + number_of_cores + compiler_version + compiler_bits diff -r 158d7b36b18e -r a59b35e3ad8f cmake_modules/utils.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake_modules/utils.cmake Fri Mar 08 08:07:30 2013 -0500 @@ -0,0 +1,30 @@ + +macro(find_package_or_fail _PKG_NAME) + find_package(${_PKG_NAME}) + string(TOUPPER ${_PKG_NAME} _PKG_NAME_UP) + if(NOT ${_PKG_NAME_UP}_FOUND) + message(SEND_ERROR "Missing ${_PKG_NAME}! Please install it and rerun cmake.") + endif(NOT ${_PKG_NAME_UP}_FOUND) +endmacro(find_package_or_fail _PKG_NAME) + +macro(find_package_or_disable _PKG_NAME _VAR_NAME) + find_package(${_PKG_NAME}) + string(TOUPPER ${_PKG_NAME} _PKG_NAME_UP) + if(NOT ${_PKG_NAME_UP}_FOUND) + message(SEND_ERROR "Missing ${_PKG_NAME}! Rerun cmake with -D${_VAR_NAME}=1 to build without it.") + endif(NOT ${_PKG_NAME_UP}_FOUND) +endmacro(find_package_or_disable _PKG_NAME _VAR_NAME) + +macro(find_package_or_disable_msg _PKG_NAME _VAR_NAME _MSG) + if(NOT ${_VAR_NAME}) + find_package_or_disable(${_PKG_NAME} ${_VAR_NAME}) + else(NOT ${_VAR_NAME}) + message(STATUS "${_PKG_NAME} disabled. ${_MSG}") + string(TOUPPER ${_PKG_NAME} _PKG_NAME_UP) + set(${_PKG_NAME_UP}_FOUND false) + endif(NOT ${_VAR_NAME}) +endmacro(find_package_or_disable_msg _PKG_NAME _VAR_NAME _MSG) + + +#TODO: find_package_or_bundle + diff -r 158d7b36b18e -r a59b35e3ad8f gameServer/CMakeLists.txt --- a/gameServer/CMakeLists.txt Fri Mar 08 08:06:13 2013 -0500 +++ b/gameServer/CMakeLists.txt Fri Mar 08 08:07:30 2013 -0500 @@ -1,8 +1,7 @@ -find_package(GHC REQUIRED) -if(NOT ${GHC_FOUND}) - message(FATAL_ERROR "Missing Glasgow Haskell Compiler! Rerun cmake with -DNOSERVER=on to disable hosting LAN games") -endif() +include(${CMAKE_MODULE_PATH}/utils.cmake) + +find_package_or_disable(GHC NOSERVER) set(hwserver_sources OfficialServer/DBInteraction.hs diff -r 158d7b36b18e -r a59b35e3ad8f hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Fri Mar 08 08:06:13 2013 -0500 +++ b/hedgewars/CMakeLists.txt Fri Mar 08 08:07:30 2013 -0500 @@ -120,7 +120,10 @@ endif(${BUILD_ENGINE_LIBRARY}) -find_package(FreePascal REQUIRED) +include(${CMAKE_MODULE_PATH}/utils.cmake) + +find_package_or_fail(FreePascal) + #when cmake-2.6 support is dropped, this ought to be inside FindFreePascal.cmake if (FREEPASCAL_VERSION VERSION_LESS required_fpc_version) message(FATAL_ERROR "Freepascal ${FREEPASCAL_VERSION} is too old, minimum version required is ${required_fpc_version}") @@ -162,18 +165,9 @@ list(APPEND pascal_flags "-FD${compiler_dir}") endif(APPLE) -if(NOT NOPNG) - find_package(PNG) - if(${PNG_FOUND}) - list(APPEND pascal_flags "-dPNG_SCREENSHOTS") - if(APPLE) # fpc png unit doesn't pull the library (see bug 21833) - list(APPEND pascal_flags "-k${PNG_LIBRARY}") - endif() - else() - message(${WARNING} "Screenshots will be in BMP format because libpng was not found") - endif() -else() - message(STATUS "Screenshots will be in BMP format per user request") +find_package_or_disable_msg(PNG NOPNG "Screenshots will be saved in BMP") +if(PNG_FOUND) + list(APPEND pascal_flags "-dPNG_SCREENSHOTS") endif() diff -r 158d7b36b18e -r a59b35e3ad8f hedgewars/PNGh.pas --- a/hedgewars/PNGh.pas Fri Mar 08 08:06:13 2013 -0500 +++ b/hedgewars/PNGh.pas Fri Mar 08 08:07:30 2013 -0500 @@ -29,9 +29,13 @@ {$DEFINE cdecl attribute(cdecl)} {$ENDIF} +{$IFDEF DARWIN} + {$linklib png} +{$ENDIF} + const // Constants for libpng, they are not defined in png unit. - // We actually don't need all of them. + // We actually do not need all of them. // These describe the color_type field in png_info. // color type masks diff -r 158d7b36b18e -r a59b35e3ad8f hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Fri Mar 08 08:06:13 2013 -0500 +++ b/hedgewars/uGearsRender.pas Fri Mar 08 08:07:30 2013 -0500 @@ -107,7 +107,7 @@ end else sX:= dX; - if (dY > 0) then + if (dY > 0) then sY:= 1 else if (dY < 0) then @@ -115,7 +115,7 @@ sY:= -1; dY:= -dY end - else + else sY:= dY; if (dX > dY) then @@ -254,7 +254,7 @@ HatVisible:= true else HatVisible:= false end - else + else begin DrawHedgehog(sx, sy, sign, @@ -375,8 +375,8 @@ // draw crosshair CrosshairX := Round(hwRound(Gear^.X) + dx * 80 + GetLaunchX(HH^.CurAmmoType, sign * m, Gear^.Angle)); CrosshairY := Round(hwRound(Gear^.Y) + dy * 80 + GetLaunchY(HH^.CurAmmoType, Gear^.Angle)); - - + + DrawTextureRotated(HH^.Team^.CrosshairTex, 12, 12, CrosshairX + WorldDx, CrosshairY + WorldDy, 0, sign * (Gear^.Angle * 180.0) / cMaxAngle); @@ -651,13 +651,13 @@ amShotgun: DrawSpriteRotated(sprHandShotgun, hx, hy, sign, aangle); amDEagle: DrawSpriteRotated(sprHandDEagle, hx, hy, sign, aangle); amSineGun: DrawSpriteRotatedF(sprHandSinegun, hx, hy, 73 + (sign * LongInt(RealTicks div 73)) mod 8, sign, aangle); - + amPortalGun: if (CurWeapon^.Timer and 2) <> 0 then // Add a new Hedgehog value instead of abusing timer? DrawSpriteRotatedF(sprPortalGun, hx, hy, 0, sign, aangle) else DrawSpriteRotatedF(sprPortalGun, hx, hy, 1+CurWeapon^.Pos, sign, aangle); - + amSniperRifle: DrawSpriteRotatedF(sprSniperRifle, hx, hy, 0, sign, aangle); amBlowTorch: DrawSpriteRotated(sprHandBlowTorch, hx, hy, sign, aangle); amCake: DrawSpriteRotated(sprHandCake, hx, hy, sign, aangle); @@ -673,7 +673,7 @@ amKnife: DrawSpriteRotatedF(sprHandKnife, hx, hy, 0, sign, aangle); amSeduction: begin DrawSpriteRotated(sprHandSeduction, hx, hy, sign, aangle); - DrawCircle(ox, oy, 248, 4, $FF, $00, $00, $AA); + DrawCircle(ox, oy, 248, 4, $FF, $00, $00, $AA); //Tint($FF, $0, $0, $AA); //DrawTexture(ox - 240, oy - 240, SpritesData[sprVampiric].Texture, 10); //Tint($FF, $FF, $FF, $FF); @@ -950,13 +950,16 @@ if HH^.Effects[heFrozen] < 150000 then Tint($FF, $FF, $FF, min(255,127+HH^.Effects[heFrozen] div 800)); - iceOffset:= trunc(min(256,HH^.Effects[heFrozen]) / 256 * 64); + iceOffset:= min(32, HH^.Effects[heFrozen] div 8); r.x := 128; - r.y := 128 - iceOffset; - r.w := 64; + r.y := 96 - iceOffset; + r.w := 32; r.h := iceOffset; - //DrawTextureFromRect(sx-32, sy-iceoffset+32, @r, SpritesData[sprFrozenHog].texture); - DrawTextureFromRectDir(sx-16+sign*2, sy+48-iceoffset, r.w, r.h, @r, HHTexture, sign); + if sign = -1 then + DrawTextureFromRectDir(sx + sign*2, sy+16-iceoffset, r.w, r.h, @r, HHTexture, sign) + else + DrawTextureFromRectDir(sx-16 + sign*2, sy+16-iceoffset, r.w, r.h, @r, HHTexture, sign); + if HH^.Effects[heFrozen] < 150000 then Tint($FF, $FF, $FF, $FF); @@ -985,8 +988,8 @@ if Gear^.Target.X <> NoPointX then if Gear^.AmmoType = amBee then DrawSpriteRotatedF(sprTargetBee, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360) - else if Gear^.AmmoType = amIceGun then - //DrawSprite(sprSnowDust, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, (RealTicks shr 2) mod 8) + else if Gear^.AmmoType = amIceGun then + //DrawSprite(sprSnowDust, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, (RealTicks shr 2) mod 8) //DrawTextureRotatedF(SpritesData[sprSnowDust].Texture, 1, 0, 0, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, (RealTicks shr 2) mod 8, 1, 22, 22, (RealTicks shr 3) mod 360) DrawTextureRotatedF(SpritesData[sprSnowDust].Texture, 1/(1+(RealTicks shr 8) mod 5), 0, 0, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, (RealTicks shr 2) mod 8, 1, 22, 22, (RealTicks shr 3) mod 360) else @@ -996,7 +999,7 @@ gtGrenade: DrawSpriteRotated(sprBomb, x, y, 0, Gear^.DirAngle); gtSnowball: DrawSpriteRotated(sprSnowball, x, y, 0, Gear^.DirAngle); gtGasBomb: DrawSpriteRotated(sprCheese, x, y, 0, Gear^.DirAngle); - + gtMolotov: if (Gear^.State and gstDrowning) = 0 then DrawSpriteRotatedF(sprMolotov, x, y, (RealTicks div 125) mod 8, hwSign(Gear^.dX), Gear^.DirAngle * hwSign(Gear^.dX)) else DrawSprite(sprMolotov, x, y, 8); @@ -1040,20 +1043,20 @@ gtBee: DrawSpriteRotatedF(sprBee, x, y, (GameTicks shr 5) mod 2, 0, DxDy2Angle(Gear^.dY, Gear^.dX)); gtPickHammer: DrawSprite(sprPHammer, x - 16, y - 50 + LongInt(((GameTicks shr 5) and 1) * 2), 0); gtRope: DrawRope(Gear); - + gtMine: if (((Gear^.State and gstAttacking) = 0)or((Gear^.Timer and $3FF) < 420)) and (Gear^.Health <> 0) then DrawSpriteRotated(sprMineOff, x, y, 0, Gear^.DirAngle) else if Gear^.Health <> 0 then DrawSpriteRotated(sprMineOn, x, y, 0, Gear^.DirAngle) else DrawSpriteRotated(sprMineDead, x, y, 0, Gear^.DirAngle); - + gtSMine: if (((Gear^.State and gstAttacking) = 0)or((Gear^.Timer and $3FF) < 420)) and (Gear^.Health <> 0) then DrawSpriteRotated(sprSMineOff, x, y, 0, Gear^.DirAngle) else if Gear^.Health <> 0 then DrawSpriteRotated(sprSMineOn, x, y, 0, Gear^.DirAngle) else DrawSpriteRotated(sprMineDead, x, y, 0, Gear^.DirAngle); gtKnife: DrawSpriteRotatedF(sprKnife, x, y, 0, hwSign(Gear^.dX), Gear^.DirAngle); - + gtCase: begin if Gear^.Timer > 1000 then begin @@ -1137,7 +1140,7 @@ DrawSpriteRotatedF(sprCakeDown, x, y, 5 - Gear^.Pos, hwSign(Gear^.dX), Gear^.DirAngle * hwSign(Gear^.dX) + 90); gtSeduction: if Gear^.Pos >= 14 then DrawSprite(sprSeduction, x - 16, y - 16, 0); - + gtWatermelon: DrawSpriteRotatedF(sprWatermelon, x, y, 0, 0, Gear^.DirAngle); gtMelonPiece: DrawSpriteRotatedF(sprWatermelon, x, y, 1, 0, Gear^.DirAngle); gtHellishBomb: DrawSpriteRotated(sprHellishBomb, x, y, 0, Gear^.DirAngle); @@ -1205,9 +1208,9 @@ gtNapalmBomb: DrawSpriteRotated(sprNapalmBomb, x, y, 0, DxDy2Angle(Gear^.dY, Gear^.dX)); gtFlake: if Gear^.State and (gstDrowning or gstTmpFlag) <> 0 then begin - Tint((ExplosionBorderColor shr RShift) and $FF, - (ExplosionBorderColor shr GShift) and $FF, - (ExplosionBorderColor shr BShift) and $FF, + Tint((ExplosionBorderColor shr RShift) and $FF, + (ExplosionBorderColor shr GShift) and $FF, + (ExplosionBorderColor shr BShift) and $FF, $FF); // Needs a nicer white texture to tint DrawTextureRotatedF(SpritesData[sprSnowDust].Texture, 1, 0, 0, x, y, 0, 1, 8, 8, Gear^.DirAngle); @@ -1237,7 +1240,7 @@ begin if Gear^.Pos = 2 then Tint(Gear^.Hedgehog^.Team^.Clan^.Color shl 8 or $FF) - else + else Tint(Gear^.Hedgehog^.Team^.Clan^.Color shl 8 or max($00, round(Gear^.Power * (1-abs(0.5 - (GameTicks mod 2000) / 2000))))); DrawSprite(sprTardis, x-24, y-63,0); if Gear^.Pos = 2 then @@ -1279,7 +1282,7 @@ end else begin - DrawLine(hwRound(HHGear^.X), hwRound(HHGear^.Y), hwRound(Gear^.X), hwRound(Gear^.Y), 4.0, i, i, $FF, $40); + DrawLine(hwRound(HHGear^.X), hwRound(HHGear^.Y), hwRound(Gear^.X), hwRound(Gear^.Y), 4.0, i, i, $FF, $40); end; end end