# HG changeset patch # User koda # Date 1280565760 -7200 # Node ID 09892cdb8f95caacee25eb246941fa3386a16fbc # Parent aaf832c6fbd7dd88f5399efa5916d2ee77e1e34f# Parent 34fe2149f75dd275a5c4247c8e6aaea32cf7c589 merge diff -r aaf832c6fbd7 -r 09892cdb8f95 CMakeLists.txt --- a/CMakeLists.txt Sat Jul 31 10:39:20 2010 +0200 +++ b/CMakeLists.txt Sat Jul 31 10:42:40 2010 +0200 @@ -19,7 +19,7 @@ OUTPUT_VARIABLE version_suffix ) STRING(REGEX REPLACE "(.*) +(.*)" "\\2:\\1" version_suffix ${version_suffix}) - MESSAGE(STATUS "Builing revision ${version_suffix}") + MESSAGE(STATUS "Building revision ${version_suffix}") set(version_suffix ".${version_suffix}") # #truncate to numbers only - trying to fix a problem described in http://www.hedgewars.org/node/2019 # STRING(REGEX REPLACE "^\\.(\\d+)" ".\\1" version_suffix ${version_suffix}) @@ -156,6 +156,7 @@ endif(LOWRES) if(Optz) +# set(pascal_compiler_flags_cmn "-O3" "-OpPENTIUM4" "-CfSSE3" "-Xs" "-Si" ${pascal_compiler_flags_cmn}) set(pascal_compiler_flags_cmn "-O2" "-Xs" "-Si" ${pascal_compiler_flags_cmn}) set(haskell_compiler_flags_cmn "-O2" "-w") else(Optz) diff -r aaf832c6fbd7 -r 09892cdb8f95 QTfrontend/about.cpp --- a/QTfrontend/about.cpp Sat Jul 31 10:39:20 2010 +0200 +++ b/QTfrontend/about.cpp Sat Jul 31 10:42:40 2010 +0200 @@ -74,7 +74,7 @@ "Frontend improvements: Martin Minarik <ttsmj@pokec.sk>
" "Frontend improvements: Kristian Lehmann <email@thexception.net>
" "Mac OS X/iPhone port, OpenGL-ES conversion: Vittorio Giovara <vittorio.giovara@gmail.com>
" - "Gamepad and Lua integration, misc effects: Mario Liebisch <mario.liebisch@googlemail.com>
" + "Gamepad and Lua integration, misc effects: Mario Liebisch <mario.liebisch@gmail.com>
" "Many engine improvements and graphics: Carlos Vives <mail@carlosvives.es>
" "Few engine and frontend improvements: Richard Karolyi <sheepluva@ercatec.net>
" "Maze maps: Henning Kühn <prg@cooco.de>" @@ -115,7 +115,7 @@ "English: Andrey Korotaev <unC0Rr@gmail.com>
" "Finnish: Nina Kuisma <ninnnu@gmail.com>
" "French: Antoine Turmel <geekshadow@gmail.com>
" - "German: Peter Hüwe <PeterHuewe@gmx.de>, Mario Liebisch <mario.liebisch@googlemail.com>
" + "German: Peter Hüwe <PeterHuewe@gmx.de>, Mario Liebisch <mario.liebisch@gmail.com>
" "Italian: Luca Bonora <bonora.luca@gmail.com>
" "Japanese: ADAM Etienne <etienne.adam@gmail.com>
" "Polish: Maciej Mroziński <mynick2@o2.pl>, Wojciech Latkowski <magikmagik17l@gmail.com>, Maciej Górny
" diff -r aaf832c6fbd7 -r 09892cdb8f95 QTfrontend/game.cpp --- a/QTfrontend/game.cpp Sat Jul 31 10:39:20 2010 +0200 +++ b/QTfrontend/game.cpp Sat Jul 31 10:42:40 2010 +0200 @@ -292,6 +292,7 @@ arguments << config->netNick().toUtf8().toBase64(); arguments << (config->isMusicEnabled() ? "1" : "0"); arguments << (config->isReducedQuality() ? "1" : "0"); + arguments << (config->isStereoEnabled() ? "1" : "0"); return arguments; } diff -r aaf832c6fbd7 -r 09892cdb8f95 QTfrontend/gameuiconfig.cpp --- a/QTfrontend/gameuiconfig.cpp Sat Jul 31 10:39:20 2010 +0200 +++ b/QTfrontend/gameuiconfig.cpp Sat Jul 31 10:42:40 2010 +0200 @@ -48,6 +48,7 @@ Form->ui.pageOptions->CBFrontendFullscreen->setChecked(ffscr); Form->ui.pageOptions->CBReduceQuality->setChecked(value("video/reducequality", false).toBool()); + Form->ui.pageOptions->CBEnableStereo->setChecked(value("video/anaglyph", false).toBool()); Form->ui.pageOptions->CBFrontendEffects->setChecked(frontendEffects); Form->ui.pageOptions->CBEnableSound->setChecked(value("audio/sound", true).toBool()); Form->ui.pageOptions->CBEnableFrontendSound->setChecked(value("frontend/sound", true).toBool()); @@ -116,6 +117,7 @@ setValue("video/fullscreen", vid_Fullscreen()); setValue("video/reducequality", isReducedQuality()); + setValue("video/anaglyph", isStereoEnabled()); setValue("frontend/effects", isFrontendEffects()); @@ -236,6 +238,11 @@ return Form->ui.pageOptions->CBAltDamage->isChecked(); } +bool GameUIConfig::isStereoEnabled() const +{ + return Form->ui.pageOptions->CBEnableStereo->isChecked(); +} + bool GameUIConfig::appendDateTimeToRecordName() { return Form->ui.pageOptions->CBNameWithDate->isChecked(); diff -r aaf832c6fbd7 -r 09892cdb8f95 QTfrontend/gameuiconfig.h --- a/QTfrontend/gameuiconfig.h Sat Jul 31 10:39:20 2010 +0200 +++ b/QTfrontend/gameuiconfig.h Sat Jul 31 10:42:40 2010 +0200 @@ -55,6 +55,7 @@ bool isFrontendFullscreen() const; bool isWeaponTooltip() const; void resizeToConfigValues(); + bool isStereoEnabled() const; #ifdef __APPLE__ #ifdef SPARKLE_ENABLED diff -r aaf832c6fbd7 -r 09892cdb8f95 QTfrontend/main.cpp --- a/QTfrontend/main.cpp Sat Jul 31 10:39:20 2010 +0200 +++ b/QTfrontend/main.cpp Sat Jul 31 10:42:40 2010 +0200 @@ -404,10 +404,19 @@ app.installTranslator(&Translator); } + // Win32 registry setup (used for xfire detection etc. - don't set it if we're running in "portable" mode with a custom config dir) +#ifdef _WIN32 + if(cConfigDir->length() == 0) + { + QSettings registry(QSettings::NativeFormat, QSettings::UserScope, "Hedgewars Project", "Hedgewars"); + QFileInfo f(argv[0]); + registry.setValue("file", f.absoluteFilePath()); + registry.setValue("path", f.absolutePath()); + } +#endif HWForm *Form = new HWForm(); - Form->show(); return app.exec(); } diff -r aaf832c6fbd7 -r 09892cdb8f95 QTfrontend/pages.cpp --- a/QTfrontend/pages.cpp Sat Jul 31 10:39:20 2010 +0200 +++ b/QTfrontend/pages.cpp Sat Jul 31 10:42:40 2010 +0200 @@ -108,7 +108,7 @@ Tips << tr("Hedgewars is available in many languages. If the translation in your language seems to be missing or outdated, feel free to contact us!", "Tips"); Tips << tr("Hedgewars can be run on lots of different operating systems including Microsoft Windows, Mac OS X and Linux.", "Tips"); Tips << tr("Always remember you're able to set up your own games in local and network/online play. You're not restricted to the 'Simple Game' option.", "Tips"); - Tips << tr("Connect a gamepad before launching the game to be able to assign its controls to your team.", "Tips"); + Tips << tr("Connect one or more gamepads before launching the game to be able to assign their controls to your teams.", "Tips"); Tips << tr("Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server.", "Tips"); Tips << tr("While playing you should give yourself a short break at least once an hour.", "Tips"); Tips << tr("If your graphics card isn't able to provide hardware accelerated OpenGL, try to enable the low quality mode to improve performance.", "Tips"); @@ -122,7 +122,7 @@ if(isDevBuild) - mainNote->setText(QLabel::tr("This HG build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk!")); + mainNote->setText(QLabel::tr("This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk!")); else mainNote->setText(QLabel::tr("Tip: ") + Tips[QTime(0, 0, 0).secsTo(QTime::currentTime()) % Tips.length()]); @@ -612,6 +612,10 @@ CBReduceQuality->setText(QCheckBox::tr("Reduced quality")); GBAlayout->addWidget(CBReduceQuality); + CBEnableStereo = new QCheckBox(AGGroupBox); + CBEnableStereo->setText(QCheckBox::tr("Anaglyph rendering (red/cyan)")); + GBAlayout->addWidget(CBEnableStereo); + hr = new QFrame(AGGroupBox); hr->setFrameStyle(QFrame::HLine); hr->setLineWidth(3); diff -r aaf832c6fbd7 -r 09892cdb8f95 QTfrontend/pages.h --- a/QTfrontend/pages.h Sat Jul 31 10:39:20 2010 +0200 +++ b/QTfrontend/pages.h Sat Jul 31 10:42:40 2010 +0200 @@ -221,6 +221,7 @@ QComboBox *CBResolution; QCheckBox *CBEnableSound; QCheckBox *CBEnableFrontendSound; + QCheckBox *CBEnableStereo; #ifdef _WIN32 QCheckBox *CBHardwareSound; #endif diff -r aaf832c6fbd7 -r 09892cdb8f95 gameServer/Actions.hs --- a/gameServer/Actions.hs Sat Jul 31 10:39:20 2010 +0200 +++ b/gameServer/Actions.hs Sat Jul 31 10:42:40 2010 +0200 @@ -56,8 +56,10 @@ processAction :: Action -> StateT ServerState IO () -processAction (AnswerClients chans msg) = - liftIO $ mapM_ (flip writeChan msg) chans +processAction (AnswerClients chans msg) = do + liftIO (putStr $ "AnswerClients... " ++ (show $ length chans) ++ " (" ++ (show msg) ++")") + liftIO $ map (flip seq ()) chans `seq` mapM_ (flip writeChan msg) chans + liftIO (putStrLn "done") processAction SendServerMessage = do @@ -68,7 +70,7 @@ serverMessageForOldVersions si else serverMessage si - liftIO $ writeChan chan ["SERVER_MESSAGE", message] + processAction $ AnswerClients [chan] ["SERVER_MESSAGE", message] {- processAction (clID, serverInfo, rnc) SendServerVars = do @@ -87,12 +89,12 @@ processAction (ProtocolError msg) = do chan <- client's sendChan - liftIO $ writeChan chan ["ERROR", msg] + processAction $ AnswerClients [chan] ["ERROR", msg] processAction (Warning msg) = do chan <- client's sendChan - liftIO $ writeChan chan ["WARNING", msg] + processAction $ AnswerClients [chan] ["WARNING", msg] processAction (ByeClient msg) = do (Just ci) <- gets clientIndex @@ -109,13 +111,13 @@ infoM "Clients" (show ci ++ " quits: " ++ (B.unpack msg)) --mapM_ (processAction (ci, serverInfo, rnc)) $ answerOthersQuit ++ answerInformRoom - writeChan chan ["BYE", msg] modifyRoom rnc (\r -> r{ --playersIDs = IntSet.delete ci (playersIDs r) playersIn = (playersIn r) - 1, readyPlayers = if ready then readyPlayers r - 1 else readyPlayers r }) ri + processAction $ AnswerClients [chan] ["BYE", msg] modify (\s -> s{removedClients = ci `Set.insert` removedClients s}) processAction (DeleteClient ci) = do @@ -336,13 +338,13 @@ case info of HasAccount passwd isAdmin -> do chan <- client's sendChan - liftIO $ writeChan chan ["ASKPASSWORD"] + processAction $ AnswerClients [chan] ["ASKPASSWORD"] Guest -> do processAction JoinLobby Admin -> do mapM processAction [ModifyClient (\cl -> cl{isAdministrator = True}), JoinLobby] chan <- client's sendChan - liftIO $ writeChan chan ["ADMIN_ACCESS"] + processAction $ AnswerClients [chan] ["ADMIN_ACCESS"] processAction JoinLobby = do @@ -402,8 +404,8 @@ forkIO $ clientSendLoop (clientSocket client) (coreChan si) (sendChan client) ci infoM "Clients" (show ci ++ ": New client. Time: " ++ show (connectTime client)) - writeChan (sendChan client) ["CONNECTED", "Hedgewars server http://www.hedgewars.org/"] + processAction $ AnswerClients [sendChan client] ["CONNECTED", "Hedgewars server http://www.hedgewars.org/"] {- let newLogins = takeWhile (\(_ , time) -> (connectTime client) `diffUTCTime` time <= 11) $ lastLogins serverInfo if False && (isJust $ host client `Prelude.lookup` newLogins) then diff -r aaf832c6fbd7 -r 09892cdb8f95 gameServer/ClientIO.hs --- a/gameServer/ClientIO.hs Sat Jul 31 10:39:20 2010 +0200 +++ b/gameServer/ClientIO.hs Sat Jul 31 10:42:40 2010 +0200 @@ -60,17 +60,17 @@ clientSendLoop :: Socket -> Chan CoreMessage -> Chan [B.ByteString] -> ClientIndex -> IO() clientSendLoop s coreChan chan ci = do answer <- readChan chan - doClose <- Exception.handle - (\(e :: Exception.IOException) -> if isQuit answer then return True else sendQuit e >> return True) $ do + Exception.handle + (\(e :: Exception.IOException) -> when (not $ isQuit answer) $ sendQuit e) $ do sendAll s $ (B.unlines answer) `B.append` (B.singleton '\n') - return $ isQuit answer - if doClose then + if (isQuit answer) then Exception.handle (\(_ :: Exception.IOException) -> putStrLn "error on sClose") $ sClose s else clientSendLoop s coreChan chan ci where - sendQuit e = writeChan coreChan $ ClientMessage (ci, ["QUIT", B.pack $ show e]) + --sendQuit e = writeChan coreChan $ ClientMessage (ci, ["QUIT", B.pack $ show e]) + sendQuit e = putStrLn $ show e isQuit ("BYE":xs) = True isQuit _ = False diff -r aaf832c6fbd7 -r 09892cdb8f95 gameServer/CoreTypes.hs --- a/gameServer/CoreTypes.hs Sat Jul 31 10:39:20 2010 +0200 +++ b/gameServer/CoreTypes.hs Sat Jul 31 10:42:40 2010 +0200 @@ -175,6 +175,13 @@ | TimerAction Int | Remove ClientIndex +instance Show CoreMessage where + show (Accept _) = "Accept" + show (ClientMessage _) = "ClientMessage" + show (ClientAccountInfo _) = "ClientAccountInfo" + show (TimerAction _) = "TimerAction" + show (Remove _) = "Remove" + type MRnC = MRoomsAndClients RoomInfo ClientInfo type IRnC = IRoomsAndClients RoomInfo ClientInfo diff -r aaf832c6fbd7 -r 09892cdb8f95 gameServer/ServerCore.hs --- a/gameServer/ServerCore.hs Sat Jul 31 10:39:20 2010 +0200 +++ b/gameServer/ServerCore.hs Sat Jul 31 10:42:40 2010 +0200 @@ -35,6 +35,7 @@ si <- gets serverInfo r <- liftIO $ readChan $ coreChan si + liftIO $ putStrLn $ "Core msg: " ++ show r case r of Accept ci -> processAction (AddClient ci) @@ -46,7 +47,9 @@ modify (\as -> as{clientIndex = Just ci}) reactCmd cmd - Remove ci -> processAction (DeleteClient ci) + Remove ci -> do + liftIO $ debugM "Clients" $ "DeleteClient: " ++ show ci + processAction (DeleteClient ci) --else --do @@ -54,10 +57,13 @@ --return (serverInfo, rnc) ClientAccountInfo (ci, info) -> do - removed <- gets removedClients - when (not $ ci `Set.member` removed) $ - processAction (ProcessAccountInfo info) - + --should instead check ci exists and has same nick/hostname + --removed <- gets removedClients + --when (not $ ci `Set.member` removed) $ do + -- modify (\as -> as{clientIndex = Just ci}) + -- processAction (ProcessAccountInfo info) + return () + TimerAction tick -> mapM_ processAction $ PingAll : [StatsAction | even tick] diff -r aaf832c6fbd7 -r 09892cdb8f95 gameServer/Store.hs --- a/gameServer/Store.hs Sat Jul 31 10:39:20 2010 +0200 +++ b/gameServer/Store.hs Sat Jul 31 10:42:40 2010 +0200 @@ -77,7 +77,7 @@ removeElem :: MStore e -> ElemIndex -> IO () removeElem (MStore ref) (ElemIndex n) = do (busyElems, freeElems, arr) <- readIORef ref - IOA.writeArray arr n (error "Store: no element") + IOA.writeArray arr n (error $ "Store: no element " ++ show n) writeIORef ref (IntSet.delete n busyElems, IntSet.insert n freeElems, arr) diff -r aaf832c6fbd7 -r 09892cdb8f95 gameServer/stresstest3.hs --- a/gameServer/stresstest3.hs Sat Jul 31 10:39:20 2010 +0200 +++ b/gameServer/stresstest3.hs Sat Jul 31 10:42:40 2010 +0200 @@ -63,7 +63,7 @@ hFlush stdout forks = forever $ do - delay <- randomRIO (20000::Int, 40000) + delay <- randomRIO (10000::Int, 30000) threadDelay delay forkIO testing diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/GSHandlers.inc Sat Jul 31 10:42:40 2010 +0200 @@ -186,12 +186,12 @@ if (Gear^.Invulnerable) then exit; - if _0_6 < Gear^.dY then - PlaySound(sndOw4, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack) - else - PlaySound(sndOw1, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack); - - ApplyDamage(Gear, dmg); + //if _0_6 < Gear^.dY then + // PlaySound(sndOw4, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack) + //else + // PlaySound(sndOw1, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack); + + ApplyDamage(Gear, dmg, dsFall); end end; diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/HHHandlers.inc --- a/hedgewars/HHHandlers.inc Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/HHHandlers.inc Sat Jul 31 10:42:40 2010 +0200 @@ -17,6 +17,29 @@ *) //////////////////////////////////////////////////////////////////////////////// + +procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource); +begin +if (Source = dsFall) or (Source = dsExplosion) then + case random(3) of + 0: PlaySound(sndOoff1, Hedgehog^.Team^.voicepack); + 1: PlaySound(sndOoff2, Hedgehog^.Team^.voicepack); + 2: PlaySound(sndOoff3, Hedgehog^.Team^.voicepack); + end +else if (Source = dsPoison) then + case random(2) of + 0: PlaySound(sndPoisonCough, Hedgehog^.Team^.voicepack); + 1: PlaySound(sndPoisonMoan, Hedgehog^.Team^.voicepack); + end +else + case random(4) of + 0: PlaySound(sndOw1, Hedgehog^.Team^.voicepack); + 1: PlaySound(sndOw2, Hedgehog^.Team^.voicepack); + 2: PlaySound(sndOw3, Hedgehog^.Team^.voicepack); + 3: PlaySound(sndOw4, Hedgehog^.Team^.voicepack); + end +end; + procedure ChangeAmmo(Gear: PGear); var slot, i: Longword; begin diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/VGSHandlers.inc --- a/hedgewars/VGSHandlers.inc Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/VGSHandlers.inc Sat Jul 31 10:42:40 2010 +0200 @@ -543,3 +543,19 @@ Gear^.doStep:= @doStepBigExplosionWork; if Steps > 1 then Gear^.doStep(Gear, Steps-1); end; + +procedure doStepChunk(Gear: PVisualGear; Steps: Longword); +begin +Gear^.X:= Gear^.X + Gear^.dX * Steps; + +Gear^.Y:= Gear^.Y + Gear^.dY * Steps; +Gear^.dY:= Gear^.dY + cGravityf * Steps; + +Gear^.Angle:= round(Gear^.Angle + Steps) mod cMaxAngle; + +if round(Gear^.Y) > cWaterLine then + begin + DeleteVisualGear(Gear); + AddVisualGear(round(Gear^.X), round(Gear^.Y), vgtDroplet); + end +end; diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/adler32.pas --- a/hedgewars/adler32.pas Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/adler32.pas Sat Jul 31 10:42:40 2010 +0200 @@ -1,152 +1,152 @@ -unit Adler32; - -{ZLib - Adler32 checksum function} - - -interface - -(************************************************************************* - - DESCRIPTION : ZLib - Adler32 checksum function - - REQUIREMENTS : TP5-7, D1-D7/D9-D10/D12, FPC, VP - - EXTERNAL DATA : --- - - MEMORY USAGE : --- - - DISPLAY MODE : --- - - REFERENCES : RFC 1950 (http://tools.ietf.org/html/rfc1950) - - - Version Date Author Modification - ------- -------- ------- ------------------------------------------ - 0.10 30.08.03 W.Ehrhardt Initial version based on MD5 layout - 2.10 30.08.03 we Common vers., XL versions for Win32 - 2.20 27.09.03 we FPC/go32v2 - 2.30 05.10.03 we STD.INC, TP5.0 - 2.40 10.10.03 we common version, english comments - 3.00 01.12.03 we Common version 3.0 - 3.01 22.05.05 we Adler32UpdateXL (i,n: integer) - 3.02 17.12.05 we Force $I- in Adler32File - 3.03 07.08.06 we $ifdef BIT32: (const fname: shortstring...) - 3.04 10.02.07 we Adler32File: no eof, XL and filemode via $ifdef - 3.05 04.07.07 we BASM16: speed-up factor 15 - 3.06 12.11.08 we uses BTypes, Ptr2Inc and/or Str255 - 3.07 25.04.09 we updated RFC URL(s) - 3.08 19.07.09 we D12 fix: assign with typecast string(fname) -**************************************************************************) - -(*------------------------------------------------------------------------- - (C) Copyright 2002-2009 Wolfgang Ehrhardt - - This software is provided 'as-is', without any express or implied warranty. - In no event will the authors be held liable for any damages arising from - the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software in - a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source distribution. -----------------------------------------------------------------------------*) - -(* -As per the license above, noting that this implementation of adler32 was stripped of everything we didn't need. -That means no btypes, file loading, and the assembly version disabled. -*) - -procedure Adler32Update(var adler: longint; Msg: pointer; Len: longint); - -implementation - -(* -$ifdef BASM16 - -procedure Adler32Update(var adler: longint; Msg: pointer; Len: longint); - //-update Adler32 with Msg data -const - BASE = 65521; // max. prime < 65536 - NMAX = 5552; // max. n with 255n(n+1)/2 + (n+1)(BASE-1) < 2^32 -type - LH = packed record - L,H: word; - end; -var - s1,s2: longint; - n: integer; -begin - s1 := LH(adler).L; - s2 := LH(adler).H; - while Len > 0 do begin - if Len 0 do begin - if Len 0 do begin + if Len 0 do begin + if Len MAX_RANGE ) then exit(BadTurn); -Vx:= (int2hwFloat(Targ.X) - Me^.X) * _1div1024; -Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * _1div1024; -x:= Me^.X; -y:= Me^.Y; +Vx:= (int2hwFloat(Targ.X) - x) * _1div1024; +Vy:= (int2hwFloat(Targ.Y) - y) * _1div1024; ap.Angle:= DxDy2AttackAngle(Vx, -Vy); repeat x:= x + vX; @@ -507,13 +528,16 @@ ap.ExplR:= 0; ap.Time:= 0; ap.Power:= 1; +with PHedgehog(Me^.Hedgehog)^ do + begin + x:= Me^.X + int2hwfloat(round(GetLaunchX(Ammo^[CurSlot, CurAmmo].AmmoType, hwSign(Me^.dX), Me^.Angle))); + y:= Me^.Y + int2hwfloat(round(GetLaunchY(Ammo^[CurSlot, CurAmmo].AmmoType, Me^.Angle))) + end; if Abs(hwRound(Me^.X) - Targ.X) + Abs(hwRound(Me^.Y) - Targ.Y) < 80 then exit(BadTurn); -t:= _0_5 / Distance(int2hwFloat(Targ.X) - Me^.X, int2hwFloat(Targ.Y) - Me^.Y); -Vx:= (int2hwFloat(Targ.X) - Me^.X) * t; -Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * t; -x:= Me^.X; -y:= Me^.Y; +t:= _0_5 / Distance(int2hwFloat(Targ.X) - x, int2hwFloat(Targ.Y) - y); +Vx:= (int2hwFloat(Targ.X) - x) * t; +Vy:= (int2hwFloat(Targ.Y) - y) * t; ap.Angle:= DxDy2AttackAngle(Vx, -Vy); d:= 0; @@ -531,6 +555,7 @@ function TestBaseballBat(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; var valueResult: LongInt; + x, y: hwFloat; begin Level:= Level; // avoid compiler hint ap.ExplR:= 0; @@ -539,26 +564,37 @@ ap.Time:= 0; ap.Power:= 1; -if (Targ.X) - hwRound(Me^.X) >= 0 then ap.Angle:= cMaxAngle div 4 +with PHedgehog(Me^.Hedgehog)^ do + begin + x:= Me^.X + int2hwfloat(round(GetLaunchX(Ammo^[CurSlot, CurAmmo].AmmoType, hwSign(Me^.dX), Me^.Angle))); + y:= Me^.Y + int2hwfloat(round(GetLaunchY(Ammo^[CurSlot, CurAmmo].AmmoType, Me^.Angle))) + end; +if (Targ.X) - hwRound(x) >= 0 then ap.Angle:= cMaxAngle div 4 else ap.Angle:= - cMaxAngle div 4; -valueResult:= RateShove(Me, hwRound(Me^.X) + 10 * hwSign(int2hwFloat(Targ.X) - Me^.X), hwRound(Me^.Y), 15, 30); +valueResult:= RateShove(Me, hwRound(x) + 10 * hwSign(int2hwFloat(Targ.X) - x), hwRound(y), 15, 30); if valueResult <= 0 then valueResult:= BadTurn else inc(valueResult); TestBaseballBat:= valueResult; end; function TestFirePunch(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; var i, valueResult: LongInt; + x, y: hwFloat; begin Level:= Level; // avoid compiler hint ap.ExplR:= 0; ap.Time:= 0; ap.Power:= 1; ap.Angle:= 0; -if (Abs(hwRound(Me^.X) - Targ.X) > 25) -or (Abs(hwRound(Me^.Y) - 50 - Targ.Y) > 50) then +with PHedgehog(Me^.Hedgehog)^ do begin - if TestColl(hwRound(Me^.Y), hwRound(Me^.Y) - 16, 6) - and (RateShove(Me, hwRound(Me^.X) + 10 * hwSign(Me^.dX), hwRound(Me^.Y) - 40, 30, 30) = 0) then + x:= Me^.X + int2hwfloat(round(GetLaunchX(Ammo^[CurSlot, CurAmmo].AmmoType, hwSign(Me^.dX), Me^.Angle))); + y:= Me^.Y + int2hwfloat(round(GetLaunchY(Ammo^[CurSlot, CurAmmo].AmmoType, Me^.Angle))) + end; +if (Abs(hwRound(x) - Targ.X) > 25) +or (Abs(hwRound(y) - 50 - Targ.Y) > 50) then + begin + if TestColl(hwRound(x), hwRound(y) - 16, 6) + and (RateShove(Me, hwRound(x) + 10 * hwSign(Me^.dX), hwRound(y) - 40, 30, 30) = 0) then valueResult:= Succ(BadTurn) else valueResult:= BadTurn; @@ -567,8 +603,8 @@ valueResult:= 0; for i:= 0 to 4 do - valueResult:= valueResult + RateShove(Me, hwRound(Me^.X) + 10 * hwSign(int2hwFloat(Targ.X) - Me^.X), - hwRound(Me^.Y) - 20 * i - 5, 10, 30); + valueResult:= valueResult + RateShove(Me, hwRound(x) + 10 * hwSign(int2hwFloat(Targ.X) - x), + hwRound(y) - 20 * i - 5, 10, 30); if valueResult <= 0 then valueResult:= BadTurn else diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/uConsts.pas Sat Jul 31 10:42:40 2010 +0200 @@ -73,7 +73,7 @@ sprHandDynamite, sprHandHellish, sprHandMine, sprHandSeduction, sprHandVamp, sprBigExplosion, sprSmokeRing, sprBeeTrace, sprEgg, sprTargetBee, sprHandBee, sprFeather, sprPiano, sprHandSineGun, sprPortalGun, sprPortal, - sprCheese, sprHandCheese, sprHandFlamethrower + sprCheese, sprHandCheese, sprHandFlamethrower, sprChunk ); // Gears that interact with other Gears and/or Land @@ -94,10 +94,12 @@ vgtSteam, vgtAmmo, vgtSmoke, vgtSmokeWhite, vgtHealth, vgtShell, vgtDust, vgtSplash, vgtDroplet, vgtSmokeRing, vgtBeeTrace, vgtEgg, vgtFeather, vgtHealthTag, vgtSmokeTrace, vgtEvilTrace, vgtExplosion, - vgtBigExplosion); + vgtBigExplosion, vgtChunk); TGearsType = set of TGearType; + TDamageSource = (dsUnknown, dsFall, dsBullet, dsExplosion, dsShove, dsPoison); + TSound = (sndNone, sndGrenadeImpact, sndExplosion, sndThrowPowerUp, sndThrowRelease, sndSplash, sndShotgunReload, sndShotgunFire, sndGraveImpact, @@ -106,7 +108,7 @@ sndMissed, sndStupid, sndFirstBlood, sndBoring, sndByeBye, sndSameTeam, sndNutter, sndReinforce, sndTraitor, sndRegret, sndEnemyDown, sndCoward, sndHurry, sndWatchIt, sndKamikaze, - sndCake, sndOw1, sndOw4, sndFirePunch1, sndFirePunch2, + sndCake, sndOw1, sndOw2, sndOw3, sndOw4, sndFirePunch1, sndFirePunch2, sndFirePunch3, sndFirePunch4, sndFirePunch5, sndFirePunch6, sndMelon, sndHellish, sndYoohoo, sndRCPlane, sndWhipCrack, sndRideOfTheValkyries, sndDenied, sndPlaced, sndBaseballBat, @@ -118,7 +120,7 @@ sndMelonImpact, sndDroplet1, sndDroplet2, sndDroplet3, sndEggBreak, sndDrillRocket, sndPoisonCough, sndPoisonMoan, sndBirdyLay, sndWhistle, sndBeeWater, sndPiano0, sndPiano1, sndPiano2, sndPiano3, sndPiano4, sndPiano5, sndPiano6, sndPiano7, sndPiano8, - sndSkip, sndSineGun); + sndSkip, sndSineGun, sndOoff1, sndOoff2, sndOoff3); TAmmoType = (amNothing, amGrenade, amClusterBomb, amBazooka, amBee, amShotgun, amPickHammer, amSkip, amRope, amMine, amDEagle, amDynamite, amFirePunch, amWhip, @@ -559,17 +561,17 @@ (FileName: 'SkyR'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil; Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprSky (FileName: 'BorderHorizontal'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 33; Height: 2; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpLow; getDimensions: false; getImageDimensions: true),// sprAMBorderHorizontal + Width: 33; Height: 2; imageWidth: 0; imageHeight: 0; saveSurf: true; priority: tpLow; getDimensions: false; getImageDimensions: true),// sprAMBorderHorizontal (FileName: 'BorderVertical'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 2; Height: 33; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpLow; getDimensions: false; getImageDimensions: true),// sprAMBorderVertical + Width: 2; Height: 33; imageWidth: 0; imageHeight: 0; saveSurf: true; priority: tpLow; getDimensions: false; getImageDimensions: true),// sprAMBorderVertical (FileName: 'Slot'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 33; Height: 33; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMSlot + Width: 33; Height: 33; imageWidth: 0; imageHeight: 0; saveSurf: true; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMSlot (FileName: 'Ammos'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil; Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: true; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMAmmos (FileName: 'SlotKeys'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil; Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMSlotKeys (FileName: 'Corners'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 2; Height: 2; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMCorners + Width: 2; Height: 2; imageWidth: 0; imageHeight: 0; saveSurf: true; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMCorners (FileName: 'Finger'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; Width: 32; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprFinger (FileName: 'AirBomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; @@ -795,7 +797,9 @@ (FileName: 'amCheese'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandCheese (FileName: 'amFlamethrower'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprHandFlamethrower + Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandFlamethrower + (FileName: 'Chunk'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil; + Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprChunk ); Wavez: array [TWave] of record @@ -856,6 +860,8 @@ (FileName: 'Kamikaze.ogg'; Path: ptVoices),// sndKamikaze (FileName: 'cake2.ogg'; Path: ptSounds),// sndCake (FileName: 'Ow1.ogg'; Path: ptVoices),// sndOw1 + (FileName: 'Ow2.ogg'; Path: ptVoices),// sndOw2 + (FileName: 'Ow3.ogg'; Path: ptVoices),// sndOw3 (FileName: 'Ow4.ogg'; Path: ptVoices),// sndOw4 (FileName: 'Firepunch1.ogg'; Path: ptVoices),// sndFirepunch1 (FileName: 'Firepunch2.ogg'; Path: ptVoices),// sndFirepunch2 @@ -917,7 +923,10 @@ (FileName: '8C.ogg'; Path: ptSounds),// sndPiano7 (FileName: '9D.ogg'; Path: ptSounds),// sndPiano8 (FileName: 'skip.ogg'; Path: ptSounds),// sndSkip - (FileName: 'shotgunfire.ogg'; Path: ptSounds) // sndSineGun + (FileName: 'shotgunfire.ogg'; Path: ptSounds),// sndSineGun + (FileName: 'Ooff1.ogg'; Path: ptVoices),// sndOoff1 + (FileName: 'Ooff2.ogg'; Path: ptVoices),// sndOoff2 + (FileName: 'Ooff3.ogg'; Path: ptVoices) // sndOoff3 ); Ammoz: array [TAmmoType] of record diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/uGears.pas Sat Jul 31 10:42:40 2010 +0200 @@ -83,7 +83,7 @@ function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear; procedure ProcessGears; procedure EndTurnCleanup; -procedure ApplyDamage(Gear: PGear; Damage: Longword); +procedure ApplyDamage(Gear: PGear; Damage: Longword; Source: TDamageSource); procedure SetAllToActive; procedure SetAllHHToActive; procedure DrawGears; @@ -635,22 +635,18 @@ team: PTeam; i: LongWord; flag: Boolean; + tmp: LongWord; begin - Gear:= GearsList; + Gear:= GearsList; - while Gear <> nil do - begin - if Gear^.Kind = gtHedgehog then - begin + while Gear <> nil do + begin + if Gear^.Kind = gtHedgehog then + begin + tmp:= 0; if PHedgehog(Gear^.Hedgehog)^.Effects[hePoisoned] then - begin - inc(Gear^.Damage, min(ModifyDamage(5,Gear), max(0,Gear^.Health - 1 - Gear^.Damage))); - if getRandom(2) = 0 then - PlaySound(sndPoisonCough, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack) - else - PlaySound(sndPoisonMoan, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack); - end; - inc(Gear^.Damage, min(cHealthDecrease, max(0,Gear^.Health - 1 - Gear^.Damage))); + inc(tmp, min(ModifyDamage(5,Gear), max(0,Gear^.Health - 1 - Gear^.Damage))); + inc(tmp, min(cHealthDecrease, max(0,Gear^.Health - 1 - Gear^.Damage))); if PHedgehog(Gear^.Hedgehog)^.King then begin flag:= false; @@ -660,12 +656,13 @@ (not team^.Hedgehogs[i].King) and (team^.Hedgehogs[i].Gear^.Health > team^.Hedgehogs[i].Gear^.Damage) then flag:= true; - if not flag then inc(Gear^.Damage, min(5, max(0,Gear^.Health - 1 - Gear^.Damage))) + if not flag then inc(tmp, min(5, max(0,Gear^.Health - 1 - Gear^.Damage))) end; - end; + if tmp > 0 then ApplyDamage(Gear, tmp, dsPoison); + end; - Gear:= Gear^.NextGear - end; + Gear:= Gear^.NextGear + end; end; procedure ProcessGears; @@ -891,13 +888,14 @@ end end; -procedure ApplyDamage(Gear: PGear; Damage: Longword); +procedure ApplyDamage(Gear: PGear; Damage: Longword; Source: TDamageSource); var s: shortstring; vampDmg, tmpDmg, i: Longword; vg: PVisualGear; begin if (Gear^.Kind = gtHedgehog) and (Damage>=1) then begin + HHHurt(Gear^.Hedgehog, Source); AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), Damage, PHedgehog(Gear^.Hedgehog)^.Team^.Clan^.Color); tmpDmg:= min(Damage, max(0,Gear^.Health-Gear^.Damage)); if (Gear <> CurrentHedgehog^.Gear) and (CurrentHedgehog^.Gear <> nil) and (tmpDmg >= 1) then @@ -1179,6 +1177,7 @@ dmg, dmgRadius, dmgBase: LongInt; fX, fY: hwFloat; vg: PVisualGear; + i, cnt: LongInt; begin TargetPoint.X:= NoPointX; {$IFDEF DEBUGFILE}if Radius > 4 then AddFileLog('Explosion: at (' + inttostr(x) + ',' + inttostr(y) + ')');{$ENDIF} @@ -1226,7 +1225,7 @@ if (Mask and EXPLNoDamage) = 0 then begin if not Gear^.Invulnerable then - ApplyDamage(Gear, dmg) + ApplyDamage(Gear, dmg, dsExplosion) else Gear^.State:= Gear^.State or gstWinner; end; @@ -1263,7 +1262,13 @@ end; if (Mask and EXPLDontDraw) = 0 then - if (GameFlags and gfSolidLand) = 0 then DrawExplosion(X, Y, Radius); + if (GameFlags and gfSolidLand) = 0 then + begin + cnt:= DrawExplosion(X, Y, Radius) div 1608; // approx 2 16x16 circles to erase per chunk + if cnt > 0 then + for i:= 0 to cnt do + AddVisualGear(X, Y, vgtChunk) + end; uAIMisc.AwareOfExplosion(0, 0, 0) end; @@ -1285,7 +1290,7 @@ gtTarget, gtExplosives: begin if (not t^.Invulnerable) then - ApplyDamage(t, dmg) + ApplyDamage(t, dmg, dsBullet) else Gear^.State:= Gear^.State or gstWinner; @@ -1340,10 +1345,10 @@ gtExplosives: begin if (Ammo^.Kind = gtDrill) then begin Ammo^.Timer:= 0; exit; end; if (not Gear^.Invulnerable) then - ApplyDamage(Gear, tmpDmg) + ApplyDamage(Gear, tmpDmg, dsShove) else Gear^.State:= Gear^.State or gstWinner; - if (Gear^.Kind = gtExplosives) and (Ammo^.Kind = gtBlowtorch) then ApplyDamage(Gear, tmpDmg * 100); // crank up damage for explosives + blowtorch + if (Gear^.Kind = gtExplosives) and (Ammo^.Kind = gtBlowtorch) then ApplyDamage(Gear, tmpDmg * 100, dsUnknown); // crank up damage for explosives + blowtorch DeleteCI(Gear); if (Gear^.Kind = gtHedgehog) and PHedgehog(Gear^.Hedgehog)^.King then diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/uLandGraphics.pas --- a/hedgewars/uLandGraphics.pas Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/uLandGraphics.pas Sat Jul 31 10:42:40 2010 +0200 @@ -30,7 +30,7 @@ function SweepDirty: boolean; function Despeckle(X, Y: LongInt): boolean; function CheckLandValue(X, Y: LongInt; LandFlag: Word): boolean; -procedure DrawExplosion(X, Y, Radius: LongInt); +function DrawExplosion(X, Y, Radius: LongInt): Longword; procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte); procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt); procedure FillRoundInLand(X, Y, Radius: LongInt; Value: Longword); @@ -181,17 +181,22 @@ end; -procedure FillLandCircleLinesBG(x, y, dx, dy: LongInt); +function FillLandCircleLinesBG(x, y, dx, dy: LongInt): Longword; var i, t: LongInt; + cnt: Longword; begin +cnt:= 0; t:= y + dy; if (t and LAND_HEIGHT_MASK) = 0 then for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) then + begin + inc(cnt); if (cReducedQuality and rqBlurryLand) = 0 then LandPixels[t, i]:= LandBackPixel(i, t) else LandPixels[t div 2, i div 2]:= LandBackPixel(i, t) + end else if ((Land[t, i] and lfObject) <> 0) then if (cReducedQuality and rqBlurryLand) = 0 then @@ -203,10 +208,13 @@ if (t and LAND_HEIGHT_MASK) = 0 then for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) then + begin + inc(cnt); if (cReducedQuality and rqBlurryLand) = 0 then LandPixels[t, i]:= LandBackPixel(i, t) else LandPixels[t div 2, i div 2]:= LandBackPixel(i, t) + end else if ((Land[t, i] and lfObject) <> 0) then if (cReducedQuality and rqBlurryLand) = 0 then @@ -218,10 +226,13 @@ if (t and LAND_HEIGHT_MASK) = 0 then for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) then + begin + inc(cnt); if (cReducedQuality and rqBlurryLand) = 0 then LandPixels[t, i]:= LandBackPixel(i, t) else LandPixels[t div 2, i div 2]:= LandBackPixel(i, t) + end else if ((Land[t, i] and lfObject) <> 0) then if (cReducedQuality and rqBlurryLand) = 0 then @@ -233,18 +244,20 @@ if (t and LAND_HEIGHT_MASK) = 0 then for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) then - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[t, i]:= LandBackPixel(i, t) - else - LandPixels[t div 2, i div 2]:= LandBackPixel(i, t) - + begin + inc(cnt); + if (cReducedQuality and rqBlurryLand) = 0 then + LandPixels[t, i]:= LandBackPixel(i, t) + else + LandPixels[t div 2, i div 2]:= LandBackPixel(i, t) + end else if ((Land[t, i] and lfObject) <> 0) then if (cReducedQuality and rqBlurryLand) = 0 then LandPixels[t, i]:= 0 else LandPixels[t div 2, i div 2]:= 0; - +FillLandCircleLinesBG:= cnt; end; procedure FillLandCircleLinesEBC(x, y, dx, dy: LongInt); @@ -310,19 +323,21 @@ end; end; -procedure DrawExplosion(X, Y, Radius: LongInt); +function DrawExplosion(X, Y, Radius: LongInt): Longword; var dx, dy, ty, tx, d: LongInt; + cnt: Longword; begin // draw background land texture begin + cnt:= 0; dx:= 0; dy:= Radius; d:= 3 - 2 * Radius; while (dx < dy) do begin - FillLandCircleLinesBG(x, y, dx, dy); + inc(cnt, FillLandCircleLinesBG(x, y, dx, dy)); if (d < 0) then d:= d + 4 * dx + 6 else begin @@ -331,7 +346,7 @@ end; inc(dx) end; - if (dx = dy) then FillLandCircleLinesBG(x, y, dx, dy); + if (dx = dy) then inc(cnt, FillLandCircleLinesBG(x, y, dx, dy)); end; // draw a hole in land @@ -382,7 +397,8 @@ dx:= min(X + Radius + 1, LAND_WIDTH) - tx; ty:= max(Y - Radius - 1, 0); dy:= min(Y + Radius + 1, LAND_HEIGHT) - ty; -UpdateLandTexture(tx, dx, ty, dy) +UpdateLandTexture(tx, dx, ty, dy); +DrawExplosion:= cnt end; procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte); diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/uMisc.pas --- a/hedgewars/uMisc.pas Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/uMisc.pas Sat Jul 31 10:42:40 2010 +0200 @@ -35,6 +35,8 @@ isSpeed : boolean; isFirstFrame : boolean; + isStereoEnabled : boolean; + fastUntilLag : boolean; GameState : TGameState; @@ -757,7 +759,7 @@ Rewrite(f); {$ELSE} if (ParamStr(1) <> '') and (ParamStr(2) <> '') then - if (ParamCount <> 3) and (ParamCount <> 18) then + if (ParamCount <> 3) and (ParamCount <> 19) then begin for i:= 0 to 7 do begin @@ -782,7 +784,6 @@ {$ENDIF} {$I+} {$ENDIF} - end; procedure freeModule; diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/uStore.pas Sat Jul 31 10:42:40 2010 +0200 @@ -39,7 +39,9 @@ rotationQt: GLfloat; wScreen: LongInt; hScreen: LongInt; - + framel, framer, depthl, depthr: GLuint; + texl, texr: GLuint; + procedure initModule; procedure freeModule; @@ -356,8 +358,9 @@ if TeamsArray[t] <> nil then with TeamsArray[t]^ do begin - if GraveName = '' then GraveName:= 'Simple'; - texsurf:= LoadImage(Pathz[ptGraves] + '/' + GraveName, ifCritical or ifTransparent); + if GraveName = '' then GraveName:= 'Statue'; + texsurf:= LoadImage(Pathz[ptGraves] + '/' + GraveName, ifTransparent); + if texsurf = nil then texsurf:= LoadImage(Pathz[ptGraves] + '/Statue', ifCritical or ifTransparent); GraveTex:= Surface2Tex(texsurf, false); SDL_FreeSurface(texsurf) end @@ -801,6 +804,15 @@ SDL_FreeSurface(MissionIcons); FreeTexture(ropeIconTex); FreeTexture(HHTexture); + if isStereoEnabled then + begin + glDeleteTextures(1, @texl); + glDeleteRenderbuffersEXT(1, @depthl); + glDeleteFramebuffersEXT(1, @framel); + glDeleteTextures(1, @texr); + glDeleteRenderbuffersEXT(1, @depthr); + glDeleteFramebuffersEXT(1, @framer) + end end; @@ -1170,7 +1182,9 @@ {$ENDIF} end; -{$IFNDEF IPHONEOS} +{$IFDEF IPHONEOS} + cGPUVendor:= gvApple; +{$ELSE} if StrPos(Str2PChar(vendor), Str2PChar('nvidia')) <> nil then cGPUVendor:= gvNVIDIA else if StrPos(Str2PChar(vendor), Str2PChar('intel')) <> nil then @@ -1178,8 +1192,43 @@ else if StrPos(Str2PChar(vendor), Str2PChar('ati')) <> nil then cGPUVendor:= gvIntel; //SupportNPOTT:= glLoadExtension('GL_ARB_texture_non_power_of_two'); -{$ELSE} - cGPUVendor:= gvApple; + + if isStereoEnabled then + begin + // prepare left and right frame buffers and associated textures + glLoadExtension('GL_EXT_framebuffer_object'); + + // left + glGenFramebuffersEXT(1, @framel); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framel); + glGenRenderbuffersEXT(1, @depthl); + glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthl); + glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, cScreenWidth, cScreenHeight); + glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthl); + glGenTextures(1, @texl); + glBindTexture(GL_TEXTURE_2D, texl); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, cScreenWidth, cScreenHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texl, 0); + + // right + glGenFramebuffersEXT(1, @framer); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framer); + glGenRenderbuffersEXT(1, @depthr); + glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthr); + glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, cScreenWidth, cScreenHeight); + glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthr); + glGenTextures(1, @texr); + glBindTexture(GL_TEXTURE_2D, texr); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, cScreenWidth, cScreenHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texr, 0); + + // reset + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0) + end; {$ENDIF} {$IFDEF DEBUGFILE} diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/uVisualGears.pas --- a/hedgewars/uVisualGears.pas Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/uVisualGears.pas Sat Jul 31 10:42:40 2010 +0200 @@ -115,7 +115,8 @@ @doStepSmokeTrace, @doStepSmokeTrace, @doStepExplosion, - @doStepBigExplosion + @doStepBigExplosion, + @doStepChunk ); function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType; State: LongWord = 0): PVisualGear; @@ -299,6 +300,15 @@ vgtBigExplosion: begin gear^.Angle:= random(360); end; + vgtChunk: begin + gear^.Frame:= random(4); + t:= random(1024); + sp:= 0.001 * (random(85) + 47); + dx:= AngleSin(t).QWordValue/4294967296 * sp; + dy:= AngleCos(t).QWordValue/4294967296 * sp; + if random(2) = 0 then dx := -dx; + (*if random(2) = 0 then*) dy := -2 * dy; + end; end; if State <> 0 then gear^.State:= State; @@ -455,6 +465,7 @@ Tint($FF, $FF, $FF, floor(Gear^.alpha * $FF)); DrawRotatedTextureF(SpritesData[sprSmokeRing].Texture, Gear^.scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 0, 1, 200, 200, Gear^.Angle); end; + vgtChunk: DrawRotatedF(sprChunk, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); end; case Gear^.Kind of vgtSmallDamageTag: DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex); diff -r aaf832c6fbd7 -r 09892cdb8f95 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Sat Jul 31 10:39:20 2010 +0200 +++ b/hedgewars/uWorld.pas Sat Jul 31 10:42:40 2010 +0200 @@ -22,6 +22,7 @@ interface uses SDLh, uGears, uConsts, uFloat, uRandom; +type TRenderMode = (rmDefault, rmLeftEye, rmRightEye); var FollowGear: PGear; WindBarWidth: LongInt; @@ -44,6 +45,7 @@ procedure InitWorld; procedure DrawWorld(Lag: LongInt); +procedure DrawWorldStereo(Lag: LongInt; RM: TRenderMode); procedure AddCaption(s: shortstring; Color: Longword; Group: TCapGroup); procedure ShowMission(caption, subcaption, text: ansistring; icon, time : LongInt); procedure HideMission; @@ -71,6 +73,11 @@ amSel: TAmmoType = amNothing; missionTex: PTexture; missionTimer: LongInt; + stereoDepth: GLfloat = 0; + +const cStereo_Sky = 0.0750; + cStereo_Horizon = 0.0250; + cStereo_Water = 0.0125; procedure InitWorld; var i, t: LongInt; @@ -528,14 +535,7 @@ procedure DrawWorld(Lag: LongInt); -var i, t: LongInt; - r: TSDL_Rect; - tdx, tdy: Double; - grp: TCapGroup; - s: string[15]; - highlight: Boolean; - offset, offsetX, offsetY, ScreenBottom: LongInt; - VertexBuffer: array [0..3] of TVertex2f; +var cc: array[0..3] of GLfloat; begin if not isPaused then begin @@ -564,6 +564,101 @@ if not isPaused then MoveCamera; + if not isStereoEnabled then + begin + glClear(GL_COLOR_BUFFER_BIT); + DrawWorldStereo(Lag, rmDefault) + end + else + begin + // create left fb + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framel); + glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); + DrawWorldStereo(Lag, rmLeftEye); + + // create right fb + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framer); + glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); + DrawWorldStereo(0, rmRightEye); + + // detatch drawing from fbs + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + glGetFloatv(GL_COLOR_CLEAR_VALUE, @cc); + glClearColor(0, 0, 0, 0); + glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); + glClearColor(cc[0], cc[1], cc[2], cc[3]); + SetScale(cDefaultZoomLevel); + + // enable gl stuff + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glBlendFunc(GL_ONE, GL_ONE); + + // draw left frame + glBindTexture(GL_TEXTURE_2D, texl); + glColor3f(0.0, 1.0, 1.0); + glBegin(GL_QUADS); + glTexCoord2f(0.0, 0.0); + glVertex2d(cScreenWidth / -2, cScreenHeight); + glTexCoord2f(1.0, 0.0); + glVertex2d(cScreenWidth / 2, cScreenHeight); + glTexCoord2f(1.0, 1.0); + glVertex2d(cScreenWidth / 2, 0); + glTexCoord2f(0.0, 1.0); + glVertex2d(cScreenWidth / -2, 0); + glEnd(); + + // draw right frame + glBindTexture(GL_TEXTURE_2D, texr); + glColor3f(1.0, 0.0, 0.0); + glBegin(GL_QUADS); + glTexCoord2f(0.0, 0.0); + glVertex2d(cScreenWidth / -2, cScreenHeight); + glTexCoord2f(1.0, 0.0); + glVertex2d(cScreenWidth / 2, cScreenHeight); + glTexCoord2f(1.0, 1.0); + glVertex2d(cScreenWidth / 2, 0); + glTexCoord2f(0.0, 1.0); + glVertex2d(cScreenWidth / -2, 0); + glEnd(); + + // reset + glColor3f(1.0, 1.0, 1.0); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + SetScale(zoom); + end +end; + +procedure ChangeDepth(rm: TRenderMode; d: GLfloat); +begin + if rm = rmDefault then exit + else if rm = rmRightEye then d:= -d; + stereoDepth:= stereoDepth + d; + glMatrixMode(GL_PROJECTION); + glTranslatef(d, 0, 0); + glMatrixMode(GL_MODELVIEW) +end; + +procedure ResetDepth(rm: TRenderMode); +begin + if rm = rmDefault then exit; + glMatrixMode(GL_PROJECTION); + glTranslatef(-stereoDepth, 0, 0); + glMatrixMode(GL_MODELVIEW); + stereoDepth:= 0; +end; + +procedure DrawWorldStereo(Lag: LongInt; RM: TRenderMode); +var i, t: LongInt; + r: TSDL_Rect; + tdx, tdy: Double; + grp: TCapGroup; + s: string[15]; + highlight: Boolean; + offset, offsetX, offsetY, screenBottom: LongInt; + scale: GLfloat; + VertexBuffer: array [0..3] of TVertex2f; +begin if (cReducedQuality and rqNoBackground) = 0 then begin // Offsets relative to camera - spare them to wimpier cpus, no bg or flakes for them anyway @@ -575,9 +670,13 @@ HorizontOffset:= HorizontOffset + ((ScreenBottom-SkyOffset) div 20); // background + ChangeDepth(RM, cStereo_Sky); DrawRepeated(sprSky, sprSkyL, sprSkyR, (WorldDx + LAND_WIDTH div 2) * 3 div 8, SkyOffset); + ChangeDepth(RM, -cStereo_Horizon); DrawRepeated(sprHorizont, sprHorizontL, sprHorizontR, (WorldDx + LAND_WIDTH div 2) * 3 div 5, HorizontOffset); - end; + end + else + ChangeDepth(RM, cStereo_Sky - cStereo_Horizon); DrawVisualGears(0); @@ -585,13 +684,21 @@ begin // Waves DrawWater(255, SkyOffset); + ChangeDepth(RM, -cStereo_Water); DrawWaves( 1, 0 - WorldDx div 32, - cWaveHeight + offsetY div 35, 64); + ChangeDepth(RM, -cStereo_Water); DrawWaves( -1, 25 + WorldDx div 25, - cWaveHeight + offsetY div 38, 48); + ChangeDepth(RM, -cStereo_Water); DrawWaves( 1, 75 - WorldDx div 19, - cWaveHeight + offsetY div 45, 32); + ChangeDepth(RM, -cStereo_Water); DrawWaves(-1, 100 + WorldDx div 14, - cWaveHeight + offsetY div 70, 24); end else + begin + ChangeDepth(RM, -4 * cStereo_Water); DrawWaves(-1, 100, - (cWaveHeight + (cWaveHeight shr 1)), 0); + end; + ResetDepth(RM); DrawLand(WorldDx, WorldDy); @@ -628,20 +735,27 @@ DrawWater(cWaterOpacity, 0); // Waves + ChangeDepth(RM, cStereo_Water); DrawWaves( 1, 25 - WorldDx div 9, - cWaveHeight, 12); if (cReducedQuality and rq2DWater) = 0 then begin //DrawWater(cWaterOpacity, - offsetY div 40); + ChangeDepth(RM, cStereo_Water); DrawWaves(-1, 50 + WorldDx div 6, - cWaveHeight - offsetY div 40, 8); DrawWater(cWaterOpacity, - offsetY div 20); + ChangeDepth(RM, cStereo_Water); DrawWaves( 1, 75 - WorldDx div 4, - cWaveHeight - offsetY div 20, 2); DrawWater(cWaterOpacity, - offsetY div 10); + ChangeDepth(RM, cStereo_Water); DrawWaves( -1, 25 + WorldDx div 3, - cWaveHeight - offsetY div 10, 0); end else + begin + ChangeDepth(RM, cStereo_Water); DrawWaves(-1, 50, - (cWaveHeight shr 1), 0); - + end; + ResetDepth(RM); {$WARNINGS OFF} // Target @@ -862,58 +976,65 @@ offsetX:= 10; {$ENDIF} offsetY:= cOffsetY; -inc(Frames); + +// don't increment fps when drawing the right frame +if (RM = rmDefault) or (RM = rmLeftEye) then +begin + inc(Frames); -if cShowFPS or (GameType = gmtDemo) then inc(CountTicks, Lag); -if (GameType = gmtDemo) and (CountTicks >= 1000) then - begin - i:=GameTicks div 1000; - t:= i mod 60; - s:= inttostr(t); - if t < 10 then s:= '0' + s; - i:= i div 60; - t:= i mod 60; - s:= inttostr(t) + ':' + s; - if t < 10 then s:= '0' + s; - s:= inttostr(i div 60) + ':' + s; + if cShowFPS or (GameType = gmtDemo) then + inc(CountTicks, Lag); + if (GameType = gmtDemo) and (CountTicks >= 1000) then + begin + i:=GameTicks div 1000; + t:= i mod 60; + s:= inttostr(t); + if t < 10 then s:= '0' + s; + i:= i div 60; + t:= i mod 60; + s:= inttostr(t) + ':' + s; + if t < 10 then s:= '0' + s; + s:= inttostr(i div 60) + ':' + s; - if timeTexture <> nil then - FreeTexture(timeTexture); - timeTexture:= nil; + if timeTexture <> nil then + FreeTexture(timeTexture); + timeTexture:= nil; - tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), cWhiteColorChannels); - tmpSurface:= doSurfaceConversion(tmpSurface); - timeTexture:= Surface2Tex(tmpSurface, false); - SDL_FreeSurface(tmpSurface) - end; + tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), cWhiteColorChannels); + tmpSurface:= doSurfaceConversion(tmpSurface); + timeTexture:= Surface2Tex(tmpSurface, false); + SDL_FreeSurface(tmpSurface) + end; -if timeTexture <> nil then - DrawTexture((cScreenWidth shr 1) - 20 - timeTexture^.w - offsetY, offsetX + timeTexture^.h+5, timeTexture); + if timeTexture <> nil then + DrawTexture((cScreenWidth shr 1) - 20 - timeTexture^.w - offsetY, offsetX + timeTexture^.h+5, timeTexture); -if cShowFPS then - begin - if CountTicks >= 1000 then - begin - FPS:= Frames; - Frames:= 0; - CountTicks:= 0; - s:= inttostr(FPS) + ' fps'; - if fpsTexture <> nil then - FreeTexture(fpsTexture); - fpsTexture:= nil; - tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), cWhiteColorChannels); - tmpSurface:= doSurfaceConversion(tmpSurface); - fpsTexture:= Surface2Tex(tmpSurface, false); - SDL_FreeSurface(tmpSurface) - end; - if fpsTexture <> nil then - DrawTexture((cScreenWidth shr 1) - 60 - offsetY, offsetX, fpsTexture); - end; + if cShowFPS then + begin + if CountTicks >= 1000 then + begin + FPS:= Frames; + Frames:= 0; + CountTicks:= 0; + s:= inttostr(FPS) + ' fps'; + if fpsTexture <> nil then + FreeTexture(fpsTexture); + fpsTexture:= nil; + tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), cWhiteColorChannels); + tmpSurface:= doSurfaceConversion(tmpSurface); + fpsTexture:= Surface2Tex(tmpSurface, false); + SDL_FreeSurface(tmpSurface) + end; + if fpsTexture <> nil then + DrawTexture((cScreenWidth shr 1) - 60 - offsetY, offsetX, fpsTexture); + end; -if CountTicks >= 1000 then CountTicks:= 0; + if CountTicks >= 1000 then CountTicks:= 0; -// lag warning (?) -inc(SoundTimerTicks, Lag); + // lag warning (?) + inc(SoundTimerTicks, Lag); +end; + if SoundTimerTicks >= 50 then begin SoundTimerTicks:= 0; diff -r aaf832c6fbd7 -r 09892cdb8f95 misc/libopenalbridge/openalbridge_t.h --- a/misc/libopenalbridge/openalbridge_t.h Sat Jul 31 10:39:20 2010 +0200 +++ b/misc/libopenalbridge/openalbridge_t.h Sat Jul 31 10:42:40 2010 +0200 @@ -1,74 +1,74 @@ -/* - * OpenAL Bridge - a simple portable library for OpenAL interface - * Copyright (c) 2009 Vittorio Giovara - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ - -#include -#include "al.h" - -#ifndef _OALB_INTERFACE_TYPES_H -#define _OALB_INTERFACE_TYPES_H - -enum al_fade_enum {AL_FADE_IN, AL_FADE_OUT}; -typedef enum al_fade_enum al_fade_t; - - -// data type to handle which source source is playing what -#pragma pack(1) -typedef struct _al_sound_t { - const char *filename; // name of the sound file - ALuint buffer; // actual sound content - uint32_t source_index; // index of the associated source - ALboolean is_used; // tells if the element can be overwritten -} al_sound_t; -#pragma pack() - - -// data type for passing data between threads -#pragma pack(1) -typedef struct _fade_t { - uint32_t index; - uint16_t quantity; - al_fade_t type; -} fade_t; -#pragma pack() - - -// data type for WAV header -#pragma pack(1) -typedef struct _WAV_header_t { - uint32_t ChunkID; - uint32_t ChunkSize; - uint32_t Format; - uint32_t Subchunk1ID; - uint32_t Subchunk1Size; - uint16_t AudioFormat; - uint16_t NumChannels; - uint32_t SampleRate; - uint32_t ByteRate; - uint16_t BlockAlign; - uint16_t BitsPerSample; - uint32_t Subchunk2ID; - uint32_t Subchunk2Size; -} WAV_header_t; -#pragma pack() - - -#ifdef __CPLUSPLUS -} -#endif - -#endif /*_OALB_INTERFACE_TYPES_H*/ +/* + * OpenAL Bridge - a simple portable library for OpenAL interface + * Copyright (c) 2009 Vittorio Giovara + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include "al.h" + +#ifndef _OALB_INTERFACE_TYPES_H +#define _OALB_INTERFACE_TYPES_H + +enum al_fade_enum {AL_FADE_IN, AL_FADE_OUT}; +typedef enum al_fade_enum al_fade_t; + + +// data type to handle which source source is playing what +#pragma pack(1) +typedef struct _al_sound_t { + const char *filename; // name of the sound file + ALuint buffer; // actual sound content + uint32_t source_index; // index of the associated source + ALboolean is_used; // tells if the element can be overwritten +} al_sound_t; +#pragma pack() + + +// data type for passing data between threads +#pragma pack(1) +typedef struct _fade_t { + uint32_t index; + uint16_t quantity; + al_fade_t type; +} fade_t; +#pragma pack() + + +// data type for WAV header +#pragma pack(1) +typedef struct _WAV_header_t { + uint32_t ChunkID; + uint32_t ChunkSize; + uint32_t Format; + uint32_t Subchunk1ID; + uint32_t Subchunk1Size; + uint16_t AudioFormat; + uint16_t NumChannels; + uint32_t SampleRate; + uint32_t ByteRate; + uint16_t BlockAlign; + uint16_t BitsPerSample; + uint32_t Subchunk2ID; + uint32_t Subchunk2Size; +} WAV_header_t; +#pragma pack() + + +#ifdef __CPLUSPLUS +} +#endif + +#endif /*_OALB_INTERFACE_TYPES_H*/ diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Graphics/Chunk.png Binary file share/hedgewars/Data/Graphics/Chunk.png has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/CMakeLists.txt --- a/share/hedgewars/Data/Locale/CMakeLists.txt Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/CMakeLists.txt Sat Jul 31 10:42:40 2010 +0200 @@ -1,12 +1,9 @@ file(GLOB txttrans2 ??.txt) file(GLOB txttrans5 ?????.txt) - -set(ts_files *.ts) -QT4_CREATE_TRANSLATION(qm_files ts_files) -#file(GLOB qmtrans hedgewars_*.qm) +file(GLOB qmtrans hedgewars_*.qm) install(FILES ${txttrans2} ${txttrans5} - ${qm_files} + ${qmtrans} DESTINATION ${SHAREPATH}Data/Locale) diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_bg.qm Binary file share/hedgewars/Data/Locale/hedgewars_bg.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_bg.ts --- a/share/hedgewars/Data/Locale/hedgewars_bg.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_bg.ts Sat Jul 31 10:42:40 2010 +0200 @@ -388,11 +388,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -442,6 +437,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1068,11 +1068,11 @@ - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_cs.qm Binary file share/hedgewars/Data/Locale/hedgewars_cs.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_cs.ts --- a/share/hedgewars/Data/Locale/hedgewars_cs.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_cs.ts Sat Jul 31 10:42:40 2010 +0200 @@ -391,11 +391,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -445,6 +440,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1073,11 +1073,11 @@ - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_de.qm Binary file share/hedgewars/Data/Locale/hedgewars_de.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_de.ts --- a/share/hedgewars/Data/Locale/hedgewars_de.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_de.ts Sat Jul 31 10:42:40 2010 +0200 @@ -411,11 +411,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -465,6 +460,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1099,11 +1099,11 @@ Einige Dinge könnten nicht funktionieren oder unvollständig sein. Benutzung auf eigene Gefahr! - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_en.qm Binary file share/hedgewars/Data/Locale/hedgewars_en.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_en.ts --- a/share/hedgewars/Data/Locale/hedgewars_en.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_en.ts Sat Jul 31 10:42:40 2010 +0200 @@ -406,11 +406,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -460,6 +455,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1088,11 +1088,11 @@ Explosives - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_es.qm Binary file share/hedgewars/Data/Locale/hedgewars_es.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_es.ts --- a/share/hedgewars/Data/Locale/hedgewars_es.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_es.ts Sat Jul 31 10:42:40 2010 +0200 @@ -410,11 +410,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -464,6 +459,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1099,11 +1099,11 @@ Explosivos - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_fi.qm Binary file share/hedgewars/Data/Locale/hedgewars_fi.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_fi.ts --- a/share/hedgewars/Data/Locale/hedgewars_fi.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_fi.ts Sat Jul 31 10:42:40 2010 +0200 @@ -406,11 +406,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -460,6 +455,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1088,11 +1088,11 @@ - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_fr.qm Binary file share/hedgewars/Data/Locale/hedgewars_fr.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_fr.ts --- a/share/hedgewars/Data/Locale/hedgewars_fr.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts Sat Jul 31 10:42:40 2010 +0200 @@ -406,11 +406,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -460,6 +455,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1088,11 +1088,11 @@ - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_it.qm Binary file share/hedgewars/Data/Locale/hedgewars_it.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_it.ts --- a/share/hedgewars/Data/Locale/hedgewars_it.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_it.ts Sat Jul 31 10:42:40 2010 +0200 @@ -410,11 +410,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -464,6 +459,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1098,11 +1098,11 @@ Esplosivi - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_ja.qm Binary file share/hedgewars/Data/Locale/hedgewars_ja.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_ja.ts --- a/share/hedgewars/Data/Locale/hedgewars_ja.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_ja.ts Sat Jul 31 10:42:40 2010 +0200 @@ -385,11 +385,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -439,6 +434,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1063,11 +1063,11 @@ - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_pl.qm Binary file share/hedgewars/Data/Locale/hedgewars_pl.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_pl.ts --- a/share/hedgewars/Data/Locale/hedgewars_pl.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_pl.ts Sat Jul 31 10:42:40 2010 +0200 @@ -418,7 +418,7 @@ Connect a gamepad before launching the game to be able to assign its controls to your team. Tips - Jeśli podłączysz Gamepada przed włączeniem gry, będziesz miał możliwość przypisania klawiszy by sterować nim własne jeże. + Jeśli podłączysz Gamepada przed włączeniem gry, będziesz miał możliwość przypisania klawiszy by sterować nim własne jeże. Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. @@ -470,6 +470,18 @@ Tips Żadny jeż nie został ranny w czasie tworzenia tej gry. + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + + + + PageMultiplayer + + Start + Start + PageNet @@ -1104,9 +1116,13 @@ This HG build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! - Ta wersja jest w fazie produkcji i może nie być kompatybilna z innymi wersjami gry. + Ta wersja jest w fazie produkcji i może nie być kompatybilna z innymi wersjami gry. Niektóre funkcje mogą nie działać lub być niekompletne. Używaj na własne ryzyko! + + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + + QLineEdit diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_pt_BR.qm Binary file share/hedgewars/Data/Locale/hedgewars_pt_BR.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_pt_BR.ts --- a/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts Sat Jul 31 10:42:40 2010 +0200 @@ -401,11 +401,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -455,6 +450,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1089,11 +1089,11 @@ Explosivos - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_pt_PT.qm Binary file share/hedgewars/Data/Locale/hedgewars_pt_PT.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_pt_PT.ts --- a/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts Sat Jul 31 10:42:40 2010 +0200 @@ -406,11 +406,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -460,6 +455,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1088,11 +1088,11 @@ Explosivos - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_ru.qm Binary file share/hedgewars/Data/Locale/hedgewars_ru.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_ru.ts --- a/share/hedgewars/Data/Locale/hedgewars_ru.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts Sat Jul 31 10:42:40 2010 +0200 @@ -409,11 +409,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -463,6 +458,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1099,11 +1099,11 @@ Взрывчатка - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_sk.qm Binary file share/hedgewars/Data/Locale/hedgewars_sk.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_sk.ts --- a/share/hedgewars/Data/Locale/hedgewars_sk.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_sk.ts Sat Jul 31 10:42:40 2010 +0200 @@ -409,11 +409,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -463,6 +458,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1099,11 +1099,11 @@ Výbušniny - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_sv.qm Binary file share/hedgewars/Data/Locale/hedgewars_sv.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_sv.ts --- a/share/hedgewars/Data/Locale/hedgewars_sv.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_sv.ts Sat Jul 31 10:42:40 2010 +0200 @@ -406,11 +406,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -460,6 +455,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1094,11 +1094,11 @@ Bombtunnor - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_tr_TR.qm Binary file share/hedgewars/Data/Locale/hedgewars_tr_TR.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_tr_TR.ts --- a/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts Sat Jul 31 10:42:40 2010 +0200 @@ -393,11 +393,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -447,6 +442,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1071,11 +1071,11 @@ - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_uk.qm Binary file share/hedgewars/Data/Locale/hedgewars_uk.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_uk.ts --- a/share/hedgewars/Data/Locale/hedgewars_uk.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_uk.ts Sat Jul 31 10:42:40 2010 +0200 @@ -409,11 +409,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -463,6 +458,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1099,11 +1099,11 @@ Деякі функції можуть бути зламані чи неповні. Використовуйте її на свій страх і ризик! - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_zh_CN.qm Binary file share/hedgewars/Data/Locale/hedgewars_zh_CN.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_zh_CN.ts --- a/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts Sat Jul 31 10:42:40 2010 +0200 @@ -403,11 +403,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -457,6 +452,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1083,11 +1083,11 @@ - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_zh_TW.qm Binary file share/hedgewars/Data/Locale/hedgewars_zh_TW.qm has changed diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Locale/hedgewars_zh_TW.ts --- a/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Sat Jul 31 10:39:20 2010 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Sat Jul 31 10:42:40 2010 +0200 @@ -403,11 +403,6 @@ - Connect a gamepad before launching the game to be able to assign its controls to your team. - Tips - - - Create an account on http://www.hedgewars.org/ to keep others from using your most favourite nickname while playing on the official server. Tips @@ -457,6 +452,11 @@ Tips + + Connect one or more gamepads before launching the game to be able to assign their controls to your teams. + Tips + + PageMultiplayer @@ -1083,11 +1083,11 @@ - This SVN build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! + Tip: - Tip: + This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! diff -r aaf832c6fbd7 -r 09892cdb8f95 share/hedgewars/Data/Themes/Olympics/Chunk.png Binary file share/hedgewars/Data/Themes/Olympics/Chunk.png has changed