# HG changeset patch # User sheepluva # Date 1461766859 -7200 # Node ID ac58a063d26a390c3dd5f176cde7123cfc512366 # Parent eefa04b23c3b45bb8938e45ca91d552f154c4678 Added "Forts" to map type selection. This makes the mode easier selectable/discoverable. Also the slider can be used to adjust the distance between forts. diff -r eefa04b23c3b -r ac58a063d26a ChangeLog.txt --- a/ChangeLog.txt Wed Apr 27 13:01:38 2016 +0200 +++ b/ChangeLog.txt Wed Apr 27 16:20:59 2016 +0200 @@ -8,6 +8,7 @@ + Small visual effects enhancements + Divided Teams mode will now work with more than 2 teams (Hint: you probably want to set world edges to "wrap" in such games) + Fort Mode will now work with more than 2 teams + + Added "Forts" to map type selection. This makes the mode easier selectable/discoverable. Also the slider can be used to adjust the distance between forts. * Video recording functionality is restored * Gameplay fix: Hammer damage is now rounded down. This means it will cause NO DAMAGE to a hedgehog with less than 3 hp. * Fixed bee not being affected by wrap world edge while still being thrown diff -r eefa04b23c3b -r ac58a063d26a QTfrontend/model/MapModel.cpp --- a/QTfrontend/model/MapModel.cpp Wed Apr 27 13:01:38 2016 +0200 +++ b/QTfrontend/model/MapModel.cpp Wed Apr 27 16:20:59 2016 +0200 @@ -32,7 +32,7 @@ MapModel::MapInfo MapModel::MapInfoMaze = {MapModel::GeneratedMaze, "+maze+", "", 0, "", "", "", false}; MapModel::MapInfo MapModel::MapInfoPerlin = {MapModel::GeneratedMaze, "+perlin+", "", 0, "", "", "", false}; MapModel::MapInfo MapModel::MapInfoDrawn = {MapModel::HandDrawnMap, "+drawn+", "", 0, "", "", "", false}; - +MapModel::MapInfo MapModel::MapInfoForts = {MapModel::FortsMap, "+forts+", "", 0, "", "", "", false}; MapModel::MapModel(MapType maptype, QObject *parent) : QStandardItemModel(parent) { diff -r eefa04b23c3b -r ac58a063d26a QTfrontend/model/MapModel.h --- a/QTfrontend/model/MapModel.h Wed Apr 27 13:01:38 2016 +0200 +++ b/QTfrontend/model/MapModel.h Wed Apr 27 16:20:59 2016 +0200 @@ -52,7 +52,8 @@ GeneratedPerlin, HandDrawnMap, MissionMap, - StaticMap + StaticMap, + FortsMap }; /// a struct for holding the attributes of a map. @@ -99,7 +100,7 @@ QStandardItem * getMap(const QString & map); // Static MapInfos for drawn and generated maps - static MapInfo MapInfoRandom, MapInfoMaze, MapInfoPerlin, MapInfoDrawn; + static MapInfo MapInfoRandom, MapInfoMaze, MapInfoPerlin, MapInfoDrawn, MapInfoForts; /// Loads the maps bool loadMaps(); diff -r eefa04b23c3b -r ac58a063d26a QTfrontend/model/roomslistmodel.cpp --- a/QTfrontend/model/roomslistmodel.cpp Wed Apr 27 13:01:38 2016 +0200 +++ b/QTfrontend/model/roomslistmodel.cpp Wed Apr 27 16:20:59 2016 +0200 @@ -150,6 +150,7 @@ if (content == "+maze+") return tr("Random Maze"); if (content == "+perlin+") return tr("Random Perlin"); if (content == "+drawn+") return tr("Hand-drawn"); + if (content == "+forts+") return tr("Forts"); } // prefix ? if map not available diff -r eefa04b23c3b -r ac58a063d26a QTfrontend/net/hwmap.h --- a/QTfrontend/net/hwmap.h Wed Apr 27 13:01:38 2016 +0200 +++ b/QTfrontend/net/hwmap.h Wed Apr 27 16:20:59 2016 +0200 @@ -32,7 +32,8 @@ MAPGEN_MAZE = 1, MAPGEN_PERLIN = 2, MAPGEN_DRAWN = 3, - MAPGEN_MAP = 4 + MAPGEN_FORTS = 4, + MAPGEN_MAP = 5 }; class HWMap : public TCPBase diff -r eefa04b23c3b -r ac58a063d26a QTfrontend/ui/widget/mapContainer.cpp --- a/QTfrontend/ui/widget/mapContainer.cpp Wed Apr 27 13:01:38 2016 +0200 +++ b/QTfrontend/ui/widget/mapContainer.cpp Wed Apr 27 16:20:59 2016 +0200 @@ -109,6 +109,7 @@ cType->insertItem(3, tr("Randomly generated"), MapModel::GeneratedMap); cType->insertItem(4, tr("Random maze"), MapModel::GeneratedMaze); cType->insertItem(5, tr("Random perlin"), MapModel::GeneratedPerlin); + cType->insertItem(6, tr("Forts"), MapModel::FortsMap); connect(cType, SIGNAL(currentIndexChanged(int)), this, SLOT(mapTypeChanged(int))); m_childWidgets << cType; @@ -461,6 +462,10 @@ { //changeMapType(MapModel::HandDrawnMap); } + else if (map == "+forts+") + { + //nuffin + } else if (m_staticMapModel->mapExists(map)) { changeMapType(MapModel::StaticMap, m_staticMapModel->index(m_staticMapModel->findMap(map), 0)); @@ -500,6 +505,7 @@ case MapModel::GeneratedMap: case MapModel::GeneratedMaze: case MapModel::GeneratedPerlin: + case MapModel::FortsMap: setRandomTheme(); break; case MapModel::MissionMap: @@ -588,6 +594,10 @@ m_mapInfo.type = MapModel::HandDrawnMap; f = true; break; + case MAPGEN_FORTS: + m_mapInfo.type = MapModel::FortsMap; + f = true; + break; case MAPGEN_MAP: switch (m_mapInfo.type) { @@ -595,6 +605,7 @@ case MapModel::GeneratedMaze: case MapModel::GeneratedPerlin: case MapModel::HandDrawnMap: + case MapModel::FortsMap: m_mapInfo.type = MapModel::Invalid; default: break; @@ -679,6 +690,7 @@ case MapModel::GeneratedMaze: case MapModel::GeneratedPerlin: case MapModel::HandDrawnMap: + case MapModel::FortsMap: askForGeneratedPreview(); break; default: @@ -804,6 +816,11 @@ staticMapList->show(); emit mapChanged(m_curMap); break; + case MapModel::FortsMap: + mapgen = MAPGEN_FORTS; + setMapInfo(MapModel::MapInfoForts); + lblMapList->hide(); + break; default: break; } diff -r eefa04b23c3b -r ac58a063d26a hedgewars/uLand.pas --- a/hedgewars/uLand.pas Wed Apr 27 13:01:38 2016 +0200 +++ b/hedgewars/uLand.pas Wed Apr 27 16:20:59 2016 +0200 @@ -348,27 +348,70 @@ AddProgress(); end; +procedure MakeFortsPreview; +var gap, offset, h1, h2, w1, w2, x, y: LongInt; +const fortHeight = 960; + fortWidth = 720; +begin +ResizeLand(4096,2048); + +gap:= (1024 - fortWidth) + 60 + 20 * cFeatureSize; +offset:= fortWidth + gap; + +h2:= LAND_HEIGHT-1; +h1:= h2 - fortHeight; +w2:= (LAND_WIDTH - gap) div 2; +w1:= w2 - fortWidth; + +// generate 2 forts in center +for y:= h1 to h2 do + for x:= w1 to w2 do + begin + Land[y,x]:= lfBasic; + Land[y,x+offset]:= lfBasic; + end; + +w2:= w1 - gap; +w1:= w2 - fortWidth; +offset:= offset + 2 * (fortWidth + gap); +if w1 < 0 then + begin + offset:= LAND_WIDTH - 1 - (fortWidth+w1); + w1:= 0; + end; + +for y:= h1 to h2 do + for x:= w1 to w2 do + if ((x - y) mod 2) = 0 then + begin + Land[y,x]:= lfBasic; + Land[y,x+offset]:= lfBasic; + end; +end; + procedure MakeFortsMap; var tmpsurf: PSDL_Surface; - i, t, p: integer; + sectionWidth, i, t, p: integer; mirror: boolean; pc: PClan; -const sectionWidth = 1024 + 300; begin +// make the gaps between forts adjustable if fort map was selected +if cMapGen = mgForts then + sectionWidth:= 1024 + 60 + 20 * cFeatureSize +else + sectionWidth:= 1024 * 300; + // mix up spawn/fort order of clans -if ((GameFlags and gfForts) <> 0) then +for i:= 0 to ClansCount - 1 do begin - for i:= 0 to ClansCount - 1 do + t:= GetRandom(ClansCount); + p:= GetRandom(ClansCount); + if t <> p then begin - t:= GetRandom(ClansCount); - p:= GetRandom(ClansCount); - if t <> p then - begin - pc:= SpawnClansArray[t]; - SpawnClansArray[t]:= SpawnClansArray[p]; - SpawnClansArray[p]:= pc; - end; + pc:= SpawnClansArray[t]; + SpawnClansArray[t]:= SpawnClansArray[p]; + SpawnClansArray[p]:= pc; end; end; @@ -597,10 +640,12 @@ mgMaze : begin ResizeLand(4096,2048); GenMaze; end; mgPerlin: begin ResizeLand(4096,2048); GenPerlin; end; mgDrawn : GenDrawnMap; + mgForts : begin GameFlags:= (GameFlags or gfForts or gfDivideTeams); MakeFortsMap(); end; else OutError('Unknown mapgen', true); end; - GenLandSurface + if cMapGen <> mgForts then + GenLandSurface end else MakeFortsMap; @@ -740,6 +785,7 @@ mgMaze: begin ResizeLand(4096,2048); GenMaze; end; mgPerlin: begin ResizeLand(4096,2048); GenPerlin; end; mgDrawn: GenDrawnMap; + mgForts: MakeFortsPreview(); else OutError('Unknown mapgen', true); end; @@ -788,6 +834,7 @@ mgMaze: begin ResizeLand(4096,2048); GenMaze; end; mgPerlin: begin ResizeLand(4096,2048); GenPerlin; end; mgDrawn: GenDrawnMap; + mgForts: MakeFortsPreview; else OutError('Unknown mapgen', true); end; diff -r eefa04b23c3b -r ac58a063d26a hedgewars/uTypes.pas --- a/hedgewars/uTypes.pas Wed Apr 27 13:01:38 2016 +0200 +++ b/hedgewars/uTypes.pas Wed Apr 27 16:20:59 2016 +0200 @@ -180,7 +180,7 @@ TStereoMode = (smNone, smRedCyan, smCyanRed, smRedBlue, smBlueRed, smRedGreen, smGreenRed, smHorizontal, smVertical); TWorldEdge = (weNone, weWrap, weBounce, weSea, weSky); TUIDisplay = (uiAll, uiNoTeams, uiNone); - TMapGen = (mgRandom, mgMaze, mgPerlin, mgDrawn); + TMapGen = (mgRandom, mgMaze, mgPerlin, mgDrawn, mgForts); THHFont = record