# HG changeset patch # User sheepluva # Date 1420462947 -3600 # Node ID fc37b9df2b03ffaf3dc61476cd6e812d87638740 # Parent 0f3a0f117810ff16aa895774dbaf809e2caaddef# Parent 20ec6af4fb870ff35b59b187c02937ed19a9156f Merge pull request #24 from LocutusOfBorg/update-travis travis adjustments by LocutusOfBorg diff -r 20ec6af4fb87 -r fc37b9df2b03 CMakeLists.txt --- a/CMakeLists.txt Fri Dec 12 09:51:58 2014 +0100 +++ b/CMakeLists.txt Mon Jan 05 14:02:27 2015 +0100 @@ -51,8 +51,8 @@ #versioning set(CPACK_PACKAGE_VERSION_MAJOR 0) set(CPACK_PACKAGE_VERSION_MINOR 9) -set(CPACK_PACKAGE_VERSION_PATCH 21) -set(HEDGEWARS_PROTO_VER 48) +set(CPACK_PACKAGE_VERSION_PATCH 22) +set(HEDGEWARS_PROTO_VER 50) set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") include(${CMAKE_MODULE_PATH}/revinfo.cmake) diff -r 20ec6af4fb87 -r fc37b9df2b03 ChangeLog.txt --- a/ChangeLog.txt Fri Dec 12 09:51:58 2014 +0100 +++ b/ChangeLog.txt Mon Jan 05 14:02:27 2015 +0100 @@ -8,10 +8,13 @@ + Highlander gamemode can now be used with custom weapon schemes (1-8=How probable to get this weapon. 9=All hogs get it) + New gameplay mode "Construction Mode" + New gameplay mode "TechRacer" + + New game play mode "DiagonalMaze" (generates a simple diagonal maze) + + Add 7 target practice missions, now with simple scoring + + Update RC Plane Challenge: Stats screen reworked and shows now several facts, simple ranking system based on used planes, some taunts in the game + New training/multiplayer mission: "Climb Home" + Game scheme screen has a "Script parameter" field now. This allows to make more customizable scripts/modes. + Network game rejoining. Note: Your team(s) will vanish after 3 turns. - + Visual and gameplay changes to "sea" - world edges. + + Visual and gameplay changes to "sea" - world edge, visual change to wrap world edge to allow seeing through the wrap, visual change to bounce worldedge + The map of the Basketball Mission can be selected for regular games again ("BasketballField") + New engine command: /togglechat will disable/enable chat display (does not affect chat history display) + Change to Racer: first weapon/utility available will be automatically selected on start @@ -32,10 +35,15 @@ + Moved room status filter to top left of rooms list. Lua API: + + New library: Params, makes parsing of script parameters easier + + New library: TargetPractice, used to generate target practice missions (the newly added missions use it) + More helpful syntax error messages. - + New hooks: onParameters(), onPreviewInit(). + + New hooks: + onParameters(paramString) -- called when script parameters are configured. the parameter contains the parameter(s) as text string + onPreviewInit() -- called during map preview initialization + onGearWaterSkip(gearUid) -- called when a gear skims the water without drowning (when hitting it with high speed at low angle). By checking gearUid you can figure out which gear that was. + New functions: - Dismissteam(teamname) + DismissTeam(teamname) -- removes a team from the game (note: if you used loc() on teamnames, don't forget to the translated teamname here too) GetGameFlag(gameflag) -- returns true/false PlaceSprite(x, y, sprite, frameIdx [, landFlag, ... ]) -- sprite refers to an id from the TSprite list SetWaterLine(waterline) -- moves water level to the specified y. the current value is in read-only global waterline @@ -51,7 +59,10 @@ LandFlags: lfIndestructible, lfIce, lfBouncy + Changed functions: HogSay(gearUid, text, manner [, vgState]) -- now also allows you to make NON-Hedgehog gears speak, e.g. barrels... wait what?! - + + Changed hooks: + onHogAttack() can now be hooked with new parameter: onHogAttack(ammoType) - to conveniently find out which ammo/weapon is being used + * Fixes: + gfResetHealth is now a available like the other GameFlags 0.9.19 -> 0.9.20: + New campaign, A Space Adventure! + Password protected rooms diff -r 20ec6af4fb87 -r fc37b9df2b03 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Fri Dec 12 09:51:58 2014 +0100 +++ b/QTfrontend/hwform.cpp Mon Jan 05 14:02:27 2015 +0100 @@ -1832,7 +1832,7 @@ if (hwnet) { NetAmmoSchemeModel * netAmmo = new NetAmmoSchemeModel(hwnet); - connect(hwnet, SIGNAL(netSchemeConfig(QStringList &)), netAmmo, SLOT(setNetSchemeConfig(QStringList &))); + connect(hwnet, SIGNAL(netSchemeConfig(QStringList)), netAmmo, SLOT(setNetSchemeConfig(QStringList))); ui.pageNetGame->pGameCFG->GameSchemes->setModel(netAmmo); diff -r 20ec6af4fb87 -r fc37b9df2b03 QTfrontend/model/ammoSchemeModel.cpp --- a/QTfrontend/model/ammoSchemeModel.cpp Fri Dec 12 09:51:58 2014 +0100 +++ b/QTfrontend/model/ammoSchemeModel.cpp Mon Jan 05 14:02:27 2015 +0100 @@ -845,7 +845,7 @@ return netScheme[index.column()]; } -void NetAmmoSchemeModel::setNetSchemeConfig(QStringList & cfg) +void NetAmmoSchemeModel::setNetSchemeConfig(QStringList cfg) { if(cfg.size() != netScheme.size()) { diff -r 20ec6af4fb87 -r fc37b9df2b03 QTfrontend/model/ammoSchemeModel.h --- a/QTfrontend/model/ammoSchemeModel.h Fri Dec 12 09:51:58 2014 +0100 +++ b/QTfrontend/model/ammoSchemeModel.h Mon Jan 05 14:02:27 2015 +0100 @@ -70,7 +70,7 @@ QVariant data(const QModelIndex &index, int role) const; public slots: - void setNetSchemeConfig(QStringList & cfg); + void setNetSchemeConfig(QStringList cfg); private: QList netScheme; diff -r 20ec6af4fb87 -r fc37b9df2b03 QTfrontend/net/newnetclient.cpp --- a/QTfrontend/net/newnetclient.cpp Fri Dec 12 09:51:58 2014 +0100 +++ b/QTfrontend/net/newnetclient.cpp Mon Jan 05 14:02:27 2015 +0100 @@ -32,7 +32,7 @@ #include "servermessages.h" #include "HWApplication.h" -char delimeter='\n'; +char delimiter='\n'; HWNewNet::HWNewNet() : isChief(false), @@ -74,7 +74,7 @@ { if (m_game_connected) { - RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("User quit")); + RawSendNet(QString("QUIT%1%2").arg(delimiter).arg("User quit")); emit disconnected(tr("User quit")); } NetSocket.flush(); @@ -91,7 +91,7 @@ void HWNewNet::Disconnect() { if (m_game_connected) - RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("User quit")); + RawSendNet(QString("QUIT%1%2").arg(delimiter).arg("User quit")); m_game_connected = false; NetSocket.disconnectFromHost(); @@ -108,9 +108,9 @@ myroom = room; if(password.isEmpty()) - RawSendNet(QString("CREATE_ROOM%1%2").arg(delimeter).arg(room)); + RawSendNet(QString("CREATE_ROOM%1%2").arg(delimiter).arg(room)); else - RawSendNet(QString("CREATE_ROOM%1%2%1%3").arg(delimeter).arg(room).arg(password)); + RawSendNet(QString("CREATE_ROOM%1%2%1%3").arg(delimiter).arg(room).arg(password)); isChief = true; } @@ -126,29 +126,29 @@ myroom = room; if(password.isEmpty()) - RawSendNet(QString("JOIN_ROOM%1%2").arg(delimeter).arg(room)); + RawSendNet(QString("JOIN_ROOM%1%2").arg(delimiter).arg(room)); else - RawSendNet(QString("JOIN_ROOM%1%2%1%3").arg(delimeter).arg(room).arg(password)); + RawSendNet(QString("JOIN_ROOM%1%2%1%3").arg(delimiter).arg(room).arg(password)); isChief = false; } void HWNewNet::AddTeam(const HWTeam & team) { - QString cmd = QString("ADD_TEAM") + delimeter + - team.name() + delimeter + - QString::number(team.color()) + delimeter + - team.grave() + delimeter + - team.fort() + delimeter + - team.voicepack() + delimeter + - team.flag() + delimeter + + QString cmd = QString("ADD_TEAM") + delimiter + + team.name() + delimiter + + QString::number(team.color()) + delimiter + + team.grave() + delimiter + + team.fort() + delimiter + + team.voicepack() + delimiter + + team.flag() + delimiter + QString::number(team.difficulty()); for(int i = 0; i < HEDGEHOGS_PER_TEAM; ++i) { - cmd.append(delimeter); + cmd.append(delimiter); cmd.append(team.hedgehog(i).Name); - cmd.append(delimeter); + cmd.append(delimiter); cmd.append(team.hedgehog(i).Hat); } RawSendNet(cmd); @@ -156,12 +156,12 @@ void HWNewNet::RemoveTeam(const HWTeam & team) { - RawSendNet(QString("REMOVE_TEAM") + delimeter + team.name()); + RawSendNet(QString("REMOVE_TEAM") + delimiter + team.name()); } void HWNewNet::NewNick(const QString & nick) { - RawSendNet(QString("NICK%1%2").arg(delimeter).arg(nick)); + RawSendNet(QString("NICK%1%2").arg(delimiter).arg(nick)); } void HWNewNet::ToggleReady() @@ -173,7 +173,7 @@ { QString msg = QString(buf.toBase64()); - RawSendNet(QString("EM%1%2").arg(delimeter).arg(msg)); + RawSendNet(QString("EM%1%2").arg(delimiter).arg(msg)); } void HWNewNet::RawSendNet(const QString & str) @@ -292,14 +292,14 @@ { // TODO: Warn user, disconnect qWarning() << "Server too old"; - RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("Server too old")); + RawSendNet(QString("QUIT%1%2").arg(delimiter).arg("Server too old")); Disconnect(); emit disconnected(tr("The server is too old. Disconnecting now.")); return; } - RawSendNet(QString("NICK%1%2").arg(delimeter).arg(mynick)); - RawSendNet(QString("PROTO%1%2").arg(delimeter).arg(*cProtoVer)); + RawSendNet(QString("NICK%1%2").arg(delimiter).arg(mynick)); + RawSendNet(QString("PROTO%1%2").arg(delimiter).arg(*cProtoVer)); netClientState = Connected; m_game_connected = true; emit adminAccess(false); @@ -331,7 +331,7 @@ if (lst[0] == "PING") { if (lst.size() > 1) - RawSendNet(QString("PONG%1%2").arg(delimeter).arg(lst[1])); + RawSendNet(QString("PONG%1%2").arg(delimiter).arg(lst[1])); else RawSendNet(QString("PONG")); return; @@ -873,7 +873,7 @@ { if (isChief) RawSendNet(QString("HH_NUM%1%2%1%3") - .arg(delimeter) + .arg(delimiter) .arg(team.name()) .arg(team.numHedgehogs())); } @@ -882,7 +882,7 @@ { if (isChief) RawSendNet(QString("TEAM_COLOR%1%2%1%3") - .arg(delimeter) + .arg(delimiter) .arg(team.name()) .arg(team.color())); } @@ -892,9 +892,9 @@ if (isChief) RawSendNet( QString("CFG%1%2%1%3") - .arg(delimeter) + .arg(delimiter) .arg(param) - .arg(value.join(QString(delimeter))) + .arg(value.join(QString(delimiter))) ); } @@ -911,7 +911,7 @@ { if(str != "") { - RawSendNet(QString("CHAT") + delimeter + str); + RawSendNet(QString("CHAT") + delimiter + str); QString action = HWProto::chatStringToAction(str); if (action != NULL) emit(roomChatAction(mynick, action)); @@ -924,7 +924,7 @@ { if(str != "") { - RawSendNet(QString("CHAT") + delimeter + str); + RawSendNet(QString("CHAT") + delimiter + str); QString action = HWProto::chatStringToAction(str); if (action != NULL) emit(lobbyChatAction(mynick, action)); @@ -935,7 +935,7 @@ void HWNewNet::SendTeamMessage(const QString& str) { - RawSendNet(QString("TEAMCHAT") + delimeter + str); + RawSendNet(QString("TEAMCHAT") + delimiter + str); } void HWNewNet::askRoomsList() @@ -978,23 +978,23 @@ if (netClientState == InGame) { netClientState = InRoom; - RawSendNet(QString("ROUNDFINISHED%1%2").arg(delimeter).arg(correctly ? "1" : "0")); + RawSendNet(QString("ROUNDFINISHED%1%2").arg(delimiter).arg(correctly ? "1" : "0")); } } void HWNewNet::banPlayer(const QString & nick) { - RawSendNet(QString("BAN%1%2").arg(delimeter).arg(nick)); + RawSendNet(QString("BAN%1%2").arg(delimiter).arg(nick)); } void HWNewNet::banIP(const QString & ip, const QString & reason, int seconds) { - RawSendNet(QString("BANIP%1%2%1%3%1%4").arg(delimeter).arg(ip).arg(reason).arg(seconds)); + RawSendNet(QString("BANIP%1%2%1%3%1%4").arg(delimiter).arg(ip).arg(reason).arg(seconds)); } void HWNewNet::banNick(const QString & nick, const QString & reason, int seconds) { - RawSendNet(QString("BANNICK%1%2%1%3%1%4").arg(delimeter).arg(nick).arg(reason).arg(seconds)); + RawSendNet(QString("BANNICK%1%2%1%3%1%4").arg(delimiter).arg(nick).arg(reason).arg(seconds)); } void HWNewNet::getBanList() @@ -1004,31 +1004,31 @@ void HWNewNet::removeBan(const QString & b) { - RawSendNet(QString("UNBAN%1%2").arg(delimeter).arg(b)); + RawSendNet(QString("UNBAN%1%2").arg(delimiter).arg(b)); } void HWNewNet::kickPlayer(const QString & nick) { - RawSendNet(QString("KICK%1%2").arg(delimeter).arg(nick)); + RawSendNet(QString("KICK%1%2").arg(delimiter).arg(nick)); } void HWNewNet::infoPlayer(const QString & nick) { - RawSendNet(QString("INFO%1%2").arg(delimeter).arg(nick)); + RawSendNet(QString("INFO%1%2").arg(delimiter).arg(nick)); } void HWNewNet::followPlayer(const QString & nick) { if (!isInRoom()) { - RawSendNet(QString("FOLLOW%1%2").arg(delimeter).arg(nick)); + RawSendNet(QString("FOLLOW%1%2").arg(delimiter).arg(nick)); isChief = false; } } void HWNewNet::consoleCommand(const QString & cmd) { - RawSendNet(QString("CMD%1%2").arg(delimeter).arg(cmd)); + RawSendNet(QString("CMD%1%2").arg(delimiter).arg(cmd)); } bool HWNewNet::allPlayersReady() @@ -1047,7 +1047,7 @@ void HWNewNet::updateRoomName(const QString & name) { - RawSendNet(QString("ROOM_NAME%1%2").arg(delimeter).arg(name)); + RawSendNet(QString("ROOM_NAME%1%2").arg(delimiter).arg(name)); } @@ -1085,17 +1085,17 @@ void HWNewNet::setServerMessageNew(const QString & msg) { - RawSendNet(QString("SET_SERVER_VAR%1MOTD_NEW%1%2").arg(delimeter).arg(msg)); + RawSendNet(QString("SET_SERVER_VAR%1MOTD_NEW%1%2").arg(delimiter).arg(msg)); } void HWNewNet::setServerMessageOld(const QString & msg) { - RawSendNet(QString("SET_SERVER_VAR%1MOTD_OLD%1%2").arg(delimeter).arg(msg)); + RawSendNet(QString("SET_SERVER_VAR%1MOTD_OLD%1%2").arg(delimiter).arg(msg)); } void HWNewNet::setLatestProtocolVar(int proto) { - RawSendNet(QString("SET_SERVER_VAR%1LATEST_PROTO%1%2").arg(delimeter).arg(proto)); + RawSendNet(QString("SET_SERVER_VAR%1LATEST_PROTO%1%2").arg(delimiter).arg(proto)); } void HWNewNet::askServerVars() @@ -1165,5 +1165,5 @@ .append("!hedgewars") , QCryptographicHash::Sha1).toHex(); - RawSendNet(QString("PASSWORD%1%2%1%3").arg(delimeter).arg(hash).arg(m_clientSalt)); + RawSendNet(QString("PASSWORD%1%2%1%3").arg(delimiter).arg(hash).arg(m_clientSalt)); } diff -r 20ec6af4fb87 -r fc37b9df2b03 QTfrontend/net/newnetclient.h --- a/QTfrontend/net/newnetclient.h Fri Dec 12 09:51:58 2014 +0100 +++ b/QTfrontend/net/newnetclient.h Mon Jan 05 14:02:27 2015 +0100 @@ -36,7 +36,7 @@ class QSortFilterProxyModel; class QAbstractItemModel; -extern char delimeter; +extern char delimiter; class HWNewNet : public QObject { @@ -111,7 +111,7 @@ void roomNameUpdated(const QString & name); void askForRoomPassword(); - void netSchemeConfig(QStringList &); + void netSchemeConfig(QStringList); void paramChanged(const QString & param, const QStringList & value); void configAsked(); diff -r 20ec6af4fb87 -r fc37b9df2b03 QTfrontend/res/html/about.html --- a/QTfrontend/res/html/about.html Fri Dec 12 09:51:58 2014 +0100 +++ b/QTfrontend/res/html/about.html Mon Jan 05 14:02:27 2015 +0100 @@ -74,7 +74,7 @@ English: Andrey Korotaev <unC0Rr@gmail.com>
Finnish: Nina Kuisma <ninnnu@gmail.com>, Janne Uusitupa
French: Antoine Turmel <geekshadow@gmail.com>, Clement Woitrain <sphrixclement@gmail.com>, Matisumi
- German: Peter Hüwe <PeterHuewe@gmx.de>, Mario Liebisch <mario.liebisch@gmail.com>, Richard Karolyi <sheepluva@ercatec.net>
+ German: Peter Hüwe <PeterHuewe@gmx.de>, Mario Liebisch <mario.liebisch@gmail.com>, Richard Karolyi <sheepluva@ercatec.net>, Wuzzy <almikes@aol.com>
Greek: <talos_kriti@yahoo.gr>
Italian: Luca Bonora <bonora.luca@gmail.com>, Marco Bresciani <m.bresciani@email.it>
Japanese: ADAM Etienne <etienne.adam@gmail.com>, Marco Bresciani <m.bresciani@email.it>
diff -r 20ec6af4fb87 -r fc37b9df2b03 QTfrontend/ui/page/pagedrawmap.cpp --- a/QTfrontend/ui/page/pagedrawmap.cpp Fri Dec 12 09:51:58 2014 +0100 +++ b/QTfrontend/ui/page/pagedrawmap.cpp Mon Jan 05 14:02:27 2015 +0100 @@ -45,6 +45,7 @@ pbClear = addButton(tr("Clear"), pageLayout, 5, 0); pbOptimize = addButton(tr("Optimize"), pageLayout, 6, 0); + pbOptimize->setVisible(false); pbLoad = addButton(tr("Load"), pageLayout, 7, 0); pbSave = addButton(tr("Save"), pageLayout, 8, 0); diff -r 20ec6af4fb87 -r fc37b9df2b03 cmake_modules/CheckHaskellModuleExists.cmake --- a/cmake_modules/CheckHaskellModuleExists.cmake Fri Dec 12 09:51:58 2014 +0100 +++ b/cmake_modules/CheckHaskellModuleExists.cmake Mon Jan 05 14:02:27 2015 +0100 @@ -30,11 +30,11 @@ "-DPARAMETERS=${PARAMETERS}" -cpp -c "${CMAKE_MODULE_PATH}/checkModule.hs" + RESULT_VARIABLE COMMAND_RESULT ERROR_VARIABLE BUILD_ERROR OUTPUT_STRIP_TRAILING_WHITESPACE ) - - if("${BUILD_ERROR}" STREQUAL "") + if(${COMMAND_RESULT} EQUAL 0) message(STATUS "Looking for ${FUNCTION} in ${MODULE} - found") set(${VARIABLE} 1 CACHE INTERNAL "Have module ${MODULE}") file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log diff -r 20ec6af4fb87 -r fc37b9df2b03 gameServer/Actions.hs --- a/gameServer/Actions.hs Fri Dec 12 09:51:58 2014 +0100 +++ b/gameServer/Actions.hs Mon Jan 05 14:02:27 2015 +0100 @@ -415,11 +415,12 @@ processAction RemoveClientTeams = do (Just ci) <- gets clientIndex rnc <- gets roomsClients + n <- client's nick removeTeamActions <- io $ do rId <- clientRoomM rnc ci roomTeams <- room'sM rnc teams rId - return . Prelude.map (RemoveTeam . teamname) . Prelude.filter (\t -> teamownerId t == ci) $ roomTeams + return . Prelude.map (RemoveTeam . teamname) . Prelude.filter (\t -> teamowner t == n) $ roomTeams mapM_ processAction removeTeamActions diff -r 20ec6af4fb87 -r fc37b9df2b03 gameServer/CoreTypes.hs --- a/gameServer/CoreTypes.hs Fri Dec 12 09:51:58 2014 +0100 +++ b/gameServer/CoreTypes.hs Mon Jan 05 14:02:27 2015 +0100 @@ -162,7 +162,6 @@ data TeamInfo = TeamInfo { - teamownerId :: ClientIndex, teamowner :: B.ByteString, teamname :: B.ByteString, teamcolor :: B.ByteString, @@ -170,6 +169,7 @@ teamfort :: B.ByteString, teamvoicepack :: B.ByteString, teamflag :: B.ByteString, + isOwnerRegistered :: Bool, difficulty :: Int, hhnum :: Int, hedgehogs :: [HedgehogInfo] diff -r 20ec6af4fb87 -r fc37b9df2b03 gameServer/EngineInteraction.hs --- a/gameServer/EngineInteraction.hs Fri Dec 12 09:51:58 2014 +0100 +++ b/gameServer/EngineInteraction.hs Mon Jan 05 14:02:27 2015 +0100 @@ -102,7 +102,9 @@ , [eml ["eseed ", mParams Map.! "SEED"]] , [eml ["e$gmflags ", showB gameFlags]] , schemeFlags + , schemeAdditional , [eml ["e$template_filter ", mParams Map.! "TEMPLATE"]] + , [eml ["e$feature_size ", mParams Map.! "FEATURE_SIZE"]] , [eml ["e$mapgen ", mapgen]] , mapgenSpecific , concatMap teamSetup ti @@ -111,11 +113,11 @@ ] where keys1, keys2 :: Set.Set B.ByteString - keys1 = Set.fromList ["MAP", "MAPGEN", "MAZE_SIZE", "SEED", "TEMPLATE"] + keys1 = Set.fromList ["FEATURE_SIZE", "MAP", "MAPGEN", "MAZE_SIZE", "SEED", "TEMPLATE"] keys2 = Set.fromList ["AMMO", "SCHEME", "SCRIPT", "THEME"] sane = Set.null (keys1 Set.\\ Map.keysSet mParams) && Set.null (keys2 Set.\\ Map.keysSet prms) - && (not . null . drop 27 $ scheme) + && (not . null . drop 40 $ scheme) && (not . null . tail $ prms Map.! "AMMO") mapGenTypes = ["+rnd+", "+maze+", "+drawn+"] maybeScript = let s = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]] @@ -131,6 +133,7 @@ schemeFlags = map (\(v, (n, m)) -> eml [n, " ", showB $ (readInt_ v) * m]) $ filter (\(_, (n, _)) -> not $ B.null n) $ zip (drop (length gameFlagConsts) scheme) schemeParams + schemeAdditional = let scriptParam = B.tail $ scheme !! 41 in [eml ["e$scriptparam ", scriptParam] | not $ B.null scriptParam] ammoStr :: B.ByteString ammoStr = head . tail $ prms Map.! "AMMO" ammo = let l = B.length ammoStr `div` 4; ((a, b), (c, d)) = (B.splitAt l . fst &&& B.splitAt l . snd) . B.splitAt (l * 2) $ ammoStr in @@ -184,6 +187,7 @@ , ("e$healthdec", 1) , ("e$ropepct", 1) , ("e$getawaytime", 1) + , ("e$worldedge", 1) ] diff -r 20ec6af4fb87 -r fc37b9df2b03 gameServer/HWProtoInRoomState.hs --- a/gameServer/HWProtoInRoomState.hs Fri Dec 12 09:51:58 2014 +0100 +++ b/gameServer/HWProtoInRoomState.hs Mon Jan 05 14:02:27 2015 +0100 @@ -41,7 +41,7 @@ chans <- roomClientsChans let nicks = map (nick . client rnc) . roomClients rnc $ clientRoom rnc ci - let allPlayersRegistered = all ((<) 0 . B.length . webPassword . client rnc . teamownerId) $ teams rm + let allPlayersRegistered = all isOwnerRegistered $ teams rm if (playersIn rm == readyPlayers rm || clientProto cl > 43) && not (isJust $ gameInfo rm) then if enoughClans rm then @@ -87,15 +87,19 @@ return [Warning $ loc "Restricted"] else if isMaster cl then return [ - ModifyRoom f, + ModifyRoom $ f (clientProto cl), AnswerClients chans ("CFG" : paramName : paramStrs)] else return [ProtocolError $ loc "Not room master"] where - f r = if paramName `Map.member` (mapParams r) then + f clproto r = if paramName `Map.member` (mapParams r) then r{mapParams = Map.insert paramName (head paramStrs) (mapParams r)} else - r{params = Map.insert paramName paramStrs (params r)} + r{params = Map.insert paramName (fixedParamStr clproto) (params r)} + fixedParamStr clproto + | clproto /= 49 = paramStrs + | paramName /= "SCHEME" = paramStrs + | otherwise = L.init paramStrs ++ [B.replicate 50 'X' `B.append` L.last paramStrs] handleCmd_inRoom ("ADD_TEAM" : tName : color : grave : fort : voicepack : flag : difStr : hhsInfo) @@ -103,11 +107,13 @@ | otherwise = do (ci, _) <- ask rm <- thisRoom + cl <- thisClient clNick <- clientNick clChan <- thisClientChans othChans <- roomOthersChans roomChans <- roomClientsChans cl <- thisClient + let isRegistered = (<) 0 . B.length . webPassword $ cl teamColor <- if clientProto cl < 42 then return color @@ -115,7 +121,7 @@ liftM (head . (L.\\) (map B.singleton ['0'..]) . map teamcolor . teams) thisRoom let roomTeams = teams rm let hhNum = let p = if not $ null roomTeams then minimum [hhnum $ head roomTeams, canAddNumber roomTeams] else 4 in newTeamHHNum roomTeams p - let newTeam = clNick `seq` TeamInfo ci clNick tName teamColor grave fort voicepack flag dif hhNum (hhsList hhsInfo) + let newTeam = clNick `seq` TeamInfo clNick tName teamColor grave fort voicepack flag isRegistered dif hhNum (hhsList hhsInfo) return $ if not . null . drop (maxTeams rm - 1) $ roomTeams then [Warning $ loc "too many teams"] @@ -152,6 +158,7 @@ handleCmd_inRoom ["REMOVE_TEAM", tName] = do (ci, _) <- ask r <- thisRoom + clNick <- clientNick let maybeTeam = findTeam r let team = fromJust maybeTeam @@ -159,18 +166,18 @@ return $ if isNothing $ maybeTeam then [Warning $ loc "REMOVE_TEAM: no such team"] - else if ci /= teamownerId team then + else if clNick /= teamowner team then [ProtocolError $ loc "Not team owner!"] else [RemoveTeam tName, ModifyClient (\c -> c{ teamsInGame = teamsInGame c - 1, - clientClan = if teamsInGame c == 1 then Nothing else Just $ anotherTeamClan ci team r + clientClan = if teamsInGame c == 1 then Nothing else Just $ anotherTeamClan clNick team r }) ] where - anotherTeamClan ci team = teamcolor . fromMaybe (error "CHECKPOINT 011") . find (\t -> (teamownerId t == ci) && (t /= team)) . teams + anotherTeamClan clNick team = teamcolor . fromMaybe (error "CHECKPOINT 011") . find (\t -> (teamowner t == clNick) && (t /= team)) . teams findTeam = find (\t -> tName == teamname t) . teams @@ -207,16 +214,18 @@ let maybeTeam = findTeam r let team = fromJust maybeTeam + maybeClientId <- clientByNick $ teamowner team + let teamOwnerId = fromJust maybeClientId return $ if not $ isMaster cl then [ProtocolError $ loc "Not room master"] - else if isNothing maybeTeam then + else if isNothing maybeTeam || isNothing maybeClientId then [] else [ModifyRoom $ modifyTeam team{teamcolor = newColor}, AnswerClients others ["TEAM_COLOR", teamName, newColor], - ModifyClient2 (teamownerId team) (\c -> c{clientClan = Just newColor})] + ModifyClient2 teamOwnerId (\c -> c{clientClan = Just newColor})] where findTeam = find (\t -> teamName == teamname t) . teams diff -r 20ec6af4fb87 -r fc37b9df2b03 gameServer/HWProtoLobbyState.hs --- a/gameServer/HWProtoLobbyState.hs Fri Dec 12 09:51:58 2014 +0100 +++ b/gameServer/HWProtoLobbyState.hs Mon Jan 05 14:02:27 2015 +0100 @@ -105,7 +105,7 @@ : AnswerClients chans ["CLIENT_FLAGS", "-r", nick cl] : [(AnswerClients [sendChan cl] $ "JOINED" : nicks) | not $ null nicks] ) - ++ [ModifyRoom (\r -> let (t', g') = moveTeams clTeams . fromJust $ gameInfo r in r{gameInfo = Just g', teams = t'}) | not $ null clTeams] + -- ++ [ModifyRoom (\r -> let (t', g') = moveTeams clTeams . fromJust $ gameInfo r in r{gameInfo = Just g', teams = t'}) | not $ null clTeams] ++ [AnswerClients [sendChan cl] ["CLIENT_FLAGS", "+h", nick $ fromJust owner] | isJust owner] ++ [sendStateFlags cl jRoomClients | not $ null jRoomClients] ++ answerFullConfig cl jRoom diff -r 20ec6af4fb87 -r fc37b9df2b03 gameServer/OfficialServer/checker.hs --- a/gameServer/OfficialServer/checker.hs Fri Dec 12 09:51:58 2014 +0100 +++ b/gameServer/OfficialServer/checker.hs Mon Jan 05 14:02:27 2015 +0100 @@ -54,7 +54,7 @@ deriving Show serverAddress = "netserver.hedgewars.org" -protocolNumber = "47" +protocolNumber = "49" getLines :: Handle -> IO [B.ByteString] getLines h = g @@ -87,18 +87,18 @@ "ACHIEVEMENT" : typ : teamname : location : value : ps bs ps _ = [] -checkReplay :: Chan Message -> [B.ByteString] -> IO () -checkReplay coreChan msgs = do +checkReplay :: String -> String -> String -> Chan Message -> [B.ByteString] -> IO () +checkReplay home exe prefix coreChan msgs = do tempDir <- getTemporaryDirectory (fileName, h) <- openBinaryTempFile tempDir "checker-demo" B.hPut h . BW.pack . concat . map (fromMaybe [] . Base64.decode . B.unpack) $ msgs hFlush h hClose h - (_, _, Just hOut, _) <- createProcess (proc "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.20/bin/hwengine" + (_, _, Just hOut, _) <- createProcess (proc exe [fileName - , "--user-prefix", "/usr/home/unC0Rr/.hedgewars" - , "--prefix", "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.20/share/hedgewars/Data" + , "--user-prefix", home + , "--prefix", prefix , "--nomusic" , "--nosound" , "--stats-only" @@ -139,8 +139,8 @@ sendPacket packet = writeChan chan $ Packet packet -session :: B.ByteString -> B.ByteString -> Socket -> IO () -session l p s = do +session :: B.ByteString -> B.ByteString -> String -> String -> String -> Socket -> IO () +session l p home exe prefix s = do noticeM "Core" "Connected" coreChan <- newChan forkIO $ recvLoop s coreChan @@ -169,7 +169,7 @@ onPacket _ ["PING"] = answer ["PONG"] onPacket _ ["LOGONPASSED"] = answer ["READY"] onPacket chan ("REPLAY":msgs) = do - checkReplay chan msgs + checkReplay home exe prefix chan msgs warningM "Check" "Started check" onPacket _ ("BYE" : xs) = error $ show xs onPacket _ _ = return () @@ -187,18 +187,24 @@ updateGlobalLogger "Check" (setLevel DEBUG) updateGlobalLogger "Engine" (setLevel DEBUG) + d <- getHomeDirectory Right (login, password) <- runErrorT $ do - d <- liftIO $ getHomeDirectory conf <- join . liftIO . CF.readfile CF.emptyCP $ d ++ "/.hedgewars/settings.ini" l <- CF.get conf "net" "nick" p <- CF.get conf "net" "passwordhash" return (B.pack l, B.pack p) + Right (exeFullname, dataPrefix) <- runErrorT $ do + conf <- join . liftIO . CF.readfile CF.emptyCP $ d ++ "/.hedgewars/checker.ini" + l <- CF.get conf "engine" "exe" + p <- CF.get conf "engine" "prefix" + return (l, p) + Exception.bracket setupConnection (\s -> noticeM "Core" "Shutting down" >> sClose s) - (session login password) + (session login password (d ++ "/.hedgewars") exeFullname dataPrefix) where setupConnection = do noticeM "Core" "Connecting to the server..." diff -r 20ec6af4fb87 -r fc37b9df2b03 gameServer/Utils.hs --- a/gameServer/Utils.hs Fri Dec 12 09:51:58 2014 +0100 +++ b/gameServer/Utils.hs Mon Jan 05 14:02:27 2015 +0100 @@ -113,6 +113,8 @@ , (46, "0.9.20-dev") , (47, "0.9.20") , (48, "0.9.21-dev") + , (49, "0.9.21") + , (50, "0.9.22-dev") ] askFromConsole :: B.ByteString -> IO B.ByteString @@ -201,7 +203,7 @@ : (filter (\(p, _) -> p /= "SCHEME") $ Map.toList pr)) | clientProto cl < 48 = map (toAnswer cl) $ - ("FULLMAPCONFIG", tail $ Map.elems mpr) + ("FULLMAPCONFIG", let l = Map.elems mpr in if length l > 5 then tail l else l) : ("SCHEME", pr Map.! "SCHEME") : (filter (\(p, _) -> p /= "SCHEME") $ Map.toList pr) diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uCommandHandlers.pas --- a/hedgewars/uCommandHandlers.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uCommandHandlers.pas Mon Jan 05 14:02:27 2015 +0100 @@ -323,6 +323,7 @@ end; procedure chAttack_p(var s: shortstring); +var inbtwnTrgtAttks: Boolean; begin s:= s; // avoid compiler hint if CheckNoTeamOrHH then @@ -333,7 +334,9 @@ AddFileLog('/+attack: hedgehog''s Gear^.State = '+inttostr(State)); if ((State and gstHHDriven) <> 0) then begin - FollowGear:= CurrentHedgehog^.Gear; + inbtwnTrgtAttks:= ((GameFlags and gfInfAttack) <> 0) and ((Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget) <> 0); + if (not inbtwnTrgtAttks) then + FollowGear:= CurrentHedgehog^.Gear; if not isExternalSource then SendIPC(_S'A'); Message:= Message or (gmAttack and InputMask); diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uConsts.pas Mon Jan 05 14:02:27 2015 +0100 @@ -105,9 +105,9 @@ // To allow these to layer, going to treat them as masks. The bottom byte is reserved for objects // TODO - set lfBasic for all solid land, ensure all uses of the flags can handle multiple flag bits // lfObject and lfBasic are only to be different *graphically* in all other ways they should be treated the same - lfBasic = $8000; // white + lfBasic = $8000; // black lfIndestructible = $4000; // red - lfObject = $2000; + lfObject = $2000; // white lfDamaged = $1000; // lfIce = $0800; // blue lfBouncy = $0400; // green diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uGearsHandlersMess.pas Mon Jan 05 14:02:27 2015 +0100 @@ -804,6 +804,8 @@ move:= true else if (xx > snowRight) or (xx < snowLeft) then move:=true + else if (cGravity < _0) and (yy < LAND_HEIGHT-1200) then + move:=true // Solid pixel encountered else if ((yy and LAND_HEIGHT_MASK) = 0) and ((xx and LAND_WIDTH_MASK) = 0) and (Land[yy, xx] <> 0) then begin @@ -920,7 +922,9 @@ end; Gear^.Pos:= 0; Gear^.X:= int2hwFloat(LongInt(GetRandom(snowRight - snowLeft)) + snowLeft); - Gear^.Y:= int2hwFloat(LAND_HEIGHT + LongInt(GetRandom(50)) - 1325); + if (cGravity < _0) and (yy < LAND_HEIGHT-1200) then + Gear^.Y:= int2hwFloat(LAND_HEIGHT - 50 - LongInt(GetRandom(50))) + else Gear^.Y:= int2hwFloat(LAND_HEIGHT + LongInt(GetRandom(50)) - 1250); Gear^.State:= Gear^.State or gstInvisible; end end; @@ -1661,6 +1665,7 @@ procedure doStepMine(Gear: PGear); var vg: PVisualGear; dxdy: hwFloat; + dmg: LongWord; begin if Gear^.Health = 0 then dxdy:= hwAbs(Gear^.dX)+hwAbs(Gear^.dY); if (Gear^.State and gstMoving) <> 0 then @@ -1681,7 +1686,11 @@ if (Gear^.Health = 0) then begin if (dxdy > _0_4) and (Gear^.State and gstCollision <> 0) then - inc(Gear^.Damage, hwRound(dxdy * _50)); + begin + dmg:= hwRound(dxdy * _50); + inc(Gear^.Damage, dmg); + ScriptCall('onGearDamage', Gear^.UID, dmg) + end; if ((GameTicks and $FF) = 0) and (Gear^.Damage > random(30)) then begin @@ -1820,7 +1829,7 @@ procedure doStepRollingBarrel(Gear: PGear); var - i: LongInt; + i, dmg: LongInt; particle: PVisualGear; dxdy: hwFloat; begin @@ -1848,7 +1857,9 @@ particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480) end end; - inc(Gear^.Damage, hwRound(dxdy * _50)) + dmg:= hwRound(dxdy * _50); + inc(Gear^.Damage, dmg); + ScriptCall('onGearDamage', Gear^.UID, dmg) end; CalcRotationDirAngle(Gear); //CheckGearDrowning(Gear) @@ -2660,12 +2671,13 @@ HHGear^.Message := HHGear^.Message and (not gmAttack); HHGear^.State := HHGear^.State and (not gstAttacking); HHGear^.State := HHGear^.State or gstHHChooseTarget; - DeleteGear(Gear); isCursorVisible := true; warn:= AddVisualGear(Gear^.Target.X, oy, vgtNoPlaceWarn, 0, true); if warn <> nil then warn^.Tex := GetPlaceCollisionTex(lx, ty, sprHHTelepMask, 0); - PlaySound(sndDenied) + DeleteGear(Gear); + PlaySound(sndDenied); + exit end else begin diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uGearsHandlersRope.pas --- a/hedgewars/uGearsHandlersRope.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uGearsHandlersRope.pas Mon Jan 05 14:02:27 2015 +0100 @@ -28,12 +28,22 @@ uses uConsts, uFloat, uCollisions, uVariables, uGearsList, uSound, uGearsUtils, uAmmos, uDebug, uUtils, uGearsHedgehog, uGearsRender; +const + IsNilHHFatal = false; + procedure doStepRopeAfterAttack(Gear: PGear); var HHGear: PGear; tX: hwFloat; begin HHGear := Gear^.Hedgehog^.Gear; + if HHGear = nil then + begin + OutError('ERROR: doStepRopeAfterAttack called while HHGear = nil', IsNilHHFatal); + DeleteGear(Gear); + exit() + end; + tX:= HHGear^.X; if WorldWrap(HHGear) and (WorldEdge = weWrap) and ((TestCollisionXwithGear(HHGear, 1) <> 0) or (TestCollisionXwithGear(HHGear, -1) <> 0)) then @@ -121,9 +131,23 @@ haveDivided: boolean; wrongSide: boolean; begin - if GameTicks mod 4 <> 0 then exit; + HHGear := Gear^.Hedgehog^.Gear; + if HHGear = nil then + begin + OutError('ERROR: doStepRopeWork called while HHGear = nil', IsNilHHFatal); + DeleteGear(Gear); + exit() + end; - HHGear := Gear^.Hedgehog^.Gear; + if ((HHGear^.State and gstHHDriven) = 0) or + (CheckGearDrowning(HHGear)) or (Gear^.PortalCounter <> 0) then + begin + PlaySound(sndRopeRelease); + RopeDeleteMe(Gear, HHGear); + exit + end; + + if GameTicks mod 4 <> 0 then exit; tX:= HHGear^.X; if WorldWrap(HHGear) and (WorldEdge = weWrap) and @@ -137,14 +161,6 @@ end; tX:= HHGear^.X; - if ((HHGear^.State and gstHHDriven) = 0) or - (CheckGearDrowning(HHGear)) or (Gear^.PortalCounter <> 0) then - begin - PlaySound(sndRopeRelease); - RopeDeleteMe(Gear, HHGear); - exit - end; - HHGear^.dX.QWordValue:= HHGear^.dX.QWordValue shl 2; HHGear^.dY.QWordValue:= HHGear^.dY.QWordValue shl 2; if (Gear^.Message and gmLeft <> 0) and (TestCollisionXwithGear(HHGear, -1) = 0) then @@ -414,6 +430,13 @@ Gear^.Elasticity := Gear^.Elasticity + _1; HHGear := Gear^.Hedgehog^.Gear; + if HHGear = nil then + begin + OutError('ERROR: doStepRopeAttach called while HHGear = nil', IsNilHHFatal); + DeleteGear(Gear); + exit() + end; + DeleteCI(HHGear); if (HHGear^.State and gstMoving) <> 0 then diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uGearsHedgehog.pas --- a/hedgewars/uGearsHedgehog.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uGearsHedgehog.pas Mon Jan 05 14:02:27 2015 +0100 @@ -505,9 +505,11 @@ end else Message:= Message and (not gmAttack); - end; + + ScriptCall('onHogAttack', ord(CurAmmoType)); + end; // of with Gear^, Gear^.Hedgehog^ do + TargetPoint.X := NoPointX; - ScriptCall('onHogAttack'); end; procedure AfterAttack; @@ -832,7 +834,9 @@ Gear^.Hedgehog^.visStepPos:= (Gear^.Hedgehog^.visStepPos + 1) and 7; - if (not cArtillery) and ((Gear^.Message and gmPrecise) = 0) then + if (not cArtillery or + ((CurAmmoGear <> nil) and (CurAmmoGear^.Kind = gtBlowTorch))) and + ((Gear^.Message and gmPrecise) = 0) then MakeHedgehogsStep(Gear); SetAllHHToActive(false); diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uGearsRender.pas Mon Jan 05 14:02:27 2015 +0100 @@ -168,6 +168,7 @@ procedure DrawRope(Gear: PGear); var roplen, i: LongInt; begin + if Gear^.Hedgehog^.Gear = nil then exit; if (cReducedQuality and rqSimpleRope) <> 0 then DrawRopeLinesRQ(Gear) else @@ -1204,9 +1205,12 @@ gtAirBomb: DrawSpriteRotated(sprAirBomb, x, y, 0, DxDy2Angle(Gear^.dY, Gear^.dX)); gtTeleport: begin HHGear:= Gear^.Hedgehog^.Gear; - if ((Gear^.State and gstAnimation) <> 0) then - DrawSpriteRotatedF(sprTeleport, x + 1, y - 3, Gear^.Pos, hwSign(Gear^.dX), 0); - DrawSpriteRotatedF(sprTeleport, hwRound(HHGear^.X) + 1 + WorldDx, hwRound(HHGear^.Y) - 3 + WorldDy, 11 - Gear^.Pos, hwSign(HHGear^.dX), 0); + if HHGear <> nil then + begin + if ((Gear^.State and gstAnimation) <> 0) then + DrawSpriteRotatedF(sprTeleport, x + 1, y - 3, Gear^.Pos, hwSign(Gear^.dX), 0); + DrawSpriteRotatedF(sprTeleport, hwRound(HHGear^.X) + 1 + WorldDx, hwRound(HHGear^.Y) - 3 + WorldDy, 11 - Gear^.Pos, hwSign(HHGear^.dX), 0) + end end; gtSwitcher: DrawSprite(sprSwitch, x - 16, y - 56, (GameTicks shr 6) mod 12); gtTarget: begin diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uGearsUtils.pas --- a/hedgewars/uGearsUtils.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uGearsUtils.pas Mon Jan 05 14:02:27 2015 +0100 @@ -698,6 +698,8 @@ if isImpact or isSkip then addSplashForGear(Gear, isSkip); + if isSkip then + ScriptCall('onGearWaterSkip', Gear^.uid); end else begin diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uLand.pas Mon Jan 05 14:02:27 2015 +0100 @@ -56,18 +56,18 @@ begin yd:= LAND_HEIGHT - 1; repeat - while (yd > 0) and (Land[yd, x] = 0) do dec(yd); + while (yd > 0) and (Land[yd, x] <> lfBasic) do dec(yd); if (yd < 0) then yd:= 0; - while (yd < LAND_HEIGHT) and (Land[yd, x] <> 0) do + while (yd < LAND_HEIGHT) and (Land[yd, x] = lfBasic) do inc(yd); dec(yd); yu:= yd; - while (yu > 0 ) and (Land[yu, x] <> 0) do dec(yu); - while (yu < yd ) and (Land[yu, x] = 0) do inc(yu); + while (yu > 0 ) and (Land[yu, x] = lfBasic) do dec(yu); + while (yu < yd ) and (Land[yu, x] <> lfBasic) do inc(yu); if (yd < LAND_HEIGHT - 1) and ((yd - yu) >= 16) then begin diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uLandGenPerlin.pas --- a/hedgewars/uLandGenPerlin.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uLandGenPerlin.pas Mon Jan 05 14:02:27 2015 +0100 @@ -97,11 +97,6 @@ grad(p[BB ], x-N , y-N))); end; -function f(t: double): double; inline; -begin - f:= t * t * t * (t * (t * 6 - 15) + 10); -end; - procedure inoise_setup(); var i, ii, t: Longword; begin @@ -130,7 +125,8 @@ margin = 200; procedure GenPerlin; -var y, x, {dy, }di, dj, df, r, param1, param2, rCutoff, detail: LongInt; +var y, x, di, dj, r, param1, param2, rCutoff, detail: LongInt; +var df: Int64; begin param1:= cTemplateFilter div 3; param2:= cTemplateFilter mod 3; diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uLandGraphics.pas --- a/hedgewars/uLandGraphics.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uLandGraphics.pas Mon Jan 05 14:02:27 2015 +0100 @@ -527,15 +527,18 @@ end; end; +type TWrapNeeded = (wnNone, wnLeft, wnRight); // // - (dX, dY) - direction, vector of length = 0.5 // -procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt); +function DrawTunnel_real(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt): TWrapNeeded; var nx, ny, dX8, dY8: hwFloat; i, t, tx, ty, by, bx, stX, stY, ddy, ddx: Longint; despeckle : Boolean; begin // (-dY, dX) is (dX, dY) rotated by PI/2 +DrawTunnel_real:= wnNone; + stY:= hwRound(Y); stX:= hwRound(X); @@ -637,14 +640,38 @@ ny:= ny + dX; end; -tx:= Max(stX - HalfWidth * 2 - 4 - abs(hwRound(dX * ticks)), 0); +tx:= stX - HalfWidth * 2 - 4 - abs(hwRound(dX * ticks)); +ddx:= stX + HalfWidth * 2 + 4 + abs(hwRound(dX * ticks)); + +if WorldEdge = weWrap then + begin + if (tx < leftX) or (ddx < leftX) then + DrawTunnel_real:= wnLeft + else if (tx > rightX) or (ddx > rightX) then + DrawTunnel_real:= wnRight; + end; + +tx:= Max(tx, 0); ty:= Max(stY - HalfWidth * 2 - 4 - abs(hwRound(dY * ticks)), 0); -ddx:= Min(stX + HalfWidth * 2 + 4 + abs(hwRound(dX * ticks)), LAND_WIDTH) - tx; +ddx:= Min(ddx, LAND_WIDTH) - tx; ddy:= Min(stY + HalfWidth * 2 + 4 + abs(hwRound(dY * ticks)), LAND_HEIGHT) - ty; UpdateLandTexture(tx, ddx, ty, ddy, false) end; +procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt); +var wn: TWrapNeeded; +begin +wn:= DrawTunnel_real(X, Y, dX, dY, ticks, HalfWidth); +if wn <> wnNone then + begin + if wn = wnLeft then + DrawTunnel_real(X + int2hwFloat(playWidth), Y, dX, dY, ticks, HalfWidth) + else + DrawTunnel_real(X - int2hwFloat(playWidth), Y, dX, dY, ticks, HalfWidth); + end; +end; + function TryPlaceOnLandSimple(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace, indestructible: boolean): boolean; inline; var lf: Word; begin @@ -772,7 +799,7 @@ function GetPlaceCollisionTex(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt): PTexture; var X, Y, bpp, h, w, row, col, numFramesFirstCol: LongInt; - p, pt: PByteArray; + p, pt: PLongWordArray; Image, finalSurface: PSDL_Surface; begin GetPlaceCollisionTex:= nil; @@ -800,23 +827,20 @@ if SDL_MustLock(finalSurface) then SDLTry(SDL_LockSurface(finalSurface) >= 0, true); -// draw on surface based on collisions -p:= PByteArray(@(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ])); -pt:= PByteArray(@(PByteArray(finalSurface^.pixels)^)); +p:= PLongWordArray(@(PLongWordArray(Image^.pixels)^[ (Image^.pitch div 4) * row * h + col * w ])); +pt:= PLongWordArray(finalSurface^.pixels); -case bpp of - 4: for y:= 0 to Pred(h) do - begin - for x:= 0 to Pred(w) do - if (((PLongword(@(p^[x * 4]))^) and AMask) <> 0) - and (((cpY + y) <= Longint(topY)) or ((cpY + y) >= LAND_HEIGHT) or - ((cpX + x) <= Longint(leftX)) or ((cpX + x) >= Longint(rightX)) or (Land[cpY + y, cpX + x] <> 0)) then - (PLongword(@(pt^[x * 4]))^):= cWhiteColor - else - (PLongword(@(pt^[x * 4]))^):= 0; - p:= PByteArray(@(p^[Image^.pitch])); - pt:= PByteArray(@(pt^[finalSurface^.pitch])); - end; +for y:= 0 to Pred(h) do + begin + for x:= 0 to Pred(w) do + if ((p^[x] and AMask) <> 0) + and (((cpY + y) < Longint(topY)) or ((cpY + y) >= LAND_HEIGHT) or + ((cpX + x) < Longint(leftX)) or ((cpX + x) > Longint(rightX)) or (Land[cpY + y, cpX + x] <> 0)) then + pt^[x]:= cWhiteColor + else + (pt^[x]):= cWhiteColor and (not AMask); + p:= PLongWordArray(@(p^[Image^.pitch div 4])); + pt:= PLongWordArray(@(pt^[finalSurface^.pitch div 4])); end; if SDL_MustLock(Image) then diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uMisc.pas diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uRenderUtils.pas --- a/hedgewars/uRenderUtils.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uRenderUtils.pas Mon Jan 05 14:02:27 2015 +0100 @@ -304,15 +304,64 @@ end; end; +function GetNextSpeechLine(s: ansistring; ldelim: char; var startFrom: LongInt; out substr: ansistring): boolean; +var p, l, m, r: Integer; + newl, skip: boolean; + c : char; +begin + m:= Length(s); + + substr:= ''; + + SetLengthA(substr, m); + + // number of chars read + r:= 0; + + // number of chars to be written + l:= 0; + + newl:= true; + + for p:= max(1, startFrom) to m do + begin + + inc(r); + // read char from source string + c:= s[p]; + + // strip empty lines, spaces and newlines on beginnings of line + skip:= ((newl or (p = m)) and ((c = ' ') or (c = ldelim))); + + if (not skip) then + begin + newl:= (c = ldelim); + // stop if we went past the end of the line + if newl then + break; + + // copy current char to output substring + inc(l); + substr[l]:= c; + end; + + end; + + inc(startFrom, r); + + SetLengthA(substr, l); + + GetNextSpeechLine:= (l > 0); +end; function RenderSpeechBubbleTex(s: ansistring; SpeechType: Longword; font: THWFont): PTexture; -var textWidth, textHeight, x, y, w, h, i, j, pos, prevpos, line, numLines, edgeWidth, edgeHeight, cornerWidth, cornerHeight: LongInt; +var textWidth, textHeight, x, y, w, h, i, j, pos, line, numLines, edgeWidth, edgeHeight, cornerWidth, cornerHeight: LongInt; finalSurface, tmpsurf, rotatedEdge: PSDL_Surface; rect: TSDL_Rect; {$IFNDEF PAS2C} chars: set of char = [#9,' ',';',':','?','!',',']; {$ENDIF} - substr: shortstring; + substr: ansistring; edge, corner, tail: TSPrite; begin if cOnlyStats then exit(nil); @@ -362,27 +411,25 @@ {$IFNDEF PAS2C} s:= WrapText(s, #1, chars, i); {$ENDIF} - pos:= 1; prevpos:= 0; line:= 0; + pos:= 1; line:= 0; // Find the longest line for the purposes of centring the text. Font dependant. - while pos <= length(s) do + while GetNextSpeechLine(s, #1, pos, substr) do begin - if (s[pos] = #1) or (pos = length(s)) then - begin - inc(numlines); - if s[pos] <> #1 then inc(pos); - while s[prevpos+1] = ' ' do inc(prevpos); - substr:= copy(s, prevpos+1, pos-prevpos-1); - i:= 0; j:= 0; - TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(substr), @i, @j); - if i > w then - w:= i; - prevpos:= pos; - end; - inc(pos); + inc(numLines); + i:= 0; j:= 0; + TTF_SizeUTF8(Fontz[font].Handle, PChar(substr), @i, @j); + if i > w then + w:= i; end; end else numLines := 1; + if numLines < 1 then + begin + s:= '...'; + numLines:= 1; + end; + textWidth:=((w-(cornerWidth-edgeWidth)*2) div edgeWidth)*edgeWidth+edgeWidth; textHeight:=(((numlines * h + 2)-((cornerHeight-edgeWidth)*2)) div edgeWidth)*edgeWidth; @@ -468,30 +515,17 @@ j:= rect.h; SDL_FillRect(finalSurface, @rect, cWhiteColor); - pos:= 1; prevpos:= 0; line:= 0; - while pos <= length(s) do + pos:= 1; line:= 0; + while GetNextSpeechLine(s, #1, pos, substr) do begin - if (s[pos] = #1) or (pos = length(s)) then - begin - if s[pos] <> #1 then - inc(pos); - while s[prevpos+1] = ' 'do - inc(prevpos); - substr:= copy(s, prevpos+1, pos-prevpos-1); - if Length(substr) <> 0 then - begin - tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, Str2PChar(substr), cNearBlackColorChannels); - rect.x:= edgeHeight + 1 + ((i - w) div 2); - // trying to more evenly position the text, vertically - rect.y:= edgeHeight + ((j-(numLines*h)) div 2) + line * h; - SDLTry(tmpsurf <> nil, true); - SDL_UpperBlit(tmpsurf, nil, finalSurface, @rect); - SDL_FreeSurface(tmpsurf); - inc(line); - prevpos:= pos; - end; - end; - inc(pos); + tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, PChar(substr), cNearBlackColorChannels); + rect.x:= edgeHeight + 1 + ((i - w) div 2); + // trying to more evenly position the text, vertically + rect.y:= edgeHeight + ((j-(numLines*h)) div 2) + line * h; + SDLTry(tmpsurf <> nil, true); + SDL_UpperBlit(tmpsurf, nil, finalSurface, @rect); + SDL_FreeSurface(tmpsurf); + inc(line); end; RenderSpeechBubbleTex:= Surface2Tex(finalSurface, true); diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uScript.pas --- a/hedgewars/uScript.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uScript.pas Mon Jan 05 14:02:27 2015 +0100 @@ -2824,6 +2824,7 @@ ScriptSetInteger('gfLowGravity', gfLowGravity); ScriptSetInteger('gfLaserSight', gfLaserSight); ScriptSetInteger('gfInvulnerable', gfInvulnerable); +ScriptSetInteger('gfResetHealth', gfResetHealth); ScriptSetInteger('gfVampiric', gfVampiric); ScriptSetInteger('gfKarma', gfKarma); ScriptSetInteger('gfArtillery', gfArtillery); diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uStore.pas Mon Jan 05 14:02:27 2015 +0100 @@ -611,17 +611,17 @@ // loading failed if tmpsurf = nil then begin - - // anounce that loading failed - OutError(msgFailed, false); - // output sdl error if loading failed when data source was available if rwops <> nil then begin + // anounce that loading failed + OutError(msgFailed, false); + SDLTry(false, (imageFlags and ifCritical) <> 0); // rwops was already freed by IMG_Load_RW rwops:= nil; - end; + end else + OutError(msgFailed, (imageFlags and ifCritical) <> 0); exit; end; diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uTeams.pas --- a/hedgewars/uTeams.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uTeams.pas Mon Jan 05 14:02:27 2015 +0100 @@ -649,38 +649,38 @@ Delete(s, 1, 1); t:= 0; - while (t < cMaxTeams) and (TeamsArray[t] <> nil) and (TeamsArray[t]^.TeamName <> s) do + while (t < TeamsCount) and (TeamsArray[t]^.TeamName <> s) do inc(t); - if (t = cMaxTeams) or (TeamsArray[t] = nil) then + if t = TeamsCount then exit; TeamsArray[t]^.isGoneFlagPendingToBeSet:= true; if isSynced then - begin - for i:= 0 to Pred(cMaxTeams) do - with TeamsArray[i]^ do - begin - if (not hasGone) and isGoneFlagPendingToBeSet then + begin + for i:= 0 to Pred(TeamsCount) do + with TeamsArray[i]^ do begin - AddChatString('** '+ TeamName + ' is gone'); // TODO: localize - if not CurrentTeam^.ExtDriven then SendIPC(_S'f' + s); - hasGone:= true; - skippedTurns:= 0; - isGoneFlagPendingToBeSet:= false; - RecountTeamHealth(TeamsArray[i]) - end; - if hasGone and isGoneFlagPendingToBeUnset then - ParseCommand('/teamback s' + s, true); - end; - end + if (not hasGone) and isGoneFlagPendingToBeSet then + begin + AddChatString('** '+ TeamName + ' is gone'); // TODO: localize + if not CurrentTeam^.ExtDriven then SendIPC(_S'f' + s); + hasGone:= true; + skippedTurns:= 0; + isGoneFlagPendingToBeSet:= false; + RecountTeamHealth(TeamsArray[i]) + end; + if hasGone and isGoneFlagPendingToBeUnset then + ParseCommand('/teamback s' + s, true) + end + end else - begin + begin TeamsArray[t]^.isGoneFlagPendingToBeSet:= true; if (not CurrentTeam^.ExtDriven) or (CurrentTeam^.TeamName = s) or (CurrentTeam^.hasGone) then - ParseCommand('/teamgone s' + s, true); - end; + ParseCommand('/teamgone s' + s, true) + end; end; procedure chTeamBack(var s:shortstring); @@ -692,9 +692,9 @@ Delete(s, 1, 1); t:= 0; - while (t < cMaxTeams) and (TeamsArray[t] <> nil) and (TeamsArray[t]^.TeamName <> s) do + while (t < TeamsCount) and (TeamsArray[t]^.TeamName <> s) do inc(t); - if (t = cMaxTeams) or (TeamsArray[t] = nil) then + if t = TeamsCount then exit; if isSynced then @@ -715,12 +715,12 @@ end; end else - begin + begin TeamsArray[t]^.isGoneFlagPendingToBeUnset:= true; if not CurrentTeam^.ExtDriven then ParseCommand('/teamback s' + s, true); - end; + end; end; @@ -731,10 +731,10 @@ s:= s; t:= 0; -while (t < cMaxTeams) and (TeamsArray[t] <> nil) do +while t < TeamsCount do begin TeamsArray[t]^.hasGone:= true; - inc(t); + inc(t) end; AddChatString('** Good-bye!'); diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uUtils.pas --- a/hedgewars/uUtils.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uUtils.pas Mon Jan 05 14:02:27 2015 +0100 @@ -74,6 +74,7 @@ procedure Write(var f: textfile; s: shortstring); procedure WriteLn(var f: textfile; s: shortstring); function StrLength(s: PChar): Longword; +procedure SetLengthA(var s: ansistring; len: Longword); {$ENDIF} function isPhone: Boolean; inline; diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uVisualGears.pas --- a/hedgewars/uVisualGears.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uVisualGears.pas Mon Jan 05 14:02:27 2015 +0100 @@ -205,9 +205,9 @@ vgtSmoke: DrawTextureF(SpritesData[sprSmoke].Texture, Gear^.scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 7 - Gear^.Frame, 1, SpritesData[sprSmoke].Width, SpritesData[sprSmoke].Height); vgtSmokeWhite: DrawSprite(sprSmokeWhite, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame); vgtDust: if Gear^.State = 1 then - DrawSpriteRotatedF(sprSnowDust, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame, Gear^.Tag, Gear^.Angle) + DrawSpriteRotatedF(sprSnowDust, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 7 - Gear^.Frame, Gear^.Tag, Gear^.Angle) else - DrawSpriteRotatedF(sprDust, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame, Gear^.Tag, Gear^.Angle); + DrawSpriteRotatedF(sprDust, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 7 - Gear^.Frame, Gear^.Tag, Gear^.Angle); vgtFire: if (Gear^.State and gstTmpFlag) = 0 then DrawSprite(sprFlame, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy, (RealTicks shr 6 + Gear^.Frame) mod 8) else diff -r 20ec6af4fb87 -r fc37b9df2b03 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Fri Dec 12 09:51:58 2014 +0100 +++ b/hedgewars/uWorld.pas Mon Jan 05 14:02:27 2015 +0100 @@ -1857,7 +1857,7 @@ uCursor.updatePosition(); {$ENDIF} z:= round(200/zoom); -inbtwnTrgtAttks := (CurrentHedgehog <> nil) and ((Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget) <> 0) and ((GameFlags and gfInfAttack) <> 0); +inbtwnTrgtAttks := ((GameFlags and gfInfAttack) <> 0) and (CurrentHedgehog <> nil) and ((CurrentHedgehog^.Gear = nil) or (CurrentHedgehog^.Gear <> FollowGear)) and ((Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget) <> 0); if autoCameraOn and (not PlacingHogs) and (FollowGear <> nil) and (not isCursorVisible) and (not bShowAmmoMenu) and (not fastUntilLag) and (not inbtwnTrgtAttks) then if ((abs(CursorPoint.X - prevPoint.X) + abs(CursorPoint.Y - prevpoint.Y)) > 4) then begin diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Graphics/Hats/war_UNPeacekeeper02.png Binary file share/hedgewars/Data/Graphics/Hats/war_UNPeacekeeper02.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Graphics/Missions/Training/ClimbHome.png Binary file share/hedgewars/Data/Graphics/Missions/Training/ClimbHome.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Graphics/Missions/Training/ClimbHome@2x.png Binary file share/hedgewars/Data/Graphics/Missions/Training/ClimbHome@2x.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Graphics/amRubber.png Binary file share/hedgewars/Data/Graphics/amRubber.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Locale/de.txt --- a/share/hedgewars/Data/Locale/de.txt Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Locale/de.txt Mon Jan 05 14:02:27 2015 +0100 @@ -130,7 +130,7 @@ 02:00=%1 ist ab jetzt ein Ex-Igel 02:00=%1 sieht sich die Radieschen von unten an 02:00=%1 hat aufgehört zu existieren -02:00=Verabschieden Sie sich von %1 +02:00=Wir verabschieden uns von %1 02:00=Für %1 gibt es keine Hoffnung mehr 02:00=%1 trat von der Lebensbühne ab 02:00=%1 erleidet ein spontanes multiples Organversagen @@ -153,6 +153,21 @@ 02:00=%1 spürt keinen Schmerz mehr 02:00=%1 muss nicht mehr leiden 02:00=%1 hat eine Abkürzung gefunden … +02:00=%1 war ohnehin nur Kanonenfutter +02:00=Mir kommen die Tränen, %1! +02:00=Man wird dich rächen, %1! +02:00=%1 wartet auf die Wiederbelebung. +02:00=%1 hat ein Nach-Tod-Erlebnis +02:00=%1 hat im Spiel des Lebens verloren +02:00=%1 wurde vernichtend geschlagen +02:00=%1 hat alle Lebenspunkte aufgebraucht +02:00=%1 wird nicht mehr auf Futtersuche gehen müssen +02:00=%1 schläft den ganz langen Winterschlaf +02:00=Warum musstest du sterben, %1? +02:00=Oh, nein, %1! Wir hatten noch so viel vor … +02:00=Jetzt braucht sich %1 nicht mehr vor dem Tod zu fürchten. +02:00=%1 wurde von den Schrecken des Krieges erlöst +02:00=Klappe zu, %1 tot! ; Hog (%1) drowned 02:01=%1 geht auf Tauchstation! @@ -221,6 +236,7 @@ 02:01=%1 lässt sich diese einmalige Tauchgelegenheit nicht entgehen 02:01=Und wir dachten %1 könnte nicht noch tiefer sinken … 02:01=%1 zieht eine Etage tiefer +02:01=Seht, %1 kann schwimmen! Nein, doch nicht … ; Round starts 02:02=Auf in die Schlacht! @@ -253,7 +269,6 @@ 02:02=Lassen Sie den Kampf in der Woche beginnen 02:02=Lassen Sie den Kampf des Tages beginnen 02:02=Lassen Sie den Kampf der Stunde beginnen -02:02=Tun Sie Ihr Bestes! 02:02=Zerstört den Feind! 02:02=Viel Glück! 02:02=Viel Spaß! @@ -292,6 +307,18 @@ 02:05=Ein Grund zur Hoffnung! 02:05=Frisch aus dem Jungbrunnen 02:05=Lebenszeit in Kisten +02:05=Hilfe ist in Sicht! +02:05=Das macht kranke Igel wieder gesund +02:05=Schlagt das Lazarett auf! +02:05=Erhöhe deine Lebenserwartung … +02:05=Erste Hilfe! +02:05=Endlich kommt Hilfe! +02:05=Gesundmacher aus der Luft! +02:05=Lebenspunkterhöhungsmittel! +02:05=Kiste des Lebens +02:05=Tankt eure Lebensenergie wieder auf! +02:05=Hat jemand »Hatschi!« gesagt? +02:05=Damit fühlt sich der Igel wieder pudelwohl! ; New ammo crate 02:06=Nachschub! @@ -312,13 +339,30 @@ 02:06=Was auch immer da drin ist, es ist bestimmt nicht Pizza 02:06=Einsammlen! 02:06=Eine Waffenkiste! -02:06=Lassen Sie nicht zu, dass sich der Feind sie holt! +02:06=Lasse nicht zu, dass der Feind sie holt! 02:06=Schönes neues Spielzeug! 02:06=Eine geheimnisvolle Kiste! 02:06=Ein eckiges Ü-Ei! 02:06=Die Holzkiste der Pandora! 02:06=Willst du mit mir spielen? 02:06=Quadratisch, praktisch, … gefährlich? +02:06=Diese Kiste bringt Bombenstimmung! +02:06=Damit kann man dem Feind so richtig einheizen +02:06=Jetzt geht die Party erst richtig los! +02:06=Damit kommt Freude auf! +02:06=Ob da eine Melonenbombe drin ist? +02:06=Das ist wie ein Kindergeburtstag! +02:06=Wir brauchen Waffen, viele Waffen! +02:06=Davon kann man nie genug haben. +02:06=Neue Waffen, um das Spiel etwas spannender zu machen +02:06=Neue Waffen braucht das Land! +02:06=Nichts für Weicheier! +02:06=Achtung: Inhalt hochexplosiv +02:06=Wer zuerst kommt, mahlt zuerst! +02:06=Für die Waffennarren +02:06=Damit schlägt das Herz jedes Waffennarren höher! +02:06=Waffenkiste: Nur echt mit dem Fragezeichen +02:06=Dies könnte die spielentscheidende Waffe sein! ; New utility crate 02:07=Nützliches? @@ -327,11 +371,23 @@ 02:07=Lieferung frei Haus! 02:07=Mehr als nur eine Kiste! 02:07=Weitere Hilfsmittel! -02:07=Extras für Sie! +02:07=Extras für dich! 02:07=Dies sollte gut sein! -02:07=Verwenden Sie diese mit Bedacht +02:07=Verwende diese mit Bedacht 02:07=Uff, diese Box ist schwer 02:07=Futter für Strategen +02:07=Heimwerker atmen auf! +02:07=Schaffe, schaffe, Häusle baue +02:07=Werkzeuge kann man immer gebrauchen +02:07=Auf diese Kisten können Sie bauen +02:07=Ein Geschenk der Techniker! +02:07=Strategen freuen sich! +02:07=Dies könnte deine Mobilität wiederherstellen … +02:07=Verschaffe dir einen strategischen Vorteil +02:07=Muttern und Schrauben! +02:07=Lieferung aus den Igelwerken! +02:07=Damit schlägt das Herz jedes Mechanikers höher! +02:07=So viele Möglichkeiten … ; Hog (%1) skips his turn 02:08=%1 ist so ein Langeweiler … @@ -392,7 +448,7 @@ 02:09=Das hat wohl nicht ganz geklappt, %1 02:09=%1 geht ein wenig zu sorglos mit gefährlichen Waffen um 02:09=%1 sollte eine Änderung der Laufbahn betrachten -02:09=Nein, nein, nein, %1, Sie müssen auf den Feind schießen! +02:09=Nein, nein, nein, %1, du musst auf den Feind schießen! 02:09=%1 bewegt sich einen Schritt näher zum Selbstmord 02:09=%1, Helfer des Feindes 02:09=%1 hatte das anders geplant @@ -418,6 +474,22 @@ 02:09=%1 wird vom Pech verfolgt 02:09=Auch %1 macht mal Fehler 02:09=Hoppla?! +02:09=%1 will unbedingt den Darwin-Award gewinnen +02:09=%1 macht sich lächerlich +02:09=%1 hat absolut nichts dazugelernt +02:09=%1 hat wohl nicht mehr alle Tassen im Schrank +02:09=%1 ist durchgeknallt +02:09=%1 bekommt so bald keine Beförderung mehr +02:09=%1 verstümmelt sich selbst +02:09=%1 mag Schmerzen +02:09=%1 ist heute auf dem falschen Bein aufgestanden +02:09=%1 schoss in die falsche Richtung +02:09=Das sah schmerzhaft aus! +02:09=%1 verwirrt den Feind +02:09=Was ist denn mit %1 los? +02:09=Keine Sorge, %1, nächstes Mal klappt’s bestimmt! +02:09=%1 ist eine Gefahr für sich selbst +02:09=%1 braucht keine Feinde mehr ; Hog (%1) shot an home run (using the bat and another hog) 02:10=Home Run! diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Locale/hedgewars_de.ts --- a/share/hedgewars/Data/Locale/hedgewars_de.ts Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_de.ts Mon Jan 05 14:02:27 2015 +0100 @@ -1130,7 +1130,7 @@ Save - Wiederholung speichern + Speichern diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Locale/hedgewars_ru.ts --- a/share/hedgewars/Data/Locale/hedgewars_ru.ts Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts Mon Jan 05 14:02:27 2015 +0100 @@ -27,7 +27,7 @@ copy of %1 - + копия %1 @@ -616,11 +616,11 @@ Random perlin - + Случайная перлиновская Style: - + Стиль: @@ -690,7 +690,7 @@ Server authentication error - + Ошибка аутентификации сервера @@ -890,7 +890,7 @@ Open packages directory - + Открыть папку с пакетами @@ -945,7 +945,7 @@ Optimize - + Оптимизировать @@ -1007,10 +1007,10 @@ The best shot award was won by <b>%1</b> with <b>%2</b> pts. - + + Приз за лучший выстрел получает <b>%1</b> с <b>%2</b> пунктом урона. Приз за лучший выстрел получает <b>%1</b> с <b>%2</b> пунктами урона. - - + Приз за лучший выстрел получает <b>%1</b> с <b>%2</b> пунктами урона. @@ -1073,8 +1073,6 @@ (%1 %2) - - @@ -1096,7 +1094,7 @@ PageMain Downloadable Content - + Скачиваемые дополнения Play a game on a single computer @@ -1116,7 +1114,7 @@ Access the user created content downloadable from our website - + Доступ к скачиваемым с нашего сайта дополнениям, созданным пользователями Exit game @@ -1837,7 +1835,7 @@ Enable team tags by default - + Включить ярлыки команд по умолчанию Hog @@ -1845,7 +1843,7 @@ Enable hedgehog tags by default - + Включить ярлыки ежей по умолчанию Health @@ -1853,7 +1851,7 @@ Enable health tags by default - + Включить ярлыки уровня здоровья по умолчанию Translucent @@ -1861,7 +1859,7 @@ Enable translucent tags by default - + Включить прозрачность ярлыков по умолчанию @@ -2262,7 +2260,7 @@ Script parameter - + Параметр скрипта @@ -2429,8 +2427,6 @@ Do you really want to remove %1 file(s)? - - @@ -2623,7 +2619,7 @@ Reset - + Сбросить Set the default server port for Hedgewars @@ -2713,7 +2709,7 @@ Random Perlin - + Случайная перлиновская @@ -2763,7 +2759,7 @@ copy of %1 - + копия %1 @@ -2992,7 +2988,7 @@ speed up replay - + ускорить проигрывание @@ -3440,7 +3436,7 @@ restricted - + ограничено REMOVE_TEAM: no such team @@ -3496,7 +3492,7 @@ kicked - + выкинут Ping timeout @@ -3504,7 +3500,7 @@ bye - + пока No such room @@ -3512,7 +3508,7 @@ Joining restricted - + Вход ограничен Registered users only @@ -3528,7 +3524,7 @@ Restricted - + Ограничено Room version incompatible to your hedgewars version @@ -3552,15 +3548,15 @@ kick - + выкинуть map - + карта pause - пауза + пауза Reconnected too fast diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Locale/missions_de.txt --- a/share/hedgewars/Data/Locale/missions_de.txt Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Locale/missions_de.txt Mon Jan 05 14:02:27 2015 +0100 @@ -51,3 +51,28 @@ portal.name=Mission: Knifflige Portalherausforderung portal.desc="Benutze das Portalgerät, um dich schnell und weit zu bewegen; benutze es zum Töten; benutze es mit Vorsicht!" + +Target_Practice_-_Bazooka_easy.name=Zielübung: Bazooka (einfach) +Target_Practice_-_Bazooka_easy.desc="Nun gut, Soldat: Zerstör einfach die Zielscheiben so schnell, wie du kannst!" + +Target_Practice_-_Bazooka_hard.name=Zielübung: Bazooka (schwer) +Target_Practice_-_Bazooka_hard.desc="Kannst du die Zielscheiben treffen, auch wenn sie sehr weit weg sind?" + +Target_Practice_-_Cluster_Bomb.name=Zielübung: Splittergranate +Target_Practice_-_Cluster_Bomb.desc="Jemand braucht eine heiße Dusche!" + +Target_Practice_-_Shotgun.name=Zielübung: Schrotflinte +Target_Practice_-_Shotgun.desc="Erst schießen, dann fragen!" + +Target_Practice_-_Homing_Bee.name=Zielübung: Zielsuchende Biene +Target_Practice_-_Homing_Bee.desc="Die zielsuchende Biene zu benutzen ist kniffliger, als es aussieht!" + +Target_Practice_-_Grenade_easy.name=Zielübung: Granate (einfach) +Target_Practice_-_Grenade_easy.desc="Eine Aufwärmübung für den aufstrebenden Grenadier." + +Target_Practice_-_Grenade_hard.name=Zielübung: Granate (schwer) +Target_Practice_-_Grenade_hard.desc="Das ist nichts für Grünschnäbel! Wir werden die Zielscheiben an ein paar wirklich knifflige Stellen platzieren." + +ClimbHome.name=Herausforderung: Nach Hause klettern +ClimbHome.desc="Du bist weit von Zuhause weg und das Wasser steigt ständig. Klettere so hoch, wie du kannst!" + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Locale/pl.txt --- a/share/hedgewars/Data/Locale/pl.txt Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Locale/pl.txt Mon Jan 05 14:02:27 2015 +0100 @@ -58,6 +58,7 @@ 00:54=Miotacz błota 00:55=Zamrażarka 00:56=Tasak +00:57=Guma 01:00=Walczmy! 01:01=Remis @@ -81,6 +82,9 @@ 01:19=Ekstremalne 01:20=%1 odbicie 01:21=Dźwięk wyciszony +01:22=Tryb AFK +01:23=Automatyczne wyłączanie kamery +01:24=Automatyczne włączanie kamery ; Event messages ; Hog (%1) died @@ -544,6 +548,7 @@ 03:54=Narzędzie 03:55=Przełammy lody! 03:56=Nie przytnij sobie igieł! +03:57=Narzędzie ; Weapon Descriptions (use | as line breaks) 04:00=Atakuj przeciwników zwykłym granatem.|Wybuchnie kiedy zapalnik skończy odliczanie.|1-5: Ustawia zapalnik|Atak: Przytrzymaj by rzucić z większą siłą @@ -604,6 +609,7 @@ 04:54=Wystrzel strumień kleistej mazi.|Buduj mosty, zasypuj wrogów, zatykaj tunele.|Uważaj by nie zasypać samego siebie! 04:55=Epoka lodowcowa powraca!!|Zamroź jeże, uczyń podłoże śliskim lub zapobiegnij|utonięciu zamrażając wodę.|Atak: Strzał 04:56=Rzuć w przeciwnika dwoma tasakami i zablokuj mu |drogę lub użyj ich do wspinaczki! Jednak uważaj! |Te tasaki są naprawdę ostre!|Atak: Przytrzymaj by rzucić z większą siłą (dwukrotnie) +04:57=Budowanie elastyczny pasek wykonany z gumy,|z których jeże i inne rzeczy|odbijają się bez obrażeń upadku.|Lewo/Prawo: Zmiana orientacji pasek gumy|Kursor: Umieść pasek gumy w aktualnej pozycji ; Game goal strings 05:00=Ustawienia gry diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Maps/ClimbHome/map.lua --- a/share/hedgewars/Data/Maps/ClimbHome/map.lua Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Maps/ClimbHome/map.lua Mon Jan 05 14:02:27 2015 +0100 @@ -33,7 +33,7 @@ local recordBroken = false local ready = false local showWaterStats = false -- uses the AI team to draw water height. -local scaleGraph = true +local scaleGraph = false local dummyHog = nil local dummySkip = 0 @@ -58,7 +58,7 @@ dummyHog = AddHog(" ", 0, 1, "NoHat") HH[dummyHog] = nil totalHedgehogs = totalHedgehogs - 1 - if not showWaterStates then + if not showWaterStats then SendStat(siClanHealth, tostring(32640), " ") end SendStat(siClanHealth, tostring(32640), " ") diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua Mon Jan 05 14:02:27 2015 +0100 @@ -526,7 +526,7 @@ -- bazooka - grenade - rope - parachute - deagle - btorch - construct - portal - rcplane SaveCampaignVar("HeroAmmo", GetAmmoCount(hero.gear, amBazooka)..GetAmmoCount(hero.gear, amGrenade).. GetAmmoCount(hero.gear, amRope)..GetAmmoCount(hero.gear, amParachute)..GetAmmoCount(hero.gear, amDEagle).. - GetAmmoCount(hero.gear, amBlowTorch)..GetAmmoCount(hero.gear, amConstruction).. + GetAmmoCount(hero.gear, amBlowTorch)..GetAmmoCount(hero.gear, amGirder).. GetAmmoCount(hero.gear, amPortalGun)..GetAmmoCount(hero.gear, amRCPlane)) AnimCaption(hero.gear, loc("Checkpoint reached!"), 5000) end @@ -542,7 +542,7 @@ AddAmmo(hero.gear, amBlowTorch, tonumber(ammo:sub(6,6))) -- weird, if 0 bazooka isn't displayed in the weapons menu if tonumber(ammo:sub(7,7)) > 0 then - AddAmmo(hero.gear, amConstruction, tonumber(ammo:sub(7,7))) + AddAmmo(hero.gear, amGirder, tonumber(ammo:sub(7,7))) end AddAmmo(hero.gear, amPortalGun, tonumber(ammo:sub(8,8))) AddAmmo(hero.gear, amRCPlane, tonumber(ammo:sub(9,9))) diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.hwp Binary file share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.hwp has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua Mon Jan 05 14:02:27 2015 +0100 @@ -1070,12 +1070,12 @@ {amLowGravity, "amLowGravity", 0, loc("Low Gravity"), 4*placeholder}, {amExtraDamage, "amExtraDamage", 0, loc("Extra Damage"), 6*placeholder}, - {amExtraTime, "amExtraTime", 0, loc("Extra Time"), 8*placeholder}, + {amExtraTime, "amExtraTime", 0, loc("Extra Time"), 8*placeholder} - {amResurrector, "amResurrector", 0, loc("Resurrector"), 8*placeholder}, - {amTardis, "amTardis", 0, loc("Tardis"), 2*placeholder}, + --{amResurrector, "amResurrector", 0, loc("Resurrector"), 8*placeholder}, + --{amTardis, "amTardis", 0, loc("Tardis"), 2*placeholder}, - {amSwitch, "amSwitch", 0, loc("Switch Hog"), 4*placeholder} + --{amSwitch, "amSwitch", 0, loc("Switch Hog"), 4*placeholder} } ---------------------------- @@ -1345,7 +1345,11 @@ placedCount = placedCount + 1 else - AddCaption("Invalid Placement",0xffba00ff,capgrpVolume) + if (clanPower[GetHogClan(CurrentHedgehog)] >= placedExpense) then + AddCaption(loc("Invalid Placement"),0xffba00ff,capgrpVolume) + else + AddCaption(loc("Insufficient Power"),0xffba00ff,capgrpVolume) + end PlaySound(sndDenied) end diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Scripts/Multiplayer/Gravity.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Gravity.lua Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Gravity.lua Mon Jan 05 14:02:27 2015 +0100 @@ -17,7 +17,12 @@ function grav_onNewTurn() - SetGravity(gravity) + if delta ~= nil and period == nil then + SetGravity(gravity) + else + SetGravity(div(gravity, mln)) + end + wdGameTicks = GameTime if script2_onNewTurn ~= nil then @@ -36,7 +41,7 @@ if delta == nil then if periodtimer == 0 then periodtimer = period * 2 - SetGravity(div(GetRandom(maxgravity - mingravity) + mingravity, mln)) + SetGravity(div(GetRandom(maxgravity - mingravity + 1) + mingravity, mln)) else periodtimer = periodtimer - 1 end diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua Mon Jan 05 14:02:27 2015 +0100 @@ -290,7 +290,6 @@ local chainLength = 0 local shotsFired = 0 local shotsHit = 0 -local SurfTime = 0 local sniperHits = 0 local pointBlankHits = 0 --------------------- @@ -1105,7 +1104,6 @@ pointBlankHits = 0 chainLength = 0 chainCounter = 0 - SurfTime = 12 ------------------------- -- gaudy racer @@ -1160,6 +1158,19 @@ end +function onGearWaterSkip(gear) + if gear == CurrentHedgehog then + + for i = 0,(TeamsCount-1) do + if teamClan[i] == GetHogClan(CurrentHedgehog) and (teamSurfer[i] == false) then + teamSurfer[i] = true + AddCaption(loc("Surfer! +15 points!"),0xffba00ff,capgrpVolume) + AwardPoints(15) + end + end + + end +end function onGameTick() @@ -1328,30 +1339,6 @@ -------------- -------------- - ------------------------ - -- surfer achievement - ------------------------ - - if (WaterLine - GetY(CurrentHedgehog)) < 15 then - SurfTime = SurfTime -1 - end - - if SurfTime ~= 12 then - - SurfTime = SurfTime - 1 - if SurfTime <= 0 then - for i = 0,(TeamsCount-1) do - if teamClan[i] == GetHogClan(CurrentHedgehog) and (teamSurfer[i] == false) then - teamSurfer[i] = true - SurfTime = 12 - AddCaption(loc("Surfer! +15 points!"),0xffba00ff,capgrpVolume) - AwardPoints(15) - end - end - end - end - - dx, dy = GetGearVelocity(CurrentHedgehog) --WriteLnToConsole("I just got the velocity of currenthedgehog. It is dx: " .. dx .. "; dy: " .. dy) diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Scripts/Multiplayer/WxW.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/WxW.lua Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/WxW.lua Mon Jan 05 14:02:27 2015 +0100 @@ -77,8 +77,6 @@ --local margin local wallsLeft = 0 -local highestY = 0 -local surferTimer = 0 local hasSurfed = false local allWallsHit = false @@ -356,25 +354,14 @@ end -function CheckSurfer() - - if GetY(CurrentHedgehog) > highestY then - highestY = GetY(CurrentHedgehog) +function onGearWaterSkip(gear) + if gear == CurrentHedgehog then + hasSurfed = true + AddCaption(loc("Surfer!"),0xffba00ff,capgrpMessage2) end - - if (highestY == (WaterLine-8)) and (hasSurfed == false) then - - surferTimer = surferTimer +1 - if (surferTimer == 40) then - hasSurfed = true - AddCaption(loc("Surfer!"),0xffba00ff,capgrpMessage2) - end - end - end - function WallHit(id, zXMin,zYMin, zWidth, zHeight) if wTouched[id] == false then @@ -588,10 +575,8 @@ allowCrate = true - surferTimer = 0 hasSurfed = false allWallsHit = false - highestY = 0 crateG = nil @@ -650,8 +635,6 @@ --AddCaption(Map) --AddCaption(RightX ..";" .. GetX(CurrentHedgehog)) - CheckSurfer() - gTimer = gTimer + 1 if gTimer == 25 then gTimer = 1 diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/CMakeLists.txt --- a/share/hedgewars/Data/Themes/CMakeLists.txt Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Themes/CMakeLists.txt Mon Jan 05 14:02:27 2015 +0100 @@ -21,6 +21,7 @@ Golf Halloween Hell + Hoggywood Island Jungle Nature diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/BlueWater.svg diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/CandyCane.png Binary file share/hedgewars/Data/Themes/Cake/CandyCane.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Cherry.png Binary file share/hedgewars/Data/Themes/Cake/Cherry.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Cherry.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/Cherry.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,311 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Chunk.png Binary file share/hedgewars/Data/Themes/Cake/Chunk.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Chunk.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/Chunk.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,12078 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Clouds.png Binary file share/hedgewars/Data/Themes/Cake/Clouds.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Clouds.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/Clouds.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,280 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/CupCake.png Binary file share/hedgewars/Data/Themes/Cake/CupCake.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Droplet.png diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Droplet.svg diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Flake.png Binary file share/hedgewars/Data/Themes/Cake/Flake.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Flake.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/Flake.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,155 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Gingerbread.png Binary file share/hedgewars/Data/Themes/Cake/Gingerbread.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Gingerbread.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/Gingerbread.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,940 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Girder.png Binary file share/hedgewars/Data/Themes/Cake/Girder.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Girder.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/Girder.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,138 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/IceCream.png Binary file share/hedgewars/Data/Themes/Cake/IceCream.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/IceCream.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/IceCream.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,2110 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/LandBackTex.png Binary file share/hedgewars/Data/Themes/Cake/LandBackTex.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/LandTex.png Binary file share/hedgewars/Data/Themes/Cake/LandTex.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/LandTex.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/LandTex.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,7229 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Lollipop.png Binary file share/hedgewars/Data/Themes/Cake/Lollipop.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Lollipop.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/Lollipop.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,265 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Oreo.png Binary file share/hedgewars/Data/Themes/Cake/Oreo.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Oreo.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/Oreo.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,721 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Oreo2.png Binary file share/hedgewars/Data/Themes/Cake/Oreo2.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/SDDroplet.png Binary file share/hedgewars/Data/Themes/Cake/SDDroplet.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/SDDroplet.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/SDDroplet.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,981 @@ + + + + + + + + image/svg+xml + + + + + Carlos Vives B. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/SDSplash.png Binary file share/hedgewars/Data/Themes/Cake/SDSplash.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/SDSplash.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/SDSplash.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,1004 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/SDWater.png Binary file share/hedgewars/Data/Themes/Cake/SDWater.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/SDWater.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/SDWater.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,595 @@ + + + + + + + + image/svg+xml + + + + + + Carlos Vives B. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Sky.png Binary file share/hedgewars/Data/Themes/Cake/Sky.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Sky.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/Sky.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,888 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Snowball.png Binary file share/hedgewars/Data/Themes/Cake/Snowball.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Snowball.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/Snowball.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,80 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/Splash.png Binary file share/hedgewars/Data/Themes/Cake/Splash.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/amSnowball.png Binary file share/hedgewars/Data/Themes/Cake/amSnowball.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/amSnowball.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/amSnowball.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,96 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/icon.png Binary file share/hedgewars/Data/Themes/Cake/icon.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/icon@2x.png Binary file share/hedgewars/Data/Themes/Cake/icon@2x.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/icon@2x.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/icon@2x.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,3063 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/plant3.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Cake/plant3.svg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,496 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Cake/theme.cfg --- a/share/hedgewars/Data/Themes/Cake/theme.cfg Fri Dec 12 09:51:58 2014 +0100 +++ b/share/hedgewars/Data/Themes/Cake/theme.cfg Mon Jan 05 14:02:27 2015 +0100 @@ -1,11 +1,19 @@ -sky = 0, 0, 51 +sky = 14, 5, 36 border = 255, 200, 90 water-top = $FF, $DF, $E1 water-bottom = $FF, $DF, $E1 water-opacity = $80 +sd-water-top = 92, 5, 0 +sd-water-bottom = 75, 6, 2 +sd-water-opacity = 125 music = snow.ogg clouds = 9 -object = plant1, 3, 83, 215, 92, 35, 1, 0, 0, 250, 190 -object = plant2, 3, 118, 115, 41, 20, 1, 0, 0, 159, 110 -object = plant3, 3, 0, 115, 70, 40, 1, 8, 0, 60, 100 -flakes = 20, 100, 0, 30, 250 +object = Cherry, 1, 12, 181, 108, 9, 1, 3, 1, 124, 168 +object = Gingerbread, 3, 11, 173, 116, 11, 1, 6, 1, 123, 160 +object = CandyCane, 2, 0, 85, 25, 25, 2, 0, 0, 170, 70, 50, 70, 120, 40 +object = CupCake, 1, 20, 179, 121, 12, 1, 2, 1, 155, 171 +object = IceCream, 2, 0, 257, 45, 12, 1, 8, 1, 150, 236 +object = Lollipop, 2, 222, 120, 43, 15, 1, 0, 0, 220, 111 +spray = Oreo, 2 +spray = Oreo2, 2 +flakes = 55, 40, 99999999, 30, 200 diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/Border.png Binary file share/hedgewars/Data/Themes/Hoggywood/Border.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Hoggywood/CMakeLists.txt Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,6 @@ +file(GLOB images *.png) + +install(FILES + theme.cfg + ${images} + DESTINATION ${SHAREPATH}Data/Themes/Hoggywood) diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/Clouds.png Binary file share/hedgewars/Data/Themes/Hoggywood/Clouds.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/Flake.png Binary file share/hedgewars/Data/Themes/Hoggywood/Flake.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/Girder.png Binary file share/hedgewars/Data/Themes/Hoggywood/Girder.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/LandBackTex.png Binary file share/hedgewars/Data/Themes/Hoggywood/LandBackTex.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/LandTex.png Binary file share/hedgewars/Data/Themes/Hoggywood/LandTex.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/SDClouds.png Binary file share/hedgewars/Data/Themes/Hoggywood/SDClouds.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/SignL.png Binary file share/hedgewars/Data/Themes/Hoggywood/SignL.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/SignR.png Binary file share/hedgewars/Data/Themes/Hoggywood/SignR.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/Sky.png Binary file share/hedgewars/Data/Themes/Hoggywood/Sky.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/SkyL.png Binary file share/hedgewars/Data/Themes/Hoggywood/SkyL.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/SkyR.png Binary file share/hedgewars/Data/Themes/Hoggywood/SkyR.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/camera.png Binary file share/hedgewars/Data/Themes/Hoggywood/camera.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/clapper.png Binary file share/hedgewars/Data/Themes/Hoggywood/clapper.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/hogscar.png Binary file share/hedgewars/Data/Themes/Hoggywood/hogscar.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/horizont.png Binary file share/hedgewars/Data/Themes/Hoggywood/horizont.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/horizontL.png Binary file share/hedgewars/Data/Themes/Hoggywood/horizontL.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/icon.png Binary file share/hedgewars/Data/Themes/Hoggywood/icon.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/icon@2x.png Binary file share/hedgewars/Data/Themes/Hoggywood/icon@2x.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/palm.png Binary file share/hedgewars/Data/Themes/Hoggywood/palm.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/reel.png Binary file share/hedgewars/Data/Themes/Hoggywood/reel.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/reel2.png Binary file share/hedgewars/Data/Themes/Hoggywood/reel2.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/star1.png Binary file share/hedgewars/Data/Themes/Hoggywood/star1.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/star2.png Binary file share/hedgewars/Data/Themes/Hoggywood/star2.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/star3.png Binary file share/hedgewars/Data/Themes/Hoggywood/star3.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/star4.png Binary file share/hedgewars/Data/Themes/Hoggywood/star4.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/star5.png Binary file share/hedgewars/Data/Themes/Hoggywood/star5.png has changed diff -r 20ec6af4fb87 -r fc37b9df2b03 share/hedgewars/Data/Themes/Hoggywood/theme.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Hoggywood/theme.cfg Mon Jan 05 14:02:27 2015 +0100 @@ -0,0 +1,22 @@ +sky = 100, 180, 220 +border = 71, 74, 93 +water-top = $54, $5C, $9D +water-bottom = $34, $3C, $7D +water-opacity = $80 +music = Rock.ogg +sd-music = hell.ogg +clouds = 32 +object = palm, 4, 169, 467, 61, 6, 2, 0, 0, 333, 238, 168, 237, 55, 92 +object = hogscar, 1, 20, 159, 70, 1, 1, 0, 0, 132, 140 +object = camera, 1, 25, 285, 92, 25, 1, 0, 0, 123, 222 +object = clapper, 1, 52, 227, 18, 5, 1, 0, 0, 263, 209 +object = reel, 1, 64, 128, 1, 1, 2, 0, 0, 150, 90, 170, 90, 49, 40 +object = reel2, 1, 40, 0, 20, 5, 1, 0, 45, 140, 175 +object = SignL, 1, 177, 15, 4, 39, 1, 0, 0, 160, 54 +object = SignR, 1, 0, 17, 5, 39, 1, 23, 0, 158, 56 +;spray = star1, 1 +;spary = star2, 1 +;spray = star3, 1 +spray = star4, 1 +spray = star5, 1 +flakes = 100, 3, 99999999, 10, 20 diff -r 20ec6af4fb87 -r fc37b9df2b03 tools/docgen.sh --- a/tools/docgen.sh Fri Dec 12 09:51:58 2014 +0100 +++ b/tools/docgen.sh Mon Jan 05 14:02:27 2015 +0100 @@ -25,10 +25,13 @@ branch=$(hg identify -b) rev=$(hg identify -rdefault -i) -branchurl="${branch}" -revurl="${rev}" +#branchurl="${branch}" +#revurl="${rev}" -export PROJECT_NUMBER="${branchurl} as of ${revurl}" +branchurl="$branch" +revurl="$rev" + +export PROJECT_NUMBER="${branchurl} branch, ${revurl}" export OUTPUT_DIRECTORY fi diff -r 20ec6af4fb87 -r fc37b9df2b03 tools/pas2c/Pas2C.hs --- a/tools/pas2c/Pas2C.hs Fri Dec 12 09:51:58 2014 +0100 +++ b/tools/pas2c/Pas2C.hs Mon Jan 05 14:02:27 2015 +0100 @@ -909,17 +909,15 @@ iType <- gets lastIdTypeDecl e1 <- expr2C e1' e2 <- expr2C e2' - let inc = if up then "inc" else "dec" - let add = if up then "+ 1" else "- 1" let iEnd = i <> text "__end__" - ph <- phrase2C . appendPhrase (BuiltInFunctionCall [Reference $ SimpleReference i'] (SimpleReference (Identifier inc BTUnknown))) $ wrapPhrase p + ph <- phrase2C $ wrapPhrase p return . braces $ i <+> text "=" <+> e1 <> semi $$ iType <+> iEnd <+> text "=" <+> e2 <> semi $$ text "if" <+> (parens $ i <+> text (if up then "<=" else ">=") <+> iEnd) <+> text "do" <+> ph <+> - text "while" <> parens (i <+> text "!=" <+> iEnd <+> text add) <> semi + text "while" <> parens (i <> text (if up then "++" else "--") <+> text "!=" <+> iEnd) <> semi where appendPhrase p (Phrases ps) = Phrases $ ps ++ [p] appendPhrase _ _ = error "illegal appendPhrase call"