From 5126e863152957e4b512dd35426754d5a518f4fa Mon Sep 17 00:00:00 2001 From: Maikel de Vries Date: Mon, 3 Aug 2015 20:18:38 +0200 Subject: [PATCH 01/97] fix wallkit in Krakatoa (#1363) --- .../Objects.ocd/Items.ocd/Tools.ocd/WallKit.ocd/Script.c | 3 ++- planet/Worlds.ocf/Krakatoa.ocs/System.ocg/WallKit.c | 9 +-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/WallKit.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/WallKit.ocd/Script.c index 6cb9811dd..6f049b7b5 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/WallKit.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/WallKit.ocd/Script.c @@ -45,7 +45,7 @@ private func CreateBridge(object clonk, int x, int y) var c = Offset2BridgeCoords(clonk, x, y); x = clonk->GetX(); y = clonk->GetY(); - DrawMaterialQuad("Granite-granite", x + c.x1 - c.dxm, y + c.y1 - c.dym, x + c.x1 + c.dxp, y + c.y1 + c.dyp, x + c.x2 + c.dxp, y + c.y2 + c.dyp, x + c.x2 - c.dxm, y + c.y2 - c.dym, DMQ_Bridge); + DrawMaterialQuad(BridgeMaterial, x + c.x1 - c.dxm, y + c.y1 - c.dym, x + c.x1 + c.dxp, y + c.y1 + c.dyp, x + c.x2 + c.dxp, y + c.y2 + c.dyp, x + c.x2 - c.dxm, y + c.y2 - c.dym, DMQ_Bridge); clonk->Sound("WallKitLock"); return true; } @@ -122,3 +122,4 @@ local UsageHelp = "$UsageHelp$"; local Rebuy = true; local BridgeLength = 20; local BridgeThickness = 5; +local BridgeMaterial = "Granite-granite"; diff --git a/planet/Worlds.ocf/Krakatoa.ocs/System.ocg/WallKit.c b/planet/Worlds.ocf/Krakatoa.ocs/System.ocg/WallKit.c index 58fabf04f..804c07d47 100644 --- a/planet/Worlds.ocf/Krakatoa.ocs/System.ocg/WallKit.c +++ b/planet/Worlds.ocf/Krakatoa.ocs/System.ocg/WallKit.c @@ -2,11 +2,4 @@ #appendto WallKit -private func CreateBridge(object clonk, int x, int y) -{ - var c = Offset2BridgeCoords(clonk, x, y); - x=clonk->GetX(); y=clonk->GetY(); - DrawMaterialQuad("Rock-rock", x+c.x1-c.dx,y+c.y1-c.dy, x+c.x1+c.dx,y+c.y1+c.dy, x+c.x2+c.dx,y+c.y2+c.dy, x+c.x2-c.dx,y+c.y2-c.dy, DMQ_Bridge); - clonk->Sound("WallKitLock"); - return true; -} \ No newline at end of file +local BridgeMaterial = "Rock-rock"; From edc611f3b13d8646411d58033717d4e864154213 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Mon, 3 Aug 2015 22:43:07 -0400 Subject: [PATCH 02/97] Add double-sided lighting also for ambient lights --- planet/Graphics.ocg/AmbientShader.glsl | 4 +++- planet/Graphics.ocg/LightShader.glsl | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/planet/Graphics.ocg/AmbientShader.glsl b/planet/Graphics.ocg/AmbientShader.glsl index d50456ada..3fe12fc1b 100644 --- a/planet/Graphics.ocg/AmbientShader.glsl +++ b/planet/Graphics.ocg/AmbientShader.glsl @@ -7,6 +7,8 @@ uniform sampler2D ambientTex; uniform mat3x2 ambientTransform; uniform float ambientBrightness; #endif +//uniform float cullMode; // 0 if backface culling is enabled, 1 if it is disabled +// Already declared in LightShader.glsl slice(texture+6) { @@ -33,6 +35,6 @@ slice(light+1) #else // For objects, ambient brightness is coming from the front vec3 ambientDir = vec3(0.0, 0.0, 1.0); - light = mix(light, max(dot(normal, ambientDir), 0.0), ambient); + light = mix(light, max(max(dot(normal, ambientDir), 0.0), cullMode * max(dot(-normal, ambientDir), 0.0)), ambient); #endif } diff --git a/planet/Graphics.ocg/LightShader.glsl b/planet/Graphics.ocg/LightShader.glsl index 8d0305fec..b783fa521 100644 --- a/planet/Graphics.ocg/LightShader.glsl +++ b/planet/Graphics.ocg/LightShader.glsl @@ -56,9 +56,9 @@ slice(texture+5) slice(light) { - float light = 2.0 * lightBright * max(max(dot(normal, lightDir), 0.0), cullMode * max(dot(vec3(-normal.xy, normal.z), lightDir), 0.0)); + float light = 2.0 * lightBright * max(max(dot(normal, lightDir), 0.0), cullMode * max(dot(-normal, lightDir), 0.0)); #ifdef HAVE_2PX - float light2 = 2.0 * lightBright * max(max(dot(normal2, lightDir), 0.0), cullMode * max(dot(vec3(-normal2.xy, normal2.z), lightDir), 0.0)); + float light2 = 2.0 * lightBright * max(max(dot(normal2, lightDir), 0.0), cullMode * max(dot(-normal2, lightDir), 0.0)); #endif } From 54666aeb2d45c10b68c5ad63b6cd492803a255e3 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 16 Jun 2015 20:58:43 -0400 Subject: [PATCH 03/97] Introduce background landscape The background landscape is a 8-bit landscape which stores the material that a particular pixel will be replaced with when it is cleared, e.g. by digging or blasting. This is just the groundwork for this and does not offer much advantage over the IFT flag that was used previously for that purpose. However, additional features such as keeping the background material/texture fixed when loam bridges are built, PXS are incorporated into the landscape or the massmover is moving things around can be added. See http://bugs.openclonk.org/view.php?id=1338 for more details. --- src/c4group/C4Components.h | 7 +- src/control/C4Record.h | 5 +- src/landscape/C4Landscape.cpp | 243 +++++++++++++++++++++++++++------- src/landscape/C4Landscape.h | 5 + 4 files changed, 210 insertions(+), 50 deletions(-) diff --git a/src/c4group/C4Components.h b/src/c4group/C4Components.h index 174ca44c5..72bbfe4ef 100644 --- a/src/c4group/C4Components.h +++ b/src/c4group/C4Components.h @@ -54,8 +54,9 @@ #define C4CFN_Map "Map.bmp" #define C4CFN_Landscape "Landscape.bmp" -#define C4CFN_LandscapePNG "Landscape.png" +#define C4CFN_LandscapeBkg "LandscapeBkg.bmp" #define C4CFN_DiffLandscape "DiffLandscape.bmp" +#define C4CFN_DiffLandscapeBkg "DiffLandscapeBkg.bmp" #define C4CFN_Sky "Sky" #define C4CFN_Script "Script.c|Script%s.c|C4Script%s.c" #define C4CFN_MapScript "Map.c" @@ -144,7 +145,7 @@ #define C4CFN_TempSky "~Sky.tmp" #define C4CFN_TempMap "~Map.tmp" #define C4CFN_TempLandscape "~Landscape.tmp" -#define C4CFN_TempLandscapePNG "~Landscape2.tmp" +#define C4CFN_TempLandscapeBkg "~LandscapeBkg.tmp" #define C4CFN_TempPXS "~PXS.tmp" #define C4CFN_TempTitle "~Title.tmp" #define C4CFN_TempCtrlRec "~CtrlRec.tmp" @@ -175,7 +176,7 @@ // TODO: proper sorting of scaled def graphics (once we know what order we might load them in...) -#define C4FLS_Scenario "Loader*.bmp|Loader*.png|Loader*.jpeg|Loader*.jpg|Fonts.txt|Scenario.txt|Title*.txt|Info.txt|Desc*.rtf|Icon.png|Icon.bmp|Achv*.png|Game.txt|StringTbl*.txt|ParameterDefs.txt|Teams.txt|Parameters.txt|Info.txt|Sect*.ocg|Music.ocg|*.mid|*.wav|Desc*.rtf|Title.png|Title.jpg|*.ocd|Material.ocg|MatMap.txt|Landscape.bmp|Landscape.png|" C4CFN_DiffLandscape "|Sky.bmp|Sky.png|Sky.jpeg|Sky.jpg|PXS.ocb|MassMover.ocb|CtrlRec.ocb|Strings.txt|Objects.txt|RoundResults.txt|Author.txt|Version.txt|Names.txt|*.ocd|Script.c|Script*.c|Map.c|Objects.c|System.ocg" +#define C4FLS_Scenario "Loader*.bmp|Loader*.png|Loader*.jpeg|Loader*.jpg|Fonts.txt|Scenario.txt|Title*.txt|Info.txt|Desc*.rtf|Icon.png|Icon.bmp|Achv*.png|Game.txt|StringTbl*.txt|ParameterDefs.txt|Teams.txt|Parameters.txt|Info.txt|Sect*.ocg|Music.ocg|*.mid|*.wav|Desc*.rtf|Title.png|Title.jpg|*.ocd|Material.ocg|MatMap.txt|Landscape.bmp|LandscapeBkg.bmp|Landscape.png|" C4CFN_DiffLandscape "|" C4CFN_DiffLandscapeBkg "|Sky.bmp|Sky.png|Sky.jpeg|Sky.jpg|PXS.ocb|MassMover.ocb|CtrlRec.ocb|Strings.txt|Objects.txt|RoundResults.txt|Author.txt|Version.txt|Names.txt|*.ocd|Script.c|Script*.c|Map.c|Objects.c|System.ocg" #define C4FLS_Section "Scenario.txt|Game.txt|Landscape.bmp|Landscape.png|Sky.bmp|Sky.png|Sky.jpeg|Sky.jpg|PXS.ocb|MassMover.ocb|CtrlRec.ocb|Strings.txt|Objects.txt|Objects.c" #define C4FLS_SectionLandscape "Scenario.txt|Landscape.bmp|Landscape.png|PXS.ocb|MassMover.ocb" #define C4FLS_SectionObjects "Strings.txt|Objects.txt|Objects.c" diff --git a/src/control/C4Record.h b/src/control/C4Record.h index cc40605de..593b3ead4 100644 --- a/src/control/C4Record.h +++ b/src/control/C4Record.h @@ -122,7 +122,8 @@ public: struct C4RCSetPix { int x,y; // pos - BYTE clr; // new color + BYTE clr; // new fg color + BYTE bgClr; // new bg color }; struct C4RCExecObj @@ -315,4 +316,4 @@ public: static bool StreamToRecord(const char *szStream, StdStrBuf *pRecord); }; -#endif \ No newline at end of file +#endif diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index d5a532f09..eebf30f8c 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -684,28 +684,25 @@ bool C4Landscape::ShakeFreePix(int32_t tx, int32_t ty) bool C4Landscape::ClearPix(int32_t tx, int32_t ty) { - BYTE bcol; - if (GBackIFT(tx,ty)) - bcol=Mat2PixColDefault(MTunnel)+IFT; - else - bcol=0; - return SetPix(tx,ty,bcol); + // Replace pixel with background pixel + BYTE bkgPix = Surface8Bkg->GetPix(tx, ty); + return SetPix2(tx, ty, bkgPix, bkgPix); } + bool C4Landscape::SetPix(int32_t x, int32_t y, BYTE npix) { - if (Config.General.DebugRec) - { - C4RCSetPix rc; - rc.x=x; rc.y=y; rc.clr=npix; - AddDbgRec(RCT_SetPix, &rc, sizeof(rc)); - } + return SetPix2(x, y, npix, DefaultBkgMat(npix)); +} + +bool C4Landscape::SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix) +{ // check bounds if (x < 0 || y < 0 || x >= Width || y >= Height) return false; // no change? - if (npix == _GetPix(x, y)) + if (fgPix == _GetPix(x, y) && bgPix == Surface8Bkg->_GetPix(x, y)) return true; - // note for relight + // note for relight (TODO: Why is this not in _SetPix2?) if(pLandscapeRender) { C4Rect CheckRect = pLandscapeRender->GetAffectedRect(C4Rect(x, y, 1, 1)); @@ -720,35 +717,40 @@ bool C4Landscape::SetPix(int32_t x, int32_t y, BYTE npix) pFoW->Invalidate(CheckRect); } // set pixel - return _SetPix(x, y, npix); + return _SetPix2(x, y, fgPix, bgPix); } bool C4Landscape::_SetPix(int32_t x, int32_t y, BYTE npix) +{ + return _SetPix2(x, y, npix, DefaultBkgMat(npix)); +} + +bool C4Landscape::_SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix) { if (Config.General.DebugRec) { C4RCSetPix rc; - rc.x=x; rc.y=y; rc.clr=npix; + rc.x=x; rc.y=y; rc.clr=fgPix; rc.bgClr=fgPix; AddDbgRec(RCT_SetPix, &rc, sizeof(rc)); } assert(x >= 0 && y >= 0 && x < Width && y < Height); // get and check pixel BYTE opix = _GetPix(x, y); - if (npix == opix) return true; + if (fgPix == opix && bgPix == Surface8Bkg->_GetPix(x, y)) return true; // count pixels - if (Pix2Dens[npix]) + if (Pix2Dens[fgPix]) { if (!Pix2Dens[opix]) PixCnt[(y / 15) + (x / 17) * PixCntPitch]++; } else { if (Pix2Dens[opix]) PixCnt[(y / 15) + (x / 17) * PixCntPitch]--; } // count material - assert(!npix || MatValid(Pix2Mat[npix])); - int32_t omat = Pix2Mat[opix], nmat = Pix2Mat[npix]; + assert(!fgPix || MatValid(Pix2Mat[fgPix])); + int32_t omat = Pix2Mat[opix], nmat = Pix2Mat[fgPix]; if (opix) MatCount[omat]--; - if (npix) MatCount[nmat]++; + if (fgPix) MatCount[nmat]++; // count effective material if (omat != nmat) { - if (npix && ::MaterialMap.Map[nmat].MinHeightCount) + if (fgPix && ::MaterialMap.Map[nmat].MinHeightCount) { // Check for material above & below int iMinHeight = ::MaterialMap.Map[nmat].MinHeightCount, @@ -784,7 +786,8 @@ bool C4Landscape::_SetPix(int32_t x, int32_t y, BYTE npix) } } // set 8bpp-surface only! - Surface8->SetPix(x,y,npix); + Surface8->SetPix(x, y, fgPix); + Surface8Bkg->SetPix(x, y, bgPix); // success return true; } @@ -988,6 +991,33 @@ bool C4Landscape::Incinerate(int32_t x, int32_t y) return false; } +BYTE C4Landscape::DefaultBkgMat(BYTE fg) const +{ + // For the given foreground index, find the default background index + // If fg is semisolid, this is tunnel, or sky if IFT is set. + // Otherwise it is fg itself, so that tunnel and background bricks + // stay the way they are. + int32_t iTex = PixCol2Tex(fg); + if (!iTex) return fg; // sky + + // Get material-texture mapping + const C4TexMapEntry *pTex = ::TextureMap.GetEntry(iTex); + // Texmap entry does not exist + if(!pTex || !pTex->GetMaterial()) return fg; + + if(DensitySemiSolid(pTex->GetMaterial()->Density)) + { + // TODO: Remove IFT check once we get rid of IFT + if(fg & IFT) + return Mat2PixColDefault(MTunnel) + IFT; + else + return 0; + } + + return fg; + +} + /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* ++++ Polygon drawing code extracted from ALLEGRO by Shawn Hargreaves ++++ */ /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ @@ -1133,9 +1163,18 @@ int32_t C4Landscape::ForPolygon(int *vtcs, int length, bool (C4Landscape::*fnCal } } else if (conversion_table) - for (int xcnt=x2-x1-1; xcnt>=0; xcnt--) Surface8->SetPix(x1+xcnt, y, conversion_table[uint8_t(GetPix(x1+xcnt, y))]); + for (int xcnt=x2-x1-1; xcnt>=0; xcnt--) + { + const uint8_t pix = conversion_table[uint8_t(GetPix(x1+xcnt, y))]; + Surface8->SetPix(x1+xcnt, y, pix); + Surface8Bkg->SetPix(x1+xcnt, y, DefaultBkgMat(pix)); + } else - for (int xcnt=x2-x1-1; xcnt>=0; xcnt--) Surface8->SetPix(x1+xcnt, y, col); + for (int xcnt=x2-x1-1; xcnt>=0; xcnt--) + { + Surface8->SetPix(x1+xcnt, y, col); + Surface8Bkg->SetPix(x1+xcnt, y, DefaultBkgMat(col)); + } edge = edge->next->next; } @@ -1199,9 +1238,11 @@ void C4Landscape::Clear(bool fClearMapCreator, bool fClearSky, bool fClearRender delete [] TopRowPix; TopRowPix=NULL; delete [] BottomRowPix; BottomRowPix=NULL; delete Surface8; Surface8=NULL; + delete Surface8Bkg; Surface8Bkg=NULL; delete Map; Map=NULL; // clear initial landscape delete [] pInitial; pInitial = NULL; + delete [] pInitialBkg; pInitialBkg = NULL; delete pFoW; pFoW = NULL; // clear scan ScanX=0; @@ -1376,11 +1417,22 @@ bool C4Landscape::Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bo // (not for shaders though - they require continous textures) if (!Game.C4S.Landscape.ExactLandscape) { + assert(Surface8 == NULL); + assert(Surface8Bkg == NULL); + // Create landscape surface Surface8 = new CSurface8(); - if (!Surface8->Create(Width, Height) || !Mat2Pal()) + if (!Surface8->Create(Width, Height)) { - delete Surface8; Surface8 = 0; + delete Surface8; Surface8 = NULL; + return false; + } + + Surface8Bkg = new CSurface8(); + if (!Surface8Bkg->Create(Width, Height) || !Mat2Pal()) + { + delete Surface8Bkg; Surface8Bkg = NULL; + delete Surface8; Surface8 = NULL; return false; } @@ -1402,6 +1454,9 @@ bool C4Landscape::Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bo { AddDbgRec(RCT_Block, "|---LANDSCAPE---|", 18); AddDbgRec(RCT_Map, Surface8->Bits, Surface8->Pitch*Surface8->Hgt); + + AddDbgRec(RCT_Block, "|---LANDSCAPE BKG---|", 22); + AddDbgRec(RCT_Map, Surface8Bkg->Bits, Surface8Bkg->Pitch*Surface8Bkg->Hgt); } // Create FoW @@ -1488,6 +1543,14 @@ bool C4Landscape::SaveInternal(C4Group &hGroup) const if (!hGroup.Move( szTempLandscape, C4CFN_Landscape )) return false; + // Same for background surface + SCopy(Config.AtTempPath(C4CFN_TempLandscapeBkg), szTempLandscape); + MakeTempFilename(szTempLandscape); + if (!Surface8Bkg->Save(szTempLandscape)) + return false; + if (!hGroup.Move(szTempLandscape, C4CFN_LandscapeBkg)) + return false; + // Save map if (fMapChanged && Map) if (!SaveMap(hGroup)) @@ -1510,18 +1573,24 @@ bool C4Landscape::SaveDiff(C4Group &hGroup, bool fSyncSave) const bool C4Landscape::SaveDiffInternal(C4Group &hGroup, bool fSyncSave) const { - assert(pInitial); - if (!pInitial) return false; + assert(pInitial && pInitialBkg); + if (!pInitial || !pInitialBkg) return false; // If it shouldn't be sync-save: Clear all bytes that have not changed - bool fChanged = false; + bool fChanged = false, fChangedBkg = false;; if (!fSyncSave) for (int y = 0; y < Height; y++) - for (int x = 0; x < Width; x++) { - if (pInitial[y * Width + x] == _GetPix(x, y)) + for (int x = 0; x < Width; x++) + { + if (pInitial[y * Width + x] == Surface8->_GetPix(x, y)) Surface8->SetPix(x,y,0xff); else fChanged = true; + + if (pInitialBkg[y * Width + x] == Surface8Bkg->_GetPix(x, y)) + Surface8Bkg->SetPix(x,y,0xff); + else + fChangedBkg = true; } if (fSyncSave || fChanged) @@ -1536,13 +1605,28 @@ bool C4Landscape::SaveDiffInternal(C4Group &hGroup, bool fSyncSave) const return false; } + if (fSyncSave || fChangedBkg) + { + // Save landscape surface + if (!Surface8Bkg->Save(Config.AtTempPath(C4CFN_TempLandscapeBkg))) + return false; + + // Move temp file to group + if (!hGroup.Move( Config.AtTempPath(C4CFN_TempLandscapeBkg), + C4CFN_DiffLandscapeBkg )) + return false; + } + // Restore landscape pixels if (!fSyncSave) - if (pInitial) - for (int y = 0; y < Height; y++) - for (int x = 0; x < Width; x++) - if (_GetPix(x, y) == 0xff) - Surface8->SetPix(x,y,pInitial[y * Width + x]); + for (int y = 0; y < Height; y++) + for (int x = 0; x < Width; x++) + { + if (Surface8->_GetPix(x, y) == 0xff) + Surface8->SetPix(x,y,pInitial[y * Width + x]); + if (Surface8Bkg->_GetPix(x, y) == 0xff) + Surface8Bkg->SetPix(x,y,pInitialBkg[y * Width + x]); + } // Save changed map, too if (fMapChanged && Map) @@ -1559,37 +1643,76 @@ bool C4Landscape::SaveInitial() // Create array delete [] pInitial; + delete [] pInitialBkg; pInitial = new BYTE [Width * Height]; + pInitialBkg = new BYTE [Width * Height]; // Save material data for (int y = 0; y < Height; y++) for (int x = 0; x < Width; x++) - pInitial[y * Width + x] = _GetPix(x, y); + { + pInitial[y * Width + x] = Surface8->_GetPix(x, y); + pInitialBkg[y * Width + x] = Surface8Bkg->_GetPix(x, y); + } return true; } bool C4Landscape::Load(C4Group &hGroup, bool fLoadSky, bool fSavegame) { + assert(!Surface8 && !Surface8Bkg); + // Load exact landscape from group if (!(Surface8=GroupReadSurface8(hGroup, C4CFN_Landscape))) return false; int iWidth, iHeight; Surface8->GetSurfaceSize(iWidth,iHeight); Width = iWidth; Height = iHeight; + + // Load background surface; it's not fatal if it does not exist + Surface8Bkg = GroupReadSurface8(hGroup, C4CFN_LandscapeBkg); + if (Surface8Bkg && (Width != Surface8Bkg->Wdt || Height != Surface8Bkg->Hgt)) + { + LogFatal(FormatString("Landscape has different dimensions than background landscape (%dx%d vs. %dx%d)", iWidth, iHeight, Surface8Bkg->Wdt, Surface8Bkg->Hgt).getData()); + return false; + } // adjust pal if (!Mat2Pal()) return false; // Landscape should be in correct format: Make sure it is! for (int32_t y=0; yGetPix(x, y); + BYTE byPix = Surface8->_GetPix(x, y); int32_t iMat = PixCol2Mat(byPix); + if (byPix && !MatValid(iMat)) { LogFatal(FormatString("Landscape loading error at (%d/%d): Pixel value %d not a valid material!", (int) x, (int) y, (int) byPix).getData()); return false; } + + if (Surface8Bkg) + { + BYTE byPixBkg = Surface8Bkg->_GetPix(x, y); + int32_t iMatBkg = PixCol2Mat(byPixBkg); + + if (byPixBkg && !MatValid(iMatBkg)) + { + LogFatal(FormatString("Background Landscape loading error at (%d/%d): Pixel value %d not a valid material!", (int) x, (int) y, (int) byPixBkg).getData()); + return false; + } + } } + + // Create default background map if not available + if (!Surface8Bkg) + { + Surface8Bkg = new CSurface8(); + Surface8Bkg->Create(iWidth, iHeight); + for (int32_t y=0; y_SetPix(x, y, DefaultBkgMat(Surface8->_GetPix(x, y))); + } + // Init sky if (fLoadSky) { @@ -1602,17 +1725,27 @@ bool C4Landscape::Load(C4Group &hGroup, bool fLoadSky, bool fSavegame) bool C4Landscape::ApplyDiff(C4Group &hGroup) { CSurface8 *pDiff; + CSurface8 *pDiffBkg; // Load diff landscape from group if (!(pDiff=GroupReadSurface8(hGroup, C4CFN_DiffLandscape))) return false; + if (!(pDiffBkg=GroupReadSurface8(hGroup, C4CFN_DiffLandscapeBkg))) { delete pDiff; return false; } + // convert all pixels: keep if same material; re-set if different material BYTE byPix; for (int32_t y=0; yGetPix(x, y) != 0xff) - if (Surface8->GetPix(x,y) != (byPix=pDiff->GetPix(x,y))) - // material has changed here: readjust with new texture - SetPix(x,y, byPix); + { + if (pDiff->GetPix(x, y) != 0xff) + if (Surface8->_GetPix(x,y) != (byPix=pDiff->_GetPix(x,y))) + // material has changed here: readjust with new texture + SetPix(x,y, byPix); + if (pDiffBkg->GetPix(x, y) != 0xff) + if (Surface8Bkg->_GetPix(x, y) != (byPix=pDiffBkg->_GetPix(x, y))) + Surface8Bkg->_SetPix(x, y, byPix); + } + // done; clear diff delete pDiff; + delete pDiffBkg; return true; } @@ -1620,6 +1753,9 @@ void C4Landscape::Default() { Mode=C4LSC_Undefined; Surface8=NULL; + Surface8Bkg=NULL; + pInitial=NULL; + pInitialBkg=NULL; TopRowPix=NULL; BottomRowPix=NULL; pLandscapeRender=NULL; @@ -1802,6 +1938,7 @@ void C4Landscape::DrawChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, in { case C4M_Flat: case C4M_Octagon: Surface8->Box(tx, ty, tx + wdt, ty + hgt, mcol); + Surface8Bkg->Box(tx, ty, tx + wdt, ty + hgt, DefaultBkgMat(mcol)); return; case C4M_TopFlat: top_rough = 0; side_rough = 2; bottom_rough = 4; @@ -2059,6 +2196,7 @@ bool C4Landscape::MapToSurface(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, // assign clipper Surface8->Clip(iToX,iToY,iToX+iToWdt-1,iToY+iToHgt-1); + Surface8Bkg->Clip(iToX,iToY,iToX+iToWdt-1,iToY+iToHgt-1); pDraw->NoPrimaryClipper(); // Enlarge map segment for chunky rim @@ -2075,6 +2213,7 @@ bool C4Landscape::MapToSurface(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, // remove clipper Surface8->NoClip(); + Surface8Bkg->NoClip(); // success return true; @@ -2082,7 +2221,7 @@ bool C4Landscape::MapToSurface(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, bool C4Landscape::MapToLandscape(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iOffsX, int32_t iOffsY, bool noClear) { - assert(Surface8); + assert(Surface8 && Surface8Bkg); // Clip to map/landscape segment int iMapWidth,iMapHeight,iLandscapeWidth,iLandscapeHeight; // Get map & landscape size @@ -2105,7 +2244,10 @@ bool C4Landscape::MapToLandscape(CSurface8 * sfcMap, int32_t iMapX, int32_t iMap // clear the old landscape if not surpressed if(!noClear) + { Surface8->ClearBox8Only(To.x, To.y, To.Wdt, To.Hgt); + Surface8Bkg->ClearBox8Only(To.x, To.y, To.Wdt, To.Hgt); + } MapToSurface(sfcMap, iMapX, iMapY, iMapWdt, iMapHgt, To.x, To.y, To.Wdt, To.Hgt, iOffsX, iOffsY); FinishChange(To); @@ -3126,6 +3268,7 @@ bool C4Landscape::DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char * // Draw to landscape PrepareChange(BoundingBox); Surface8->Circle(iX,iY,iGrade, byCol); + Surface8Bkg->Circle(iX,iY,iGrade, DefaultBkgMat(byCol)); FinishChange(BoundingBox); break; } @@ -3135,6 +3278,7 @@ bool C4Landscape::DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char * bool C4Landscape::DrawLineLandscape(int32_t iX, int32_t iY, int32_t iGrade, uint8_t line_color) { Surface8->Circle(iX, iY, iGrade, line_color); + Surface8Bkg->Circle(iX, iY, iGrade, DefaultBkgMat(line_color)); return true; } @@ -3231,6 +3375,7 @@ bool C4Landscape::DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, in // Draw to landscape PrepareChange(BoundingBox); Surface8->Box(iX1,iY1,iX2,iY2,byCol); + Surface8Bkg->Box(iX1,iY1,iX2,iY2,DefaultBkgMat(byCol)); FinishChange(BoundingBox); break; } @@ -3250,6 +3395,7 @@ bool C4Landscape::DrawChunks(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, i // assign clipper Surface8->Clip(BoundingBox.x,BoundingBox.y,BoundingBox.x+BoundingBox.Wdt,BoundingBox.y+BoundingBox.Hgt); + Surface8Bkg->Clip(BoundingBox.x,BoundingBox.y,BoundingBox.x+BoundingBox.Wdt,BoundingBox.y+BoundingBox.Hgt); pDraw->NoPrimaryClipper(); // draw all chunks @@ -3260,6 +3406,7 @@ bool C4Landscape::DrawChunks(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, i // remove clipper Surface8->NoClip(); + Surface8Bkg->NoClip(); FinishChange(BoundingBox); @@ -3563,7 +3710,11 @@ void C4Landscape::RemoveUnusedTexMapEntries() for (iMatTex = 0; iMatTex < 128; ++iMatTex) fTexUsage[iMatTex] = false; for (int32_t y=0; yGetPix(x,y) & 0x7f] = true; + fTexUsage[Surface8Bkg->GetPix(x,y) & 0x7f] = true; + } + // check usage by materials for (int32_t iMat = 0; iMat < ::MaterialMap.Num; ++iMat) { @@ -3611,7 +3762,7 @@ void C4Landscape::UpdatePixMaps() bool C4Landscape::Mat2Pal() { - if (!Surface8) return false; + if (!Surface8 || !Surface8Bkg) return false; // set landscape pal int32_t tex; for (tex=0; texGetPattern().PatternClr(0, 0); Surface8->pPal->Colors[MatTex2PixCol(tex)] = dwPix; Surface8->pPal->Colors[MatTex2PixCol(tex) + IFT] = dwPix; + Surface8Bkg->pPal->Colors[MatTex2PixCol(tex)] = dwPix; + Surface8Bkg->pPal->Colors[MatTex2PixCol(tex) + IFT] = dwPix; } // success return true; diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index 46b6b2456..d34a77845 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -60,10 +60,12 @@ public: C4MapCreatorS2 *pMapCreator; // map creator for script-generated maps bool fMapChanged; BYTE *pInitial; // Initial landscape after creation - used for diff + BYTE *pInitialBkg; // Initial bkg landscape after creation - used for diff class C4FoW *pFoW; private: CSurface8 * Surface8; + CSurface8 * Surface8Bkg; // Background material class C4LandscapeRender *pLandscapeRender; uint8_t *TopRowPix, *BottomRowPix; // array size of landscape width: Filled with 0s for border pixels that are open and MCVehic for pixels that are closed int32_t Pix2Mat[256], Pix2Dens[256], Pix2Place[256]; @@ -101,7 +103,9 @@ public: bool ApplyDiff(C4Group &hGroup); bool SetMode(int32_t iMode); bool SetPix(int32_t x, int32_t y, BYTE npix); // set landscape pixel (bounds checked) + bool SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix); // set landscape pixel (bounds checked) bool _SetPix(int32_t x, int32_t y, BYTE npix); // set landsape pixel (bounds not checked) + bool _SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix); // set landsape pixel (bounds not checked) bool _SetPixIfMask(int32_t x, int32_t y, BYTE npix, BYTE nMask) ; // set landscape pixel, if it matches nMask color (no bound-checks) bool InsertMaterial(int32_t mat, int32_t *tx, int32_t *ty, int32_t vx = 0, int32_t vy = 0, bool query_only=false); // modifies tx/ty to actual insertion position bool InsertDeadMaterial(int32_t mat, int32_t tx, int32_t ty); @@ -254,6 +258,7 @@ private: std::vector GetRectangle(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt) const; C4Rect getBoundingBox(int *vtcs, int length) const; + BYTE DefaultBkgMat(BYTE fg) const; void DigMaterial2Objects(int32_t tx, int32_t ty, C4MaterialList *mat_list, C4Object *pCollect = NULL); void BlastMaterial2Objects(int32_t tx, int32_t ty, C4MaterialList *mat_list, int32_t caused_by, int32_t str, C4ValueArray *out_objects); From 73e1b33e65881c6aaeeec5f8eb44808e5a6193ab Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Wed, 17 Jun 2015 21:04:58 -0400 Subject: [PATCH 04/97] Make massmover and PXS not overwrite the background material --- src/landscape/C4Landscape.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index eebf30f8c..f7205001a 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -967,7 +967,7 @@ bool C4Landscape::InsertDeadMaterial(int32_t mat, int32_t tx, int32_t ty) pix = Mat2PixColDefault(mat); // Insert dead material - SetPix(tx,ty,pix+GBackIFT(tx,ty)); + SetPix2(tx,ty,pix,Surface8->_GetPix(tx, ty)); // Search a position for the old material pixel if (Game.C4S.Game.Realism.LandscapeInsertThrust && MatValid(omat)) From bb241f49aef92c6ddf589a5624906b0784d3e8d4 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Wed, 17 Jun 2015 21:15:52 -0400 Subject: [PATCH 05/97] Duplicate getters to query landscape pixels for background surface --- src/landscape/C4Landscape.h | 57 +++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index d34a77845..bbd455c6e 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -175,6 +175,63 @@ public: { return Pix2Place[GetPix(x, y)]; } + + inline BYTE _GetBackPix(int32_t x, int32_t y) const // get landscape pixel (bounds not checked) + { +#ifdef _DEBUG + if (x<0 || y<0 || x>=Width || y>=Height) { BREAKPOINT_HERE; } +#endif + return Surface8Bkg->_GetPix(x,y); + } + inline BYTE GetBackPix(int32_t x, int32_t y) const // get landscape pixel (bounds checked) + { + // Border checks + if (x<0) + { + if (y(x) >= static_cast(Width)) + { + if (y(y) >= static_cast(Height)) + { + return DefaultBkgMat(BottomRowPix[x]); + } + + return Surface8Bkg->_GetPix(x,y); + } + inline int32_t _GetBackMat(int32_t x, int32_t y) const // get landscape material (bounds not checked) + { + return Pix2Mat[_GetBackPix(x, y)]; + } + inline int32_t _GetBackDensity(int32_t x, int32_t y) const // get landscape density (bounds not checked) + { + return Pix2Dens[_GetBackPix(x, y)]; + } + inline int32_t _GetBackPlacement(int32_t x, int32_t y) const // get landscape material placement (bounds not checked) + { + return Pix2Place[_GetBackPix(x, y)]; + } + inline int32_t GetBackMat(int32_t x, int32_t y) const // get landscape material (bounds checked) + { + return Pix2Mat[GetBackPix(x, y)]; + } + inline int32_t GetBackDensity(int32_t x, int32_t y) const // get landscape density (bounds checked) + { + return Pix2Dens[GetBackPix(x, y)]; + } + inline int32_t GetBackPlacement(int32_t x, int32_t y) const // get landscape material placement (bounds checked) + { + return Pix2Place[GetBackPix(x, y)]; + } + inline bool _FastSolidCheck(int32_t x, int32_t y) const // checks whether there *might* be something solid at the point { return PixCnt[(x / 17) * PixCntPitch + (y / 15)] > 0; From 92f3a3e74966f800c26e9aae2f35c7172977f14b Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Wed, 17 Jun 2015 21:34:21 -0400 Subject: [PATCH 06/97] Remove GBackIFT in favor of a lookup in the background surface --- src/editor/C4EditCursor.cpp | 2 +- src/game/C4Game.cpp | 4 ++-- src/gamescript/C4GameScript.cpp | 2 +- src/landscape/C4Landscape.cpp | 8 ++++---- src/landscape/C4Landscape.h | 5 ----- src/landscape/C4PXS.cpp | 2 +- src/landscape/C4Weather.cpp | 2 +- src/landscape/C4Weather.h | 5 ----- 8 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/editor/C4EditCursor.cpp b/src/editor/C4EditCursor.cpp index 369d2d4e4..98b68edb5 100644 --- a/src/editor/C4EditCursor.cpp +++ b/src/editor/C4EditCursor.cpp @@ -974,7 +974,7 @@ void C4EditCursor::ApplyToolPicker() if (MatValid(iMaterial=GBackMat(X,Y))) { Console.ToolsDlg.SelectMaterial(::MaterialMap.Map[iMaterial].Name); - Console.ToolsDlg.SetIFT(!!GBackIFT(X,Y)); + Console.ToolsDlg.SetIFT(Landscape.GetBackPix(X, Y) != 0); } else Console.ToolsDlg.SelectMaterial(C4TLS_MatSky); diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index c09e5361c..dcc8a1178 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -2607,8 +2607,8 @@ C4Object* C4Game::PlaceVegetation(C4PropList * PropList, int32_t iX, int32_t iY, { // Random hit within target area if (!PlaceVegetation_GetRandomPoint(iX, iY, iWdt, iHgt, shape_proplist, out_pos_proplist, &iTx, &iTy)) break; - // Above IFT - while ((iTy>0) && GBackIFT(iTx,iTy)) iTy--; + // Above tunnel + while ((iTy>0) && Landscape.GetBackPix(iTx,iTy) == 0) iTy--; // Above semi solid if (!AboveSemiSolid(iTx,iTy) || !Inside(iTy,50,GBackHgt-50)) continue; diff --git a/src/gamescript/C4GameScript.cpp b/src/gamescript/C4GameScript.cpp index 17ef553eb..84e1eda64 100644 --- a/src/gamescript/C4GameScript.cpp +++ b/src/gamescript/C4GameScript.cpp @@ -442,7 +442,7 @@ static bool FnGBackLiquid(C4PropList * _this, long x, long y) static bool FnGBackSky(C4PropList * _this, long x, long y) { if (Object(_this)) { x+=Object(_this)->GetX(); y+=Object(_this)->GetY(); } - return !GBackIFT(x, y); + return Landscape.GetBackPix(x, y) == 0; } static long FnExtractMaterialAmount(C4PropList * _this, long x, long y, long mat, long amount, bool distant_first) diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index f7205001a..c5a76b9d6 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -660,7 +660,7 @@ bool C4Landscape::BlastFreePix(int32_t tx, int32_t ty) } else if (::MaterialMap.Map[mat].BlastShiftTo) - SetPix(tx,ty,MatTex2PixCol(::MaterialMap.Map[mat].BlastShiftTo)+GBackIFT(tx,ty)); + SetPix2(tx,ty,MatTex2PixCol(::MaterialMap.Map[mat].BlastShiftTo), Surface8Bkg->GetPix(tx, ty)); } return false; } @@ -844,7 +844,7 @@ void C4Landscape::DrawMaterialRect(int32_t mat, int32_t tx, int32_t ty, int32_t for (cy=ty; cy=GetDensity(cx,cy))) - SetPix(cx,cy,Mat2PixColDefault(mat)+GBackIFT(cx,cy)); + SetPix2(cx,cy,Mat2PixColDefault(mat), Surface8Bkg->GetPix(cx, cy)); } void C4Landscape::RaiseTerrain(int32_t tx, int32_t ty, int32_t wdt) @@ -2463,14 +2463,14 @@ bool FindTunnelHeight(int32_t cx, int32_t &ry, int32_t hgt) // Check upwards if (cy1>=0) { - if (GBackIFT(cx,cy1) && MatDensity(GBackMat(cx,cy1)) < C4M_Liquid) + if (Landscape.GetBackPix(cx, cy1) != 0 && MatDensity(GBackMat(cx,cy1)) < C4M_Liquid) { rl1++; if (rl1>=hgt) { ry=cy1+hgt/2; return true; } } else rl1=0; } // Check downwards if (cy2+1=hgt) { ry=cy2-hgt/2; return true; } } else rl2=0; } diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index bbd455c6e..bea3396a5 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -391,11 +391,6 @@ inline int32_t PixCol2Tex(BYTE pixc) return iTex; } -inline BYTE GBackIFT(int32_t x, int32_t y) -{ - return PixColIFT(GBackPix(x,y)); -} - inline int32_t GBackMat(int32_t x, int32_t y) { return ::Landscape.GetMat(x, y); diff --git a/src/landscape/C4PXS.cpp b/src/landscape/C4PXS.cpp index f661d8841..7d563627d 100644 --- a/src/landscape/C4PXS.cpp +++ b/src/landscape/C4PXS.cpp @@ -63,7 +63,7 @@ void C4PXS::Execute() if (GBackDensity(iX, iY + 1) < ::MaterialMap.Map[Mat].Density) { // Air speed: Wind plus some random - int32_t iWind = GBackWind(iX, iY); + int32_t iWind = Weather.GetWind(iX, iY); C4Real txdir = itofix(iWind, 15) + C4REAL256(Random(1200) - 600); C4Real tydir = C4REAL256(Random(1200) - 600); diff --git a/src/landscape/C4Weather.cpp b/src/landscape/C4Weather.cpp index 190292e63..23ecbb839 100644 --- a/src/landscape/C4Weather.cpp +++ b/src/landscape/C4Weather.cpp @@ -95,7 +95,7 @@ void C4Weather::Clear() int32_t C4Weather::GetWind(int32_t x, int32_t y) { - if (GBackIFT(x,y)) return 0; + if (Landscape.GetBackPix(x,y) != 0) return 0; return Wind; } diff --git a/src/landscape/C4Weather.h b/src/landscape/C4Weather.h index 7b0db2ee7..635fe1fff 100644 --- a/src/landscape/C4Weather.h +++ b/src/landscape/C4Weather.h @@ -49,9 +49,4 @@ public: }; extern C4Weather Weather; -inline int32_t GBackWind(int32_t x, int32_t y) -{ - return GBackIFT(x, y) ? 0: ::Weather.Wind; -} - #endif From b1e9c3924d894bc1ec71827b8e7dd4eeabd4e212 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Mon, 22 Jun 2015 20:24:47 -0400 Subject: [PATCH 07/97] Make the Map field private in C4Landscape --- src/editor/C4ConsoleGTK.cpp | 2 +- src/editor/C4ConsoleWin32.cpp | 2 +- src/landscape/C4Landscape.h | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/editor/C4ConsoleGTK.cpp b/src/editor/C4ConsoleGTK.cpp index 15650cef5..7fd2cb271 100644 --- a/src/editor/C4ConsoleGTK.cpp +++ b/src/editor/C4ConsoleGTK.cpp @@ -1326,7 +1326,7 @@ void C4ToolsDlg::State::UpdateLandscapeModeCtrls() gtk_widget_set_sensitive(landscape_dynamic, iMode==C4LSC_Dynamic); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(landscape_static), iMode==C4LSC_Static); - gtk_widget_set_sensitive(landscape_static, ::Landscape.Map!=NULL); + gtk_widget_set_sensitive(landscape_static, ::Landscape.HasMap()); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(landscape_exact), iMode==C4LSC_Exact); diff --git a/src/editor/C4ConsoleWin32.cpp b/src/editor/C4ConsoleWin32.cpp index d770c0ba9..9ffd33e1b 100644 --- a/src/editor/C4ConsoleWin32.cpp +++ b/src/editor/C4ConsoleWin32.cpp @@ -1146,7 +1146,7 @@ void C4ToolsDlg::UpdateLandscapeModeCtrls() UpdateWindow(GetDlgItem(state->hDialog,IDC_BUTTONMODEDYNAMIC)); // Static: enable only if map available SendDlgItemMessage(state->hDialog,IDC_BUTTONMODESTATIC,BM_SETSTATE,(iMode==C4LSC_Static),0); - EnableWindow(GetDlgItem(state->hDialog,IDC_BUTTONMODESTATIC),(::Landscape.Map!=NULL)); + EnableWindow(GetDlgItem(state->hDialog,IDC_BUTTONMODESTATIC),(::Landscape.HasMap())); UpdateWindow(GetDlgItem(state->hDialog,IDC_BUTTONMODESTATIC)); // Exact: enable always SendDlgItemMessage(state->hDialog,IDC_BUTTONMODEEXACT,BM_SETSTATE,(iMode==C4LSC_Exact),0); diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index bea3396a5..6cf7ad36a 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -46,7 +46,6 @@ public: int32_t Mode; int32_t Width,Height; int32_t MapWidth,MapHeight,MapZoom; - CSurface8 * Map; DWORD MatCount[C4MaxMaterial]; // NoSave // DWORD EffectiveMatCount[C4MaxMaterial]; // NoSave // @@ -66,6 +65,7 @@ public: private: CSurface8 * Surface8; CSurface8 * Surface8Bkg; // Background material + CSurface8 * Map; class C4LandscapeRender *pLandscapeRender; uint8_t *TopRowPix, *BottomRowPix; // array size of landscape width: Filled with 0s for border pixels that are open and MCVehic for pixels that are closed int32_t Pix2Mat[256], Pix2Dens[256], Pix2Place[256]; @@ -99,6 +99,7 @@ public: bool SaveInitial(); bool SaveTextures(C4Group &hGroup) const; bool Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bool &rfLoaded, bool fSavegame); + bool HasMap() const { return Map != NULL; } bool MapToLandscape(); bool ApplyDiff(C4Group &hGroup); bool SetMode(int32_t iMode); From eb98e73b76eec0dc9c0c93b71fbe1dcc212cc06c Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Mon, 22 Jun 2015 18:56:04 -0400 Subject: [PATCH 08/97] Introduce background map The background landscape is generated from the background map. --- src/c4group/C4Components.h | 2 + src/graphics/CSurface8.h | 4 +- src/landscape/C4Landscape.cpp | 356 +++++++++++++++++------------ src/landscape/C4Landscape.h | 56 +++-- src/landscape/C4Map.cpp | 7 +- src/landscape/C4Map.h | 2 +- src/landscape/fow/C4FoWAmbient.cpp | 2 +- 7 files changed, 251 insertions(+), 178 deletions(-) diff --git a/src/c4group/C4Components.h b/src/c4group/C4Components.h index 72bbfe4ef..41abac266 100644 --- a/src/c4group/C4Components.h +++ b/src/c4group/C4Components.h @@ -53,6 +53,7 @@ #define C4CFN_UpdateProgramLibs "*.dll" #define C4CFN_Map "Map.bmp" +#define C4CFN_MapBkg "MapBkg.bmp" #define C4CFN_Landscape "Landscape.bmp" #define C4CFN_LandscapeBkg "LandscapeBkg.bmp" #define C4CFN_DiffLandscape "DiffLandscape.bmp" @@ -144,6 +145,7 @@ #define C4CFN_TempMusic2 "~Music2.tmp" #define C4CFN_TempSky "~Sky.tmp" #define C4CFN_TempMap "~Map.tmp" +#define C4CFN_TempMapBkg "~MapBkg.tmp" #define C4CFN_TempLandscape "~Landscape.tmp" #define C4CFN_TempLandscapeBkg "~LandscapeBkg.tmp" #define C4CFN_TempPXS "~PXS.tmp" diff --git a/src/graphics/CSurface8.h b/src/graphics/CSurface8.h index 31075ee6b..4b89c2a88 100644 --- a/src/graphics/CSurface8.h +++ b/src/graphics/CSurface8.h @@ -46,12 +46,12 @@ public: // set pix in local copy without bounds or surface checks Bits[iY*Pitch+iX]=byCol; } - BYTE GetPix(int iX, int iY) // get pixel + BYTE GetPix(int iX, int iY) const // get pixel { if (iX<0 || iY<0 || iX>=Wdt || iY>=Hgt) return 0; return Bits ? Bits[iY*Pitch+iX] : 0; } - inline BYTE _GetPix(int x, int y) // get pixel (bounds not checked) + inline BYTE _GetPix(int x, int y) const // get pixel (bounds not checked) { return Bits[y*Pitch+x]; } diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index c5a76b9d6..833fef8a7 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -517,10 +517,10 @@ void C4Landscape::BlastFreeShape(int *vtcs, int length, C4Object *by_object, int // Remember any collectible objects in area std::unique_ptr dig_objects(PrepareFreeShape(BoundingBox, by_object)); - uint8_t *pblast_tbl = NULL, blast_tbl[256]; + uint8_t *pblast_tbl = NULL, blast_tbl[C4M_MaxTexIndex]; if (iMaxDensity < C4M_Vehicle) { - for (int32_t i=0; i<256; ++i) blast_tbl[i] = (GetPixDensity(i)<=iMaxDensity); + for (int32_t i=0; i < C4M_MaxTexIndex; ++i) blast_tbl[i] = (GetPixDensity(i)<=iMaxDensity); pblast_tbl = blast_tbl; } @@ -528,7 +528,7 @@ void C4Landscape::BlastFreeShape(int *vtcs, int length, C4Object *by_object, int { if(!by_object->MaterialContents) by_object->MaterialContents = new C4MaterialList; - ForPolygon(vtcs,length/2,&C4Landscape::BlastFreePix,by_object->MaterialContents, 0, pblast_tbl); + ForPolygon(vtcs,length/2,&C4Landscape::BlastFreePix,by_object->MaterialContents, 0, 0, pblast_tbl); } else { @@ -660,7 +660,7 @@ bool C4Landscape::BlastFreePix(int32_t tx, int32_t ty) } else if (::MaterialMap.Map[mat].BlastShiftTo) - SetPix2(tx,ty,MatTex2PixCol(::MaterialMap.Map[mat].BlastShiftTo), Surface8Bkg->GetPix(tx, ty)); + SetPix2(tx,ty,MatTex2PixCol(::MaterialMap.Map[mat].BlastShiftTo), TRANSPARENT); } return false; } @@ -700,7 +700,7 @@ bool C4Landscape::SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix) if (x < 0 || y < 0 || x >= Width || y >= Height) return false; // no change? - if (fgPix == _GetPix(x, y) && bgPix == Surface8Bkg->_GetPix(x, y)) + if ((fgPix == TRANSPARENT || fgPix == _GetPix(x, y)) && (bgPix == TRANSPARENT || bgPix == Surface8Bkg->_GetPix(x, y))) return true; // note for relight (TODO: Why is this not in _SetPix2?) if(pLandscapeRender) @@ -734,8 +734,11 @@ bool C4Landscape::_SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix) AddDbgRec(RCT_SetPix, &rc, sizeof(rc)); } assert(x >= 0 && y >= 0 && x < Width && y < Height); - // get and check pixel + // get pixel and resolve transparency to already existing pixel BYTE opix = _GetPix(x, y); + if (fgPix == TRANSPARENT) fgPix = opix; + if (bgPix == TRANSPARENT) bgPix = Surface8Bkg->_GetPix(x, y); + // check pixel if (fgPix == opix && bgPix == Surface8Bkg->_GetPix(x, y)) return true; // count pixels if (Pix2Dens[fgPix]) @@ -956,18 +959,18 @@ bool C4Landscape::InsertDeadMaterial(int32_t mat, int32_t tx, int32_t ty) // Check surroundings for inspiration for texture to use int n = 0; int pix = -1; if(tx > 0 && _GetMat(tx-1, ty) == mat) - if(!Random(++n)) pix = _GetPix(tx-1, ty) % IFT; + if(!Random(++n)) pix = _GetPix(tx-1, ty); if(ty > 0 && _GetMat(tx, ty-1) == mat) - if(!Random(++n)) pix = _GetPix(tx, ty-1) % IFT; + if(!Random(++n)) pix = _GetPix(tx, ty-1); if(tx+1 < Width && _GetMat(tx+1, ty) == mat) - if(!Random(++n)) pix = _GetPix(tx+1, ty) % IFT; + if(!Random(++n)) pix = _GetPix(tx+1, ty); if(ty+1 < Height && _GetMat(tx, ty+1) == mat) - if(!Random(++n)) pix = _GetPix(tx, ty+1) % IFT; + if(!Random(++n)) pix = _GetPix(tx, ty+1); if(pix < 0) pix = Mat2PixColDefault(mat); // Insert dead material - SetPix2(tx,ty,pix,Surface8->_GetPix(tx, ty)); + SetPix2(tx,ty,pix, TRANSPARENT); // Search a position for the old material pixel if (Game.C4S.Game.Realism.LandscapeInsertThrust && MatValid(omat)) @@ -1006,18 +1009,25 @@ BYTE C4Landscape::DefaultBkgMat(BYTE fg) const if(!pTex || !pTex->GetMaterial()) return fg; if(DensitySemiSolid(pTex->GetMaterial()->Density)) - { - // TODO: Remove IFT check once we get rid of IFT - if(fg & IFT) - return Mat2PixColDefault(MTunnel) + IFT; - else - return 0; - } + return Mat2PixColDefault(MTunnel); return fg; } +CSurface8* C4Landscape::CreateDefaultBkgSurface(const CSurface8& sfcFg) const +{ + CSurface8* sfcBg = new CSurface8(); + if (!sfcBg->Create(sfcFg.Wdt, sfcFg.Hgt)) + { delete sfcBg; return NULL; } + + for (int32_t y=0; y_SetPix(x, y, DefaultBkgMat(sfcFg._GetPix(x, y))); + + return sfcBg; +} + /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* ++++ Polygon drawing code extracted from ALLEGRO by Shawn Hargreaves ++++ */ /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ @@ -1083,7 +1093,7 @@ const int QuickPolyBufSize = 20; CPolyEdge QuickPolyBuf[QuickPolyBufSize]; int32_t C4Landscape::ForPolygon(int *vtcs, int length, bool (C4Landscape::*fnCallback)(int32_t, int32_t), - C4MaterialList *mats_count, int col, uint8_t *conversion_table) + C4MaterialList *mats_count, uint8_t col, uint8_t colBkg, uint8_t *conversion_table) { // Variables for polygon drawer int c,x1,x2,y; @@ -1167,13 +1177,13 @@ int32_t C4Landscape::ForPolygon(int *vtcs, int length, bool (C4Landscape::*fnCal { const uint8_t pix = conversion_table[uint8_t(GetPix(x1+xcnt, y))]; Surface8->SetPix(x1+xcnt, y, pix); - Surface8Bkg->SetPix(x1+xcnt, y, DefaultBkgMat(pix)); + if (colBkg != TRANSPARENT) Surface8Bkg->SetPix(x1+xcnt, y, colBkg); } else for (int xcnt=x2-x1-1; xcnt>=0; xcnt--) { - Surface8->SetPix(x1+xcnt, y, col); - Surface8Bkg->SetPix(x1+xcnt, y, DefaultBkgMat(col)); + if (col != TRANSPARENT) Surface8->SetPix(x1+xcnt, y, col); + if (colBkg != TRANSPARENT) Surface8Bkg->SetPix(x1+xcnt, y, colBkg); } edge = edge->next->next; } @@ -1240,6 +1250,7 @@ void C4Landscape::Clear(bool fClearMapCreator, bool fClearSky, bool fClearRender delete Surface8; Surface8=NULL; delete Surface8Bkg; Surface8Bkg=NULL; delete Map; Map=NULL; + delete MapBkg; MapBkg=NULL; // clear initial landscape delete [] pInitial; pInitial = NULL; delete [] pInitialBkg; pInitialBkg = NULL; @@ -1251,7 +1262,7 @@ void C4Landscape::Clear(bool fClearMapCreator, bool fClearSky, bool fClearRender delete [] PixCnt; PixCnt = NULL; PixCntPitch = 0; // clear bridge material conversion temp buffers - for (int32_t i = 0; i<128; ++i) + for (int32_t i = 0; i < C4M_MaxTexIndex; ++i) { delete [] BridgeMatConversion[i]; BridgeMatConversion[i] = NULL; @@ -1331,22 +1342,27 @@ bool C4Landscape::Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bo if (!Game.C4S.Landscape.ExactLandscape) { CSurface8 * sfcMap=NULL; + CSurface8 * sfcMapBkg=NULL; + // Static map from scenario if ((sfcMap=GroupReadSurface8(hGroup, C4CFN_Map))) + { if (!fLandscapeModeSet) Mode=C4LSC_Static; + sfcMapBkg = GroupReadSurface8(hGroup, C4CFN_MapBkg); + } // dynamic map from Landscape.txt if (!sfcMap) - if ((sfcMap=CreateMapS2(hGroup))) + if (CreateMapS2(hGroup, sfcMap, sfcMapBkg)) if (!fLandscapeModeSet) Mode=C4LSC_Dynamic; // script may create or edit map - if (MapScript.InitializeMap(&Game.C4S.Landscape, &::TextureMap, &::MaterialMap, Game.StartupPlayerCount, &sfcMap)) + if (MapScript.InitializeMap(&Game.C4S.Landscape, &::TextureMap, &::MaterialMap, Game.StartupPlayerCount, &sfcMap)) // TODO: Add sfcMapBkg parameter if (!fLandscapeModeSet) Mode=C4LSC_Dynamic; // Dynamic map by scenario if (!sfcMap && !fOverloadCurrent) - if ((sfcMap=CreateMap())) + if ((!CreateMap(sfcMap, sfcMapBkg))) if (!fLandscapeModeSet) Mode=C4LSC_Dynamic; // No map failure @@ -1358,6 +1374,13 @@ bool C4Landscape::Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bo return true; } + // If no background map is loaded, create default from foreground map + if (!sfcMapBkg) + { + sfcMapBkg = CreateDefaultBkgSurface(*sfcMap); + if (!sfcMapBkg) return false; + } + if (Config.General.DebugRec) { AddDbgRec(RCT_Block, "|---MAP---|", 12); @@ -1382,7 +1405,10 @@ bool C4Landscape::Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bo if (fOverloadCurrent) Clear(!Game.C4S.Landscape.KeepMapCreator, fLoadSky, false); // assign new map + assert(Map == NULL); + assert(MapBkg == NULL); Map = sfcMap; + MapBkg = sfcMapBkg; // Sky (might need to know landscape height) if (fLoadSky) @@ -1576,19 +1602,20 @@ bool C4Landscape::SaveDiffInternal(C4Group &hGroup, bool fSyncSave) const assert(pInitial && pInitialBkg); if (!pInitial || !pInitialBkg) return false; - // If it shouldn't be sync-save: Clear all bytes that have not changed + // If it shouldn't be sync-save: Clear all bytes that have not changed, i.e. + // set them to C4M_MaxTexIndex bool fChanged = false, fChangedBkg = false;; if (!fSyncSave) for (int y = 0; y < Height; y++) for (int x = 0; x < Width; x++) { if (pInitial[y * Width + x] == Surface8->_GetPix(x, y)) - Surface8->SetPix(x,y,0xff); + Surface8->SetPix(x,y,C4M_MaxTexIndex); else fChanged = true; if (pInitialBkg[y * Width + x] == Surface8Bkg->_GetPix(x, y)) - Surface8Bkg->SetPix(x,y,0xff); + Surface8Bkg->SetPix(x,y,C4M_MaxTexIndex); else fChangedBkg = true; } @@ -1622,9 +1649,9 @@ bool C4Landscape::SaveDiffInternal(C4Group &hGroup, bool fSyncSave) const for (int y = 0; y < Height; y++) for (int x = 0; x < Width; x++) { - if (Surface8->_GetPix(x, y) == 0xff) + if (Surface8->_GetPix(x, y) == C4M_MaxTexIndex) Surface8->SetPix(x,y,pInitial[y * Width + x]); - if (Surface8Bkg->_GetPix(x, y) == 0xff) + if (Surface8Bkg->_GetPix(x, y) == C4M_MaxTexIndex) Surface8Bkg->SetPix(x,y,pInitialBkg[y * Width + x]); } @@ -1703,14 +1730,12 @@ bool C4Landscape::Load(C4Group &hGroup, bool fLoadSky, bool fSavegame) } } - // Create default background map if not available + // Create default background landscape if not available if (!Surface8Bkg) { - Surface8Bkg = new CSurface8(); - Surface8Bkg->Create(iWidth, iHeight); - for (int32_t y=0; y_SetPix(x, y, DefaultBkgMat(Surface8->_GetPix(x, y))); + Surface8Bkg = CreateDefaultBkgSurface(*Surface8); + if (!Surface8Bkg) + return false; } // Init sky @@ -1734,11 +1759,11 @@ bool C4Landscape::ApplyDiff(C4Group &hGroup) BYTE byPix; for (int32_t y=0; yGetPix(x, y) != 0xff) + if (pDiff->GetPix(x, y) != C4M_MaxTexIndex) if (Surface8->_GetPix(x,y) != (byPix=pDiff->_GetPix(x,y))) // material has changed here: readjust with new texture SetPix(x,y, byPix); - if (pDiffBkg->GetPix(x, y) != 0xff) + if (pDiffBkg->GetPix(x, y) != C4M_MaxTexIndex) if (Surface8Bkg->_GetPix(x, y) != (byPix=pDiffBkg->_GetPix(x, y))) Surface8Bkg->_SetPix(x, y, byPix); } @@ -1760,6 +1785,7 @@ void C4Landscape::Default() BottomRowPix=NULL; pLandscapeRender=NULL; Map=NULL; + MapBkg=NULL; Width=Height=0; MapWidth=MapHeight=MapZoom=0; ClearMatCount(); @@ -1771,11 +1797,8 @@ void C4Landscape::Default() pMapCreator=NULL; Modulation=0; fMapChanged = false; - for (int32_t i = 0; i<128; ++i) - { - delete [] BridgeMatConversion[i]; + for (int32_t i = 0; i < C4M_MaxTexIndex; ++i) BridgeMatConversion[i] = NULL; - } pFoW = NULL; } @@ -1809,6 +1832,7 @@ bool C4Landscape::SaveMap(C4Group &hGroup) const { // No map if (!Map) return false; + assert(MapBkg != NULL); // Create map palette CStdPalette Palette; @@ -1823,6 +1847,15 @@ bool C4Landscape::SaveMap(C4Group &hGroup) const C4CFN_Map )) return false; + // Save background map surface + if (!MapBkg->Save(Config.AtTempPath(C4CFN_TempMapBkg), &Palette)) + return false; + + // Move temp file to group + if (!hGroup.Move(Config.AtTempPath(C4CFN_TempMapBkg), + C4CFN_MapBkg )) + return false; + // Success return true; } @@ -1889,8 +1922,8 @@ bool C4Landscape::InitTopAndBottomRowPix() case 2: for (int32_t x=0; xGetPix(x/MapZoom,0); - TopRowPix[x] = ((map_pix & IFT) ? MCVehic : 0); + uint8_t map_pix = MapBkg->GetPix(x/MapZoom,0); + TopRowPix[x] = ((map_pix != 0) ? MCVehic : 0); } break; // TopOpen=1: Top is open @@ -1906,8 +1939,8 @@ bool C4Landscape::InitTopAndBottomRowPix() case 2: for (int32_t x=0; xGetPix(x/MapZoom,Map->Hgt-1); - BottomRowPix[x] = ((map_pix & IFT) ? MCVehic : 0); + uint8_t map_pix = MapBkg->GetPix(x/MapZoom,Map->Hgt-1); + BottomRowPix[x] = ((map_pix != 0) ? MCVehic : 0); } break; // BottomOpen=1: Bottom is open @@ -1919,7 +1952,7 @@ bool C4Landscape::InitTopAndBottomRowPix() bool C4Landscape::MapToLandscape() { // zoom map to landscape - return MapToLandscape(Map,0,0,MapWidth,MapHeight); + return MapToLandscape(Map,MapBkg,0,0,MapWidth,MapHeight); } @@ -1930,15 +1963,15 @@ uint32_t C4Landscape::ChunkyRandom(uint32_t & iOffset, uint32_t iRange) const return (iOffset ^ MapSeed) % iRange; } -void C4Landscape::DrawChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, int32_t mcol, C4MaterialCoreShape Shape, uint32_t cro) +void C4Landscape::DrawChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, uint8_t mcol, uint8_t mcolBkg, C4MaterialCoreShape Shape, uint32_t cro) { unsigned int top_rough = 0, side_rough = 0, bottom_rough = 0; // what to do? switch (Shape) { case C4M_Flat: case C4M_Octagon: - Surface8->Box(tx, ty, tx + wdt, ty + hgt, mcol); - Surface8Bkg->Box(tx, ty, tx + wdt, ty + hgt, DefaultBkgMat(mcol)); + if (mcol != TRANSPARENT) Surface8->Box(tx, ty, tx + wdt, ty + hgt, mcol); + if (mcolBkg != TRANSPARENT) Surface8Bkg->Box(tx, ty, tx + wdt, ty + hgt, mcolBkg); return; case C4M_TopFlat: top_rough = 0; side_rough = 2; bottom_rough = 4; @@ -1965,10 +1998,10 @@ void C4Landscape::DrawChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, in vtcs[12] = tx + wdt + ChunkyRandom(cro, rx * side_rough / 4); vtcs[13] = ty - ChunkyRandom(cro, rx * top_rough / 4); vtcs[14] = tx + wdt / 2; vtcs[15] = ty - ChunkyRandom(cro, rx * top_rough / 2); - ForPolygon(vtcs, 8, NULL, NULL, mcol); + ForPolygon(vtcs, 8, NULL, NULL, mcol, mcolBkg); } -void C4Landscape::DrawSmoothOChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, int32_t mcol, int flip, uint32_t cro) +void C4Landscape::DrawSmoothOChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, uint8_t mcol, uint8_t mcolBkg, int flip, uint32_t cro) { int vtcs[8]; unsigned int rx = Max(wdt / 2, 1); @@ -1990,10 +2023,10 @@ void C4Landscape::DrawSmoothOChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t case 7: vtcs[6] = tx + wdt / 2; vtcs[7] += hgt / 2; break; } - ForPolygon(vtcs, 4, NULL, NULL, mcol); + ForPolygon(vtcs, 4, NULL, NULL, mcol, mcolBkg); } -void C4Landscape::DrawCustomShapePoly(const C4MaterialShape::Poly &poly, int32_t off_x, int32_t off_y, int32_t mcol) +void C4Landscape::DrawCustomShapePoly(const C4MaterialShape::Poly &poly, int32_t off_x, int32_t off_y, uint8_t mcol, uint8_t mcolBkg) { // put poly into plain int array format; add offset and send to polygon drawing proc size_t n = poly.size(), i = 0; @@ -2003,17 +2036,17 @@ void C4Landscape::DrawCustomShapePoly(const C4MaterialShape::Poly &poly, int32_t vtcs[i++] = j->x + off_x; vtcs[i++] = j->y + off_y; } - ForPolygon(vtcs,n,NULL,NULL,mcol); + ForPolygon(vtcs, n, NULL, NULL, mcol, mcolBkg); // done delete [] vtcs; } -void C4Landscape::DrawCustomShape(CSurface8 * sfcMap, C4MaterialShape *shape, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iTexture, int32_t mcol, int32_t iOffX, int32_t iOffY) +void C4Landscape::DrawCustomShape(CSurface8 * sfcMap, CSurface8* sfcMapBkg, C4MaterialShape *shape, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, uint8_t iTexture, int32_t iOffX, int32_t iOffY) { // Prepare shape for map zoom if (!shape->PrepareForZoom(MapZoom)) { - DebugLogF("ERROR: Cannot apply texture index %d: Material shape size not a multiple of map zoom!", (int)mcol); + DebugLogF("ERROR: Cannot apply texture index %d: Material shape size not a multiple of map zoom!", (int)iTexture); return; } // Get affected range of shapes @@ -2025,7 +2058,6 @@ void C4Landscape::DrawCustomShape(CSurface8 * sfcMap, C4MaterialShape *shape, in y0 = (y0-shape->overlap_bottom+shape->hgt) / shape->hgt - 1; x1 = (x1+shape->overlap_left +shape->wdt) / shape->wdt - 1; y1 = (y1+shape->overlap_top +shape->hgt) / shape->hgt - 1; - BYTE iIFT = 0; // paint from all affected shape blocks for (int32_t y=y0; y<=y1; ++y) for (int32_t x=x0; x<=x1; ++x) @@ -2037,13 +2069,13 @@ void C4Landscape::DrawCustomShape(CSurface8 * sfcMap, C4MaterialShape *shape, in // does this shape block overlap any map pixels of our material for (C4MaterialShape::PtVec::const_iterator j=p.overlaps.begin(); j!=p.overlaps.end(); ++j) { - BYTE pix; - if (((pix=sfcMap->GetPix(x_map+j->x, y_map+j->y)) & 127) == iTexture) + const BYTE pix = sfcMap->GetPix(x_map + j->x, y_map + j->y); + if (pix == iTexture) { - // first pixel in overlap list determines IFT - iIFT = pix & IFT; + // First pixel in overlap list defines IFT + const BYTE pixBkg = sfcMapBkg->GetPix(x_map + j->x, y_map + j->y); // draw this poly! - DrawCustomShapePoly(p, x_map*MapZoom+iOffX, y_map*MapZoom+iOffY, iIFT + mcol); + DrawCustomShapePoly(p, x_map*MapZoom+iOffX, y_map*MapZoom+iOffY, pix, pixBkg); break; } } @@ -2051,12 +2083,11 @@ void C4Landscape::DrawCustomShape(CSurface8 * sfcMap, C4MaterialShape *shape, in } } -void C4Landscape::ChunkOZoom(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iTexture, int32_t iOffX, int32_t iOffY) +void C4Landscape::ChunkOZoom(CSurface8 * sfcMap, CSurface8 * sfcMapBkg, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, uint8_t iTexture, int32_t iOffX, int32_t iOffY) { C4Material *pMaterial = ::TextureMap.GetEntry(iTexture)->GetMaterial(); if (!pMaterial) return; C4MaterialCoreShape iChunkType = ::Game.C4S.Landscape.FlatChunkShapes ? C4M_Flat : pMaterial->MapChunkType; - BYTE byColor = MatTex2PixCol(iTexture); // Get map & landscape size int iMapWidth, iMapHeight; sfcMap->GetSurfaceSize(iMapWidth, iMapHeight); @@ -2075,27 +2106,29 @@ void C4Landscape::ChunkOZoom(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, i // Scan map line for (int iX = iMapX; iX < iMapX + iMapWdt; iX++) { - int32_t iIFT; // Map scan line start uint8_t MapPixel=sfcMap->_GetPix(iX, iY); + uint8_t MapPixelBkg=sfcMapBkg->_GetPix(iX, iY); // Landscape target coordinate horizontal int iToX = iX * iChunkWidth + iOffX; // Here's a chunk of the texture-material to zoom - if ((MapPixel & 127) == iTexture) + if (MapPixel == iTexture) { - // Determine IFT - iIFT = 0; if (MapPixel >= 128) iIFT = IFT; // Draw chunk - DrawChunk(iToX, iToY, iChunkWidth, iChunkHeight, byColor + iIFT, iChunkType, (iX<<16)+iY); + DrawChunk(iToX, iToY, iChunkWidth, iChunkHeight, MapPixel, MapPixelBkg, iChunkType, (iX<<16)+iY); } // Other chunk, check for slope smoothers else if (iChunkType == C4M_Smooth || iChunkType == C4M_Smoother || iChunkType == C4M_Octagon) { // Map scan line pixel below - uint8_t below = sfcMap->GetPix(iX, iY + 1) & 127; - uint8_t above = sfcMap->GetPix(iX, iY - 1) & 127; - uint8_t left = sfcMap->GetPix(iX - 1, iY) & 127; - uint8_t right = sfcMap->GetPix(iX + 1, iY) & 127; + uint8_t below = sfcMap->GetPix(iX, iY + 1); + uint8_t above = sfcMap->GetPix(iX, iY - 1); + uint8_t left = sfcMap->GetPix(iX - 1, iY); + uint8_t right = sfcMap->GetPix(iX + 1, iY); + /*uint8_t belowBkg = sfcMapBkg->GetPix(iX, iY + 1); + uint8_t aboveBkg = sfcMapBkg->GetPix(iX, iY - 1);*/ + uint8_t leftBkg = sfcMapBkg->GetPix(iX - 1, iY); + uint8_t rightBkg = sfcMapBkg->GetPix(iX + 1, iY); // do not fill a tiny hole if (below == iTexture && above == iTexture && left == iTexture && right == iTexture) continue; @@ -2106,18 +2139,14 @@ void C4Landscape::ChunkOZoom(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, i // Same texture-material on left if (iX > 0 && left == iTexture) { - // Determine IFT - iIFT = 0; if (sfcMap->GetPix(iX-1, iY) >= 128) iIFT = IFT; // Draw smoother - DrawSmoothOChunk(iToX, iToY, iChunkWidth, iChunkHeight, byColor + iIFT, 3 + flat, (iX<<16) + iY); + DrawSmoothOChunk(iToX, iToY, iChunkWidth, iChunkHeight, left, leftBkg, 3 + flat, (iX<<16) + iY); } // Same texture-material on right if (iX < iMapWidth - 1 && right == iTexture) { - // Determine IFT - iIFT = 0; if (sfcMap->GetPix(iX+1, iY) >= 128) iIFT = IFT; // Draw smoother - DrawSmoothOChunk(iToX, iToY, iChunkWidth, iChunkHeight, byColor + iIFT, 0 + flat, (iX<<16)+iY); + DrawSmoothOChunk(iToX, iToY, iChunkWidth, iChunkHeight, right, rightBkg, 0 + flat, (iX<<16)+iY); } } // Smooth chunk & same texture-material above @@ -2126,32 +2155,28 @@ void C4Landscape::ChunkOZoom(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, i // Same texture-material on left if (iX > 0 && left == iTexture) { - // Determine IFT - iIFT = 0; if (sfcMap->GetPix(iX - 1, iY) >= 128) iIFT = IFT; // Draw smoother - DrawSmoothOChunk(iToX, iToY, iChunkWidth, iChunkHeight, byColor + iIFT, 2 + flat, (iX<<16)+iY); + DrawSmoothOChunk(iToX, iToY, iChunkWidth, iChunkHeight, left, leftBkg, 2 + flat, (iX<<16)+iY); } // Same texture-material on right if (iX < iMapWidth - 1 && right == iTexture) { - // Determine IFT - iIFT = 0; if (sfcMap->GetPix(iX + 1, iY) >= 128) iIFT = IFT; // Draw smoother - DrawSmoothOChunk(iToX, iToY, iChunkWidth, iChunkHeight, byColor + iIFT, 1 + flat, (iX<<16)+iY); + DrawSmoothOChunk(iToX, iToY, iChunkWidth, iChunkHeight, right, rightBkg, 1 + flat, (iX<<16)+iY); } } } } } // Draw custom shapes on top of regular materials - if (pMaterial->CustomShape) DrawCustomShape(sfcMap, pMaterial->CustomShape, iMapX, iMapY, iMapWdt, iMapHgt, iTexture, byColor, iOffX, iOffY); + if (pMaterial->CustomShape) DrawCustomShape(sfcMap, sfcMapBkg, pMaterial->CustomShape, iMapX, iMapY, iMapWdt, iMapHgt, iTexture, iOffX, iOffY); } -bool C4Landscape::GetTexUsage(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, DWORD *dwpTextureUsage) const +bool C4Landscape::GetTexUsage(CSurface8 * sfcMap, CSurface8 * sfcMapBkg, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, DWORD *dwpTextureUsage) const { int iX,iY; // No good parameters - if (!sfcMap || !dwpTextureUsage) return false; + if (!sfcMap || !sfcMapBkg || !dwpTextureUsage) return false; // Clip desired map segment to map size iMapX=Clamp(iMapX,0,sfcMap->Wdt-1); iMapY=Clamp(iMapY,0,sfcMap->Hgt-1); iMapWdt=Clamp(iMapWdt,0,sfcMap->Wdt-iMapX); iMapHgt=Clamp(iMapHgt,0,sfcMap->Hgt-iMapY); @@ -2161,21 +2186,39 @@ bool C4Landscape::GetTexUsage(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, for (iY = iMapY; iY < iMapY+iMapHgt; iY++) for (iX = iMapX; iX < iMapX + iMapWdt; iX++) { - int32_t tex = sfcMap->GetPix(iX, iY) & (IFT - 1); - // Count texture map index only (no IFT) + // Count texture map index + const int32_t tex = sfcMap->GetPix(iX, iY); + assert(tex < C4M_MaxTexIndex); + if (!dwpTextureUsage[tex]++) if (tex) { // Check if texture actually exists if (!::TextureMap.GetEntry(tex)->GetMaterial()) - LogF("Map2Landscape error: Texture index %d at (%d/%d) not defined in texture map!", (int) tex, (int) iX, (int) iY); + LogF("Map2Landscape error: Texture index %d at (%d/%d) in map not defined in texture map!", (int) tex, (int) iX, (int) iY); // No error. Landscape is usually fine but might contain some holes where material should be } + + // Ignore background texture for now -- this is only used for ChunkOZoom, + // for which only the foreground texture is relevant. + + /* + // Count texture map index + const int32_t texBkg = sfcMapBkg->GetPix(iX, iY); + if (!dwpTextureUsage[texBkg]++) if (texBkg) + { + // Check if texture actually exists + if (!::TextureMap.GetEntry(texBkg)->GetMaterial()) + LogF("Map2Landscape error: Texture index %d at (%d/%d) in background map not defined in texture map!", (int) texBkg, (int) iX, (int) iY); + // No error. Landscape is usually fine but might contain some holes where material should be + } + */ + } // Done return true; } -bool C4Landscape::TexOZoom(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, DWORD *dwpTextureUsage, int32_t iToX, int32_t iToY) +bool C4Landscape::TexOZoom(CSurface8 * sfcMap, CSurface8 * sfcMapBkg, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, DWORD *dwpTextureUsage, int32_t iToX, int32_t iToY) { int32_t iIndex; @@ -2184,14 +2227,14 @@ bool C4Landscape::TexOZoom(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int if (dwpTextureUsage[iIndex]>0) { // ChunkOZoom map to landscape - ChunkOZoom(sfcMap,iMapX,iMapY,iMapWdt,iMapHgt,iIndex,iToX,iToY); + ChunkOZoom(sfcMap,sfcMapBkg,iMapX,iMapY,iMapWdt,iMapHgt,iIndex,iToX,iToY); } // Done return true; } -bool C4Landscape::MapToSurface(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iToX, int32_t iToY, int32_t iToWdt, int32_t iToHgt, int32_t iOffX, int32_t iOffY) +bool C4Landscape::MapToSurface(CSurface8 * sfcMap, CSurface8 * sfcMapBkg, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iToX, int32_t iToY, int32_t iToWdt, int32_t iToHgt, int32_t iOffX, int32_t iOffY) { // assign clipper @@ -2207,9 +2250,9 @@ bool C4Landscape::MapToSurface(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, // Determine texture usage in map segment DWORD dwTexUsage[C4M_MaxTexIndex]; - if (!GetTexUsage(sfcMap,iMapX,iMapY,iMapWdt,iMapHgt,dwTexUsage)) return false; + if (!GetTexUsage(sfcMap,sfcMapBkg,iMapX,iMapY,iMapWdt,iMapHgt,dwTexUsage)) return false; // Texture zoom map to landscape - if (!TexOZoom(sfcMap,iMapX,iMapY,iMapWdt,iMapHgt,dwTexUsage,iOffX,iOffY)) return false; + if (!TexOZoom(sfcMap,sfcMapBkg,iMapX,iMapY,iMapWdt,iMapHgt,dwTexUsage,iOffX,iOffY)) return false; // remove clipper Surface8->NoClip(); @@ -2219,7 +2262,7 @@ bool C4Landscape::MapToSurface(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, return true; } -bool C4Landscape::MapToLandscape(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iOffsX, int32_t iOffsY, bool noClear) +bool C4Landscape::MapToLandscape(CSurface8 * sfcMap, CSurface8 * sfcMapBkg, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iOffsX, int32_t iOffsY, bool noClear) { assert(Surface8 && Surface8Bkg); // Clip to map/landscape segment @@ -2242,27 +2285,26 @@ bool C4Landscape::MapToLandscape(CSurface8 * sfcMap, int32_t iMapX, int32_t iMap PrepareChange(To); - // clear the old landscape if not surpressed + // clear the old landscape if not supressed if(!noClear) { Surface8->ClearBox8Only(To.x, To.y, To.Wdt, To.Hgt); Surface8Bkg->ClearBox8Only(To.x, To.y, To.Wdt, To.Hgt); } - MapToSurface(sfcMap, iMapX, iMapY, iMapWdt, iMapHgt, To.x, To.y, To.Wdt, To.Hgt, iOffsX, iOffsY); + MapToSurface(sfcMap, sfcMapBkg, iMapX, iMapY, iMapWdt, iMapHgt, To.x, To.y, To.Wdt, To.Hgt, iOffsX, iOffsY); FinishChange(To); return true; } -CSurface8 * C4Landscape::CreateMap() +bool C4Landscape::CreateMap(CSurface8*& sfcMap, CSurface8*& sfcMapBkg) { - CSurface8 * sfcMap; int32_t iWidth=0,iHeight=0; // Create map surface Game.C4S.Landscape.GetMapSize(iWidth,iHeight,Game.StartupPlayerCount); if (!(sfcMap=new CSurface8(iWidth,iHeight))) - return NULL; + return false; // Fill sfcMap C4MapCreator MapCreator; @@ -2270,13 +2312,15 @@ CSurface8 * C4Landscape::CreateMap() Game.C4S.Landscape, ::TextureMap, true,Game.StartupPlayerCount); - return sfcMap; + sfcMapBkg = CreateDefaultBkgSurface(*sfcMap); + if (!sfcMapBkg) { delete sfcMap; sfcMap = NULL; return false; } + return true; } -CSurface8 * C4Landscape::CreateMapS2(C4Group &ScenFile) +bool C4Landscape::CreateMapS2(C4Group &ScenFile, CSurface8*& sfcMap, CSurface8*& sfcMapBkg) { // file present? - if (!ScenFile.AccessEntry(C4CFN_DynLandscape)) return NULL; + if (!ScenFile.AccessEntry(C4CFN_DynLandscape)) return false; // create map creator if (!pMapCreator) @@ -2288,7 +2332,9 @@ CSurface8 * C4Landscape::CreateMapS2(C4Group &ScenFile) CSurface8 * sfc = pMapCreator->Render(NULL); // keep map creator until script callbacks have been done - return sfc; + sfcMap = sfc; + sfcMapBkg = CreateDefaultBkgSurface(*sfcMap); // TODO: Replace this by what was actually generated! + return true; } bool C4Landscape::PostInitMap() @@ -3218,7 +3264,7 @@ bool C4Landscape::SetMode(int32_t iMode) return true; } -bool C4Landscape::GetMapColorIndex(const char *szMaterial, const char *szTexture, bool fIFT, BYTE & rbyCol) const +bool C4Landscape::GetMapColorIndex(const char *szMaterial, const char *szTexture, BYTE & rbyCol) const { // Sky if (SEqual(szMaterial,C4TLS_MatSky)) @@ -3227,7 +3273,6 @@ bool C4Landscape::GetMapColorIndex(const char *szMaterial, const char *szTexture else { if (!(rbyCol=::TextureMap.GetIndex(szMaterial,szTexture))) return false; - if (fIFT) rbyCol+=IFT; } // Found return true; @@ -3237,7 +3282,7 @@ bool C4Landscape::DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char * { BYTE byCol; // Get map color index by material-texture - if (!GetMapColorIndex(szMaterial,szTexture,fIFT,byCol)) return false; + if (!GetMapColorIndex(szMaterial,szTexture,byCol)) return false; // Get material shape size int32_t mat = PixCol2Mat(byCol); int32_t shape_wdt=0, shape_hgt=0; @@ -3256,10 +3301,10 @@ bool C4Landscape::DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char * case C4LSC_Static: // Draw to map int32_t iRadius; iRadius=Max(2*iGrade/MapZoom,1); - if (iRadius==1) { if (Map) Map->SetPix(iX/MapZoom,iY/MapZoom,byCol); } - else Map->Circle(iX/MapZoom,iY/MapZoom,iRadius,byCol); + if (iRadius==1) { Map->SetPix(iX/MapZoom,iY/MapZoom,byCol); MapBkg->SetPix(iX/MapZoom, iY/MapZoom, fIFT ? DefaultBkgMat(byCol) : 0); } + else { Map->Circle(iX/MapZoom,iY/MapZoom,iRadius,byCol); MapBkg->Circle(iX/MapZoom, iY/MapZoom, iRadius, fIFT ? DefaultBkgMat(byCol) : 0); } // Update landscape - MapToLandscape(Map,iX/MapZoom-iRadius-1-shape_wdt,iY/MapZoom-iRadius-1-shape_hgt,2*iRadius+2+shape_wdt*2,2*iRadius+2+shape_hgt*2); + MapToLandscape(Map,MapBkg,iX/MapZoom-iRadius-1-shape_wdt,iY/MapZoom-iRadius-1-shape_hgt,2*iRadius+2+shape_wdt*2,2*iRadius+2+shape_hgt*2); SetMapChanged(); break; // Exact: draw directly to landscape by color & pattern @@ -3268,27 +3313,27 @@ bool C4Landscape::DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char * // Draw to landscape PrepareChange(BoundingBox); Surface8->Circle(iX,iY,iGrade, byCol); - Surface8Bkg->Circle(iX,iY,iGrade, DefaultBkgMat(byCol)); + Surface8Bkg->Circle(iX,iY,iGrade, fIFT ? DefaultBkgMat(byCol) : 0); FinishChange(BoundingBox); break; } return true; } -bool C4Landscape::DrawLineLandscape(int32_t iX, int32_t iY, int32_t iGrade, uint8_t line_color) +bool C4Landscape::DrawLineLandscape(int32_t iX, int32_t iY, int32_t iGrade, uint8_t line_color, uint8_t line_color_bkg) { Surface8->Circle(iX, iY, iGrade, line_color); - Surface8Bkg->Circle(iX, iY, iGrade, DefaultBkgMat(line_color)); + Surface8Bkg->Circle(iX, iY, iGrade, line_color_bkg); return true; } -bool C4Landscape::DrawLineMap(int32_t iX, int32_t iY, int32_t iRadius, uint8_t line_color) +bool C4Landscape::DrawLineMap(int32_t iX, int32_t iY, int32_t iRadius, uint8_t line_color, uint8_t line_color_bkg) { if (!Map) return false; if (iRadius == 1) - Map->SetPix(iX, iY, line_color); + { Map->SetPix(iX, iY, line_color); MapBkg->SetPix(iX, iY, line_color_bkg); } else - Map->Circle(iX, iY, iRadius, line_color); + { Map->Circle(iX, iY, iRadius, line_color); MapBkg->Circle(iX, iY, iRadius, line_color_bkg); } return true; } @@ -3296,7 +3341,7 @@ bool C4Landscape::DrawLine(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, i { // Get map color index by material-texture uint8_t line_color; - if (!GetMapColorIndex(szMaterial,szTexture,fIFT,line_color)) return false; + if (!GetMapColorIndex(szMaterial,szTexture,line_color)) return false; // Get material shape size int32_t mat = PixCol2Mat(line_color); int32_t shape_wdt=0, shape_hgt=0; @@ -3316,12 +3361,12 @@ bool C4Landscape::DrawLine(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, i // Draw to map int32_t iRadius; iRadius=Max(2*iGrade/MapZoom,1); iX1/=MapZoom; iY1/=MapZoom; iX2/=MapZoom; iY2/=MapZoom; - ForLine(iX1, iY1, iX2, iY2, [this, line_color, iRadius](int32_t x, int32_t y) { return DrawLineMap(x, y, iRadius, line_color); }); + ForLine(iX1, iY1, iX2, iY2, [this, line_color, fIFT, iRadius](int32_t x, int32_t y) { return DrawLineMap(x, y, iRadius, line_color, fIFT ? DefaultBkgMat(line_color) : 0); }); // Update landscape int32_t iUpX,iUpY,iUpWdt,iUpHgt; iUpX=Min(iX1,iX2)-iRadius-1; iUpY=Min(iY1,iY2)-iRadius-1; iUpWdt=Abs(iX2-iX1)+2*iRadius+2; iUpHgt=Abs(iY2-iY1)+2*iRadius+2; - MapToLandscape(Map,iUpX-shape_wdt,iUpY-shape_hgt,iUpWdt+shape_wdt*2,iUpHgt+shape_hgt*2); + MapToLandscape(Map,MapBkg,iUpX-shape_wdt,iUpY-shape_hgt,iUpWdt+shape_wdt*2,iUpHgt+shape_hgt*2); SetMapChanged(); break; // Exact: draw directly to landscape by color & pattern @@ -3331,7 +3376,7 @@ bool C4Landscape::DrawLine(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, i BoundingBox.Add(C4Rect(iX2 - iGrade, iY2 - iGrade, iGrade*2+1, iGrade*2+1)); // Draw to landscape PrepareChange(BoundingBox); - ForLine(iX1, iY1, iX2, iY2, [this, line_color, iGrade](int32_t x, int32_t y) { return DrawLineLandscape(x, y, iGrade, line_color); }); + ForLine(iX1, iY1, iX2, iY2, [this, line_color, fIFT, iGrade](int32_t x, int32_t y) { return DrawLineLandscape(x, y, iGrade, line_color, fIFT ? DefaultBkgMat(line_color) : 0); }); FinishChange(BoundingBox); break; } @@ -3345,7 +3390,7 @@ bool C4Landscape::DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, in iX2=Max(iX1, iX2); iY2=Max(iY1, iY2); iX1=iX0; iY1=iY0; BYTE byCol; // Get map color index by material-texture - if (!GetMapColorIndex(szMaterial,szTexture,fIFT,byCol)) return false; + if (!GetMapColorIndex(szMaterial,szTexture,byCol)) return false; // Get material shape size int32_t mat = PixCol2Mat(byCol); int32_t shape_wdt=0, shape_hgt=0; @@ -3365,8 +3410,9 @@ bool C4Landscape::DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, in // Draw to map iX1/=MapZoom; iY1/=MapZoom; iX2/=MapZoom; iY2/=MapZoom; Map->Box(iX1,iY1,iX2,iY2,byCol); + MapBkg->Box(iX1, iY1, iX2, iY2, fIFT ? DefaultBkgMat(byCol) : 0); // Update landscape - MapToLandscape(Map,iX1-1-shape_wdt,iY1-1-shape_hgt,iX2-iX1+3+shape_wdt*2,iY2-iY1+3+shape_hgt*2); + MapToLandscape(Map,MapBkg,iX1-1-shape_wdt,iY1-1-shape_hgt,iX2-iX1+3+shape_wdt*2,iY2-iY1+3+shape_hgt*2); SetMapChanged(); break; // Exact: draw directly to landscape by color & pattern @@ -3375,7 +3421,7 @@ bool C4Landscape::DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, in // Draw to landscape PrepareChange(BoundingBox); Surface8->Box(iX1,iY1,iX2,iY2,byCol); - Surface8Bkg->Box(iX1,iY1,iX2,iY2,DefaultBkgMat(byCol)); + Surface8Bkg->Box(iX1,iY1,iX2,iY2,fIFT ? DefaultBkgMat(byCol) : 0); FinishChange(BoundingBox); break; } @@ -3385,7 +3431,7 @@ bool C4Landscape::DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, in bool C4Landscape::DrawChunks(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, int32_t icntx, int32_t icnty, const char *szMaterial, const char *szTexture, bool bIFT) { BYTE byColor; - if (!GetMapColorIndex(szMaterial, szTexture, bIFT, byColor)) return false; + if (!GetMapColorIndex(szMaterial, szTexture, byColor)) return false; int32_t iMaterial = ::MaterialMap.Get(szMaterial); if (!MatValid(iMaterial)) return false; C4MaterialCoreShape shape = ::Game.C4S.Landscape.FlatChunkShapes ? C4M_Flat : ::MaterialMap.Map[iMaterial].MapChunkType; @@ -3402,7 +3448,7 @@ bool C4Landscape::DrawChunks(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, i int32_t x, y; for (x = 0; x < icntx; x++) for (y = 0; y < icnty; y++) - DrawChunk(tx+wdt*x/icntx,ty+hgt*y/icnty,wdt/icntx,hgt/icnty,byColor,shape,Random(1000)); + DrawChunk(tx+wdt*x/icntx,ty+hgt*y/icnty,wdt/icntx,hgt/icnty,byColor,bIFT ? DefaultBkgMat(byColor) : 0, shape,Random(1000)); // remove clipper Surface8->NoClip(); @@ -3431,17 +3477,21 @@ bool C4Landscape::DrawPolygon(int *vtcs, int length, const char *szMaterial, boo // get texture int32_t iMatTex = ::TextureMap.GetIndexMatTex(szMaterial); if (!iMatTex) return false; + uint8_t mcol = MatTex2PixCol(iMatTex); + uint8_t mcolBkg = fIFT ? DefaultBkgMat(mcol) : 0; // do bridging? uint8_t *conversion_map = NULL; if (fDrawBridge) { conversion_map = GetBridgeMatConversion(MatTex2PixCol(iMatTex)); + // TODO: Keep IFT if bridging + mcolBkg = TRANSPARENT; } // prepare pixel count update C4Rect BoundingBox = getBoundingBox(vtcs,length); // draw polygon PrepareChange(BoundingBox); - ForPolygon(vtcs,length/2,NULL,NULL,MatTex2PixCol(iMatTex) + (fIFT ? IFT : 0), conversion_map); + ForPolygon(vtcs,length/2,NULL,NULL, mcol, mcolBkg, conversion_map); FinishChange(BoundingBox); return true; } @@ -3455,13 +3505,13 @@ uint8_t *C4Landscape::GetBridgeMatConversion(int32_t for_material_col) const uint8_t *conv_map = BridgeMatConversion[for_material_col]; if (!conv_map) { - conv_map = new uint8_t[256]; - for (int32_t i=0; i<256; ++i) + conv_map = new uint8_t[C4M_MaxTexIndex]; + for (int32_t i=0; i < C4M_MaxTexIndex; ++i) { if ( (MatDensity(for_material)>=GetPixDensity(i))) { - // bridge pixel OK here. change pixel; keep IFT. - conv_map[i] = (i & IFT) + for_material_col; + // bridge pixel OK here. change pixel. + conv_map[i] = for_material_col; } else { @@ -3615,8 +3665,8 @@ bool C4Landscape::ReplaceMapColor(BYTE iOldIndex, BYTE iNewIndex) { for (int32_t x=0; x(iNewIndex, 0x01, 0x7f)) + if (((!szMatTex || !*szMatTex) && !fInsert) || !Inside(iNewIndex, 1, C4M_MaxTexIndex - 1)) { DebugLogF("Cannot insert new texture %s to index %d: Invalid parameters.", (const char *) szMatTex, (int) iNewIndex); return false; @@ -3705,24 +3755,30 @@ bool C4Landscape::SetTextureIndex(const char *szMatTex, BYTE iNewIndex, bool fIn void C4Landscape::RemoveUnusedTexMapEntries() { // check usage in landscape - bool fTexUsage[128]; + bool fTexUsage[C4M_MaxTexIndex]; int32_t iMatTex; - for (iMatTex = 0; iMatTex < 128; ++iMatTex) fTexUsage[iMatTex] = false; + for (iMatTex = 0; iMatTex < C4M_MaxTexIndex; ++iMatTex) + fTexUsage[iMatTex] = false; for (int32_t y=0; yGetPix(x,y) & 0x7f] = true; - fTexUsage[Surface8Bkg->GetPix(x,y) & 0x7f] = true; + const BYTE pix = Surface8->GetPix(x, y); + const BYTE backPix = Surface8Bkg->GetPix(x, y); + assert(pix < C4M_MaxTexIndex); + assert(backPix < C4M_MaxTexIndex); + + fTexUsage[pix] = true; + fTexUsage[backPix] = true; } // check usage by materials for (int32_t iMat = 0; iMat < ::MaterialMap.Num; ++iMat) { C4Material *pMat = ::MaterialMap.Map + iMat; - if (pMat->BlastShiftTo >= 0) fTexUsage[pMat->BlastShiftTo & 0x7f] = true; - if (pMat->BelowTempConvertTo >= 0) fTexUsage[pMat->BelowTempConvertTo & 0x7f] = true; - if (pMat->AboveTempConvertTo >= 0) fTexUsage[pMat->AboveTempConvertTo & 0x7f] = true; - if (pMat->DefaultMatTex >= 0) fTexUsage[pMat->DefaultMatTex & 0x7f] = true; + if (pMat->BlastShiftTo >= 0) fTexUsage[pMat->BlastShiftTo] = true; + if (pMat->BelowTempConvertTo >= 0) fTexUsage[pMat->BelowTempConvertTo] = true; + if (pMat->AboveTempConvertTo >= 0) fTexUsage[pMat->AboveTempConvertTo] = true; + if (pMat->DefaultMatTex >= 0) fTexUsage[pMat->DefaultMatTex] = true; } // remove unused for (iMatTex = 1; iMatTex < C4M_MaxTexIndex; ++iMatTex) @@ -3747,13 +3803,13 @@ void C4Landscape::HandleTexMapUpdate() void C4Landscape::UpdatePixMaps() { int32_t i; - for (i = 0; i < 256; i++) Pix2Mat[i] = PixCol2Mat(i); - for (i = 0; i < 256; i++) Pix2Dens[i] = MatDensity(Pix2Mat[i]); - for (i = 0; i < 256; i++) Pix2Place[i] = MatValid(Pix2Mat[i]) ? ::MaterialMap.Map[Pix2Mat[i]].Placement : 0; - for (i = 0; i < 256; i++) Pix2Light[i] = (!(i & IFT)) || (MatValid(Pix2Mat[i]) && (::MaterialMap.Map[Pix2Mat[i]].Light>0)); + for (i = 0; i < C4M_MaxTexIndex; i++) Pix2Mat[i] = PixCol2Mat(i); + for (i = 0; i < C4M_MaxTexIndex; i++) Pix2Dens[i] = MatDensity(Pix2Mat[i]); + for (i = 0; i < C4M_MaxTexIndex; i++) Pix2Place[i] = MatValid(Pix2Mat[i]) ? ::MaterialMap.Map[Pix2Mat[i]].Placement : 0; + for (i = 0; i < C4M_MaxTexIndex; i++) Pix2Light[i] = MatValid(Pix2Mat[i]) && (::MaterialMap.Map[Pix2Mat[i]].Light>0); Pix2Place[0] = 0; // clear bridge mat conversion buffers - for (int32_t i = 0; i<128; ++i) + for (int32_t i = 0; i < C4M_MaxTexIndex; ++i) { delete [] BridgeMatConversion[i]; BridgeMatConversion[i] = NULL; diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index 6cf7ad36a..bf656668c 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -66,16 +66,23 @@ private: CSurface8 * Surface8; CSurface8 * Surface8Bkg; // Background material CSurface8 * Map; + CSurface8 * MapBkg; class C4LandscapeRender *pLandscapeRender; uint8_t *TopRowPix, *BottomRowPix; // array size of landscape width: Filled with 0s for border pixels that are open and MCVehic for pixels that are closed - int32_t Pix2Mat[256], Pix2Dens[256], Pix2Place[256]; - bool Pix2Light[256]; + int32_t Pix2Mat[C4M_MaxTexIndex], Pix2Dens[C4M_MaxTexIndex], Pix2Place[C4M_MaxTexIndex]; + bool Pix2Light[C4M_MaxTexIndex]; int32_t PixCntPitch; uint8_t *PixCnt; C4Rect Relights[C4LS_MaxRelights]; - mutable uint8_t *BridgeMatConversion[128]; // NoSave // + mutable uint8_t *BridgeMatConversion[C4M_MaxTexIndex]; // NoSave // public: + // Use this with the various drawing functions to keep current material for + // either foreground or background map. We can use C4M_MaxTexIndex as a value + // here because this value is reserved anyway for the differential landscape + // encoding. + const uint8_t TRANSPARENT = C4M_MaxTexIndex; + void Default(); void Clear(bool fClearMapCreator=true, bool fClearSky=true, bool fClearRenderer=true); void Execute(); @@ -99,7 +106,7 @@ public: bool SaveInitial(); bool SaveTextures(C4Group &hGroup) const; bool Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bool &rfLoaded, bool fSavegame); - bool HasMap() const { return Map != NULL; } + bool HasMap() const { return Map != NULL && MapBkg != NULL; } bool MapToLandscape(); bool ApplyDiff(C4Group &hGroup); bool SetMode(int32_t iMode); @@ -233,6 +240,15 @@ public: return Pix2Place[GetBackPix(x, y)]; } + inline bool GetLight(int32_t x, int32_t y) + { + return GetBackPix(x, y) == 0 || Pix2Light[GetPix(x, y)]; + } + inline bool _GetLight(int32_t x, int32_t y) + { + return _GetBackPix(x, y) == 0 || Pix2Light[_GetPix(x, y)]; + } + inline bool _FastSolidCheck(int32_t x, int32_t y) const // checks whether there *might* be something solid at the point { return PixCnt[(x / 17) * PixCntPitch + (y / 15)] > 0; @@ -243,7 +259,6 @@ public: } inline int32_t GetPixMat(BYTE byPix) const { return Pix2Mat[byPix]; } inline int32_t GetPixDensity(BYTE byPix) const { return Pix2Dens[byPix]; } - inline bool GetPixLight(BYTE byPix) const { return Pix2Light[byPix]; } bool _PathFree(int32_t x, int32_t y, int32_t x2, int32_t y2) const; // quickly checks wether there *might* be pixel in the path. int32_t GetMatHeight(int32_t x, int32_t y, int32_t iYDir, int32_t iMat, int32_t iMax) const; @@ -268,33 +283,33 @@ private: void ExecuteScan(); int32_t DoScan(int32_t x, int32_t y, int32_t mat, int32_t dir); uint32_t ChunkyRandom(uint32_t &iOffset, uint32_t iRange) const; // return static random value, according to offset and MapSeed - void DrawChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, int32_t mcol, C4MaterialCoreShape Shape, uint32_t cro); - void DrawSmoothOChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, int32_t mcol, int flip, uint32_t cro); - void DrawCustomShapePoly(const C4MaterialShape::Poly &poly, int32_t off_x, int32_t off_y, int32_t mcol); - void DrawCustomShape(CSurface8 * sfcMap, C4MaterialShape *shape, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iTexture, int32_t mcol, int32_t iOffX, int32_t iOffY); - void ChunkOZoom(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iTexture,int32_t iOffX=0,int32_t iOffY=0); - bool GetTexUsage(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, DWORD *dwpTextureUsage) const; - bool TexOZoom(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, DWORD *dwpTextureUsage, int32_t iToX=0,int32_t iToY=0); - bool MapToSurface(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iToX, int32_t iToY, int32_t iToWdt, int32_t iToHgt, int32_t iOffX, int32_t iOffY); - bool MapToLandscape(CSurface8 * sfcMap, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iOffsX = 0, int32_t iOffsY = 0, bool noClear = false); // zoom map segment to surface (or sector surfaces) + void DrawChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, uint8_t mcol, uint8_t mcolBkg, C4MaterialCoreShape Shape, uint32_t cro); + void DrawSmoothOChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, uint8_t mcol, uint8_t mcolBkg, int flip, uint32_t cro); + void DrawCustomShapePoly(const C4MaterialShape::Poly &poly, int32_t off_x, int32_t off_y, uint8_t mcol, uint8_t mcolBkg); + void DrawCustomShape(CSurface8 * sfcMap, CSurface8* sfcMapBkg, C4MaterialShape *shape, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, uint8_t iTexture, int32_t iOffX, int32_t iOffY); + void ChunkOZoom(CSurface8 * sfcMap, CSurface8* sfcMapBkg, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, uint8_t iTexture, int32_t iOffX=0,int32_t iOffY=0); + bool GetTexUsage(CSurface8 * sfcMap, CSurface8* sfcMapBkg, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, DWORD *dwpTextureUsage) const; + bool TexOZoom(CSurface8 * sfcMap, CSurface8* sfcMapBkg, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, DWORD *dwpTextureUsage, int32_t iToX=0,int32_t iToY=0); + bool MapToSurface(CSurface8 * sfcMap, CSurface8* sfcMapBkg, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iToX, int32_t iToY, int32_t iToWdt, int32_t iToHgt, int32_t iOffX, int32_t iOffY); + bool MapToLandscape(CSurface8 * sfcMap, CSurface8* sfcMapBkg, int32_t iMapX, int32_t iMapY, int32_t iMapWdt, int32_t iMapHgt, int32_t iOffsX = 0, int32_t iOffsY = 0, bool noClear = false); // zoom map segment to surface (or sector surfaces) bool InitTopAndBottomRowPix(); // inti out-of-landscape pixels for bottom side - bool GetMapColorIndex(const char *szMaterial, const char *szTexture, bool fIFT, BYTE &rbyCol) const; + bool GetMapColorIndex(const char *szMaterial, const char *szTexture, BYTE &rbyCol) const; bool SkyToLandscape(int32_t iToX, int32_t iToY, int32_t iToWdt, int32_t iToHgt, int32_t iOffX, int32_t iOffY); - CSurface8 * CreateMap(); // create map by landscape attributes - CSurface8 * CreateMapS2(C4Group &ScenFile); // create map by def file + bool CreateMap(CSurface8*& sfcMap, CSurface8*& sfcMapBkg); // create map by landscape attributes + bool CreateMapS2(C4Group &ScenFile, CSurface8*& sfcMap, CSurface8*& sfcMapBkg); // create map by def file bool Mat2Pal(); // assign material colors to landscape palette void UpdatePixCnt(const class C4Rect &Rect, bool fCheck = false); void UpdateMatCnt(C4Rect Rect, bool fPlus); void PrepareChange(C4Rect BoundingBox); void FinishChange(C4Rect BoundingBox); - bool DrawLineLandscape(int32_t iX, int32_t iY, int32_t iGrade, uint8_t line_color); - bool DrawLineMap(int32_t iX, int32_t iY, int32_t iRadius, uint8_t line_color); + bool DrawLineLandscape(int32_t iX, int32_t iY, int32_t iGrade, uint8_t line_color, uint8_t line_color_bkg); + bool DrawLineMap(int32_t iX, int32_t iY, int32_t iRadius, uint8_t line_color, uint8_t line_color_bkg); uint8_t *GetBridgeMatConversion(int32_t for_material_col) const; bool SaveInternal(C4Group &hGroup) const; bool SaveDiffInternal(C4Group &hGroup, bool fSyncSave) const; int32_t ForPolygon(int *vtcs, int length, bool (C4Landscape::*fnCallback)(int32_t, int32_t), - C4MaterialList *mats_count = NULL, int col = 0, uint8_t *conversion_table = NULL); + C4MaterialList *mats_count = NULL, uint8_t col = 0, uint8_t colBkg = 0, uint8_t *conversion_table = NULL); public: int32_t DigFreeShape(int *vtcs, int length, C4Object *by_object = NULL, bool no_dig2objects = false, bool no_instability_check = false); @@ -317,6 +332,7 @@ private: C4Rect getBoundingBox(int *vtcs, int length) const; BYTE DefaultBkgMat(BYTE fg) const; + CSurface8* CreateDefaultBkgSurface(const CSurface8& sfcFg) const; void DigMaterial2Objects(int32_t tx, int32_t ty, C4MaterialList *mat_list, C4Object *pCollect = NULL); void BlastMaterial2Objects(int32_t tx, int32_t ty, C4MaterialList *mat_list, int32_t caused_by, int32_t str, C4ValueArray *out_objects); diff --git a/src/landscape/C4Map.cpp b/src/landscape/C4Map.cpp index 30aacebba..4f4255d9c 100644 --- a/src/landscape/C4Map.cpp +++ b/src/landscape/C4Map.cpp @@ -31,7 +31,6 @@ C4MapCreator::C4MapCreator() void C4MapCreator::Reset() { - MapIFT=128; MapBuf=NULL; Exclusive=-1; } @@ -96,7 +95,7 @@ void C4MapCreator::Create(CSurface8 *sfcMap, MapBuf->ClearBox8Only(0,0,MapBuf->Wdt, MapBuf->Hgt); // Surface - ccol=rTexMap.GetIndexMatTex(rLScape.Material)+MapIFT; + ccol=rTexMap.GetIndexMatTex(rLScape.Material); float amplitude= (float) rLScape.Amplitude.Evaluate(); float phase= (float) rLScape.Phase.Evaluate(); float period= (float) rLScape.Period.Evaluate(); @@ -149,7 +148,7 @@ void C4MapCreator::Create(CSurface8 *sfcMap, { // Base material - Exclusive=rTexMap.GetIndexMatTex(rLScape.Material)+MapIFT; + Exclusive=rTexMap.GetIndexMatTex(rLScape.Material); int32_t cnt,clayer,layer_num,sptx,spty; @@ -158,7 +157,7 @@ void C4MapCreator::Create(CSurface8 *sfcMap, if (rLScape.Layers.Name[clayer][0]) { // Draw layers - ccol=rTexMap.GetIndexMatTex(rLScape.Layers.Name[clayer])+MapIFT; + ccol=rTexMap.GetIndexMatTex(rLScape.Layers.Name[clayer]); layer_num=rLScape.Layers.Count[clayer]; layer_num=layer_num*MapWdt*MapHgt/15000; for (cnt=0; cnt((x + 0.5) * sx), 0, Landscape.Width - 1); const int ly = Clamp(static_cast((y + 0.5) * sy), 0, Landscape.Height - 1); // LightMap check - return ::Landscape.GetPixLight(::Landscape._GetPix(lx, ly)); + return ::Landscape._GetLight(lx, ly); } const C4Landscape& Landscape; From fe74cac6637e38861e302a0a872a55fe3bd1478b Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 30 Jun 2015 20:29:52 -0400 Subject: [PATCH 09/97] Make the C4MapCreatorS2 create background maps --- src/landscape/C4Landscape.cpp | 22 +++++++++------ src/landscape/C4MapCreatorS2.cpp | 47 ++++++++++++++++++++++---------- src/landscape/C4MapCreatorS2.h | 7 +++-- 3 files changed, 50 insertions(+), 26 deletions(-) diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index 833fef8a7..c6b63093c 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -2329,11 +2329,10 @@ bool C4Landscape::CreateMapS2(C4Group &ScenFile, CSurface8*& sfcMap, CSurface8*& // read file pMapCreator->ReadFile(C4CFN_DynLandscape, &ScenFile); // render landscape - CSurface8 * sfc = pMapCreator->Render(NULL); + if(!pMapCreator->Render(NULL, sfcMap, sfcMapBkg)) + return false; // keep map creator until script callbacks have been done - sfcMap = sfc; - sfcMapBkg = CreateDefaultBkgSurface(*sfcMap); // TODO: Replace this by what was actually generated! return true; } @@ -3603,12 +3602,15 @@ bool C4Landscape::DrawMap(int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt, co // read file MapCreator.ReadScript(szMapDef); // render map - CSurface8 * sfcMap=MapCreator.Render(NULL); - if (!sfcMap) return false; + CSurface8* sfcMap = NULL; + CSurface8* sfcMapBkg = NULL; + if (!MapCreator.Render(NULL, sfcMap, sfcMapBkg)) + return false; // map it to the landscape - bool fSuccess=MapToLandscape(sfcMap, 0, 0, iMapWdt, iMapHgt, iX, iY, ignoreSky); + bool fSuccess=MapToLandscape(sfcMap, sfcMapBkg, 0, 0, iMapWdt, iMapHgt, iX, iY, ignoreSky); // cleanup delete sfcMap; + delete sfcMapBkg; // return whether successful return fSuccess; } @@ -3627,13 +3629,15 @@ bool C4Landscape::DrawDefMap(int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt, C4MCMap *pMap=pMapCreator->GetMap(szMapDef); if (!pMap) return false; pMap->SetSize(iMapWdt, iMapHgt); - CSurface8 * sfcMap = pMapCreator->Render(szMapDef); - if (sfcMap) + CSurface8* sfcMap = NULL; + CSurface8* sfcMapBkg = NULL; + if(pMapCreator->Render(szMapDef, sfcMap, sfcMapBkg)) { // map to landscape - fSuccess=MapToLandscape(sfcMap, 0, 0, iMapWdt, iMapHgt, iX, iY, ignoreSky); + fSuccess = MapToLandscape(sfcMap, sfcMapBkg, 0, 0, iMapWdt, iMapHgt, iX, iY, ignoreSky); // cleanup delete sfcMap; + delete sfcMapBkg; } // done return fSuccess; diff --git a/src/landscape/C4MapCreatorS2.cpp b/src/landscape/C4MapCreatorS2.cpp index 4593c80e1..c04eef95e 100644 --- a/src/landscape/C4MapCreatorS2.cpp +++ b/src/landscape/C4MapCreatorS2.cpp @@ -310,6 +310,7 @@ C4MCOverlay::C4MCOverlay(C4MCNode *pOwner) : C4MCNode(pOwner) *Texture=0; Op=MCT_NONE; MatClr=0; + MatClrBkg=0; Algorithm=NULL; Sub=false; ZoomX=ZoomY=0; @@ -332,6 +333,7 @@ C4MCOverlay::C4MCOverlay(C4MCParser* pParser, C4MCNode *pOwner, C4MCOverlay &rTe Sub=rTemplate.Sub; ZoomX=rTemplate.ZoomX; ZoomY=rTemplate.ZoomY; MatClr=rTemplate.MatClr; + MatClrBkg=rTemplate.MatClrBkg; Seed=rTemplate.Seed; Alpha=rTemplate.Alpha; Beta=rTemplate.Beta; Turbulence=rTemplate.Turbulence; Lambda=rTemplate.Lambda; Rotate=rTemplate.Rotate; @@ -460,10 +462,17 @@ void C4MCOverlay::Evaluate() if (Inside(Material,0,MapCreator->MatMap->Num-1)) { MatClr=MapCreator->TexMap->GetIndexMatTex(MapCreator->MatMap->Map[Material].Name, *Texture ? Texture : NULL); - if (Sub) MatClr+=128; + if(MatClr == 0 || !Sub) + MatClrBkg = 0; + else + MatClrBkg = Mat2PixColDefault(MTunnel); } else + { MatClr=0; + MatClrBkg=0; + } + // calc size if (Owner) { @@ -559,7 +568,7 @@ bool C4MCOverlay::CheckMask(int32_t iX, int32_t iY) return (Algorithm->Function) (this, iX, iY)^Invert; } -bool C4MCOverlay::RenderPix(int32_t iX, int32_t iY, BYTE &rPix, C4MCTokenType eLastOp, bool fLastSet, bool fDraw, C4MCOverlay **ppPixelSetOverlay) +bool C4MCOverlay::RenderPix(int32_t iX, int32_t iY, BYTE &rPix, BYTE &rPixBkg, C4MCTokenType eLastOp, bool fLastSet, bool fDraw, C4MCOverlay **ppPixelSetOverlay) { // algo match? bool SetThis=CheckMask(iX, iY); @@ -589,6 +598,7 @@ bool C4MCOverlay::RenderPix(int32_t iX, int32_t iY, BYTE &rPix, C4MCTokenType eL if (fDraw && DoSet && !Mask) { rPix=MatClr; + rPixBkg=MatClrBkg; if (ppPixelSetOverlay) *ppPixelSetOverlay = this; } bool fLastSetC=false; eLastOp=MCT_NONE; @@ -596,7 +606,7 @@ bool C4MCOverlay::RenderPix(int32_t iX, int32_t iY, BYTE &rPix, C4MCTokenType eL for (C4MCNode *pChild=Child0; pChild; pChild=pChild->Next) if (C4MCOverlay *pOvrl=pChild->Overlay()) { - fLastSetC=pOvrl->RenderPix(iX, iY, rPix, eLastOp, fLastSetC, fDraw, ppPixelSetOverlay); + fLastSetC=pOvrl->RenderPix(iX, iY, rPix, rPixBkg, eLastOp, fLastSetC, fDraw, ppPixelSetOverlay); if (Group && (pOvrl->Op == MCT_NONE)) DoSet |= fLastSetC; eLastOp=pOvrl->Op; @@ -615,7 +625,7 @@ bool C4MCOverlay::PeekPix(int32_t iX, int32_t iY) // loop through op chain while (1) { - fLastSetC=pOvrl->RenderPix(iX, iY, Crap, eLastOp, fLastSetC, false); + fLastSetC=pOvrl->RenderPix(iX, iY, Crap, Crap, eLastOp, fLastSetC, false); eLastOp=pOvrl->Op; if (!pOvrl->Op) break; // must be another overlay, since there's an operator @@ -700,7 +710,7 @@ void C4MCMap::Default() MapCreator->Landscape->GetMapSize(Wdt, Hgt, MapCreator->PlayerCount); } -bool C4MCMap::RenderTo(BYTE *pToBuf, int32_t iPitch) +bool C4MCMap::RenderTo(BYTE *pToBuf, BYTE *pToBufBkg, int32_t iPitch) { // set current render target if (MapCreator) MapCreator->pCurrentMap=this; @@ -710,19 +720,23 @@ bool C4MCMap::RenderTo(BYTE *pToBuf, int32_t iPitch) for (int32_t iX=0; iXpDrawFunc) pRenderedOverlay->pDrawFunc->EnablePixel(iX, iY); // next pixel pToBuf++; + if (pToBufBkg) pToBufBkg++; } // next line pToBuf+=iPitch-Wdt; + if (pToBufBkg) pToBufBkg+=iPitch-Wdt; } // reset render target if (MapCreator) MapCreator->pCurrentMap=NULL; @@ -837,25 +851,30 @@ C4MCMap *C4MapCreatorS2::GetMap(const char *szMapName) return pMap; } -CSurface8 * C4MapCreatorS2::Render(const char *szMapName) +bool C4MapCreatorS2::Render(const char *szMapName, CSurface8*& sfcMap, CSurface8*& sfcMapBkg) { + assert(sfcMap == NULL); + assert(sfcMapBkg == NULL); + // get map C4MCMap *pMap=GetMap(szMapName); - if (!pMap) return NULL; + if (!pMap) return false; // get size int32_t sfcWdt, sfcHgt; sfcWdt=pMap->Wdt; sfcHgt=pMap->Hgt; - if (!sfcWdt || !sfcHgt) return NULL; + if (!sfcWdt || !sfcHgt) return false; - // create surface - CSurface8 * sfc = new CSurface8(sfcWdt, sfcHgt); + // create surfaces + sfcMap = new CSurface8(sfcWdt, sfcHgt); + sfcMapBkg = new CSurface8(sfcWdt, sfcHgt); + assert(sfcMap->Pitch == sfcMapBkg->Pitch); // render map to surface - pMap->RenderTo(sfc->Bits, sfc->Pitch); + pMap->RenderTo(sfcMap->Bits, sfcMapBkg->Bits, sfcMap->Pitch); // success - return sfc; + return true; } static inline void DWordAlign(int &val) @@ -880,7 +899,7 @@ BYTE *C4MapCreatorS2::RenderBuf(const char *szMapName, int32_t &sfcWdt, int32_t BYTE *buf=new BYTE[sfcWdt*sfcHgt]; // render and return it - pMap->RenderTo(buf, sfcWdt); + pMap->RenderTo(buf, NULL, sfcWdt); return buf; } diff --git a/src/landscape/C4MapCreatorS2.h b/src/landscape/C4MapCreatorS2.h index 0cfe5f238..e6db6ae7d 100644 --- a/src/landscape/C4MapCreatorS2.h +++ b/src/landscape/C4MapCreatorS2.h @@ -211,6 +211,7 @@ public: bool Sub; // tunnel bg? char Texture[C4M_MaxName+1]; // texture name BYTE MatClr; // resolved mat-tex color + BYTE MatClrBkg; // resolved mat-tex color C4MCTokenType Op; // following operator C4MCAlgorithm *Algorithm; // algorithm to calc whether filled or not int32_t Turbulence, Lambda, Rotate; // turbulence factors; rotation angle @@ -232,7 +233,7 @@ public: C4MCOverlay *FirstOfChain(); // go backwards in op chain until first overlay of chain bool CheckMask(int32_t iX, int32_t iY); // check whether algorithms succeeds at iX/iY - bool RenderPix(int32_t iX, int32_t iY, BYTE &rPix, C4MCTokenType eLastOp=MCT_NONE, bool fLastSet=false, bool fDraw=true, C4MCOverlay **ppPixelSetOverlay=NULL); // render this pixel + bool RenderPix(int32_t iX, int32_t iY, BYTE &rPix, BYTE &rPixBkg, C4MCTokenType eLastOp=MCT_NONE, bool fLastSet=false, bool fDraw=true, C4MCOverlay **ppPixelSetOverlay=NULL); // render this pixel bool PeekPix(int32_t iX, int32_t iY); // check mask; regard operator chain bool InBounds(int32_t iX, int32_t iY) { return iX>=X && iY>=Y && iX Date: Tue, 30 Jun 2015 21:58:42 -0400 Subject: [PATCH 10/97] Some refactoring, and restore support for Map.bmp The new behaviour that allows 255 mat-tex combinations (once we increased C4M_MaxTexCount...) is enabled with MapFg.bmp, and then MapBg.bmp can be used to draw IFT or other fancy things. --- src/c4group/C4Components.h | 16 ++-- src/editor/C4EditCursor.cpp | 9 +- src/landscape/C4Landscape.cpp | 152 ++++++++++++++++++++++------------ src/landscape/C4Landscape.h | 14 +--- src/landscape/C4Texture.cpp | 7 +- 5 files changed, 123 insertions(+), 75 deletions(-) diff --git a/src/c4group/C4Components.h b/src/c4group/C4Components.h index 41abac266..bdc73e6d4 100644 --- a/src/c4group/C4Components.h +++ b/src/c4group/C4Components.h @@ -53,9 +53,11 @@ #define C4CFN_UpdateProgramLibs "*.dll" #define C4CFN_Map "Map.bmp" -#define C4CFN_MapBkg "MapBkg.bmp" +#define C4CFN_MapFg "MapFg.bmp" +#define C4CFN_MapBg "MapBg.bmp" #define C4CFN_Landscape "Landscape.bmp" -#define C4CFN_LandscapeBkg "LandscapeBkg.bmp" +#define C4CFN_LandscapeFg "LandscapeFg.bmp" +#define C4CFN_LandscapeBg "LandscapeBg.bmp" #define C4CFN_DiffLandscape "DiffLandscape.bmp" #define C4CFN_DiffLandscapeBkg "DiffLandscapeBkg.bmp" #define C4CFN_Sky "Sky" @@ -144,8 +146,8 @@ #define C4CFN_TempMusic "~Music.tmp" #define C4CFN_TempMusic2 "~Music2.tmp" #define C4CFN_TempSky "~Sky.tmp" -#define C4CFN_TempMap "~Map.tmp" -#define C4CFN_TempMapBkg "~MapBkg.tmp" +#define C4CFN_TempMapFg "~MapFg.tmp" +#define C4CFN_TempMapBg "~MapBg.tmp" #define C4CFN_TempLandscape "~Landscape.tmp" #define C4CFN_TempLandscapeBkg "~LandscapeBkg.tmp" #define C4CFN_TempPXS "~PXS.tmp" @@ -178,9 +180,9 @@ // TODO: proper sorting of scaled def graphics (once we know what order we might load them in...) -#define C4FLS_Scenario "Loader*.bmp|Loader*.png|Loader*.jpeg|Loader*.jpg|Fonts.txt|Scenario.txt|Title*.txt|Info.txt|Desc*.rtf|Icon.png|Icon.bmp|Achv*.png|Game.txt|StringTbl*.txt|ParameterDefs.txt|Teams.txt|Parameters.txt|Info.txt|Sect*.ocg|Music.ocg|*.mid|*.wav|Desc*.rtf|Title.png|Title.jpg|*.ocd|Material.ocg|MatMap.txt|Landscape.bmp|LandscapeBkg.bmp|Landscape.png|" C4CFN_DiffLandscape "|" C4CFN_DiffLandscapeBkg "|Sky.bmp|Sky.png|Sky.jpeg|Sky.jpg|PXS.ocb|MassMover.ocb|CtrlRec.ocb|Strings.txt|Objects.txt|RoundResults.txt|Author.txt|Version.txt|Names.txt|*.ocd|Script.c|Script*.c|Map.c|Objects.c|System.ocg" -#define C4FLS_Section "Scenario.txt|Game.txt|Landscape.bmp|Landscape.png|Sky.bmp|Sky.png|Sky.jpeg|Sky.jpg|PXS.ocb|MassMover.ocb|CtrlRec.ocb|Strings.txt|Objects.txt|Objects.c" -#define C4FLS_SectionLandscape "Scenario.txt|Landscape.bmp|Landscape.png|PXS.ocb|MassMover.ocb" +#define C4FLS_Scenario "Loader*.bmp|Loader*.png|Loader*.jpeg|Loader*.jpg|Fonts.txt|Scenario.txt|Title*.txt|Info.txt|Desc*.rtf|Icon.png|Icon.bmp|Achv*.png|Game.txt|StringTbl*.txt|ParameterDefs.txt|Teams.txt|Parameters.txt|Info.txt|Sect*.ocg|Music.ocg|*.mid|*.wav|Desc*.rtf|Title.png|Title.jpg|*.ocd|Material.ocg|MatMap.txt|Map.bmp|MapFg.bmp|MapBg.bmp|Landscape.bmp|LandscapeFg.bmp|LandscapeBg.bmp|" C4CFN_DiffLandscape "|" C4CFN_DiffLandscapeBkg "|Sky.bmp|Sky.png|Sky.jpeg|Sky.jpg|PXS.ocb|MassMover.ocb|CtrlRec.ocb|Strings.txt|Objects.txt|RoundResults.txt|Author.txt|Version.txt|Names.txt|*.ocd|Script.c|Script*.c|Map.c|Objects.c|System.ocg" +#define C4FLS_Section "Scenario.txt|Game.txt|Map.bmp|MapFg.bmp|MapBg.bmp|Landscape.bmp|LandscapeFg.bmp|LandscapeBg.bmp|Sky.bmp|Sky.png|Sky.jpeg|Sky.jpg|PXS.ocb|MassMover.ocb|CtrlRec.ocb|Strings.txt|Objects.txt|Objects.c" +#define C4FLS_SectionLandscape "Scenario.txt|Map.bmp|MapFg.bmp|MapBg.bmp|Landscape.bmp|LandscapeFg.bmp|LandscapeBg.bmp|PXS.ocb|MassMover.ocb" #define C4FLS_SectionObjects "Strings.txt|Objects.txt|Objects.c" #define C4FLS_Def "*.glsl|*.png|*.bmp|*.jpeg|*.jpg|*.material|Particle.txt|DefCore.txt|*.wav|*.ogg|*.skeleton|Graphics.mesh|*.mesh|StringTbl*.txt|Script.c|Script*.c|C4Script.c|Names*.txt|Title*.txt|ClonkNames.txt|Rank.txt|Rank*.txt|Desc*.txt|Author.txt|Version.txt|*.ocd" #define C4FLS_Player "Player.txt|*.oci" diff --git a/src/editor/C4EditCursor.cpp b/src/editor/C4EditCursor.cpp index 98b68edb5..41547560e 100644 --- a/src/editor/C4EditCursor.cpp +++ b/src/editor/C4EditCursor.cpp @@ -953,15 +953,18 @@ void C4EditCursor::ApplyToolPicker() case C4LSC_Static: { bool material_set = false; + int32_t x = X/::Landscape.MapZoom; + int32_t y = Y/::Landscape.MapZoom; // Material-texture from map - if ((byIndex=::Landscape.GetMapIndex(X/::Landscape.MapZoom,Y/::Landscape.MapZoom))) + if ((byIndex = ::Landscape.GetMapIndex(x, y))) { - const C4TexMapEntry *pTex = ::TextureMap.GetEntry(byIndex & (IFT-1)); + const C4TexMapEntry *pTex = ::TextureMap.GetEntry(byIndex); if (pTex && pTex->GetMaterialName() && *pTex->GetMaterialName()) { + const BYTE byIndexBkg = Landscape.GetBackMapIndex(x, y); Console.ToolsDlg.SelectMaterial(pTex->GetMaterialName()); Console.ToolsDlg.SelectTexture(pTex->GetTextureName()); - Console.ToolsDlg.SetIFT(!!(byIndex & ~(IFT-1))); + Console.ToolsDlg.SetIFT(byIndexBkg != 0); material_set = true; } } diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index c6b63093c..3628512ce 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -286,8 +286,8 @@ int32_t C4Landscape::DoScan(int32_t cx, int32_t cy, int32_t mat, int32_t dir) // left pixel not converted? break if (lmat == mat) break; #endif - // set mat - SBackPix(cx,cy2,MatTex2PixCol(conv_to_tex)+PixColIFT(pix)); + // set mat (and keep background material) + SetPix2(cx, cy2, MatTex2PixCol(conv_to_tex), TRANSPARENT); if (!conv_to_is_solid) CheckInstabilityRange(cx,cy2); } // return pixel converted @@ -997,7 +997,7 @@ bool C4Landscape::Incinerate(int32_t x, int32_t y) BYTE C4Landscape::DefaultBkgMat(BYTE fg) const { // For the given foreground index, find the default background index - // If fg is semisolid, this is tunnel, or sky if IFT is set. + // If fg is semisolid, this is tunnel. // Otherwise it is fg itself, so that tunnel and background bricks // stay the way they are. int32_t iTex = PixCol2Tex(fg); @@ -1015,15 +1015,45 @@ BYTE C4Landscape::DefaultBkgMat(BYTE fg) const } -CSurface8* C4Landscape::CreateDefaultBkgSurface(const CSurface8& sfcFg) const +CSurface8* C4Landscape::CreateDefaultBkgSurface(CSurface8& sfcFg, bool msbAsIft) const { CSurface8* sfcBg = new CSurface8(); if (!sfcBg->Create(sfcFg.Wdt, sfcFg.Hgt)) { delete sfcBg; return NULL; } for (int32_t y=0; y_SetPix(x, y, DefaultBkgMat(sfcFg._GetPix(x, y))); + { + BYTE fgPix = sfcFg._GetPix(x, y); + BYTE bgPix; + + // If we treat the most significant bit as the IFT flag + // (compatibility option for pre-7.0 maps), then set + // the background pixel to 0 if the foreground does not + // have IFT set, and remove the IFT flag from the + // foreground pixel. + if (msbAsIft) + { + if (fgPix & 0x80) + { + fgPix &= ~0x80; + sfcFg._SetPix(x, y, fgPix); + bgPix = DefaultBkgMat(fgPix); + } + else + { + bgPix = 0; + } + } + else + { + bgPix = DefaultBkgMat(fgPix); + } + + sfcBg->_SetPix(x, y, bgPix); + } + } return sfcBg; } @@ -1344,11 +1374,27 @@ bool C4Landscape::Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bo CSurface8 * sfcMap=NULL; CSurface8 * sfcMapBkg=NULL; - // Static map from scenario + // Static map from scenario: Old-style Map.bmp with highest bit IFT if ((sfcMap=GroupReadSurface8(hGroup, C4CFN_Map))) { if (!fLandscapeModeSet) Mode=C4LSC_Static; - sfcMapBkg = GroupReadSurface8(hGroup, C4CFN_MapBkg); + sfcMapBkg = CreateDefaultBkgSurface(*sfcMap, true); + if (!sfcMapBkg) return false; + } + + // Static map from scenaruo: New-style MapFg.bmp and MapBg.bmp with + // full 255 mat-tex combinations. Background map is optional, if not + // given default will be created with tunnel background for all + // semisolid pixels. + if (!sfcMap) + { + if ((sfcMap=GroupReadSurface8(hGroup, C4CFN_MapFg))) + { + if (!fLandscapeModeSet) Mode=C4LSC_Static; + sfcMapBkg = GroupReadSurface8(hGroup, C4CFN_MapBg); + if (!sfcMapBkg) sfcMapBkg = CreateDefaultBkgSurface(*sfcMap, false); + if (!sfcMapBkg) return false; + } } // dynamic map from Landscape.txt @@ -1374,13 +1420,6 @@ bool C4Landscape::Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bo return true; } - // If no background map is loaded, create default from foreground map - if (!sfcMapBkg) - { - sfcMapBkg = CreateDefaultBkgSurface(*sfcMap); - if (!sfcMapBkg) return false; - } - if (Config.General.DebugRec) { AddDbgRec(RCT_Block, "|---MAP---|", 12); @@ -1566,7 +1605,7 @@ bool C4Landscape::SaveInternal(C4Group &hGroup) const return false; // Move temp file to group - if (!hGroup.Move( szTempLandscape, C4CFN_Landscape )) + if (!hGroup.Move( szTempLandscape, C4CFN_LandscapeFg )) return false; // Same for background surface @@ -1574,7 +1613,7 @@ bool C4Landscape::SaveInternal(C4Group &hGroup) const MakeTempFilename(szTempLandscape); if (!Surface8Bkg->Save(szTempLandscape)) return false; - if (!hGroup.Move(szTempLandscape, C4CFN_LandscapeBkg)) + if (!hGroup.Move(szTempLandscape, C4CFN_LandscapeBg)) return false; // Save map @@ -1690,18 +1729,37 @@ bool C4Landscape::Load(C4Group &hGroup, bool fLoadSky, bool fSavegame) assert(!Surface8 && !Surface8Bkg); // Load exact landscape from group - if (!(Surface8=GroupReadSurface8(hGroup, C4CFN_Landscape))) return false; + if (!(Surface8=GroupReadSurface8(hGroup, C4CFN_Landscape))) + { + if (!(Surface8=GroupReadSurface8(hGroup, C4CFN_LandscapeFg))) return false; + Surface8Bkg = GroupReadSurface8(hGroup, C4CFN_LandscapeBg); + + if (Surface8Bkg) + { + if ( (Surface8->Wdt != Surface8Bkg->Wdt || Surface8->Hgt != Surface8Bkg->Hgt)) + { + LogFatal(FormatString("Landscape has different dimensions than background landscape (%dx%d vs. %dx%d)", Surface8->Wdt, Surface8->Hgt, Surface8Bkg->Wdt, Surface8Bkg->Hgt).getData()); + return false; + } + } + else + { + // LandscapeFg.bmp loaded: Assume full 8bit mat-tex values + // when creating background surface. + Surface8Bkg = CreateDefaultBkgSurface(*Surface8, false); + } + } + else + { + // Landscape.bmp loaded: Assume msb is IFT flag when creating + // background surface. + Surface8Bkg = CreateDefaultBkgSurface(*Surface8, true); + } + int iWidth, iHeight; Surface8->GetSurfaceSize(iWidth,iHeight); Width = iWidth; Height = iHeight; - // Load background surface; it's not fatal if it does not exist - Surface8Bkg = GroupReadSurface8(hGroup, C4CFN_LandscapeBkg); - if (Surface8Bkg && (Width != Surface8Bkg->Wdt || Height != Surface8Bkg->Hgt)) - { - LogFatal(FormatString("Landscape has different dimensions than background landscape (%dx%d vs. %dx%d)", iWidth, iHeight, Surface8Bkg->Wdt, Surface8Bkg->Hgt).getData()); - return false; - } // adjust pal if (!Mat2Pal()) return false; // Landscape should be in correct format: Make sure it is! @@ -1717,27 +1775,16 @@ bool C4Landscape::Load(C4Group &hGroup, bool fLoadSky, bool fSavegame) return false; } - if (Surface8Bkg) - { - BYTE byPixBkg = Surface8Bkg->_GetPix(x, y); - int32_t iMatBkg = PixCol2Mat(byPixBkg); + BYTE byPixBkg = Surface8Bkg->_GetPix(x, y); + int32_t iMatBkg = PixCol2Mat(byPixBkg); - if (byPixBkg && !MatValid(iMatBkg)) - { - LogFatal(FormatString("Background Landscape loading error at (%d/%d): Pixel value %d not a valid material!", (int) x, (int) y, (int) byPixBkg).getData()); - return false; - } + if (byPixBkg && !MatValid(iMatBkg)) + { + LogFatal(FormatString("Background Landscape loading error at (%d/%d): Pixel value %d not a valid material!", (int) x, (int) y, (int) byPixBkg).getData()); + return false; } } - // Create default background landscape if not available - if (!Surface8Bkg) - { - Surface8Bkg = CreateDefaultBkgSurface(*Surface8); - if (!Surface8Bkg) - return false; - } - // Init sky if (fLoadSky) { @@ -1839,21 +1886,21 @@ bool C4Landscape::SaveMap(C4Group &hGroup) const ::TextureMap.StoreMapPalette(&Palette,::MaterialMap); // Save map surface - if (!Map->Save(Config.AtTempPath(C4CFN_TempMap), &Palette)) + if (!Map->Save(Config.AtTempPath(C4CFN_TempMapFg), &Palette)) return false; // Move temp file to group - if (!hGroup.Move(Config.AtTempPath(C4CFN_TempMap), - C4CFN_Map )) + if (!hGroup.Move(Config.AtTempPath(C4CFN_TempMapFg), + C4CFN_MapFg )) return false; // Save background map surface - if (!MapBkg->Save(Config.AtTempPath(C4CFN_TempMapBkg), &Palette)) + if (!MapBkg->Save(Config.AtTempPath(C4CFN_TempMapBg), &Palette)) return false; // Move temp file to group - if (!hGroup.Move(Config.AtTempPath(C4CFN_TempMapBkg), - C4CFN_MapBkg )) + if (!hGroup.Move(Config.AtTempPath(C4CFN_TempMapBg), + C4CFN_MapBg )) return false; // Success @@ -2312,7 +2359,7 @@ bool C4Landscape::CreateMap(CSurface8*& sfcMap, CSurface8*& sfcMapBkg) Game.C4S.Landscape, ::TextureMap, true,Game.StartupPlayerCount); - sfcMapBkg = CreateDefaultBkgSurface(*sfcMap); + sfcMapBkg = CreateDefaultBkgSurface(*sfcMap, false); if (!sfcMapBkg) { delete sfcMap; sfcMap = NULL; return false; } return true; } @@ -3483,7 +3530,6 @@ bool C4Landscape::DrawPolygon(int *vtcs, int length, const char *szMaterial, boo if (fDrawBridge) { conversion_map = GetBridgeMatConversion(MatTex2PixCol(iMatTex)); - // TODO: Keep IFT if bridging mcolBkg = TRANSPARENT; } // prepare pixel count update @@ -3540,6 +3586,12 @@ BYTE C4Landscape::GetMapIndex(int32_t iX, int32_t iY) const return Map->GetPix(iX,iY); } +BYTE C4Landscape::GetBackMapIndex(int32_t iX, int32_t iY) const +{ + if (!MapBkg) return 0; + return MapBkg->GetPix(iX,iY); +} + void C4Landscape::PrepareChange(C4Rect BoundingBox) { // move solidmasks out of the way @@ -3833,9 +3885,7 @@ bool C4Landscape::Mat2Pal() // colors DWORD dwPix = pTex->GetPattern().PatternClr(0, 0); Surface8->pPal->Colors[MatTex2PixCol(tex)] = dwPix; - Surface8->pPal->Colors[MatTex2PixCol(tex) + IFT] = dwPix; Surface8Bkg->pPal->Colors[MatTex2PixCol(tex)] = dwPix; - Surface8Bkg->pPal->Colors[MatTex2PixCol(tex) + IFT] = dwPix; } // success return true; diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index bf656668c..1d4bd8354 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -99,6 +99,7 @@ public: void RaiseTerrain(int32_t tx, int32_t ty, int32_t wdt); void FindMatTop(int32_t mat, int32_t &x, int32_t &y, bool distant_first) const; BYTE GetMapIndex(int32_t iX, int32_t iY) const; + BYTE GetBackMapIndex(int32_t iX, int32_t iY) const; bool Load(C4Group &hGroup, bool fLoadSky, bool fSavegame); bool Save(C4Group &hGroup) const; bool SaveDiff(C4Group &hGroup, bool fSyncSave) const; @@ -332,7 +333,7 @@ private: C4Rect getBoundingBox(int *vtcs, int length) const; BYTE DefaultBkgMat(BYTE fg) const; - CSurface8* CreateDefaultBkgSurface(const CSurface8& sfcFg) const; + CSurface8* CreateDefaultBkgSurface(CSurface8& sfcFg, bool msbAsIft) const; void DigMaterial2Objects(int32_t tx, int32_t ty, C4MaterialList *mat_list, C4Object *pCollect = NULL); void BlastMaterial2Objects(int32_t tx, int32_t ty, C4MaterialList *mat_list, int32_t caused_by, int32_t str, C4ValueArray *out_objects); @@ -393,19 +394,12 @@ inline bool DensityLiquid(int32_t dens) return ((dens>=C4M_Liquid) && (dens= C4M_MaxTexIndex) return 0; + if (pixc >= C4M_MaxTexIndex) return 0; // Done - return iTex; + return pixc; } inline int32_t GBackMat(int32_t x, int32_t y) diff --git a/src/landscape/C4Texture.cpp b/src/landscape/C4Texture.cpp index 2618d86b2..9d267d028 100644 --- a/src/landscape/C4Texture.cpp +++ b/src/landscape/C4Texture.cpp @@ -480,7 +480,7 @@ void C4TextureMap::StoreMapPalette(CStdPalette *Palette, C4MaterialMap &rMateria // Sky color Palette->Colors[0] = C4RGB(192, 196, 252); // Material colors by texture map entries - bool fSet[256]; + bool fSet[C4M_MaxTexIndex]; ZeroMem(&fSet, sizeof (fSet)); int32_t i; for (i = 0; i < C4M_MaxTexIndex; i++) @@ -488,11 +488,10 @@ void C4TextureMap::StoreMapPalette(CStdPalette *Palette, C4MaterialMap &rMateria // Find material DWORD dwPix = Entry[i].GetPattern().PatternClr(0, 0); Palette->Colors[i] = dwPix; - Palette->Colors[i + IFT] = dwPix | 0x0F; // IFT arbitrarily gets more blue - fSet[i] = fSet[i + IFT] = true; + fSet[i] = true; } // Crosscheck colors, change equal palette entries - for (i = 0; i < 256; i++) if (fSet[i]) + for (i = 0; i < C4M_MaxTexIndex; i++) if (fSet[i]) for (;;) { // search equal entry From b8343786b6fc112be86367ad8bef0789bf43a712 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 7 Jul 2015 21:17:40 -0400 Subject: [PATCH 11/97] Make MapScript create a background map This removes the last occurence of the IFT flag --- docs/sdk/script/MapScript.xml | 4 +- src/landscape/C4Landscape.cpp | 22 +-- src/landscape/C4Landscape.h | 4 +- src/landscape/C4MapScript.cpp | 210 ++++++++++++++++--------- src/landscape/C4MapScript.h | 83 +++++----- src/landscape/C4MapScriptAlgo.cpp | 89 ++++++----- src/landscape/C4Texture.cpp | 21 +++ src/landscape/C4Texture.h | 1 + src/mape/cpp-handles/mapgen-handle.cpp | 8 +- 9 files changed, 262 insertions(+), 180 deletions(-) diff --git a/docs/sdk/script/MapScript.xml b/docs/sdk/script/MapScript.xml index 923dca3ac..6f227a9f9 100644 --- a/docs/sdk/script/MapScript.xml +++ b/docs/sdk/script/MapScript.xml @@ -421,7 +421,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer}); Sky Sky - True for explicit sky material (0x80) only. Not true for transaprent (0) pixels. + True for explicit sky material (0xff) only. Not true for transaprent (0) pixels. Transparent @@ -446,7 +446,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer}); * * - True for all materials. + True for all materials, including sky. ^Definition diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index 3628512ce..89d2aaaac 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -996,23 +996,7 @@ bool C4Landscape::Incinerate(int32_t x, int32_t y) BYTE C4Landscape::DefaultBkgMat(BYTE fg) const { - // For the given foreground index, find the default background index - // If fg is semisolid, this is tunnel. - // Otherwise it is fg itself, so that tunnel and background bricks - // stay the way they are. - int32_t iTex = PixCol2Tex(fg); - if (!iTex) return fg; // sky - - // Get material-texture mapping - const C4TexMapEntry *pTex = ::TextureMap.GetEntry(iTex); - // Texmap entry does not exist - if(!pTex || !pTex->GetMaterial()) return fg; - - if(DensitySemiSolid(pTex->GetMaterial()->Density)) - return Mat2PixColDefault(MTunnel); - - return fg; - + return ::TextureMap.DefaultBkgMatTex(fg); } CSurface8* C4Landscape::CreateDefaultBkgSurface(CSurface8& sfcFg, bool msbAsIft) const @@ -1403,7 +1387,7 @@ bool C4Landscape::Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bo if (!fLandscapeModeSet) Mode=C4LSC_Dynamic; // script may create or edit map - if (MapScript.InitializeMap(&Game.C4S.Landscape, &::TextureMap, &::MaterialMap, Game.StartupPlayerCount, &sfcMap)) // TODO: Add sfcMapBkg parameter + if (MapScript.InitializeMap(&Game.C4S.Landscape, &::TextureMap, &::MaterialMap, Game.StartupPlayerCount, &sfcMap, &sfcMapBkg)) if (!fLandscapeModeSet) Mode=C4LSC_Dynamic; // Dynamic map by scenario @@ -1420,6 +1404,8 @@ bool C4Landscape::Init(C4Group &hGroup, bool fOverloadCurrent, bool fLoadSky, bo return true; } + assert(sfcMapBkg != NULL); + if (Config.General.DebugRec) { AddDbgRec(RCT_Block, "|---MAP---|", 12); diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index 1d4bd8354..44976e0bf 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -26,8 +26,6 @@ #include #include -const uint8_t IFT = 0x80; - const int32_t C4MaxMaterial = 125; const int32_t C4LSC_Undefined = 0, @@ -332,7 +330,6 @@ private: std::vector GetRectangle(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt) const; C4Rect getBoundingBox(int *vtcs, int length) const; - BYTE DefaultBkgMat(BYTE fg) const; CSurface8* CreateDefaultBkgSurface(CSurface8& sfcFg, bool msbAsIft) const; void DigMaterial2Objects(int32_t tx, int32_t ty, C4MaterialList *mat_list, C4Object *pCollect = NULL); void BlastMaterial2Objects(int32_t tx, int32_t ty, C4MaterialList *mat_list, int32_t caused_by, int32_t str, C4ValueArray *out_objects); @@ -344,6 +341,7 @@ private: C4ValueArray *PrepareFreeShape(C4Rect &BoundingBox, C4Object *by_object); void PostFreeShape(C4ValueArray *dig_objects, C4Object *by_object); + BYTE DefaultBkgMat(BYTE fg) const; public: void CompileFunc(StdCompiler *pComp); // without landscape bitmaps and sky diff --git a/src/landscape/C4MapScript.cpp b/src/landscape/C4MapScript.cpp index 52eaee33e..19f44b9fd 100644 --- a/src/landscape/C4MapScript.cpp +++ b/src/landscape/C4MapScript.cpp @@ -32,18 +32,25 @@ static const char *DrawFn_Background_Name = "Background"; static const char *DrawFn_Liquid_Name = "Liquid"; static const char *DrawFn_Solid_Name = "Solid"; -int32_t FnParTexCol(C4String *mattex, int32_t default_col = -1) +bool FnParTexCol(C4String *mattex, uint8_t& fg, uint8_t& bg) { // Return index of material-texture definition for a single color // Defaults to underground (tunnel background) color. Prefix material with ^ to get overground (sky background) color. - if (!mattex || !mattex->GetCStr()) return default_col; - if (mattex->GetData() == DrawFn_Transparent_Name) return 0; - if (mattex->GetData() == DrawFn_Sky_Name) return IFT; + if (!mattex || !mattex->GetCStr()) return false; + if (mattex->GetData() == DrawFn_Transparent_Name) { fg = bg = 0; return true; } + if (mattex->GetData() == DrawFn_Sky_Name) {fg = bg = C4M_MaxTexIndex; return true; } const char *cmattex = mattex->GetCStr(); - int32_t ift = IFT; - if (*cmattex == '^') { ift=0; ++cmattex; } - int32_t col = ::MapScript.pTexMap->GetIndexMatTex(cmattex); - return col ? col|ift : default_col; + bool ift = true; + if (*cmattex == '^') { ift=false; ++cmattex; } + uint8_t col = ::MapScript.pTexMap->GetIndexMatTex(cmattex); + if (col == 0) return false; + + fg = col; + if (ift) + bg = ::MapScript.pTexMap->DefaultBkgMatTex(fg); + else + bg = C4M_MaxTexIndex; // sky + return true; } void C4MapScriptMatTexMask::UnmaskSpec(C4String *spec) @@ -52,8 +59,8 @@ void C4MapScriptMatTexMask::UnmaskSpec(C4String *spec) // Possible definitions: // Material-Texture - Given material-texture combination (both sky and tunnel background) // Material - All defined default textures of given material - // * - All materials - // Sky - Index IFT + // * - All materials including sky + // Sky - Index C4M_MaxTexIndex // Transparent - Index 0 // Background - All tunnel materials plus sky // Liquid - All liquid materials @@ -77,40 +84,40 @@ void C4MapScriptMatTexMask::UnmaskSpec(C4String *spec) if (prefix_done) break; ++cspec; } - std::vector mat_mask(IFT, false); + std::vector mat_mask(C4M_MaxTexIndex, false); if (SEqual(cspec, DrawFn_Transparent_Name)) { // "Transparent" is zero index. Force to non-IFT mat_mask[0] = true; - bgsky = true; bgtunnel = false; } else if (SEqual(cspec, DrawFn_Sky_Name)) { - // Sky material: Force to IFT - mat_mask[0] = true; - bgsky = false; bgtunnel = true; + // Sky material + mat_mask[C4M_MaxTexIndex] = true; } else if (SEqual(cspec, DrawFn_Background_Name)) { // All background materials - for (int32_t i=0; imask. Apply bgsky, bgtunnel and invert. - for (int32_t i=0; ifg_mask and this->bg_mask. Apply bgsky, bgtunnel and invert. + for (int32_t i=0; i(256, true); - mask[0] = false; + fg_mask = std::vector(256, true); + bg_mask = std::vector(256, true); + fg_mask[0] = false; + bg_mask[0] = false; } } } @@ -191,12 +202,12 @@ static bool FnLayerDraw(C4PropList * _this, C4String *mattex, C4PropList *mask_a { // Layer script function: Draw material mattex in shape of mask_algo in _this layer within bounds given by rect C4MapScriptLayer *layer = _this->GetMapScriptLayer(); - int32_t icol = FnParTexCol(mattex); - if (!layer || icol<0) return false; + uint8_t fg, bg; + if (!layer || !FnParTexCol(mattex, fg, bg)) return false; C4Rect rcBounds; if (!FnParRect(layer, rect, &rcBounds)) return false; std::unique_ptr algo(FnParAlgo(mask_algo)); - return layer->Fill(icol, rcBounds, algo.get()); + return layer->Fill(fg, bg, rcBounds, algo.get()); } static bool FnLayerBlit(C4PropList * _this, C4PropList *mask_algo, C4ValueArray *rect) @@ -215,8 +226,11 @@ static C4PropList *FnCreateLayer(C4PropList * _this, C4String *mattex_fill, int3 { // Layer script function: Create new layer filled by mattex_fill of size width,height as sub layer of _this map // Size defaults to _this layer size - int32_t icol = FnParTexCol(mattex_fill, 0); - if (icol<0) throw new C4AulExecError(FormatString("CreateLayer: Invalid fill material.").getData()); + uint8_t fg = 0, bg = 0; + if (mattex_fill && mattex_fill->GetCStr()) + if (!FnParTexCol(mattex_fill, fg, bg)) + throw new C4AulExecError(FormatString("CreateLayer: Invalid fill material.").getData()); + C4MapScriptLayer *layer = _this->GetMapScriptLayer(); if (!layer) return NULL; if (!width && !height) @@ -228,7 +242,7 @@ static C4PropList *FnCreateLayer(C4PropList * _this, C4String *mattex_fill, int3 C4MapScriptMap *map = layer->GetMap(); if (!map) return NULL; layer = map->CreateLayer(width, height); - if (icol) layer->Fill(icol, layer->GetBounds(), NULL); + if (fg != 0 || bg != 0) layer->Fill(fg, bg, layer->GetBounds(), NULL); return layer; } @@ -256,22 +270,32 @@ static int32_t FnLayerGetPixel(C4PropList * _this, int32_t x, int32_t y) return layer->GetPix(x,y,0); } +// TODO: Add function to get background pixel + static bool FnLayerSetPixel(C4PropList * _this, int32_t x, int32_t y, const C4Value &to_value_c4v) { // Layer script function: Set pixel at position x,y to to_value in _this layer C4MapScriptLayer *layer = _this->GetMapScriptLayer(); if (!layer) return false; - int32_t to_value; C4String *to_value_s; + C4String *to_value_s; + uint8_t fg, bg; + + // TODO: Allow to set custom background material if ((to_value_s = to_value_c4v.getStr())) { - to_value = FnParTexCol(to_value_s); + if (!FnParTexCol(to_value_s, fg, bg)) + throw new C4AulExecError("MapLayer::SetPixel: Trying to set invalid pixel value."); } else { - to_value = to_value_c4v.getInt(); + int32_t val = to_value_c4v.getInt(); + if (!Inside(val, 0, 255)) + throw new C4AulExecError("MapLayer::SetPixel: Trying to set invalid pixel value."); + + fg = val; + bg = ::MapScript.pTexMap->DefaultBkgMatTex(fg); } - if (!Inside(to_value, 0, 255)) throw new C4AulExecError("MapLayer::SetPixel: Trying to set invalid pixel value."); - return layer->SetPix(x,y,to_value); + return layer->SetPix(x,y,fg,bg); } static int32_t FnLayerGetPixelCount(C4PropList * _this, const C4Value &mask_spec, C4ValueArray *rect) @@ -321,15 +345,17 @@ static C4ValueArray *FnLayerCreateMatTexMask(C4PropList * _this, const C4Value & { // layer script function: Generate an array 256 bools representing the given mask_spec C4MapScriptMatTexMask mat_mask(mask_spec); - C4ValueArray *result = new C4ValueArray(256); - for (int32_t i=0; i<256; ++i) + C4ValueArray *result = new C4ValueArray(C4M_MaxTexIndex + 1); + for (int32_t i=0; i < C4M_MaxTexIndex + 1; ++i) { - result->SetItem(i, C4VBool(mat_mask(uint8_t(i)))); + result->SetItem(i, C4VBool(mat_mask(uint8_t(i), C4M_MaxTexIndex))); } return result; } -C4MapScriptLayer::C4MapScriptLayer(C4PropList *prototype, C4MapScriptMap *map) : C4PropListNumbered(prototype), surface(NULL), surface_owned(false), map(map) +// TODO: CreateBackMatTexMask? Or Return 512 bools? + +C4MapScriptLayer::C4MapScriptLayer(C4PropList *prototype, C4MapScriptMap *map) : C4PropListNumbered(prototype), fg_surface(NULL), bg_surface(NULL), surface_owned(false), map(map) { // It seems like numbered PropLists need a number. I don't know why. AcquireNumber(); @@ -340,9 +366,10 @@ bool C4MapScriptLayer::CreateSurface(int32_t wdt, int32_t hgt) // Create new surface of given size. Surface is filled with color 0 ClearSurface(); if (wdt<=0 || hgt<=0) return false; - surface = new CSurface8; + fg_surface = new CSurface8; + bg_surface = new CSurface8; surface_owned = true; - if (!surface->Create(wdt, hgt)) + if (!fg_surface->Create(wdt, hgt) || !bg_surface->Create(wdt, hgt)) { ClearSurface(); return false; @@ -354,48 +381,61 @@ bool C4MapScriptLayer::CreateSurface(int32_t wdt, int32_t hgt) void C4MapScriptLayer::ClearSurface() { // Delete surface if owned or just set to zero if unowned - if (surface_owned) delete surface; - surface=NULL; surface_owned=false; + if (surface_owned) { delete fg_surface; delete bg_surface; } + fg_surface=NULL; bg_surface=NULL; + surface_owned=false; // if there is no surface, width and height parameters are undefined. no need to update them. } void C4MapScriptLayer::UpdateSurfaceSize() { // Called when surface size changes: Update internal property values - if (surface) + if (fg_surface) { - SetProperty(P_Wdt, C4VInt(surface->Wdt)); - SetProperty(P_Hgt, C4VInt(surface->Hgt)); + SetProperty(P_Wdt, C4VInt(fg_surface->Wdt)); + SetProperty(P_Hgt, C4VInt(fg_surface->Hgt)); } } void C4MapScriptLayer::ConvertSkyToTransparent() { - // Convert all sky (color==IFT) pixels to transparent (color==0) + // Convert all sky (color==C4M_MaxTexIndex) pixels to transparent (color==0) // Needed because C4Landscape map zoom assumes sky to be 0 if (!HasSurface()) return; - for (int32_t y=0; yHgt; ++y) - for (int32_t x=0; xWdt; ++x) - if (surface->_GetPix(x,y) == IFT) - surface->_SetPix(x,y, 0); + for (int32_t y=0; yHgt; ++y) + { + for (int32_t x=0; xWdt; ++x) + { + if (fg_surface->_GetPix(x,y) == C4M_MaxTexIndex) + fg_surface->_SetPix(x,y, 0); + + if (bg_surface->_GetPix(x,y) == C4M_MaxTexIndex) + bg_surface->_SetPix(x,y, 0); + } + } } C4Rect C4MapScriptLayer::GetBounds() const { // Return bounding rectangle of surface. Surface always starts at 0,0. - return surface ? C4Rect(0,0,surface->Wdt,surface->Hgt) : C4Rect(); + return fg_surface ? C4Rect(0,0,fg_surface->Wdt,fg_surface->Hgt) : C4Rect(); } -bool C4MapScriptLayer::Fill(int col, const C4Rect &rcBounds, const C4MapScriptAlgo *algo) +bool C4MapScriptLayer::Fill(uint8_t fg, uint8_t bg, const C4Rect &rcBounds, const C4MapScriptAlgo *algo) { // safety + uint8_t temp_fg, temp_bg; if (!HasSurface()) return false; - assert(rcBounds.x>=0 && rcBounds.y>=0 && rcBounds.x+rcBounds.Wdt<=surface->Wdt && rcBounds.y+rcBounds.Hgt<=surface->Hgt); + assert(rcBounds.x>=0 && rcBounds.y>=0 && rcBounds.x+rcBounds.Wdt<=fg_surface->Wdt && rcBounds.y+rcBounds.Hgt<=fg_surface->Hgt); // set all non-masked pixels within bounds that fulfill algo for (int32_t y=rcBounds.y; y_SetPix(x,y,col); + if (!algo || (*algo)(x,y,temp_fg,temp_bg)) + { + fg_surface->_SetPix(x,y,fg); + bg_surface->_SetPix(x,y,bg); + } + return true; } @@ -403,14 +443,17 @@ bool C4MapScriptLayer::Blit(const C4Rect &rcBounds, const C4MapScriptAlgo *algo) { // safety if (!HasSurface()) return false; - assert(rcBounds.x>=0 && rcBounds.y>=0 && rcBounds.x+rcBounds.Wdt<=surface->Wdt && rcBounds.y+rcBounds.Hgt<=surface->Hgt); + assert(rcBounds.x>=0 && rcBounds.y>=0 && rcBounds.x+rcBounds.Wdt<=fg_surface->Wdt && rcBounds.y+rcBounds.Hgt<=fg_surface->Hgt); assert(algo); // set all pixels within bounds by algo, if algo is not transparent - uint8_t col; + uint8_t fg, bg; for (int32_t y=rcBounds.y; y_SetPix(x,y,col); + if (((*algo)(x,y,fg,bg))) + { + if (fg) fg_surface->_SetPix(x,y,fg); + if (bg) bg_surface->_SetPix(x,y,bg); + } return true; } @@ -423,11 +466,19 @@ bool C4MapScriptLayer::Blit(const C4MapScriptLayer *src, const C4Rect &src_rect, // TODO: Fix C4Rect::Contains and check if the sector code still works // assert(src->GetBounds().Contains(src_rect)); // copy all pixels that aren't masked - uint8_t col; + uint8_t fg, bg; for (int32_t y=src_rect.y; ysurface->_GetPix(x,y))) - surface->_SetPix(x-src_rect.x+tx,y-src_rect.y+ty,col); + { + fg = src->fg_surface->_GetPix(x, y); + bg = src->bg_surface->_GetPix(x, y); + + if (col_mask(fg, bg)) + { + fg_surface->_SetPix(x-src_rect.x+tx,y-src_rect.y+ty,fg); + bg_surface->_SetPix(x-src_rect.x+tx,y-src_rect.y+ty,bg); + } + } return true; } @@ -435,12 +486,12 @@ int32_t C4MapScriptLayer::GetPixCount(const C4Rect &rcBounds, const C4MapScriptM { // safety if (!HasSurface()) return 0; - assert(rcBounds.x>=0 && rcBounds.y>=0 && rcBounds.x+rcBounds.Wdt<=surface->Wdt && rcBounds.y+rcBounds.Hgt<=surface->Hgt); + assert(rcBounds.x>=0 && rcBounds.y>=0 && rcBounds.x+rcBounds.Wdt<=fg_surface->Wdt && rcBounds.y+rcBounds.Hgt<=fg_surface->Hgt); // count matching pixels in rect int32_t count = 0; for (int32_t y=rcBounds.y; y_GetPix(x,y)); + count += col_mask(fg_surface->_GetPix(x,y), bg_surface->_GetPix(x, y)); return count; } @@ -453,22 +504,22 @@ bool C4MapScriptLayer::FindPos(const C4Rect &search_rect, const C4MapScriptMatTe { int32_t x=search_rect.x + Random(search_rect.Wdt); int32_t y=search_rect.y + Random(search_rect.Hgt); - if (col_mask(surface->_GetPix(x,y))) { *out_x=x; *out_y=y; return true; } + if (col_mask(fg_surface->_GetPix(x,y), bg_surface->_GetPix(x,y))) { *out_x=x; *out_y=y; return true; } } // Nothing found yet: Start at a random position and search systemically // (this guantuess to find a pixel if there is one, but favours border pixels) int32_t sx=search_rect.x + Random(search_rect.Wdt); int32_t sy=search_rect.y + Random(search_rect.Hgt); for (int32_t x = sx; x < search_rect.x + search_rect.Wdt; ++x) - if (col_mask(surface->_GetPix(x,sy))) { *out_x=x; *out_y=sy; return true; } + if (col_mask(fg_surface->_GetPix(x,sy), bg_surface->_GetPix(x,sy))) { *out_x=x; *out_y=sy; return true; } for (int32_t y = sy + 1; y_GetPix(x,y))) { *out_x=x; *out_y=y; return true; } + if (col_mask(fg_surface->_GetPix(x,y), bg_surface->_GetPix(x,y))) { *out_x=x; *out_y=y; return true; } for (int32_t y = search_rect.y; y_GetPix(x,y))) { *out_x=x; *out_y=y; return true; } + if (col_mask(fg_surface->_GetPix(x,y), bg_surface->_GetPix(x,y))) { *out_x=x; *out_y=y; return true; } for (int32_t x = search_rect.x; x_GetPix(x,sy))) { *out_x=x; *out_y=sy; return true; } + if (col_mask(fg_surface->_GetPix(x,sy), bg_surface->_GetPix(x,sy))) { *out_x=x; *out_y=sy; return true; } // Nothing found return false; } @@ -574,10 +625,12 @@ C4MapScriptMap *C4MapScriptHost::CreateMap() return new C4MapScriptMap(MapPrototype); } -bool C4MapScriptHost::InitializeMap(C4SLandscape *pLandscape, C4TextureMap *pTexMap, C4MaterialMap *pMatMap, uint32_t iPlayerCount, CSurface8 **pmap_surface) +bool C4MapScriptHost::InitializeMap(C4SLandscape *pLandscape, C4TextureMap *pTexMap, C4MaterialMap *pMatMap, uint32_t iPlayerCount, CSurface8 **pmap_fg_surface, CSurface8** pmap_bg_surface) { // Init scripted map by calling InitializeMap in the proper scripts. If *pmap_surface is given, it will pass the existing map to be modified by script. - assert(pmap_surface); + assert(pmap_fg_surface); + assert(pmap_bg_surface); + this->pTexMap = pTexMap; this->pMatMap = pMatMap; // Don't bother creating surfaces if the functions aren't defined @@ -589,13 +642,14 @@ bool C4MapScriptHost::InitializeMap(C4SLandscape *pLandscape, C4TextureMap *pTex // Create proplist as script context std::unique_ptr map(CreateMap()); // Drawing on existing map or create new? - if (*pmap_surface) + if (*pmap_fg_surface && *pmap_bg_surface) { // Existing map - map->SetSurface(*pmap_surface); + map->SetSurface(*pmap_fg_surface, *pmap_bg_surface); } else { + assert(!*pmap_fg_surface && !*pmap_bg_surface); // No existing map. Create new. int32_t map_wdt,map_hgt; pLandscape->GetMapSize(map_wdt, map_hgt, iPlayerCount); @@ -608,7 +662,7 @@ bool C4MapScriptHost::InitializeMap(C4SLandscape *pLandscape, C4TextureMap *pTex if (result) { map->ConvertSkyToTransparent(); - *pmap_surface = map->ReleaseSurface(); + map->ReleaseSurface(*pmap_fg_surface, *pmap_bg_surface); } return !!result; } diff --git a/src/landscape/C4MapScript.h b/src/landscape/C4MapScript.h index c0a3978c5..c555f0b58 100644 --- a/src/landscape/C4MapScript.h +++ b/src/landscape/C4MapScript.h @@ -30,15 +30,22 @@ // mattex masks: Array of bools for each possible material-texture index class C4MapScriptMatTexMask { - std::vector mask; // vector of size 256: true means pixel color is let through; false means it is blocked + std::vector fg_mask; // vector of size C4M_MaxTexIndex + 1: true means pixel color is let through; false means it is blocked + std::vector bg_mask; // vector of size C4M_MaxTexIndex + 1: true means pixel color is let through; false means it is blocked + + // fg_mask stores the mask for pixels with sky background, and bg_mask + // stores the mask for pixels with non-sky background. We don't allow + // different masks for different background materials since this would + // need a C4M_MaxTexIndex + 1 x C4M_MaxTexIndex + 1 matrix to account + // for each possible combination of foreground and background pixel. void UnmaskSpec(C4String *spec); public: - C4MapScriptMatTexMask() : mask(256,false) { } - C4MapScriptMatTexMask(const C4Value &spec) : mask(256,false) { Init(spec); } + C4MapScriptMatTexMask() : fg_mask(C4M_MaxTexIndex + 1,false), bg_mask(C4M_MaxTexIndex + 1, false) { } + C4MapScriptMatTexMask(const C4Value &spec) : fg_mask(C4M_MaxTexIndex + 1, false), bg_mask(C4M_MaxTexIndex + 1, false) { Init(spec); } void Init(const C4Value &spec); - bool operator()(uint8_t mattex) const { return mask[mattex]; } + bool operator()(uint8_t fg, uint8_t bg) const { if (bg == C4M_MaxTexIndex) return fg_mask[fg]; else return bg_mask[fg]; } }; // algorithms may be either indicator functions (int,int)->bool that tell whether a map pixel should be @@ -49,7 +56,7 @@ class C4MapScriptAlgo protected: bool GetXYProps(const C4PropList *props, C4PropertyName k, int32_t *out_xy, bool zero_defaults); public: - virtual uint8_t operator () (int32_t x, int32_t y) const = 0; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const = 0; virtual ~C4MapScriptAlgo() {} }; @@ -89,7 +96,7 @@ public: C4MapScriptAlgoLayer(const C4MapScriptLayer *layer) : layer(layer) {} C4MapScriptAlgoLayer(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_RndChecker: checkerboard on which areas are randomly set or unset @@ -100,7 +107,7 @@ class C4MapScriptAlgoRndChecker : public C4MapScriptAlgo public: C4MapScriptAlgoRndChecker(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Rect: 1 for pixels contained in rect, 0 otherwise @@ -110,7 +117,7 @@ class C4MapScriptAlgoRect : public C4MapScriptAlgo public: C4MapScriptAlgoRect(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Ellipsis: 1 for pixels within ellipsis, 0 otherwise @@ -121,7 +128,7 @@ class C4MapScriptAlgoEllipsis : public C4MapScriptAlgo public: C4MapScriptAlgoEllipsis(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Polygon: 1 for pixels within polygon or on border, 0 otherwise @@ -135,7 +142,7 @@ class C4MapScriptAlgoPolygon : public C4MapScriptAlgo public: C4MapScriptAlgoPolygon(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Lines: 1 for pixels on stripes in direction ("X","Y"). Stripe distance "Distance". Optional offset "OffX", "OffY" @@ -146,7 +153,7 @@ class C4MapScriptAlgoLines : public C4MapScriptAlgo public: C4MapScriptAlgoLines(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // base class for algo that takes one or more operands @@ -166,7 +173,7 @@ class C4MapScriptAlgoAnd : public C4MapScriptAlgoModifier public: C4MapScriptAlgoAnd(const C4PropList *props) : C4MapScriptAlgoModifier(props) { } - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Or: First nonzero operand @@ -175,7 +182,7 @@ class C4MapScriptAlgoOr : public C4MapScriptAlgoModifier public: C4MapScriptAlgoOr(const C4PropList *props) : C4MapScriptAlgoModifier(props) { } - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Not: 1 if operand is 0, 0 otherwise. @@ -184,7 +191,7 @@ class C4MapScriptAlgoNot : public C4MapScriptAlgoModifier public: C4MapScriptAlgoNot(const C4PropList *props) : C4MapScriptAlgoModifier(props,1,1) { } - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Xor: If exactly one of the two operands is nonzero, return it. Otherwise, return zero. @@ -193,7 +200,7 @@ class C4MapScriptAlgoXor : public C4MapScriptAlgoModifier public: C4MapScriptAlgoXor(const C4PropList *props) : C4MapScriptAlgoModifier(props,2,2) { } - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Offset: Base layer shifted by ox,oy @@ -203,7 +210,7 @@ class C4MapScriptAlgoOffset : public C4MapScriptAlgoModifier public: C4MapScriptAlgoOffset(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Scale: Base layer scaled by sx,sy percent from fixed point cx,cy @@ -213,7 +220,7 @@ class C4MapScriptAlgoScale : public C4MapScriptAlgoModifier public: C4MapScriptAlgoScale(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Rotate: Base layer rotated by angle r around point ox,oy @@ -224,7 +231,7 @@ class C4MapScriptAlgoRotate : public C4MapScriptAlgoModifier public: C4MapScriptAlgoRotate(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Turbulence: move by a random offset iterations times @@ -234,7 +241,7 @@ class C4MapScriptAlgoTurbulence : public C4MapScriptAlgoModifier public: C4MapScriptAlgoTurbulence(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Border: Border of operand layer @@ -245,7 +252,7 @@ class C4MapScriptAlgoBorder : public C4MapScriptAlgoModifier public: C4MapScriptAlgoBorder(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // MAPALGO_Filter: Original color of operand if it's marked to go through filter. 0 otherwise. @@ -255,14 +262,15 @@ class C4MapScriptAlgoFilter : public C4MapScriptAlgoModifier public: C4MapScriptAlgoFilter(const C4PropList *props); - virtual uint8_t operator () (int32_t x, int32_t y) const; + virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const; }; // layer of a script-controlled map -// IFT can be used to mark Sky +// C4M_MaxTexIndex can be used to mark Sky class C4MapScriptLayer : public C4PropListNumbered { - CSurface8 *surface; + CSurface8 *fg_surface; + CSurface8 *bg_surface; bool surface_owned; protected: class C4MapScriptMap *map; @@ -276,30 +284,31 @@ public: // Surface management bool CreateSurface(int32_t wdt, int32_t hgt); void ClearSurface(); - CSurface8 *ReleaseSurface() { surface_owned=false; return surface; } // return surface and mark it as not owned by self - void SetSurface(CSurface8 *s) { ClearSurface(); surface=s; UpdateSurfaceSize(); } - bool HasSurface() const { return surface && surface->Bits; } + void ReleaseSurface(CSurface8*& fg, CSurface8*& bg) { surface_owned=false; fg = fg_surface; bg = bg_surface; } // return surface and mark it as not owned by self + void SetSurface(CSurface8 *fg, CSurface8* bg) { ClearSurface(); fg_surface=fg; bg_surface=bg; UpdateSurfaceSize(); } + bool HasSurface() const { return fg_surface && fg_surface->Bits && bg_surface && bg_surface->Bits; } // Size management void UpdateSurfaceSize(); // updates width and height properties by current surface C4Rect GetBounds () const; - int32_t GetWdt() const { return surface ? surface->Wdt : 0; } - int32_t GetHgt() const { return surface ? surface->Hgt : 0; } + int32_t GetWdt() const { return fg_surface ? fg_surface->Wdt : 0; } + int32_t GetHgt() const { return fg_surface ? fg_surface->Hgt : 0; } // Pixel functions - uint8_t GetPix(int32_t x, int32_t y, uint8_t outside_col) const { return (!HasSurface()||x<0||y<0||x>=surface->Wdt||y>=surface->Hgt) ? outside_col : surface->_GetPix(x,y); } - bool SetPix(int32_t x, int32_t y, uint8_t col) const { if (!HasSurface()||x<0||y<0||x>=surface->Wdt||y>=surface->Hgt) return false; surface->_SetPix(x,y,col); return true; } - bool IsPixMasked(int32_t x, int32_t y) const { return GetPix(x,y,0)!=0; } // masking: If pixel is inside surface and not transparent - void ConvertSkyToTransparent(); // change all pixels that are IFT to 0 - int32_t GetPixCount(const C4Rect &rcBounds, const C4MapScriptMatTexMask &col_mask); // return number of pixels that match mask + uint8_t GetPix(int32_t x, int32_t y, uint8_t outside_col) const { return (!HasSurface()||x<0||y<0||x>=fg_surface->Wdt||y>=fg_surface->Hgt) ? outside_col : fg_surface->_GetPix(x,y); } + uint8_t GetBackPix(int32_t x, int32_t y, uint8_t outside_col) const { return (!HasSurface()||x<0||y<0||x>=bg_surface->Wdt||y>=bg_surface->Hgt) ? outside_col : bg_surface->_GetPix(x,y); } + bool SetPix(int32_t x, int32_t y, uint8_t fg, uint8_t bg) const { if (!HasSurface()||x<0||y<0||x>=bg_surface->Wdt||y>=bg_surface->Hgt) return false; fg_surface->_SetPix(x,y,fg); bg_surface->_SetPix(x,y,bg); return true; } + bool IsPixMasked(int32_t x, int32_t y) const { return GetPix(x,y,0) != 0 || GetBackPix(x,y,0) != 0; } // masking: If pixel is inside surface and not transparent + void ConvertSkyToTransparent(); // change all pixels that are C4M_MaxTexIndex to 0 + int32_t GetPixCount(const C4Rect &rcBounds, const C4MapScriptMatTexMask &mask); // return number of pixels that match mask // Drawing functions - bool Fill(int col, const C4Rect &rcBounds, const C4MapScriptAlgo *algo); + bool Fill(uint8_t fg, uint8_t bg, const C4Rect &rcBounds, const C4MapScriptAlgo *algo); bool Blit(const C4Rect &rcBounds, const C4MapScriptAlgo *algo); - bool Blit(const C4MapScriptLayer *src, const C4Rect &src_rect, const C4MapScriptMatTexMask &col_mask, int32_t tx, int32_t ty); + bool Blit(const C4MapScriptLayer *src, const C4Rect &src_rect, const C4MapScriptMatTexMask &mask, int32_t tx, int32_t ty); // Search functions - bool FindPos(const C4Rect &search_rect, const C4MapScriptMatTexMask &col_mask, int32_t *out_x, int32_t *out_y, int32_t max_tries); + bool FindPos(const C4Rect &search_rect, const C4MapScriptMatTexMask &mask, int32_t *out_x, int32_t *out_y, int32_t max_tries); }; class C4MapScriptMap : public C4MapScriptLayer @@ -331,7 +340,7 @@ public: virtual bool LoadData(const char *, const char *, C4LangStringTable *); void Clear(); virtual C4PropListStatic * GetPropList(); - bool InitializeMap(C4SLandscape *pLandscape, C4TextureMap *pTexMap, C4MaterialMap *pMatMap, uint32_t iPlayerCount, CSurface8 **pmap_surface); + bool InitializeMap(C4SLandscape *pLandscape, C4TextureMap *pTexMap, C4MaterialMap *pMatMap, uint32_t iPlayerCount, CSurface8 **pmap_fg_surface, CSurface8** pmap_bg_surface); C4PropListStatic *GetLayerPrototype() { return LayerPrototype; } C4TextureMap* pTexMap; diff --git a/src/landscape/C4MapScriptAlgo.cpp b/src/landscape/C4MapScriptAlgo.cpp index e908dd765..69205d6d4 100644 --- a/src/landscape/C4MapScriptAlgo.cpp +++ b/src/landscape/C4MapScriptAlgo.cpp @@ -57,10 +57,13 @@ C4MapScriptAlgoLayer::C4MapScriptAlgoLayer(const C4PropList *props) throw new C4AulExecError("C4MapScriptAlgoLayer: Expected layer in \"Layer\" property."); } -uint8_t C4MapScriptAlgoLayer::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoLayer::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { + fg = layer->GetPix(x,y,0); + bg = layer->GetBackPix(x,y,0); + // Evaluate MAPALGO_Layer at x,y: Just query pixel in layer. Pixels outside the layer range are zero. - return layer->GetPix(x,y,0); + return fg != 0 || bg != 0; } C4MapScriptAlgoRndChecker::C4MapScriptAlgoRndChecker(const C4PropList *props) @@ -93,7 +96,7 @@ int32_t QuerySeededRandomField(int32_t seed, int32_t x, int32_t y, int32_t scale return modD((((seed ^ (x*214013))*214013) ^ (y*214013)), scale); } -uint8_t C4MapScriptAlgoRndChecker::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoRndChecker::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_RndChecker at x,y: Query a seeded random field scaled by checker_wdt,checker_hgt if (!is_fixed_offset) { x+=seed%checker_wdt; y+=((seed*214013)%checker_hgt); } @@ -107,7 +110,7 @@ C4MapScriptAlgoRect::C4MapScriptAlgoRect(const C4PropList *props) rect = C4Rect(props->GetPropertyInt(P_X), props->GetPropertyInt(P_Y), props->GetPropertyInt(P_Wdt), props->GetPropertyInt(P_Hgt)); } -uint8_t C4MapScriptAlgoRect::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoRect::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Rect at x,y: Return 1 for pixels contained in rect, 0 otherwise return rect.Contains(x, y); @@ -124,7 +127,7 @@ C4MapScriptAlgoEllipsis::C4MapScriptAlgoEllipsis(const C4PropList *props) if (!hgt) hgt = wdt; } -uint8_t C4MapScriptAlgoEllipsis::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoEllipsis::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Ellipsis at x,y: Return 1 for pixels within ellipsis, 0 otherwise // warning: overflows for large values (wdt or hgt >=256) @@ -154,7 +157,7 @@ C4MapScriptAlgoPolygon::C4MapScriptAlgoPolygon(const C4PropList *props) if (open && !empty) throw new C4AulExecError("C4MapScriptAlgoPolygon: Only empty polygons may be open."); } -uint8_t C4MapScriptAlgoPolygon::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoPolygon::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Polygon at x,y: Return 1 for pixels within the polygon or its borders, 0 otherwise int32_t crossings = 0; @@ -205,7 +208,7 @@ C4MapScriptAlgoLines::C4MapScriptAlgoLines(const C4PropList *props) dl = int64_t(distance) * l; } -uint8_t C4MapScriptAlgoLines::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoLines::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Lines at x,y: Return 1 for pixels contained in lines, 0 for pixels between lines int64_t ax = int64_t(x)-ox; @@ -264,42 +267,50 @@ void C4MapScriptAlgoModifier::Clear() operands.clear(); } -uint8_t C4MapScriptAlgoAnd::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoAnd::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_And at x,y: // Return 0 if any of the operands is 0. Otherwise, returns value of last operand. - uint8_t val=0; + bool val=0; for (std::vector::const_iterator i=operands.begin(); i != operands.end(); ++i) - if (!(val=(**i)(x,y))) return false; + if (!(val=(**i)(x, y, fg, bg))) + return false; return val; } -uint8_t C4MapScriptAlgoOr::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoOr::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Or at x,y: // Return first nonzero operand - uint8_t val; + bool val; for (std::vector::const_iterator i=operands.begin(); i != operands.end(); ++i) - if ((val=(**i)(x,y))) return val; + if ((val=(**i)(x, y, fg, bg))) + return val; // If all operands are zero, return zero. - return 0; + return false; } -uint8_t C4MapScriptAlgoNot::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoNot::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Not at x,y: assert(operands.size()==1); // Return zero if operand is set and one otherwise - return !(*operands[0])(x,y); + return !(*operands[0])(x, y, fg, bg); } -uint8_t C4MapScriptAlgoXor::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoXor::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Xor at x,y: assert(operands.size()==2); // If exactly one of the two operands is nonzero, return it. Otherwise, return zero. - uint8_t v1=(*operands[0])(x,y), v2=(*operands[1])(x,y); - return v1?v2 ?0: v1:v2; + uint8_t fg1, bg1, fg2, bg2; + bool v1=(*operands[0])(x,y,fg1,bg1); + bool v2=(*operands[1])(x,y,fg2,bg2); + if ((v1 && v2) || (!v1 && !v2)) + return false; + if (v1) { fg = fg1; bg = bg1; return true; } + fg = fg2; bg = bg2; + return true; } C4MapScriptAlgoOffset::C4MapScriptAlgoOffset(const C4PropList *props) : C4MapScriptAlgoModifier(props,1,1) @@ -309,12 +320,12 @@ C4MapScriptAlgoOffset::C4MapScriptAlgoOffset(const C4PropList *props) : C4MapScr oy = props->GetPropertyInt(P_OffY); } -uint8_t C4MapScriptAlgoOffset::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoOffset::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Offset at x,y: assert(operands.size()==1); // Return base layer shifted by ox,oy - return (*operands[0])(x-ox,y-oy); + return (*operands[0])(x-ox,y-oy, fg, bg); } C4MapScriptAlgoScale::C4MapScriptAlgoScale(const C4PropList *props) : C4MapScriptAlgoModifier(props,1,1) @@ -328,12 +339,12 @@ C4MapScriptAlgoScale::C4MapScriptAlgoScale(const C4PropList *props) : C4MapScrip cy = props->GetPropertyInt(P_OffY); } -uint8_t C4MapScriptAlgoScale::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoScale::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Scale at x,y: assert(operands.size()==1); // Return base layer scaled by sx,sy percent from fixed point cx,cy - return (*operands[0])((x-cx)*100/sx+cx,(y-cy)*100/sy+cy); + return (*operands[0])((x-cx)*100/sx+cx,(y-cy)*100/sy+cy, fg, bg); } C4MapScriptAlgoRotate::C4MapScriptAlgoRotate(const C4PropList *props) : C4MapScriptAlgoModifier(props,1,1) @@ -346,13 +357,13 @@ C4MapScriptAlgoRotate::C4MapScriptAlgoRotate(const C4PropList *props) : C4MapScr oy = props->GetPropertyInt(P_OffY); } -uint8_t C4MapScriptAlgoRotate::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoRotate::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Rotate at x,y: assert(operands.size()==1); // Return base layer rotated by angle r around point ox,oy x-=ox; y-=oy; - return (*operands[0])(x*cr/Precision-y*sr/Precision+ox,x*sr/Precision+y*cr/Precision+oy); + return (*operands[0])(x*cr/Precision-y*sr/Precision+ox,x*sr/Precision+y*cr/Precision+oy, fg, bg); } C4MapScriptAlgoTurbulence::C4MapScriptAlgoTurbulence(const C4PropList *props) : C4MapScriptAlgoModifier(props,1,1) @@ -368,7 +379,7 @@ C4MapScriptAlgoTurbulence::C4MapScriptAlgoTurbulence(const C4PropList *props) : if (!iterations) iterations = 2; } -uint8_t C4MapScriptAlgoTurbulence::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoTurbulence::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Turbulence at x,y: // move by a random offset iterations times @@ -395,7 +406,7 @@ uint8_t C4MapScriptAlgoTurbulence::operator () (int32_t x, int32_t y) const xy[dim] += a_interp / (scale[0]*scale[1]); } } - return (*operands[0])(xy[0],xy[1]); + return (*operands[0])(xy[0],xy[1], fg, bg); } void C4MapScriptAlgoBorder::ResolveBorderProps(int32_t *p) @@ -432,31 +443,30 @@ C4MapScriptAlgoBorder::C4MapScriptAlgoBorder(const C4PropList *props) : C4MapScr } } -uint8_t C4MapScriptAlgoBorder::operator () (int32_t x, int32_t y) const +bool C4MapScriptAlgoBorder::operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg) const { // Evaluate MAPALGO_Border at x,y: Check if position is at a border of operand layer // For borders inside operand layer, return the operand material. For outside borders, just return 1. For non-borders, return 0. // Are we inside or outside? const C4MapScriptAlgo &l = *operands[0]; - uint8_t mat = l(x,y); - bool inside = !!mat; - if (!mat) mat=1; // return 1 for outside borders + bool inside = l(x,y,fg,bg); // Check four sideways directions const int32_t *ymove[] = { top, bottom }, *xmove [] ={ left, right }; const int32_t d[] = { -1, +1 }; for (int32_t dir=0; dir<2; ++dir) { + uint8_t fake_fg, fake_bg; int32_t hgt = ymove[inside!=!dir][!inside]; for (int32_t dy=0; dyGetMaterial()) return fg; + + if(DensitySemiSolid(pTex->GetMaterial()->Density)) + return Mat2PixColDefault(MTunnel); + + return fg; + +} + void C4TextureMap::Default() { FirstTexture=NULL; diff --git a/src/landscape/C4Texture.h b/src/landscape/C4Texture.h index 9e9025480..6248b6819 100644 --- a/src/landscape/C4Texture.h +++ b/src/landscape/C4Texture.h @@ -96,6 +96,7 @@ public: bool AddEntry(BYTE byIndex, const char *szMaterial, const char *szTexture); bool AddTexture(const char *szTexture, C4Surface * sfcSurface); int32_t GetTextureIndex(const char *pTexName); + BYTE DefaultBkgMatTex(BYTE fg) const; protected: }; diff --git a/src/mape/cpp-handles/mapgen-handle.cpp b/src/mape/cpp-handles/mapgen-handle.cpp index 3e14f8ef1..ce52431a6 100644 --- a/src/mape/cpp-handles/mapgen-handle.cpp +++ b/src/mape/cpp-handles/mapgen-handle.cpp @@ -135,14 +135,16 @@ C4MapgenHandle* c4_mapgen_handle_new_script(const char* filename, const char* so // Generate map, fail if return error occurs c4_log_handle_clear(); - CSurface8* out_ptr = NULL; + CSurface8* out_ptr_fg = NULL; + CSurface8* out_ptr_bg = NULL; const bool result = ::MapScript.InitializeMap( &landscape, HANDLE_TO_TEXTURE_MAP(texture_map), HANDLE_TO_MATERIAL_MAP(material_map), 1, - &out_ptr); - std::auto_ptr out(out_ptr); + &out_ptr_fg, &out_ptr_bg); + std::auto_ptr out(out_ptr_fg); + delete out_ptr_bg; // We don't show the background map... maybe should include a toggle to switch between fg and bg... // Don't show any map if there was a script runtime error const char* runtime_error = c4_log_handle_get_first_log_message(); From 56d48f5300dbe63f5433d96b4213eea36ddc678e Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 7 Jul 2015 22:12:38 -0400 Subject: [PATCH 12/97] Fix mape --- src/mape/cpp-handles/landscape-handle.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/mape/cpp-handles/landscape-handle.cpp b/src/mape/cpp-handles/landscape-handle.cpp index 9aae23f6f..99c725526 100644 --- a/src/mape/cpp-handles/landscape-handle.cpp +++ b/src/mape/cpp-handles/landscape-handle.cpp @@ -39,15 +39,16 @@ void C4Landscape::HandleTexMapUpdate() void C4Landscape::UpdatePixMaps() // Copied from C4Landscape.cpp { - int32_t i; - for (i = 0; i < 256; i++) Pix2Mat[i] = PixCol2Mat(i); - for (i = 0; i < 256; i++) Pix2Dens[i] = MatDensity(Pix2Mat[i]); - for (i = 0; i < 256; i++) Pix2Place[i] = MatValid(Pix2Mat[i]) ? ::MaterialMap.Map[Pix2Mat[i]].Placement : 0; - Pix2Place[0] = 0; - // clear bridge mat conversion buffers - for (int32_t i = 0; i<128; ++i) - { - delete [] BridgeMatConversion[i]; - BridgeMatConversion[i] = NULL; - } + int32_t i; + for (i = 0; i < C4M_MaxTexIndex; i++) Pix2Mat[i] = PixCol2Mat(i); + for (i = 0; i < C4M_MaxTexIndex; i++) Pix2Dens[i] = MatDensity(Pix2Mat[i]); + for (i = 0; i < C4M_MaxTexIndex; i++) Pix2Place[i] = MatValid(Pix2Mat[i]) ? ::MaterialMap.Map[Pix2Mat[i]].Placement : 0; + for (i = 0; i < C4M_MaxTexIndex; i++) Pix2Light[i] = MatValid(Pix2Mat[i]) && (::MaterialMap.Map[Pix2Mat[i]].Light>0); + Pix2Place[0] = 0; + // clear bridge mat conversion buffers + for (int32_t i = 0; i < C4M_MaxTexIndex; ++i) + { + delete [] BridgeMatConversion[i]; + BridgeMatConversion[i] = NULL; + } } From c43ca4ce9a4ee8ba6ef35cc5d6b7d591df7c0161 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 7 Jul 2015 22:23:24 -0400 Subject: [PATCH 13/97] Increase maximum number of material-texture combinations to 255 This is the maximum we can do. One value is reserved for diff / transparency, and we have 8bpp surfaces. --- src/config/C4Constants.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/C4Constants.h b/src/config/C4Constants.h index 2294f7a81..d11005e1e 100644 --- a/src/config/C4Constants.h +++ b/src/config/C4Constants.h @@ -49,7 +49,7 @@ const int const int C4M_MaxName = 15, C4M_MaxDefName = 2*C4M_MaxName+1, - C4M_MaxTexIndex = 127; // last texture map index is reserved for diff + C4M_MaxTexIndex = 255; // last texture map index is reserved for diff const int C4S_MaxPlayer = 4; From 1f6825fb4b87e890af03d76c747f6d6e7d8900a8 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Mon, 13 Jul 2015 20:15:28 -0400 Subject: [PATCH 14/97] Make solidmask not overwrite background material Also, remove Landscape.SetPix in favor of Landscape.SetPix2 --- src/landscape/C4Landscape.cpp | 25 +++---------------------- src/landscape/C4Landscape.h | 6 ------ src/landscape/C4SolidMask.cpp | 13 +++++++------ 3 files changed, 10 insertions(+), 34 deletions(-) diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index 89d2aaaac..d66ee1247 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -689,11 +689,6 @@ bool C4Landscape::ClearPix(int32_t tx, int32_t ty) return SetPix2(tx, ty, bkgPix, bkgPix); } -bool C4Landscape::SetPix(int32_t x, int32_t y, BYTE npix) -{ - return SetPix2(x, y, npix, DefaultBkgMat(npix)); -} - bool C4Landscape::SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix) { // check bounds @@ -720,11 +715,6 @@ bool C4Landscape::SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix) return _SetPix2(x, y, fgPix, bgPix); } -bool C4Landscape::_SetPix(int32_t x, int32_t y, BYTE npix) -{ - return _SetPix2(x, y, npix, DefaultBkgMat(npix)); -} - bool C4Landscape::_SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix) { if (Config.General.DebugRec) @@ -795,15 +785,6 @@ bool C4Landscape::_SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix) return true; } -bool C4Landscape::_SetPixIfMask(int32_t x, int32_t y, BYTE npix, BYTE nMask) -{ - // set 8bpp-surface only! - if (_GetPix(x, y) == nMask) - _SetPix(x, y, npix); - // success - return true; -} - bool C4Landscape::CheckInstability(int32_t tx, int32_t ty, int32_t recursion_count) { int32_t mat=GetMat(tx,ty); @@ -859,9 +840,9 @@ void C4Landscape::RaiseTerrain(int32_t tx, int32_t ty, int32_t wdt) for (cy=ty; (cy+1=ty) { SetPix(cx,cy,cpix); cy--; } + while (cy>=ty) { SetPix2(cx,cy,cpix,GetBackPix(cx,cy+1)); cy--; } } } } @@ -1795,7 +1776,7 @@ bool C4Landscape::ApplyDiff(C4Group &hGroup) if (pDiff->GetPix(x, y) != C4M_MaxTexIndex) if (Surface8->_GetPix(x,y) != (byPix=pDiff->_GetPix(x,y))) // material has changed here: readjust with new texture - SetPix(x,y, byPix); + Surface8->SetPix(x,y, byPix); if (pDiffBkg->GetPix(x, y) != C4M_MaxTexIndex) if (Surface8Bkg->_GetPix(x, y) != (byPix=pDiffBkg->_GetPix(x, y))) Surface8Bkg->_SetPix(x, y, byPix); diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index 44976e0bf..cb3c09b2b 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -109,11 +109,8 @@ public: bool MapToLandscape(); bool ApplyDiff(C4Group &hGroup); bool SetMode(int32_t iMode); - bool SetPix(int32_t x, int32_t y, BYTE npix); // set landscape pixel (bounds checked) bool SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix); // set landscape pixel (bounds checked) - bool _SetPix(int32_t x, int32_t y, BYTE npix); // set landsape pixel (bounds not checked) bool _SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix); // set landsape pixel (bounds not checked) - bool _SetPixIfMask(int32_t x, int32_t y, BYTE npix, BYTE nMask) ; // set landscape pixel, if it matches nMask color (no bound-checks) bool InsertMaterial(int32_t mat, int32_t *tx, int32_t *ty, int32_t vx = 0, int32_t vy = 0, bool query_only=false); // modifies tx/ty to actual insertion position bool InsertDeadMaterial(int32_t mat, int32_t tx, int32_t ty); bool FindMatPath(int32_t &fx, int32_t &fy, int32_t ydir, int32_t mdens, int32_t mslide) const; @@ -371,11 +368,8 @@ int32_t PixCol2Mat(BYTE pixc); #define GBackWdt ::Landscape.Width #define GBackHgt ::Landscape.Height #define GBackPix ::Landscape.GetPix -#define SBackPix ::Landscape.SetPix #define ClearBackPix ::Landscape.ClearPix #define _GBackPix ::Landscape._GetPix -#define _SBackPix ::Landscape._SetPix -#define _SBackPixIfMask ::Landscape._SetPixIfMask inline bool DensitySolid(int32_t dens) { diff --git a/src/landscape/C4SolidMask.cpp b/src/landscape/C4SolidMask.cpp index 1033c8889..453d54ad5 100644 --- a/src/landscape/C4SolidMask.cpp +++ b/src/landscape/C4SolidMask.cpp @@ -100,7 +100,7 @@ void C4SolidMask::Put(bool fCauseInstability, C4TargetRect *pClipRect, bool fRes pSolidMaskMatBuff[(ycnt+pClipRect->ty)*MatBuffPitch+xcnt+pClipRect->tx]=byPixel; } // and set mask - _SBackPix(iTx,iTy,MCVehic); + ::Landscape.SetPix2(iTx,iTy,MCVehic,::Landscape.TRANSPARENT); } else // no SolidMask: mark buffer as unused here @@ -166,7 +166,7 @@ void C4SolidMask::Put(bool fCauseInstability, C4TargetRect *pClipRect, bool fRes pSolidMaskMatBuff[i + xcnt] = byPixel; } // set mask pix - _SBackPix(iTx, iTy, MCVehic); + ::Landscape.SetPix2(iTx, iTy, MCVehic, ::Landscape.TRANSPARENT); } else if (!MaskPut) // mark pix as unused in buf @@ -260,7 +260,8 @@ void C4SolidMask::Remove(bool fBackupAttachment) // Non-SolidMask-pixels should not happen here, because all relevant landscape change routines should // temp remove SolidMasks before assert(_GBackPix(iTx,iTy) == MCVehic); - _SBackPixIfMask(iTx,iTy,*pPix,MCVehic); + if (::Landscape._GetPix(iTx, iTy) == MCVehic) + ::Landscape._SetPix2(iTx, iTy, *pPix, ::Landscape.TRANSPARENT); // Instability ::Landscape.CheckInstabilityRange(iTx,iTy); } @@ -343,7 +344,7 @@ void C4SolidMask::RemoveTemporary(C4Rect where) { // restore assert(GBackPix(x,y)==MCVehic); - _SBackPix(x, y, *pPix); + ::Landscape.SetPix2(x, y, *pPix, ::Landscape.TRANSPARENT); } } } @@ -364,7 +365,7 @@ void C4SolidMask::PutTemporary(C4Rect where) { // put assert(GBackPix(x,y)==*pPix); - _SBackPix(x,y,MCVehic); + ::Landscape.SetPix2(x, y, MCVehic, ::Landscape.TRANSPARENT); } } } @@ -386,7 +387,7 @@ void C4SolidMask::Repair(C4Rect where) // record changed landscape in MatBuff *pPix = GBackPix(x,y); // put - _SBackPix(x,y,MCVehic); + ::Landscape.SetPix2(x, y, MCVehic, ::Landscape.TRANSPARENT); } } } From 51986b68ef7266eb1a59070fcb11fe67844af431 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Mon, 13 Jul 2015 21:02:38 -0400 Subject: [PATCH 15/97] Allow script functions to access background landscape Add GetBackMaterial() and GetBackTexture(), and allow DrawMaterialQuad to specify a background mat-tex combination. --- docs/sdk/script/fn/DrawMaterialQuad.xml | 9 ++--- docs/sdk/script/fn/GetBackMaterial.xml | 43 +++++++++++++++++++++++ docs/sdk/script/fn/GetBackTexture.xml | 34 +++++++++++++++++++ docs/sdk/script/fn/GetMaterial.xml | 1 + docs/sdk/script/fn/GetTexture.xml | 1 + src/gamescript/C4GameScript.cpp | 45 +++++++++++++++++++++++-- src/landscape/C4Landscape.cpp | 15 ++++++--- src/landscape/C4Landscape.h | 4 +-- 8 files changed, 140 insertions(+), 12 deletions(-) create mode 100644 docs/sdk/script/fn/GetBackMaterial.xml create mode 100644 docs/sdk/script/fn/GetBackTexture.xml diff --git a/docs/sdk/script/fn/DrawMaterialQuad.xml b/docs/sdk/script/fn/DrawMaterialQuad.xml index 91b247ee6..bb17d9941 100644 --- a/docs/sdk/script/fn/DrawMaterialQuad.xml +++ b/docs/sdk/script/fn/DrawMaterialQuad.xml @@ -56,14 +56,14 @@ Y coordinate of the fourth corner. Always global. - bool - sub - If true, the material will be drawn as 'underground'. + any + szBkgMat + One of the symbolic constants DMQ_Sky, DMQ_Sub or DMQ_Bridge, or a material texture combination. Specifies the background material of the chunk drawn. If DMQ_Sky, the material will be drawn with sky background. If DMQ_Sub, the material will be drawn with the default underground material as background. If DMQ_Bridge, the material will be drawn only over layers of equal or lower density, and the background material remains unchanged. If this is a string, the specified material-texture combination is used as background material. The background material is the material that a pixel is replaced with when it is digged away or blasted free. Draws a four-cornered polygon of the specified material and texture into the landscape. - The corners of the polygon should be specified in clockwise order and polygon boundaries should not intersect. For more complex or concave shapes you make multiple calls to this function. + The corners of the polygon should be specified in clockwise order and polygon boundaries should not intersect. For more complex or concave shapes you can make multiple calls to this function. DrawMaterialQuad("Gold-gold", 0,0, LandscapeWidth()-1,0, LandscapeWidth()-1,LandscapeHeight()-1, 0,LandscapeHeight()-1); @@ -75,4 +75,5 @@ Sven22002-05 + Clonk-Karl2015-07 diff --git a/docs/sdk/script/fn/GetBackMaterial.xml b/docs/sdk/script/fn/GetBackMaterial.xml new file mode 100644 index 000000000..294e35bd9 --- /dev/null +++ b/docs/sdk/script/fn/GetBackMaterial.xml @@ -0,0 +1,43 @@ + + + + + + GetBackMaterial + Landscape + Material + 7.0 OC + + int + + + int + x + X coordinate at which to check the background material. Offset in local calls. + + + int + y + Y coordinate at which to check the background material. Offset in local calls. + + + + Determines the background material type at the specified position in the landscape. Returns a material index which can be used for comparison e.g. with Material. For sky background the function returns -1. The background material is the material that a pixel is replaced with when it is digged away or blasted free. + This functions only processes static materials - moving material pixels such as rain or snow are not evaluated. + + + if(GetMaterial(0, 0) == Material("Water") && GetBackMaterial(0, 0) == Material("Water")) Message("I am in a neverending stream of water!"); + Part of a clonk script: if the clonk is swimming in water that is replaced with water when it flows away, a message is displayed. + + + + GetMaterial + Material + GBackSolid + GBackLiquid + InsertMaterial + + + Clonk-Karl2015-07 + diff --git a/docs/sdk/script/fn/GetBackTexture.xml b/docs/sdk/script/fn/GetBackTexture.xml new file mode 100644 index 000000000..621f569d7 --- /dev/null +++ b/docs/sdk/script/fn/GetBackTexture.xml @@ -0,0 +1,34 @@ + + + + + + GetBackTexture + Landscape + Material + 7.0 OC + + string + + + int + x + X coordinate at which to check the background texture. Offset in local calls. + + + int + y + Y coordinate at which to check the background texture. Offset in local calls. + + + + Returns the name of the texture used for the background material at the given position. The background material is the material that a pixel is replaced with when it is digged away or blasted free. + See GetTexture. + + GetTexture + GetAverageTextureColor + + + 2015-07 + diff --git a/docs/sdk/script/fn/GetMaterial.xml b/docs/sdk/script/fn/GetMaterial.xml index 788840d07..bcd33bf05 100644 --- a/docs/sdk/script/fn/GetMaterial.xml +++ b/docs/sdk/script/fn/GetMaterial.xml @@ -33,6 +33,7 @@ Material + GetBackMaterial GBackSolid GBackLiquid InsertMaterial diff --git a/docs/sdk/script/fn/GetTexture.xml b/docs/sdk/script/fn/GetTexture.xml index fc28af307..46dd930e1 100644 --- a/docs/sdk/script/fn/GetTexture.xml +++ b/docs/sdk/script/fn/GetTexture.xml @@ -37,6 +37,7 @@ + GetBackTexture GetAverageTextureColor diff --git a/src/gamescript/C4GameScript.cpp b/src/gamescript/C4GameScript.cpp index 84e1eda64..6b7c4fa9f 100644 --- a/src/gamescript/C4GameScript.cpp +++ b/src/gamescript/C4GameScript.cpp @@ -387,6 +387,12 @@ static long FnGetMaterial(C4PropList * _this, long x, long y) return GBackMat(x,y); } +static long FnGetBackMaterial(C4PropList * _this, long x, long y) +{ + if (Object(_this)) { x+=Object(_this)->GetX(); y+=Object(_this)->GetY(); } + return ::Landscape.GetBackMat(x, y); +} + static C4String *FnGetTexture(C4PropList * _this, long x, long y) { if (Object(_this)) { x+=Object(_this)->GetX(); y+=Object(_this)->GetY(); } @@ -401,6 +407,20 @@ static C4String *FnGetTexture(C4PropList * _this, long x, long y) return String(pTex->GetTextureName()); } +static C4String *FnGetBackTexture(C4PropList * _this, long x, long y) +{ + if (Object(_this)) { x+=Object(_this)->GetX(); y+=Object(_this)->GetY(); } + + // Get texture + int32_t iTex = PixCol2Tex(::Landscape.GetBackPix(x, y)); + if (!iTex) return NULL; + // Get material-texture mapping + const C4TexMapEntry *pTex = ::TextureMap.GetEntry(iTex); + if (!pTex) return NULL; + // Return tex name + return String(pTex->GetTextureName()); +} + // Note: Might be async in case of 16<->32 bit textures! static Nillable FnGetAverageTextureColor(C4PropList * _this, C4String* Texture) { @@ -1968,10 +1988,29 @@ static const int32_t DMQ_Sky = 0, // draw w/ sky IFT DMQ_Sub = 1, // draw w/ tunnel IFT DMQ_Bridge = 2; // draw only over materials you can bridge over -static bool FnDrawMaterialQuad(C4PropList * _this, C4String *szMaterial, long iX1, long iY1, long iX2, long iY2, long iX3, long iY3, long iX4, long iY4, int draw_mode) +static bool FnDrawMaterialQuad(C4PropList * _this, C4String *szMaterial, long iX1, long iY1, long iX2, long iY2, long iX3, long iY3, long iX4, long iY4, const C4Value& draw_mode) { const char *szMat = FnStringPar(szMaterial); - return !! ::Landscape.DrawQuad(iX1, iY1, iX2, iY2, iX3, iY3, iX4, iY4, szMat, draw_mode == DMQ_Sub, draw_mode==DMQ_Bridge); + + const char *szBackMat = NULL; + bool fBridge = false; + if (draw_mode.GetType() == C4V_Int) + { + // Default behaviour: Default background material + const int draw_mode_value = draw_mode.getInt(); + switch(draw_mode_value) + { + case DMQ_Sky: break; + case DMQ_Sub: szBackMat = "Tunnel"; break; // TODO: Go via DefaultBkgMat + case DMQ_Bridge: fBridge = true; break; + } + } + else if (draw_mode.GetType() == C4V_String) + { + szBackMat = FnStringPar(draw_mode.getStr()); + } + + return !! ::Landscape.DrawQuad(iX1, iY1, iX2, iY2, iX3, iY3, iX4, iY4, szMat, szBackMat, fBridge); } static bool FnSetFilmView(C4PropList * _this, long iToPlr) @@ -2640,7 +2679,9 @@ void InitGameFunctionMap(C4AulScriptEngine *pEngine) AddFunc(pEngine, "SetCursor", FnSetCursor); AddFunc(pEngine, "SetViewCursor", FnSetViewCursor); AddFunc(pEngine, "GetMaterial", FnGetMaterial); + AddFunc(pEngine, "GetBackMaterial", FnGetBackMaterial); AddFunc(pEngine, "GetTexture", FnGetTexture); + AddFunc(pEngine, "GetBackTexture", FnGetBackTexture); AddFunc(pEngine, "GetAverageTextureColor", FnGetAverageTextureColor); AddFunc(pEngine, "GetMaterialCount", FnGetMaterialCount); AddFunc(pEngine, "GBackSolid", FnGBackSolid); diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index d66ee1247..6e9c67c7c 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -3483,7 +3483,7 @@ C4Rect C4Landscape::getBoundingBox(int *vtcs, int length) const return BoundingBox; } -bool C4Landscape::DrawPolygon(int *vtcs, int length, const char *szMaterial, bool fIFT, bool fDrawBridge) +bool C4Landscape::DrawPolygon(int *vtcs, int length, const char *szMaterial, const char* szBackMaterial, bool fDrawBridge) { if(length < 6) return false; if(length % 2 == 1) return false; @@ -3491,7 +3491,14 @@ bool C4Landscape::DrawPolygon(int *vtcs, int length, const char *szMaterial, boo int32_t iMatTex = ::TextureMap.GetIndexMatTex(szMaterial); if (!iMatTex) return false; uint8_t mcol = MatTex2PixCol(iMatTex); - uint8_t mcolBkg = fIFT ? DefaultBkgMat(mcol) : 0; + // get background texture + uint8_t mcolBkg = 0; + if (szBackMaterial != NULL) + { + const int32_t iBackMatTex = ::TextureMap.GetIndexMatTex(szBackMaterial); + if (!iBackMatTex) return false; + mcolBkg = MatTex2PixCol(iBackMatTex); + } // do bridging? uint8_t *conversion_map = NULL; if (fDrawBridge) @@ -3536,7 +3543,7 @@ uint8_t *C4Landscape::GetBridgeMatConversion(int32_t for_material_col) const return conv_map; } -bool C4Landscape::DrawQuad(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iX3, int32_t iY3, int32_t iX4, int32_t iY4, const char *szMaterial, bool fIFT, bool fDrawBridge) +bool C4Landscape::DrawQuad(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iX3, int32_t iY3, int32_t iX4, int32_t iY4, const char *szMaterial, const char *szBackMaterial, bool fDrawBridge) { // set vertices int32_t vtcs[8]; @@ -3544,7 +3551,7 @@ bool C4Landscape::DrawQuad(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, i vtcs[2] = iX2; vtcs[3] = iY2; vtcs[4] = iX3; vtcs[5] = iY3; vtcs[6] = iX4; vtcs[7] = iY4; - return DrawPolygon(vtcs, 8, szMaterial, fIFT, fDrawBridge); + return DrawPolygon(vtcs, 8, szMaterial, szBackMaterial, fDrawBridge); } BYTE C4Landscape::GetMapIndex(int32_t iX, int32_t iY) const diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index cb3c09b2b..13030abd1 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -121,8 +121,8 @@ public: bool DrawLine(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iGrade, const char *szMaterial, const char *szTexture, bool fIFT); bool DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iGrade, const char *szMaterial, const char *szTexture, bool fIFT); bool DrawChunks(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, int32_t icntx, int32_t icnty, const char *szMaterial, const char *szTexture, bool bIFT); - bool DrawQuad(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iX3, int32_t iY3, int32_t iX4, int32_t iY4, const char *szMaterial, bool bIFT, bool fDrawBridge); - bool DrawPolygon(int *vtcs, int length, const char *szMaterial, bool bIFT, bool fDrawBridge); + bool DrawQuad(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iX3, int32_t iY3, int32_t iX4, int32_t iY4, const char *szMaterial, const char *szBackMaterial, bool fDrawBridge); + bool DrawPolygon(int *vtcs, int length, const char *szMaterial, const char *szBackMaterial, bool fDrawBridge); CStdPalette *GetPal() const { return Surface8 ? Surface8->pPal : NULL; } inline BYTE _GetPix(int32_t x, int32_t y) const // get landscape pixel (bounds not checked) { From 0d806fbcbf3403d93d50b4d854230212dbecdd85 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Mon, 13 Jul 2015 21:52:43 -0400 Subject: [PATCH 16/97] Add syntax for drawing background materials with Map.c --- docs/sdk/script/MapScript.xml | 7 ++++- src/landscape/C4MapScript.cpp | 56 +++++++++++++++++++++++++++-------- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/docs/sdk/script/MapScript.xml b/docs/sdk/script/MapScript.xml index 6f227a9f9..ca4d654d6 100644 --- a/docs/sdk/script/MapScript.xml +++ b/docs/sdk/script/MapScript.xml @@ -390,13 +390,18 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer}); Sky Sky - Draws a sky material. Within the map generator, explicit sky is drawn as IFT (0x80), which is converted to index zero on map drawing. That way, sky can be blitted to other layers without being transparent. + Draws a sky material. Within the map generator, explicit sky is drawn as index 0xff, which is converted to index zero on map drawing. That way, sky can be blitted to other layers without being transparent. Transparent Transparent Draws with index 0. + + FgMatTex:BgMatTex + Water:Tunnel-brickback + Draws with a specified background material. In the example, draws water which, when drained, exposes bricks instead of tunnel behind it. FgMatTex and BgMatTex can be any of the other specifications in this table, except the ones prefixed with ^. However, the specification FgMatTex:Sky is equivalent to ^FgMatTex. + Material-texture masks (string mask_spec) diff --git a/src/landscape/C4MapScript.cpp b/src/landscape/C4MapScript.cpp index 19f44b9fd..306e1cab3 100644 --- a/src/landscape/C4MapScript.cpp +++ b/src/landscape/C4MapScript.cpp @@ -32,25 +32,55 @@ static const char *DrawFn_Background_Name = "Background"; static const char *DrawFn_Liquid_Name = "Liquid"; static const char *DrawFn_Solid_Name = "Solid"; +bool TexColSingle(const char *mattex, uint8_t& col) +{ + if (SEqual(mattex, DrawFn_Transparent_Name)) { col = 0; return true; } + if (SEqual(mattex, DrawFn_Sky_Name)) { col = C4M_MaxTexIndex; return true; } + + col = ::MapScript.pTexMap->GetIndexMatTex(mattex); + if (col == 0) return false; + + return true; +} + bool FnParTexCol(C4String *mattex, uint8_t& fg, uint8_t& bg) { // Return index of material-texture definition for a single color - // Defaults to underground (tunnel background) color. Prefix material with ^ to get overground (sky background) color. + // Defaults to underground (tunnel background) color. Prefix material with ^ to get overground (sky background) color, + // or specify as mattex1:mattex2 for foreground-background pair. if (!mattex || !mattex->GetCStr()) return false; - if (mattex->GetData() == DrawFn_Transparent_Name) { fg = bg = 0; return true; } - if (mattex->GetData() == DrawFn_Sky_Name) {fg = bg = C4M_MaxTexIndex; return true; } - const char *cmattex = mattex->GetCStr(); - bool ift = true; - if (*cmattex == '^') { ift=false; ++cmattex; } - uint8_t col = ::MapScript.pTexMap->GetIndexMatTex(cmattex); - if (col == 0) return false; - fg = col; - if (ift) - bg = ::MapScript.pTexMap->DefaultBkgMatTex(fg); + int sep_pos = SCharPos(':', mattex->GetCStr()); + if (sep_pos == -1) + { + const char *cmattex = mattex->GetCStr(); + bool ift = true; + if (*cmattex == '^') { ift=false; ++cmattex; } + + uint8_t col; + if (!TexColSingle(cmattex, col)) return false; + + fg = col; + if (ift) + bg = ::MapScript.pTexMap->DefaultBkgMatTex(fg); + else + bg = C4M_MaxTexIndex; // sky + + return true; + } else - bg = C4M_MaxTexIndex; // sky - return true; + { + const char *cmattex = mattex->GetCStr(); + std::string fg_mattex(cmattex, cmattex + sep_pos); + std::string bg_mattex(cmattex + sep_pos + 1); + + uint8_t fg_col, bg_col; + if (!TexColSingle(fg_mattex.c_str(), fg_col)) return false; + if (!TexColSingle(bg_mattex.c_str(), bg_col)) return false; + + fg = fg_col; bg = bg_col; + return true; + } } void C4MapScriptMatTexMask::UnmaskSpec(C4String *spec) From 08ae643c2c2bfaa800532853ad96321c8d1d26e0 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 14 Jul 2015 20:44:11 -0400 Subject: [PATCH 17/97] Add a draw mode which shows the background 8-bit surface --- src/game/C4Game.cpp | 2 +- src/game/C4GraphicsSystem.cpp | 17 +++++++++++------ src/game/C4GraphicsSystem.h | 4 ++-- src/landscape/C4Landscape.cpp | 4 +++- src/object/C4Object.cpp | 4 ++-- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index dcc8a1178..dc1664339 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -2891,7 +2891,7 @@ bool C4Game::InitKeyboard() KeyboardInput.RegisterKey(new C4CustomKey(C4KeyCodeEx(K_F5, KEYS_Control), "DbgModeToggle", KEYSCOPE_Generic, new C4KeyCB (*this, &C4Game::ToggleDebugMode))); KeyboardInput.RegisterKey(new C4CustomKey(C4KeyCodeEx(K_F6, KEYS_Control), "DbgShowVtxToggle", KEYSCOPE_Generic, new C4KeyCB (GraphicsSystem, &C4GraphicsSystem::ToggleShowVertices))); KeyboardInput.RegisterKey(new C4CustomKey(C4KeyCodeEx(K_F7, KEYS_Control), "DbgShowActionToggle", KEYSCOPE_Generic, new C4KeyCB (GraphicsSystem, &C4GraphicsSystem::ToggleShowAction))); - KeyboardInput.RegisterKey(new C4CustomKey(C4KeyCodeEx(K_F8, KEYS_Control), "DbgShowSolidMaskToggle", KEYSCOPE_Generic, new C4KeyCB (GraphicsSystem, &C4GraphicsSystem::ToggleShowSolidMask))); + KeyboardInput.RegisterKey(new C4CustomKey(C4KeyCodeEx(K_F8, KEYS_Control), "DbgShow8BitSurface", KEYSCOPE_Generic, new C4KeyCB (GraphicsSystem, &C4GraphicsSystem::ToggleShow8BitSurface))); // video recording - improve... KeyboardInput.RegisterKey(new C4CustomKey(C4KeyCodeEx(K_ADD, KEYS_Alt), "VideoEnlarge", KEYSCOPE_Generic, new C4KeyCB (GraphicsSystem.Video, &C4Video::Enlarge))); diff --git a/src/game/C4GraphicsSystem.cpp b/src/game/C4GraphicsSystem.cpp index e17514b62..5385f12a3 100644 --- a/src/game/C4GraphicsSystem.cpp +++ b/src/game/C4GraphicsSystem.cpp @@ -171,7 +171,7 @@ void C4GraphicsSystem::Default() ShowEntrance=false; ShowPathfinder=false; ShowNetstatus=false; - ShowSolidMask=false; + Show8BitSurface=0; ShowLights=false; ShowHelp=false; FlashMessageText[0]=0; @@ -310,7 +310,7 @@ void C4GraphicsSystem::DeactivateDebugOutput() ShowEntrance=false; ShowPathfinder=false; // allow pathfinder! - why this?? ShowLights=false; - ShowSolidMask=false; + Show8BitSurface=0; ShowNetstatus=false; } @@ -405,7 +405,7 @@ void C4GraphicsSystem::DrawHelp() strText.AppendFormat("%s - %s\n", GetKeyboardInputName("DbgModeToggle").getData(), LoadResStr("IDS_CTL_DEBUGMODE")); strText.AppendFormat("%s - %s\n", GetKeyboardInputName("DbgShowVtxToggle").getData(), "Entrance+Vertices"); strText.AppendFormat("%s - %s\n", GetKeyboardInputName("DbgShowActionToggle").getData(), "Actions/Commands/Pathfinder"); - strText.AppendFormat("%s - %s\n", GetKeyboardInputName("DbgShowSolidMaskToggle").getData(), "SolidMasks"); + strText.AppendFormat("%s - %s\n", GetKeyboardInputName("DbgShow8BitSurface").getData(), "8-bit surfaces"); pDraw->TextOut(strText.getData(), ::GraphicsResource.FontRegular, 1.0, FullScreen.pSurface, iX + iWdt/2 + 64, iY + 64, C4Draw::DEFAULT_MESSAGE_COLOR, ALeft); } @@ -441,11 +441,16 @@ bool C4GraphicsSystem::ToggleShowAction() return true; } -bool C4GraphicsSystem::ToggleShowSolidMask() +bool C4GraphicsSystem::ToggleShow8BitSurface() { if (!Game.DebugMode && !Console.Active) { FlashMessage(LoadResStr("IDS_MSG_NODEBUGMODE")); return false; } - Toggle(ShowSolidMask); - FlashMessageOnOff("SolidMasks", !!ShowSolidMask); + Show8BitSurface = (Show8BitSurface + 1) % 3; + if (Show8BitSurface == 0) + FlashMessage("Default view"); + else if (Show8BitSurface == 1) + FlashMessage("Foreground 8-bit landscape"); + else if (Show8BitSurface == 2) + FlashMessage("Background 8-bit landscape"); return true; } diff --git a/src/game/C4GraphicsSystem.h b/src/game/C4GraphicsSystem.h index b58076de1..d8ae1b48c 100644 --- a/src/game/C4GraphicsSystem.h +++ b/src/game/C4GraphicsSystem.h @@ -39,7 +39,7 @@ public: bool ShowEntrance; bool ShowPathfinder; bool ShowNetstatus; - bool ShowSolidMask; + int Show8BitSurface; // 0 normal, 1 foreground mats, 2 background mats bool ShowLights; C4Video Video; C4LoaderScreen *pLoaderScreen; @@ -69,7 +69,7 @@ protected: int32_t SeekLoaderScreens(C4Group &rFromGrp, const char *szWildcard, int32_t iLoaderCount, char *szDstName, C4Group **ppDestGrp); public: - bool ToggleShowSolidMask(); + bool ToggleShow8BitSurface(); bool ToggleShowNetStatus(); bool ToggleShowVertices(); bool ToggleShowAction(); diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index 6e9c67c7c..f1e8f92c9 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -309,8 +309,10 @@ void C4Landscape::Draw(C4TargetFacet &cgo, C4FoWRegion *pLight) { if (Modulation) pDraw->ActivateBlitModulation(Modulation); // blit landscape - if (::GraphicsSystem.ShowSolidMask) + if (::GraphicsSystem.Show8BitSurface == 1) pDraw->Blit8Fast(Surface8, cgo.TargetX, cgo.TargetY, cgo.Surface, cgo.X,cgo.Y,cgo.Wdt,cgo.Hgt); + else if (::GraphicsSystem.Show8BitSurface == 2) + pDraw->Blit8Fast(Surface8Bkg, cgo.TargetX, cgo.TargetY, cgo.Surface, cgo.X,cgo.Y,cgo.Wdt,cgo.Hgt); else if(pLandscapeRender) { DoRelights(); diff --git a/src/object/C4Object.cpp b/src/object/C4Object.cpp index c10fed847..2770c1d4d 100644 --- a/src/object/C4Object.cpp +++ b/src/object/C4Object.cpp @@ -2017,7 +2017,7 @@ void C4Object::Draw(C4TargetFacet &cgo, int32_t iByPlayer, DrawMode eDrawMode, f // Debug Display /////////////////////////////////////////////////////////////////////////////// // Don't draw (show solidmask) - if (::GraphicsSystem.ShowSolidMask) + if (::GraphicsSystem.Show8BitSurface != 0) if (SolidMask.Wdt) { // DrawSolidMask(cgo); - no need to draw it, because the 8bit-surface will be shown @@ -2147,7 +2147,7 @@ void C4Object::DrawTopFace(C4TargetFacet &cgo, int32_t iByPlayer, DrawMode eDraw || !Inside(offY, cgo.Y - Shape.Hgt, cgo.Y + cgo.Hgt)) return; // Don't draw (show solidmask) - if (::GraphicsSystem.ShowSolidMask && SolidMask.Wdt) return; + if (::GraphicsSystem.Show8BitSurface != 0 && SolidMask.Wdt) return; // Contained if (Contained) if (eDrawMode!=ODM_Overlay) return; // Construction sign From 3ec53c2c40d6a8f6f2ea6d1ceacafe3e746787f5 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 14 Jul 2015 22:37:12 -0400 Subject: [PATCH 18/97] Update GTK+ editor so that one can draw background materials --- src/control/C4Control.cpp | 18 +-- src/control/C4Control.h | 8 +- src/editor/C4Console.cpp | 5 +- src/editor/C4ConsoleCocoa.mm | 20 ++-- src/editor/C4ConsoleGTK.cpp | 200 ++++++++++++++++++-------------- src/editor/C4ConsoleGUI.h | 4 +- src/editor/C4ConsoleGUICommon.h | 3 + src/editor/C4ConsoleWin32.cpp | 20 ++-- src/editor/C4EditCursor.cpp | 31 ++++- src/editor/C4ToolsDlg.cpp | 87 +++++++++++++- src/editor/C4ToolsDlg.h | 8 ++ src/landscape/C4Landscape.cpp | 29 ++--- src/landscape/C4Landscape.h | 6 +- 13 files changed, 295 insertions(+), 144 deletions(-) diff --git a/src/control/C4Control.cpp b/src/control/C4Control.cpp index d04e64a3e..7377ed30d 100644 --- a/src/control/C4Control.cpp +++ b/src/control/C4Control.cpp @@ -1371,9 +1371,10 @@ void C4ControlEMMoveObject::CompileFunc(StdCompiler *pComp) C4ControlEMDrawTool::C4ControlEMDrawTool(C4ControlEMDrawAction eAction, int32_t iMode, int32_t iX, int32_t iY, int32_t iX2, int32_t iY2, int32_t iGrade, - bool fIFT, const char *szMaterial, const char *szTexture) + const char *szMaterial, const char *szTexture, const char *szBackMaterial, const char *szBackTexture) : eAction(eAction), iMode(iMode), iX(iX), iY(iY), iX2(iX2), iY2(iY2), iGrade(iGrade), - fIFT(fIFT), Material(szMaterial, true), Texture(szTexture, true) + Material(szMaterial, true), Texture(szTexture, true), + BackMaterial(szBackMaterial, true), BackTexture(szBackTexture, true) { } @@ -1392,21 +1393,23 @@ void C4ControlEMDrawTool::Execute() const // assert validity of parameters if (!Material.getSize()) return; const char *szMaterial = Material.getData(), - *szTexture = Texture.getData(); + *szTexture = Texture.getData(); + const char *szBackMaterial = BackMaterial.getData(), + *szBackTexture = BackTexture.getData(); // perform action switch (eAction) { case EMDT_Brush: // brush tool if (!Texture.getSize()) break; - ::Landscape.DrawBrush(iX, iY, iGrade, szMaterial, szTexture, fIFT); + ::Landscape.DrawBrush(iX, iY, iGrade, szMaterial, szTexture, szBackMaterial, szBackTexture); break; case EMDT_Line: // line tool if (!Texture.getSize()) break; - ::Landscape.DrawLine(iX,iY,iX2,iY2, iGrade, szMaterial, szTexture, fIFT); + ::Landscape.DrawLine(iX,iY,iX2,iY2, iGrade, szMaterial, szTexture, szBackMaterial, szBackTexture); break; case EMDT_Rect: // rect tool if (!Texture.getSize()) break; - ::Landscape.DrawBox(iX,iY,iX2,iY2, iGrade, szMaterial, szTexture, fIFT); + ::Landscape.DrawBox(iX,iY,iX2,iY2, iGrade, szMaterial, szTexture, szBackMaterial, szBackTexture); break; case EMDT_Fill: // fill tool { @@ -1435,9 +1438,10 @@ void C4ControlEMDrawTool::CompileFunc(StdCompiler *pComp) pComp->Value(mkNamingAdapt(iX2, "X2", 0)); pComp->Value(mkNamingAdapt(iY2, "Y2", 0)); pComp->Value(mkNamingAdapt(mkIntPackAdapt(iGrade), "Grade", 0)); - pComp->Value(mkNamingAdapt(fIFT, "IFT", false)); pComp->Value(mkNamingAdapt(Material, "Material", "")); pComp->Value(mkNamingAdapt(Texture, "Texture", "")); + pComp->Value(mkNamingAdapt(BackMaterial, "BackMaterial", "")); + pComp->Value(mkNamingAdapt(BackTexture, "BackTexture", "")); C4ControlPacket::CompileFunc(pComp); } diff --git a/src/control/C4Control.h b/src/control/C4Control.h index b7809df61..ce200c51b 100644 --- a/src/control/C4Control.h +++ b/src/control/C4Control.h @@ -487,17 +487,19 @@ enum C4ControlEMDrawAction class C4ControlEMDrawTool : public C4ControlPacket // sync { public: - C4ControlEMDrawTool() : eAction(EMDT_SetMode), iX(0), iY(0), iX2(0), iY2(0), iGrade(0), fIFT(false) { } + C4ControlEMDrawTool() : eAction(EMDT_SetMode), iX(0), iY(0), iX2(0), iY2(0), iGrade(0) { } C4ControlEMDrawTool(C4ControlEMDrawAction eAction, int32_t iMode, int32_t iX=-1, int32_t iY=-1, int32_t iX2=-1, int32_t iY2=-1, int32_t iGrade=-1, - bool fIFT=true, const char *szMaterial=NULL, const char *szTexture=NULL); + const char *szMaterial=NULL, const char *szTexture=NULL, + const char *szBackMaterial=NULL, const char *szBackTexture=NULL); protected: C4ControlEMDrawAction eAction; // action to be performed int32_t iMode; // new mode, or mode action was performed in (action will fail if changed) int32_t iX,iY,iX2,iY2,iGrade; // drawing parameters - bool fIFT; // sky/tunnel-background StdStrBuf Material; // used material StdStrBuf Texture; // used texture + StdStrBuf BackMaterial; // used background material + StdStrBuf BackTexture; // used background texture public: DECLARE_C4CONTROL_VIRTUALS }; diff --git a/src/editor/C4Console.cpp b/src/editor/C4Console.cpp index 48d475493..480c9d724 100644 --- a/src/editor/C4Console.cpp +++ b/src/editor/C4Console.cpp @@ -567,9 +567,10 @@ void C4ConsoleGUI::SetInputFunctions(std::list&) {} void C4ConsoleGUI::ShowAboutWithCopyright(StdStrBuf&) {} void C4ConsoleGUI::ToolsDlgInitMaterialCtrls(C4ToolsDlg*) {} bool C4ConsoleGUI::ToolsDlgOpen(C4ToolsDlg*) {return 0;} +void C4ConsoleGUI::ToolsDlgSelectMaterial(C4ToolsDlg*, char const*) {} void C4ConsoleGUI::ToolsDlgSelectTexture(C4ToolsDlg*, char const*) {} -void C4ConsoleGUI::ToolsDlgSetMaterial(C4ToolsDlg*, char const*) {} -void C4ConsoleGUI::ToolsDlgSetTexture(C4ToolsDlg*, char const*) {} +void C4ConsoleGUI::ToolsDlgSelectBackMaterial(C4ToolsDlg*, char const*) {} +void C4ConsoleGUI::ToolsDlgSelectBackTexture(C4ToolsDlg*, char const*) {} bool C4ConsoleGUI::UpdateModeCtrls(int) {return 0;} void C4ToolsDlg::EnableControls() {} void C4ToolsDlg::InitGradeCtrl() {} diff --git a/src/editor/C4ConsoleCocoa.mm b/src/editor/C4ConsoleCocoa.mm index 99f40bbeb..93ab0554d 100644 --- a/src/editor/C4ConsoleCocoa.mm +++ b/src/editor/C4ConsoleCocoa.mm @@ -249,11 +249,6 @@ void C4ToolsDlg::UpdateTextures() [texturesPopup selectItemWithTitle:[NSString stringWithUTF8String:Texture]]; } -void C4ConsoleGUI::ToolsDlgSetTexture(class C4ToolsDlg *dlg, const char *texture) -{ - [ctrler(this).texturesPopup selectItemWithTitle:[NSString stringWithUTF8String:texture]]; -} - void C4ToolsDlg::NeedPreviewUpdate() { CGImageRef image = state->CreatePreviewImage(); @@ -342,11 +337,6 @@ CGImageRef C4ToolsDlg::State::CreatePreviewImage() return image; } -void C4ConsoleGUI::ToolsDlgSetMaterial(class C4ToolsDlg *dlg, const char *material) -{ - [ctrler(this).texturesPopup selectItemWithTitle:[NSString stringWithUTF8String:material]]; -} - void C4ToolsDlg::InitGradeCtrl() { } @@ -372,6 +362,16 @@ void C4ConsoleGUI::ToolsDlgSelectMaterial(C4ToolsDlg *dlg, const char *material) [ctrler(this).materialsPopup selectItemWithTitle:[NSString stringWithUTF8String:material]]; } +void C4ConsoleGUI::ToolsDlgSelectBackTexture(C4ToolsDlg *dlg, const char *texture) +{ + // TODO +} + +void C4ConsoleGUI::ToolsDlgSelectBackMaterial(C4ToolsDlg *dlg, const char *material) +{ + // TODO +} + void C4ToolsDlg::UpdateIFTControls() { } diff --git a/src/editor/C4ConsoleGTK.cpp b/src/editor/C4ConsoleGTK.cpp index 7fd2cb271..424105a25 100644 --- a/src/editor/C4ConsoleGTK.cpp +++ b/src/editor/C4ConsoleGTK.cpp @@ -222,11 +222,10 @@ public: GtkWidget* preview; GtkWidget* scale; - GtkWidget* ift; - GtkWidget* no_ift; - - GtkWidget* materials; - GtkWidget* textures; + GtkWidget* fg_materials; + GtkWidget* fg_textures; + GtkWidget* bg_materials; + GtkWidget* bg_textures; gulong handlerBrush; gulong handlerLine; @@ -241,8 +240,10 @@ public: gulong handlerIft; gulong handlerNoIft; - gulong handlerMaterials; - gulong handlerTextures; + gulong handlerFgMaterials; + gulong handlerFgTextures; + gulong handlerBgMaterials; + gulong handlerBgTextures; gulong handlerScale; gulong handlerHide; @@ -260,10 +261,12 @@ public: static void OnButtonNoIft(GtkWidget* widget, gpointer data); static void OnComboMaterial(GtkWidget* widget, gpointer data); static void OnComboTexture(GtkWidget* widget, gpointer data); + static void OnComboBgMaterial(GtkWidget* widget, gpointer data); + static void OnComboBgTexture(GtkWidget* widget, gpointer data); static void OnGrade(GtkWidget* widget, gpointer data); static void OnWindowHide(GtkWidget* widget, gpointer data); - State(C4ToolsDlg* dlg): Super(dlg), hbox(NULL) {} + State(C4ToolsDlg* dlg): Super(dlg), hbox(NULL) { dlg->ModeBack = true; } bool Open(); void UpdateToolCtrls(); void InitMaterialCtrls(); @@ -337,7 +340,9 @@ void C4ConsoleGUI::State::InitGUI() lblCursor = gtk_label_new(""); gtk_misc_set_padding(GTK_MISC(lblCursor), 3, 0); + gtk_label_set_ellipsize(GTK_LABEL(lblCursor), PANGO_ELLIPSIZE_END); GtkToolItem * itmCursor = gtk_tool_item_new(); + gtk_tool_item_set_expand(itmCursor, TRUE); gtk_container_add(GTK_CONTAINER(itmCursor), lblCursor); gtk_toolbar_insert(GTK_TOOLBAR(top_hbox), itmCursor, -1); @@ -880,17 +885,33 @@ bool C4ConsoleGUI::DoUpdateHaltCtrls(bool fHalt) void C4ConsoleGUI::ToolsDlgSelectTexture(C4ToolsDlg *dlg, const char *texture) { C4ToolsDlg::State* state = dlg->state; - g_signal_handler_block(state->textures, state->handlerTextures); - SelectComboBoxText(GTK_COMBO_BOX(state->textures), texture); - g_signal_handler_unblock(state->textures, state->handlerTextures); + g_signal_handler_block(state->fg_textures, state->handlerFgTextures); + SelectComboBoxText(GTK_COMBO_BOX(state->fg_textures), texture); + g_signal_handler_unblock(state->fg_textures, state->handlerFgTextures); } void C4ConsoleGUI::ToolsDlgSelectMaterial(C4ToolsDlg *dlg, const char *material) { C4ToolsDlg::State* state = dlg->state; - g_signal_handler_block(state->materials, state->handlerMaterials); - SelectComboBoxText(GTK_COMBO_BOX(state->materials), material); - g_signal_handler_unblock(state->materials, state->handlerMaterials); + g_signal_handler_block(state->fg_materials, state->handlerFgMaterials); + SelectComboBoxText(GTK_COMBO_BOX(state->fg_materials), material); + g_signal_handler_unblock(state->fg_materials, state->handlerFgMaterials); +} + +void C4ConsoleGUI::ToolsDlgSelectBackTexture(C4ToolsDlg *dlg, const char *texture) +{ + C4ToolsDlg::State* state = dlg->state; + g_signal_handler_block(state->bg_textures, state->handlerBgTextures); + SelectComboBoxText(GTK_COMBO_BOX(state->bg_textures), texture); + g_signal_handler_unblock(state->bg_textures, state->handlerBgTextures); +} + +void C4ConsoleGUI::ToolsDlgSelectBackMaterial(C4ToolsDlg *dlg, const char *material) +{ + C4ToolsDlg::State* state = dlg->state; + g_signal_handler_block(state->bg_materials, state->handlerBgMaterials); + SelectComboBoxText(GTK_COMBO_BOX(state->bg_materials), material); + g_signal_handler_unblock(state->bg_materials, state->handlerBgMaterials); } void C4ConsoleGUI::DoEnableControls(bool fEnable) @@ -1037,9 +1058,6 @@ bool C4ToolsDlg::State::Open() GtkWidget* image_static = CreateImageFromInlinedPixbuf(static_pixbuf_data); GtkWidget* image_exact = CreateImageFromInlinedPixbuf(exact_pixbuf_data); - GtkWidget* image_ift = CreateImageFromInlinedPixbuf(ift_pixbuf_data); - GtkWidget* image_no_ift = CreateImageFromInlinedPixbuf(no_ift_pixbuf_data); - landscape_dynamic = gtk_toggle_button_new(); landscape_static = gtk_toggle_button_new(); landscape_exact = gtk_toggle_button_new(); @@ -1086,32 +1104,41 @@ bool C4ToolsDlg::State::Open() gtk_box_pack_start(GTK_BOX(local_hbox), scale, false, false, 0); vbox = gtk_vbox_new(false, 6); - - ift = gtk_toggle_button_new(); - no_ift = gtk_toggle_button_new(); - - gtk_container_add(GTK_CONTAINER(ift), image_ift); - gtk_container_add(GTK_CONTAINER(no_ift), image_no_ift); - - gtk_box_pack_start(GTK_BOX(vbox), ift, false, false, 0); - gtk_box_pack_start(GTK_BOX(vbox), no_ift, false, false, 0); - - gtk_box_pack_start(GTK_BOX(local_hbox), vbox, false, false, 0); - - vbox = gtk_vbox_new(false, 6); #if GTK_CHECK_VERSION(2,23,0) - materials = gtk_combo_box_text_new(); - textures = gtk_combo_box_text_new(); + fg_materials = gtk_combo_box_text_new(); + fg_textures = gtk_combo_box_text_new(); + bg_materials = gtk_combo_box_text_new(); + bg_textures = gtk_combo_box_text_new(); #else - materials = gtk_combo_box_new_text(); - textures = gtk_combo_box_new_text(); + fg_materials = gtk_combo_box_new_text(); + fg_textures = gtk_combo_box_new_text(); + bg_materials = gtk_combo_box_new_text(); + bg_textures = gtk_combo_box_new_text(); #endif - gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(materials), RowSeparatorFunc, NULL, NULL); - gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(textures), RowSeparatorFunc, NULL, NULL); + gtk_combo_box_set_model(GTK_COMBO_BOX(bg_materials), gtk_combo_box_get_model(GTK_COMBO_BOX(fg_materials))); + gtk_combo_box_set_model(GTK_COMBO_BOX(bg_textures), gtk_combo_box_get_model(GTK_COMBO_BOX(fg_textures))); - gtk_box_pack_start(GTK_BOX(vbox), materials, true, false, 0); - gtk_box_pack_start(GTK_BOX(vbox), textures, true, false, 0); + gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(fg_materials), RowSeparatorFunc, NULL, NULL); + gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(fg_textures), RowSeparatorFunc, NULL, NULL); + gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(bg_materials), RowSeparatorFunc, NULL, NULL); + gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(bg_textures), RowSeparatorFunc, NULL, NULL); + + GtkWidget* fg_box = gtk_hbox_new(false, 6); + GtkWidget* fg_lbl = gtk_label_new("Foreground:"); + gtk_box_pack_start(GTK_BOX(fg_box), fg_lbl, false, false, 0); + gtk_box_pack_start(GTK_BOX(fg_box), fg_materials, true, false, 0); + gtk_box_pack_start(GTK_BOX(fg_box), fg_textures, true, false, 0); + + + GtkWidget* bg_box = gtk_hbox_new(false, 6); + GtkWidget* bg_lbl = gtk_label_new("Background:"); + gtk_box_pack_start(GTK_BOX(bg_box), bg_lbl, false, false, 0); + gtk_box_pack_start(GTK_BOX(bg_box), bg_materials, true, false, 0); + gtk_box_pack_start(GTK_BOX(bg_box), bg_textures, true, false, 0); + + gtk_box_pack_start(GTK_BOX(vbox), fg_box, false, false, 0); + gtk_box_pack_start(GTK_BOX(vbox), bg_box, false, false, 0); gtk_box_pack_start(GTK_BOX(local_hbox), vbox, true, true, 0); // ??? gtk_widget_show_all(hbox); @@ -1127,10 +1154,10 @@ bool C4ToolsDlg::State::Open() handlerRect = g_signal_connect(G_OBJECT(rect), "toggled", G_CALLBACK(OnButtonRect), this); handlerFill = g_signal_connect(G_OBJECT(fill), "toggled", G_CALLBACK(OnButtonFill), this); handlerPicker = g_signal_connect(G_OBJECT(picker), "toggled", G_CALLBACK(OnButtonPicker), this); - handlerIft = g_signal_connect(G_OBJECT(ift), "toggled", G_CALLBACK(OnButtonIft), this); - handlerNoIft = g_signal_connect(G_OBJECT(no_ift), "toggled", G_CALLBACK(OnButtonNoIft), this); - handlerMaterials = g_signal_connect(G_OBJECT(materials), "changed", G_CALLBACK(OnComboMaterial), this); - handlerTextures = g_signal_connect(G_OBJECT(textures), "changed", G_CALLBACK(OnComboTexture), this); + handlerFgMaterials = g_signal_connect(G_OBJECT(fg_materials), "changed", G_CALLBACK(OnComboMaterial), this); + handlerFgTextures = g_signal_connect(G_OBJECT(fg_textures), "changed", G_CALLBACK(OnComboTexture), this); + handlerBgMaterials = g_signal_connect(G_OBJECT(bg_materials), "changed", G_CALLBACK(OnComboBgMaterial), this); + handlerBgTextures = g_signal_connect(G_OBJECT(bg_textures), "changed", G_CALLBACK(OnComboBgTexture), this); handlerScale = g_signal_connect(G_OBJECT(scale), "value-changed", G_CALLBACK(OnGrade), this); handlerHide = g_signal_connect(G_OBJECT(C4DevmodeDlg::GetWindow()), "hide", G_CALLBACK(OnWindowHide), this); @@ -1152,19 +1179,24 @@ void C4ConsoleGUI::ToolsDlgInitMaterialCtrls(C4ToolsDlg *dlg) #endif void C4ToolsDlg::State::InitMaterialCtrls() { - GtkListStore* list = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(materials))); + GtkListStore* list = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(fg_materials))); - g_signal_handler_block(materials, handlerMaterials); + g_signal_handler_block(fg_materials, handlerFgMaterials); + g_signal_handler_block(bg_materials, handlerBgMaterials); gtk_list_store_clear(list); - gtk_combo_box_append_text(GTK_COMBO_BOX(materials), C4TLS_MatSky); + gtk_combo_box_append_text(GTK_COMBO_BOX(fg_materials), C4TLS_MatSky); for (int32_t cnt = 0; cnt < ::MaterialMap.Num; cnt++) { - gtk_combo_box_append_text(GTK_COMBO_BOX(materials), ::MaterialMap.Map[cnt].Name); + gtk_combo_box_append_text(GTK_COMBO_BOX(fg_materials), ::MaterialMap.Map[cnt].Name); } - g_signal_handler_unblock(materials, handlerMaterials); - SelectComboBoxText(GTK_COMBO_BOX(materials), GetOwner()->Material); + + g_signal_handler_unblock(fg_materials, handlerFgMaterials); + g_signal_handler_unblock(bg_materials, handlerBgMaterials); + + SelectComboBoxText(GTK_COMBO_BOX(fg_materials), GetOwner()->Material); + SelectComboBoxText(GTK_COMBO_BOX(bg_materials), GetOwner()->BackMaterial); } void C4ToolsDlg::UpdateToolCtrls() @@ -1197,7 +1229,7 @@ void C4ToolsDlg::State::UpdateToolCtrls() void C4ToolsDlg::UpdateTextures() { // Refill dlg - GtkListStore* list = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(state->textures))); + GtkListStore* list = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(state->fg_textures))); gtk_list_store_clear(list); // bottom-most: any invalid textures bool fAnyEntry = false; int32_t cnt; const char *szTexture; @@ -1207,13 +1239,13 @@ void C4ToolsDlg::UpdateTextures() if (!::TextureMap.GetIndex(Material, szTexture, false)) { fAnyEntry = true; - gtk_combo_box_prepend_text(GTK_COMBO_BOX(state->textures), szTexture); + gtk_combo_box_prepend_text(GTK_COMBO_BOX(state->fg_textures), szTexture); } } // separator if (fAnyEntry) { - gtk_combo_box_prepend_text(GTK_COMBO_BOX(state->textures), "-------"); + gtk_combo_box_prepend_text(GTK_COMBO_BOX(state->fg_textures), "-------"); } // atop: valid textures @@ -1222,21 +1254,17 @@ void C4ToolsDlg::UpdateTextures() // Current material-texture valid? Always valid for exact mode if (::TextureMap.GetIndex(Material,szTexture,false) || ::Landscape.Mode==C4LSC_Exact) { - gtk_combo_box_prepend_text(GTK_COMBO_BOX(state->textures), szTexture); + gtk_combo_box_prepend_text(GTK_COMBO_BOX(state->fg_textures), szTexture); } } // reselect current - g_signal_handler_block(state->textures, state->handlerTextures); - SelectComboBoxText(GTK_COMBO_BOX(state->textures), Texture); - g_signal_handler_unblock(state->textures, state->handlerTextures); -} + g_signal_handler_block(state->fg_textures, state->handlerFgTextures); + SelectComboBoxText(GTK_COMBO_BOX(state->fg_textures), Texture); + g_signal_handler_unblock(state->fg_textures, state->handlerFgTextures); -void C4ConsoleGUI::ToolsDlgSetTexture(class C4ToolsDlg *dlg, const char *texture) -{ - C4ToolsDlg::State* state = dlg->state; - g_signal_handler_block(state->textures, state->handlerTextures); - SelectComboBoxText(GTK_COMBO_BOX(state->textures), texture); - g_signal_handler_unblock(state->textures, state->handlerTextures); + g_signal_handler_block(state->bg_textures, state->handlerBgTextures); + SelectComboBoxText(GTK_COMBO_BOX(state->bg_textures), BackTexture); + g_signal_handler_unblock(state->bg_textures, state->handlerBgTextures); } void C4ToolsDlg::NeedPreviewUpdate() @@ -1344,23 +1372,7 @@ void C4ToolsDlg::UpdateIFTControls() void C4ToolsDlg::State::UpdateIFTControls() { - if (!hbox) return; - g_signal_handler_block(no_ift, handlerNoIft); - g_signal_handler_block(ift, handlerIft); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(no_ift), GetOwner()->ModeIFT==0); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ift), GetOwner()->ModeIFT==1); - - g_signal_handler_unblock(no_ift, handlerNoIft); - g_signal_handler_unblock(ift, handlerIft); -} - -void C4ConsoleGUI::ToolsDlgSetMaterial(class C4ToolsDlg *dlg, const char *material) -{ - C4ToolsDlg::State* state = dlg->state; - g_signal_handler_block(state->materials, state->handlerMaterials); - SelectComboBoxText(GTK_COMBO_BOX(state->materials), material); - g_signal_handler_unblock(state->materials, state->handlerMaterials); + // No-op since we have background material controls } void C4ToolsDlg::InitGradeCtrl() @@ -1377,16 +1389,16 @@ void C4ToolsDlg::InitGradeCtrl() bool C4ToolsDlg::PopMaterial() { if (!state->hbox) return false; - gtk_widget_grab_focus(state->materials); - gtk_combo_box_popup(GTK_COMBO_BOX(state->materials)); + gtk_widget_grab_focus(state->fg_materials); + gtk_combo_box_popup(GTK_COMBO_BOX(state->fg_materials)); return true; } bool C4ToolsDlg::PopTextures() { if (!state->hbox) return false; - gtk_widget_grab_focus(state->textures); - gtk_combo_box_popup(GTK_COMBO_BOX(state->textures)); + gtk_widget_grab_focus(state->fg_textures); + gtk_combo_box_popup(GTK_COMBO_BOX(state->fg_textures)); return true; } @@ -1407,10 +1419,10 @@ void C4ToolsDlg::EnableControls() gtk_widget_set_sensitive(state->rect, iLandscapeMode>=C4LSC_Static); gtk_widget_set_sensitive(state->fill, iLandscapeMode>=C4LSC_Exact); gtk_widget_set_sensitive(state->picker, iLandscapeMode>=C4LSC_Static); - gtk_widget_set_sensitive(state->ift, iLandscapeMode>=C4LSC_Static); - gtk_widget_set_sensitive(state->no_ift, iLandscapeMode>=C4LSC_Static); - gtk_widget_set_sensitive(state->materials, (iLandscapeMode>=C4LSC_Static)); - gtk_widget_set_sensitive(state->textures, iLandscapeMode >= C4LSC_Static && !SEqual(Material,C4TLS_MatSky)); + gtk_widget_set_sensitive(state->fg_materials, iLandscapeMode>=C4LSC_Static); + gtk_widget_set_sensitive(state->fg_textures, iLandscapeMode >= C4LSC_Static && !SEqual(Material,C4TLS_MatSky)); + gtk_widget_set_sensitive(state->bg_materials, iLandscapeMode>=C4LSC_Static && !SEqual(Material,C4TLS_MatSky)); + gtk_widget_set_sensitive(state->bg_textures, iLandscapeMode >= C4LSC_Static && !SEqual(Material,C4TLS_MatSky) && !SEqual(BackMaterial, C4TLS_MatSky)); gtk_widget_set_sensitive(state->scale, iLandscapeMode>=C4LSC_Static); gtk_widget_set_sensitive(state->preview, iLandscapeMode>=C4LSC_Static); NeedPreviewUpdate(); @@ -1607,6 +1619,20 @@ void C4ToolsDlg::State::OnComboTexture(GtkWidget* widget, gpointer data) g_free(text); } +void C4ToolsDlg::State::OnComboBgMaterial(GtkWidget* widget, gpointer data) +{ + gchar* text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)); + static_cast(data)->GetOwner()->SetBackMaterial(text); + g_free(text); +} + +void C4ToolsDlg::State::OnComboBgTexture(GtkWidget* widget, gpointer data) +{ + gchar* text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)); + static_cast(data)->GetOwner()->SetBackTexture(text); + g_free(text); +} + void C4ToolsDlg::State::OnGrade(GtkWidget* widget, gpointer data) { C4ToolsDlg::State* state = static_cast(data); diff --git a/src/editor/C4ConsoleGUI.h b/src/editor/C4ConsoleGUI.h index 1630fbb53..0bd46c2ad 100644 --- a/src/editor/C4ConsoleGUI.h +++ b/src/editor/C4ConsoleGUI.h @@ -127,10 +127,10 @@ public: bool ToolsDlgOpen(class C4ToolsDlg *dlg); void ToolsDlgClose(); void ToolsDlgInitMaterialCtrls(class C4ToolsDlg *dlg); - void ToolsDlgSetTexture(class C4ToolsDlg *dlg, const char *texture); - void ToolsDlgSetMaterial(class C4ToolsDlg *dlg, const char *material); void ToolsDlgSelectTexture(C4ToolsDlg *dlg, const char *texture); void ToolsDlgSelectMaterial(C4ToolsDlg *dlg, const char *material); + void ToolsDlgSelectBackTexture(C4ToolsDlg *dlg, const char *texture); + void ToolsDlgSelectBackMaterial(C4ToolsDlg *dlg, const char *material); #ifdef USE_WIN32_WINDOWS void Win32KeepDialogsFloating(HWND hwnd = 0); diff --git a/src/editor/C4ConsoleGUICommon.h b/src/editor/C4ConsoleGUICommon.h index 0dd3da201..e90986b84 100644 --- a/src/editor/C4ConsoleGUICommon.h +++ b/src/editor/C4ConsoleGUICommon.h @@ -54,4 +54,7 @@ void C4ToolsDlg::Default() ModeIFT = true; SCopy("Earth",Material); SCopy("earth",Texture); + ModeBack = false; + SCopy("Tunnel", BackMaterial); + SCopy("tunnel", BackTexture); } diff --git a/src/editor/C4ConsoleWin32.cpp b/src/editor/C4ConsoleWin32.cpp index 9ffd33e1b..6dbe41f67 100644 --- a/src/editor/C4ConsoleWin32.cpp +++ b/src/editor/C4ConsoleWin32.cpp @@ -831,16 +831,6 @@ void C4ConsoleGUI::ToolsDlgClose() ::ClearDlg(Console.ToolsDlg.state->hDialog); } -void C4ConsoleGUI::ToolsDlgSetTexture(class C4ToolsDlg *dlg, const char *texture) -{ - SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOTEXTURE,CB_SELECTSTRING,0,GetWideLPARAM(texture)); -} - -void C4ConsoleGUI::ToolsDlgSetMaterial(class C4ToolsDlg *dlg, const char *material) -{ - SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOMATERIAL,CB_SELECTSTRING,0,GetWideLPARAM(material)); -} - bool C4ConsoleGUI::PropertyDlgOpen() { if (state->hPropertyDlg) return true; @@ -1005,6 +995,16 @@ void C4ConsoleGUI::ToolsDlgSelectMaterial(C4ToolsDlg *dlg, const char *material) SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOMATERIAL,CB_SELECTSTRING,0,GetWideLPARAM(material)); } +void C4ConsoleGUI::ToolsDlgSelectBackTexture(C4ToolsDlg *dlg, const char *texture) +{ + // TODO +} + +void C4ConsoleGUI::ToolsDlgSelectBackMaterial(C4ToolsDlg *dlg, const char *material) +{ + // TODO +} + void C4ToolsDlg::UpdateTextures() { // Refill dlg diff --git a/src/editor/C4EditCursor.cpp b/src/editor/C4EditCursor.cpp index 41547560e..df9cbab6d 100644 --- a/src/editor/C4EditCursor.cpp +++ b/src/editor/C4EditCursor.cpp @@ -193,7 +193,9 @@ void C4EditCursor::UpdateStatusBar() break; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case C4CNS_ModeDraw: - str.Format("%i/%i (%s)",X,Y,MatValid(GBackMat(X,Y)) ? ::MaterialMap.Map[GBackMat(X,Y)].Name : LoadResStr("IDS_CNS_NOTHING") ); + str.Format("%i/%i (fg: %s, bg: %s)",X,Y, + MatValid(::Landscape.GetMat(X,Y)) ? ::MaterialMap.Map[::Landscape.GetMat(X,Y)].Name : LoadResStr("IDS_CNS_NOTHING"), + MatValid(::Landscape.GetBackMat(X,Y)) ? ::MaterialMap.Map[::Landscape.GetBackMat(X,Y)].Name : LoadResStr("IDS_CNS_NOTHING") ); break; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } @@ -703,7 +705,7 @@ void C4EditCursor::ApplyToolBrush() if (!EditingOK()) return; C4ToolsDlg *pTools=&Console.ToolsDlg; // execute/send control - EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Brush, ::Landscape.Mode, X,Y,0,0, pTools->Grade, !!pTools->ModeIFT, pTools->Material,pTools->Texture)); + EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Brush, ::Landscape.Mode, X,Y,0,0, pTools->Grade, pTools->Material, pTools->Texture, pTools->BackMaterial, pTools->BackTexture)); } void C4EditCursor::ApplyToolLine() @@ -711,7 +713,7 @@ void C4EditCursor::ApplyToolLine() if (!EditingOK()) return; C4ToolsDlg *pTools=&Console.ToolsDlg; // execute/send control - EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Line, ::Landscape.Mode, X,Y,X2,Y2, pTools->Grade, !!pTools->ModeIFT, pTools->Material,pTools->Texture)); + EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Line, ::Landscape.Mode, X,Y,X2,Y2, pTools->Grade, pTools->Material,pTools->Texture, pTools->BackMaterial, pTools->BackTexture)); } void C4EditCursor::ApplyToolRect() @@ -719,7 +721,7 @@ void C4EditCursor::ApplyToolRect() if (!EditingOK()) return; C4ToolsDlg *pTools=&Console.ToolsDlg; // execute/send control - EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Rect, ::Landscape.Mode, X,Y,X2,Y2, pTools->Grade, !!pTools->ModeIFT, pTools->Material,pTools->Texture)); + EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Rect, ::Landscape.Mode, X,Y,X2,Y2, pTools->Grade, pTools->Material, pTools->Texture, pTools->BackMaterial, pTools->BackTexture)); } void C4EditCursor::ApplyToolFill() @@ -964,7 +966,26 @@ void C4EditCursor::ApplyToolPicker() const BYTE byIndexBkg = Landscape.GetBackMapIndex(x, y); Console.ToolsDlg.SelectMaterial(pTex->GetMaterialName()); Console.ToolsDlg.SelectTexture(pTex->GetTextureName()); - Console.ToolsDlg.SetIFT(byIndexBkg != 0); + + // Set background index if GUI backend supports it + if (Console.ToolsDlg.ModeBack) + { + const C4TexMapEntry *pBgTex = ::TextureMap.GetEntry(byIndexBkg); + if (pBgTex) + { + Console.ToolsDlg.SelectBackMaterial(pBgTex->GetMaterialName()); + Console.ToolsDlg.SelectBackTexture(pBgTex->GetTextureName()); + } + else + { + Console.ToolsDlg.SelectBackMaterial(C4TLS_MatSky); + } + } + else + { + Console.ToolsDlg.SetIFT(byIndexBkg != 0); + } + material_set = true; } } diff --git a/src/editor/C4ToolsDlg.cpp b/src/editor/C4ToolsDlg.cpp index 26eb07f8a..36b1e7db5 100644 --- a/src/editor/C4ToolsDlg.cpp +++ b/src/editor/C4ToolsDlg.cpp @@ -63,6 +63,8 @@ void C4ToolsDlg::SetMaterial(const char *szMaterial) EnableControls(); if (::Landscape.Mode==C4LSC_Static) UpdateTextures(); NeedPreviewUpdate(); + if (ModeBack && SEqual(szMaterial, C4TLS_MatSky)) + SelectBackMaterial(C4TLS_MatSky); } void C4ToolsDlg::SetTexture(const char *szTexture) @@ -71,16 +73,63 @@ void C4ToolsDlg::SetTexture(const char *szTexture) if (!::TextureMap.GetTexture(szTexture)) { // ensure correct texture is in dlg - Console.ToolsDlgSetTexture(this, szTexture); + Console.ToolsDlgSelectTexture(this, szTexture); return; } SCopy(szTexture,Texture,C4M_MaxName); NeedPreviewUpdate(); } +void C4ToolsDlg::SetBackMaterial(const char *szMaterial) +{ + ModeBack = true; + + SCopy(szMaterial,BackMaterial,C4M_MaxName); + AssertValidBackTexture(); + EnableControls(); + if (::Landscape.Mode==C4LSC_Static) UpdateTextures(); +} + +void C4ToolsDlg::SetBackTexture(const char *szTexture) +{ + ModeBack = true; + + // assert valid (for separator selection) + if (!::TextureMap.GetTexture(szTexture)) + { + // ensure correct texture is in dlg + Console.ToolsDlgSelectBackTexture(this, szTexture); + return; + } + SCopy(szTexture,BackTexture,C4M_MaxName); +} + bool C4ToolsDlg::SetIFT(bool fIFT) { + ModeBack = false; if (fIFT) ModeIFT = 1; else ModeIFT=0; + + // Keep sensible default values in BackMaterial / BackTexture + if (ModeIFT == 0) + { + SCopy(C4TLS_MatSky, BackMaterial, C4M_MaxName); + } + else + { + SCopy(C4TLS_MatSky, BackMaterial, C4M_MaxName); + int32_t index = ::TextureMap.GetIndexMatTex(Material); + if (index != -1) + { + BYTE bg_index = ::TextureMap.DefaultBkgMatTex(index); + const C4TexMapEntry* entry = ::TextureMap.GetEntry(bg_index); + if (entry != NULL) + { + SCopy(entry->GetMaterialName(), BackMaterial, C4M_MaxName); + SCopy(entry->GetTextureName(), BackTexture, C4M_MaxName); + } + } + } + UpdateIFTControls(); NeedPreviewUpdate(); return true; @@ -156,6 +205,26 @@ void C4ToolsDlg::AssertValidTexture() // No valid texture found } +void C4ToolsDlg::AssertValidBackTexture() +{ + // Static map mode only + if (::Landscape.Mode!=C4LSC_Static) return; + // Ignore if not enabled + if (!ModeBack) return; + // Ignore if sky + if (SEqual(BackMaterial,C4TLS_MatSky)) return; + // Current material-texture valid + if (::TextureMap.GetIndex(BackMaterial,BackTexture,false)) return; + // Find valid material-texture + const char *szTexture; + for (int32_t iTexture=0; (szTexture=::TextureMap.GetTexture(iTexture)); iTexture++) + { + if (::TextureMap.GetIndex(BackMaterial,szTexture,false)) + { SelectBackTexture(szTexture); return; } + } + // No valid texture found +} + bool C4ToolsDlg::SelectTexture(const char *szTexture) { Console.ToolsDlgSelectTexture(this, szTexture); @@ -165,11 +234,25 @@ bool C4ToolsDlg::SelectTexture(const char *szTexture) bool C4ToolsDlg::SelectMaterial(const char *szMaterial) { - Console.ToolsDlgSetMaterial(this, szMaterial); + Console.ToolsDlgSelectMaterial(this, szMaterial); SetMaterial(szMaterial); return true; } +bool C4ToolsDlg::SelectBackTexture(const char *szTexture) +{ + Console.ToolsDlgSelectBackTexture(this, szTexture); + SetBackTexture(szTexture); + return true; +} + +bool C4ToolsDlg::SelectBackMaterial(const char *szMaterial) +{ + Console.ToolsDlgSelectBackMaterial(this, szMaterial); + SetBackMaterial(szMaterial); + return true; +} + void C4ToolsDlg::SetAlternateTool() { // alternate tool is the picker in any mode diff --git a/src/editor/C4ToolsDlg.h b/src/editor/C4ToolsDlg.h index 4c15f11a8..66296e24c 100644 --- a/src/editor/C4ToolsDlg.h +++ b/src/editor/C4ToolsDlg.h @@ -56,6 +56,9 @@ public: bool ModeIFT; char Material[C4M_MaxName+1]; char Texture[C4M_MaxName+1]; + bool ModeBack; // If true, IFT is ignored and background material/texture is always used + char BackMaterial[C4M_MaxName+1]; + char BackTexture[C4M_MaxName+1]; public: void Default(); void Clear(); @@ -72,10 +75,13 @@ public: bool ToggleIFT() { return !!SetIFT(!ModeIFT); } bool SelectTexture(const char *szTexture); bool SelectMaterial(const char *szMaterial); + bool SelectBackTexture(const char *szTexture); + bool SelectBackMaterial(const char *szMaterial); void SetAlternateTool(); void ResetAlternateTool(); protected: void AssertValidTexture(); + void AssertValidBackTexture(); void LoadBitmaps(); void EnableControls(); void UpdateIFTControls(); @@ -88,6 +94,8 @@ public: void UpdateLandscapeModeCtrls(); void SetTexture(const char *szTexture); void SetMaterial(const char *szMaterial); + void SetBackTexture(const char *szTexture); + void SetBackMaterial(const char *szMaterial); }; #endif //INC_C4ToolsDlg diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index f1e8f92c9..5aa8cca40 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -3293,11 +3293,12 @@ bool C4Landscape::GetMapColorIndex(const char *szMaterial, const char *szTexture return true; } -bool C4Landscape::DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char *szMaterial, const char *szTexture, bool fIFT) +bool C4Landscape::DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char *szMaterial, const char *szTexture, const char *szBackMaterial, const char *szBackTexture) { - BYTE byCol; + BYTE byCol, byColBkg; // Get map color index by material-texture if (!GetMapColorIndex(szMaterial,szTexture,byCol)) return false; + if (!GetMapColorIndex(szBackMaterial,szBackTexture,byColBkg)) return false; // Get material shape size int32_t mat = PixCol2Mat(byCol); int32_t shape_wdt=0, shape_hgt=0; @@ -3316,8 +3317,8 @@ bool C4Landscape::DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char * case C4LSC_Static: // Draw to map int32_t iRadius; iRadius=Max(2*iGrade/MapZoom,1); - if (iRadius==1) { Map->SetPix(iX/MapZoom,iY/MapZoom,byCol); MapBkg->SetPix(iX/MapZoom, iY/MapZoom, fIFT ? DefaultBkgMat(byCol) : 0); } - else { Map->Circle(iX/MapZoom,iY/MapZoom,iRadius,byCol); MapBkg->Circle(iX/MapZoom, iY/MapZoom, iRadius, fIFT ? DefaultBkgMat(byCol) : 0); } + if (iRadius==1) { Map->SetPix(iX/MapZoom,iY/MapZoom,byCol); MapBkg->SetPix(iX/MapZoom, iY/MapZoom, byColBkg); } + else { Map->Circle(iX/MapZoom,iY/MapZoom,iRadius,byCol); MapBkg->Circle(iX/MapZoom, iY/MapZoom, iRadius, byColBkg); } // Update landscape MapToLandscape(Map,MapBkg,iX/MapZoom-iRadius-1-shape_wdt,iY/MapZoom-iRadius-1-shape_hgt,2*iRadius+2+shape_wdt*2,2*iRadius+2+shape_hgt*2); SetMapChanged(); @@ -3328,7 +3329,7 @@ bool C4Landscape::DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char * // Draw to landscape PrepareChange(BoundingBox); Surface8->Circle(iX,iY,iGrade, byCol); - Surface8Bkg->Circle(iX,iY,iGrade, fIFT ? DefaultBkgMat(byCol) : 0); + Surface8Bkg->Circle(iX,iY,iGrade, byColBkg); FinishChange(BoundingBox); break; } @@ -3352,11 +3353,12 @@ bool C4Landscape::DrawLineMap(int32_t iX, int32_t iY, int32_t iRadius, uint8_t l return true; } -bool C4Landscape::DrawLine(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iGrade, const char *szMaterial, const char *szTexture, bool fIFT) +bool C4Landscape::DrawLine(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iGrade, const char *szMaterial, const char *szTexture, const char *szBackMaterial, const char *szBackTexture) { // Get map color index by material-texture - uint8_t line_color; + uint8_t line_color, line_color_bkg; if (!GetMapColorIndex(szMaterial,szTexture,line_color)) return false; + if (!GetMapColorIndex(szBackMaterial,szBackTexture,line_color_bkg)) return false; // Get material shape size int32_t mat = PixCol2Mat(line_color); int32_t shape_wdt=0, shape_hgt=0; @@ -3376,7 +3378,7 @@ bool C4Landscape::DrawLine(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, i // Draw to map int32_t iRadius; iRadius=Max(2*iGrade/MapZoom,1); iX1/=MapZoom; iY1/=MapZoom; iX2/=MapZoom; iY2/=MapZoom; - ForLine(iX1, iY1, iX2, iY2, [this, line_color, fIFT, iRadius](int32_t x, int32_t y) { return DrawLineMap(x, y, iRadius, line_color, fIFT ? DefaultBkgMat(line_color) : 0); }); + ForLine(iX1, iY1, iX2, iY2, [this, line_color, line_color_bkg, iRadius](int32_t x, int32_t y) { return DrawLineMap(x, y, iRadius, line_color, line_color_bkg); }); // Update landscape int32_t iUpX,iUpY,iUpWdt,iUpHgt; iUpX=Min(iX1,iX2)-iRadius-1; iUpY=Min(iY1,iY2)-iRadius-1; @@ -3391,21 +3393,22 @@ bool C4Landscape::DrawLine(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, i BoundingBox.Add(C4Rect(iX2 - iGrade, iY2 - iGrade, iGrade*2+1, iGrade*2+1)); // Draw to landscape PrepareChange(BoundingBox); - ForLine(iX1, iY1, iX2, iY2, [this, line_color, fIFT, iGrade](int32_t x, int32_t y) { return DrawLineLandscape(x, y, iGrade, line_color, fIFT ? DefaultBkgMat(line_color) : 0); }); + ForLine(iX1, iY1, iX2, iY2, [this, line_color, line_color_bkg, iGrade](int32_t x, int32_t y) { return DrawLineLandscape(x, y, iGrade, line_color, line_color_bkg); }); FinishChange(BoundingBox); break; } return true; } -bool C4Landscape::DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iGrade, const char *szMaterial, const char *szTexture, bool fIFT) +bool C4Landscape::DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iGrade, const char *szMaterial, const char *szTexture, const char *szBackMaterial, const char *szBackTexture) { // get upper-left/lower-right - corners int32_t iX0=Min(iX1, iX2); int32_t iY0=Min(iY1, iY2); iX2=Max(iX1, iX2); iY2=Max(iY1, iY2); iX1=iX0; iY1=iY0; - BYTE byCol; + BYTE byCol, byColBkg; // Get map color index by material-texture if (!GetMapColorIndex(szMaterial,szTexture,byCol)) return false; + if (!GetMapColorIndex(szBackMaterial,szBackTexture,byColBkg)) return false; // Get material shape size int32_t mat = PixCol2Mat(byCol); int32_t shape_wdt=0, shape_hgt=0; @@ -3425,7 +3428,7 @@ bool C4Landscape::DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, in // Draw to map iX1/=MapZoom; iY1/=MapZoom; iX2/=MapZoom; iY2/=MapZoom; Map->Box(iX1,iY1,iX2,iY2,byCol); - MapBkg->Box(iX1, iY1, iX2, iY2, fIFT ? DefaultBkgMat(byCol) : 0); + MapBkg->Box(iX1, iY1, iX2, iY2, byColBkg); // Update landscape MapToLandscape(Map,MapBkg,iX1-1-shape_wdt,iY1-1-shape_hgt,iX2-iX1+3+shape_wdt*2,iY2-iY1+3+shape_hgt*2); SetMapChanged(); @@ -3436,7 +3439,7 @@ bool C4Landscape::DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, in // Draw to landscape PrepareChange(BoundingBox); Surface8->Box(iX1,iY1,iX2,iY2,byCol); - Surface8Bkg->Box(iX1,iY1,iX2,iY2,fIFT ? DefaultBkgMat(byCol) : 0); + Surface8Bkg->Box(iX1,iY1,iX2,iY2,byColBkg); FinishChange(BoundingBox); break; } diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index 13030abd1..b73329842 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -117,9 +117,9 @@ public: bool FindMatSlide(int32_t &fx, int32_t &fy, int32_t ydir, int32_t mdens, int32_t mslide) const; bool FindMatPathPush(int32_t &fx, int32_t &fy, int32_t mdens, int32_t mslide, bool liquid) const; bool Incinerate(int32_t x, int32_t y); - bool DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char *szMaterial, const char *szTexture, bool fIFT); - bool DrawLine(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iGrade, const char *szMaterial, const char *szTexture, bool fIFT); - bool DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iGrade, const char *szMaterial, const char *szTexture, bool fIFT); + bool DrawBrush(int32_t iX, int32_t iY, int32_t iGrade, const char *szMaterial, const char *szTexture, const char *szBackMaterial, const char *szBackTexture); + bool DrawLine(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iGrade, const char *szMaterial, const char *szTexture, const char *szBackMaterial, const char *szBackTexture); + bool DrawBox(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iGrade, const char *szMaterial, const char *szTexture, const char *szBackMaterial, const char *szBackTexture); bool DrawChunks(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, int32_t icntx, int32_t icnty, const char *szMaterial, const char *szTexture, bool bIFT); bool DrawQuad(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iX3, int32_t iY3, int32_t iX4, int32_t iY4, const char *szMaterial, const char *szBackMaterial, bool fDrawBridge); bool DrawPolygon(int *vtcs, int length, const char *szMaterial, const char *szBackMaterial, bool fDrawBridge); From bc177e8f8b5a6d9fbcebcd138fe12ff810f40384 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 4 Aug 2015 21:19:53 -0400 Subject: [PATCH 19/97] Documentation updates --- docs/sdk/material/index.xml | 4 ++-- docs/sdk/scenario/index.xml | 9 ++++----- docs/sdk/script/MapScript.xml | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/sdk/material/index.xml b/docs/sdk/material/index.xml index 8c996df2c..8f41b8ea6 100644 --- a/docs/sdk/material/index.xml +++ b/docs/sdk/material/index.xml @@ -11,13 +11,13 @@
TexMap.txt
- Lookup table for color indices in static and dynamic landscapes. Colors 0-127 are matched to a material-texture-reference. Colors 128-255 are matched to the same list of references only these are marked 'underground'. + Lookup table for color indices in static and dynamic landscapes. Colors 0-255 are matched to a material-texture-reference, except in Map.bmp static landscapes, where colors 0-127 are matched to a material-texture reference, and 128-255 are matched to the same list of references, except they are marked 'underground'. The engine will draw materials with a higher index above those with a lower index so that, e.g. using the standard table, rough chunks of earth will overlap water which has a smooth border. Mineral resources have an even higher index so that their rough border overlaps the earth and not the other way around. This is also the reason why there might be differing numbers of total pixels of a given material drawn than you might expect just from calculating the square sizes of the unzoomed map materials. If a custom map fails with the message 'texture n undefined' you should define the specified texture in the TexMap. You should always use a paint program capable of editing indexed color palettes without modifying the palette (MS Paint is not suited for this).
*.ocm
- The engine will accept up to 125 material definitions at a time. OCM files a simple text files. The materials Vehicle, Tunnel, Water, Snow, Granite, Sand, and Earth must always be available. + The engine will accept up to 252 material definitions at a time. OCM files a simple text files. The materials Vehicle, Tunnel, Water, Snow, Granite, Sand, and Earth must always be available.
*.png
diff --git a/docs/sdk/scenario/index.xml b/docs/sdk/scenario/index.xml index 26358a08b..7afee4265 100644 --- a/docs/sdk/scenario/index.xml +++ b/docs/sdk/scenario/index.xml @@ -22,6 +22,10 @@
Static landscapes are stretched by factor MapZoom defined in Scenario.txt to the size of the actual landscape in the game. The colors used in Map.bmp correspond to materials and textures as defined in TexMap.txt.
+
MapFg.bmp / MapBg.bmp
+
+ Same as Map.bmp as defined above, except that foreground and background materials can be drawn separately. In Map.bmp, color indices greater than 127 will result in underground materials. In MapFg.bmp and MapBg.bmp, all color indices up to 255 can be used, and undergroup materials are simply specified by tunnel material in the background map. +
Landscape.txt
Advanced scenario designers can use this component to define highly complex, fully random generated dynamic landscapes. This does require certain mathematical skill and some patience, however. @@ -103,11 +107,6 @@ US:Attack of the Killer Wipfs Additional files created for saved games or scenarios
-
Landscape.png
-
- Full size map for exact landscapes. This is mainly used in savegames to store the exact terrain including transparent materials and their texture. Exact landscapes consume an extreme amount of memory and should not be used for regularly distributed scenarios. -
-
MatMap.txt
Stores the material table used in this scenario. The materials listed here are used by the exact landscape and have to be available in the loaded Material.ocg group. diff --git a/docs/sdk/script/MapScript.xml b/docs/sdk/script/MapScript.xml index ca4d654d6..8c4bcf90c 100644 --- a/docs/sdk/script/MapScript.xml +++ b/docs/sdk/script/MapScript.xml @@ -401,7 +401,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer}); FgMatTex:BgMatTex Water:Tunnel-brickback Draws with a specified background material. In the example, draws water which, when drained, exposes bricks instead of tunnel behind it. FgMatTex and BgMatTex can be any of the other specifications in this table, except the ones prefixed with ^. However, the specification FgMatTex:Sky is equivalent to ^FgMatTex. - + Material-texture masks (string mask_spec) From 94ce958e4cd2cd5906106c4bfa799d3f4a460be8 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 4 Aug 2015 21:39:23 -0400 Subject: [PATCH 20/97] editor: sort background textures differently than foreground textures The sort order in the combo boxes depends on the selected material. --- src/editor/C4ConsoleGTK.cpp | 64 ++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/src/editor/C4ConsoleGTK.cpp b/src/editor/C4ConsoleGTK.cpp index 424105a25..b43b14c55 100644 --- a/src/editor/C4ConsoleGTK.cpp +++ b/src/editor/C4ConsoleGTK.cpp @@ -1116,8 +1116,9 @@ bool C4ToolsDlg::State::Open() bg_textures = gtk_combo_box_new_text(); #endif + // Link the material combo boxes together, but not the texture combo boxes, + // so that we can sort the texture combo box differently. gtk_combo_box_set_model(GTK_COMBO_BOX(bg_materials), gtk_combo_box_get_model(GTK_COMBO_BOX(fg_materials))); - gtk_combo_box_set_model(GTK_COMBO_BOX(bg_textures), gtk_combo_box_get_model(GTK_COMBO_BOX(fg_textures))); gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(fg_materials), RowSeparatorFunc, NULL, NULL); gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(fg_textures), RowSeparatorFunc, NULL, NULL); @@ -1228,35 +1229,52 @@ void C4ToolsDlg::State::UpdateToolCtrls() void C4ToolsDlg::UpdateTextures() { - // Refill dlg - GtkListStore* list = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(state->fg_textures))); - gtk_list_store_clear(list); - // bottom-most: any invalid textures - bool fAnyEntry = false; int32_t cnt; const char *szTexture; - if (::Landscape.Mode!=C4LSC_Exact) + GtkComboBox* boxes[2] = { + GTK_COMBO_BOX(state->fg_textures), + GTK_COMBO_BOX(state->bg_textures) + }; + + const char* materials[2] = { + Material, BackMaterial + }; + + for (int i = 0; i < 2; ++i) + { + // Refill dlg + GtkComboBox* box = boxes[i]; + const char* material = materials[i]; + + GtkListStore* list = GTK_LIST_STORE(gtk_combo_box_get_model(box)); + gtk_list_store_clear(list); + + // bottom-most: any invalid textures + bool fAnyEntry = false; int32_t cnt; const char *szTexture; + if (::Landscape.Mode!=C4LSC_Exact) + for (cnt=0; (szTexture=::TextureMap.GetTexture(cnt)); cnt++) + { + if (!::TextureMap.GetIndex(material, szTexture, false)) + { + fAnyEntry = true; + gtk_combo_box_prepend_text(box, szTexture); + } + } + // separator + if (fAnyEntry) + { + gtk_combo_box_prepend_text(box, "-------"); + } + + // atop: valid textures for (cnt=0; (szTexture=::TextureMap.GetTexture(cnt)); cnt++) { - if (!::TextureMap.GetIndex(Material, szTexture, false)) + // Current material-texture valid? Always valid for exact mode + if (::TextureMap.GetIndex(material,szTexture,false) || ::Landscape.Mode==C4LSC_Exact) { - fAnyEntry = true; - gtk_combo_box_prepend_text(GTK_COMBO_BOX(state->fg_textures), szTexture); + gtk_combo_box_prepend_text(box, szTexture); } } - // separator - if (fAnyEntry) - { - gtk_combo_box_prepend_text(GTK_COMBO_BOX(state->fg_textures), "-------"); } - // atop: valid textures - for (cnt=0; (szTexture=::TextureMap.GetTexture(cnt)); cnt++) - { - // Current material-texture valid? Always valid for exact mode - if (::TextureMap.GetIndex(Material,szTexture,false) || ::Landscape.Mode==C4LSC_Exact) - { - gtk_combo_box_prepend_text(GTK_COMBO_BOX(state->fg_textures), szTexture); - } - } // reselect current g_signal_handler_block(state->fg_textures, state->handlerFgTextures); SelectComboBoxText(GTK_COMBO_BOX(state->fg_textures), Texture); From ad57b5a9c9e9361df25a2f1954dfdec12b8f58c1 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 4 Aug 2015 23:15:16 -0400 Subject: [PATCH 21/97] Fix fill tool in developer mode --- src/editor/C4EditCursor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editor/C4EditCursor.cpp b/src/editor/C4EditCursor.cpp index df9cbab6d..13ef2e07a 100644 --- a/src/editor/C4EditCursor.cpp +++ b/src/editor/C4EditCursor.cpp @@ -729,7 +729,7 @@ void C4EditCursor::ApplyToolFill() if (!EditingOK()) return; C4ToolsDlg *pTools=&Console.ToolsDlg; // execute/send control - EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Fill, ::Landscape.Mode, X,Y,0,Y2, pTools->Grade, false, pTools->Material)); + EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Fill, ::Landscape.Mode, X,Y,0,Y2, pTools->Grade, pTools->Material, NULL, NULL, NULL)); } bool C4EditCursor::DoContextMenu(DWORD dwKeyState) From cd2d525b5bc964c4441a113e20ca0666926338fc Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 4 Aug 2015 23:15:52 -0400 Subject: [PATCH 22/97] Rename C4Landscape::TRANSPARENT to C4Landscape::Transparent Some stupid windows header seems to have a #define for TRANSPARENT. --- src/landscape/C4Landscape.cpp | 24 ++++++++++++------------ src/landscape/C4Landscape.h | 2 +- src/landscape/C4SolidMask.cpp | 12 ++++++------ 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index 5aa8cca40..af18dd68a 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -287,7 +287,7 @@ int32_t C4Landscape::DoScan(int32_t cx, int32_t cy, int32_t mat, int32_t dir) if (lmat == mat) break; #endif // set mat (and keep background material) - SetPix2(cx, cy2, MatTex2PixCol(conv_to_tex), TRANSPARENT); + SetPix2(cx, cy2, MatTex2PixCol(conv_to_tex), Transparent); if (!conv_to_is_solid) CheckInstabilityRange(cx,cy2); } // return pixel converted @@ -662,7 +662,7 @@ bool C4Landscape::BlastFreePix(int32_t tx, int32_t ty) } else if (::MaterialMap.Map[mat].BlastShiftTo) - SetPix2(tx,ty,MatTex2PixCol(::MaterialMap.Map[mat].BlastShiftTo), TRANSPARENT); + SetPix2(tx,ty,MatTex2PixCol(::MaterialMap.Map[mat].BlastShiftTo), Transparent); } return false; } @@ -697,7 +697,7 @@ bool C4Landscape::SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix) if (x < 0 || y < 0 || x >= Width || y >= Height) return false; // no change? - if ((fgPix == TRANSPARENT || fgPix == _GetPix(x, y)) && (bgPix == TRANSPARENT || bgPix == Surface8Bkg->_GetPix(x, y))) + if ((fgPix == Transparent || fgPix == _GetPix(x, y)) && (bgPix == Transparent || bgPix == Surface8Bkg->_GetPix(x, y))) return true; // note for relight (TODO: Why is this not in _SetPix2?) if(pLandscapeRender) @@ -728,8 +728,8 @@ bool C4Landscape::_SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix) assert(x >= 0 && y >= 0 && x < Width && y < Height); // get pixel and resolve transparency to already existing pixel BYTE opix = _GetPix(x, y); - if (fgPix == TRANSPARENT) fgPix = opix; - if (bgPix == TRANSPARENT) bgPix = Surface8Bkg->_GetPix(x, y); + if (fgPix == Transparent) fgPix = opix; + if (bgPix == Transparent) bgPix = Surface8Bkg->_GetPix(x, y); // check pixel if (fgPix == opix && bgPix == Surface8Bkg->_GetPix(x, y)) return true; // count pixels @@ -953,7 +953,7 @@ bool C4Landscape::InsertDeadMaterial(int32_t mat, int32_t tx, int32_t ty) pix = Mat2PixColDefault(mat); // Insert dead material - SetPix2(tx,ty,pix, TRANSPARENT); + SetPix2(tx,ty,pix, Transparent); // Search a position for the old material pixel if (Game.C4S.Game.Realism.LandscapeInsertThrust && MatValid(omat)) @@ -1174,13 +1174,13 @@ int32_t C4Landscape::ForPolygon(int *vtcs, int length, bool (C4Landscape::*fnCal { const uint8_t pix = conversion_table[uint8_t(GetPix(x1+xcnt, y))]; Surface8->SetPix(x1+xcnt, y, pix); - if (colBkg != TRANSPARENT) Surface8Bkg->SetPix(x1+xcnt, y, colBkg); + if (colBkg != Transparent) Surface8Bkg->SetPix(x1+xcnt, y, colBkg); } else for (int xcnt=x2-x1-1; xcnt>=0; xcnt--) { - if (col != TRANSPARENT) Surface8->SetPix(x1+xcnt, y, col); - if (colBkg != TRANSPARENT) Surface8Bkg->SetPix(x1+xcnt, y, colBkg); + if (col != Transparent) Surface8->SetPix(x1+xcnt, y, col); + if (colBkg != Transparent) Surface8Bkg->SetPix(x1+xcnt, y, colBkg); } edge = edge->next->next; } @@ -1986,8 +1986,8 @@ void C4Landscape::DrawChunk(int32_t tx, int32_t ty, int32_t wdt, int32_t hgt, ui switch (Shape) { case C4M_Flat: case C4M_Octagon: - if (mcol != TRANSPARENT) Surface8->Box(tx, ty, tx + wdt, ty + hgt, mcol); - if (mcolBkg != TRANSPARENT) Surface8Bkg->Box(tx, ty, tx + wdt, ty + hgt, mcolBkg); + if (mcol != Transparent) Surface8->Box(tx, ty, tx + wdt, ty + hgt, mcol); + if (mcolBkg != Transparent) Surface8Bkg->Box(tx, ty, tx + wdt, ty + hgt, mcolBkg); return; case C4M_TopFlat: top_rough = 0; side_rough = 2; bottom_rough = 4; @@ -3509,7 +3509,7 @@ bool C4Landscape::DrawPolygon(int *vtcs, int length, const char *szMaterial, con if (fDrawBridge) { conversion_map = GetBridgeMatConversion(MatTex2PixCol(iMatTex)); - mcolBkg = TRANSPARENT; + mcolBkg = Transparent; } // prepare pixel count update C4Rect BoundingBox = getBoundingBox(vtcs,length); diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index b73329842..43cda18d1 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -79,7 +79,7 @@ public: // either foreground or background map. We can use C4M_MaxTexIndex as a value // here because this value is reserved anyway for the differential landscape // encoding. - const uint8_t TRANSPARENT = C4M_MaxTexIndex; + const uint8_t Transparent = C4M_MaxTexIndex; void Default(); void Clear(bool fClearMapCreator=true, bool fClearSky=true, bool fClearRenderer=true); diff --git a/src/landscape/C4SolidMask.cpp b/src/landscape/C4SolidMask.cpp index 453d54ad5..1ea8bc68b 100644 --- a/src/landscape/C4SolidMask.cpp +++ b/src/landscape/C4SolidMask.cpp @@ -100,7 +100,7 @@ void C4SolidMask::Put(bool fCauseInstability, C4TargetRect *pClipRect, bool fRes pSolidMaskMatBuff[(ycnt+pClipRect->ty)*MatBuffPitch+xcnt+pClipRect->tx]=byPixel; } // and set mask - ::Landscape.SetPix2(iTx,iTy,MCVehic,::Landscape.TRANSPARENT); + ::Landscape.SetPix2(iTx,iTy,MCVehic,::Landscape.Transparent); } else // no SolidMask: mark buffer as unused here @@ -166,7 +166,7 @@ void C4SolidMask::Put(bool fCauseInstability, C4TargetRect *pClipRect, bool fRes pSolidMaskMatBuff[i + xcnt] = byPixel; } // set mask pix - ::Landscape.SetPix2(iTx, iTy, MCVehic, ::Landscape.TRANSPARENT); + ::Landscape.SetPix2(iTx, iTy, MCVehic, ::Landscape.Transparent); } else if (!MaskPut) // mark pix as unused in buf @@ -261,7 +261,7 @@ void C4SolidMask::Remove(bool fBackupAttachment) // temp remove SolidMasks before assert(_GBackPix(iTx,iTy) == MCVehic); if (::Landscape._GetPix(iTx, iTy) == MCVehic) - ::Landscape._SetPix2(iTx, iTy, *pPix, ::Landscape.TRANSPARENT); + ::Landscape._SetPix2(iTx, iTy, *pPix, ::Landscape.Transparent); // Instability ::Landscape.CheckInstabilityRange(iTx,iTy); } @@ -344,7 +344,7 @@ void C4SolidMask::RemoveTemporary(C4Rect where) { // restore assert(GBackPix(x,y)==MCVehic); - ::Landscape.SetPix2(x, y, *pPix, ::Landscape.TRANSPARENT); + ::Landscape.SetPix2(x, y, *pPix, ::Landscape.Transparent); } } } @@ -365,7 +365,7 @@ void C4SolidMask::PutTemporary(C4Rect where) { // put assert(GBackPix(x,y)==*pPix); - ::Landscape.SetPix2(x, y, MCVehic, ::Landscape.TRANSPARENT); + ::Landscape.SetPix2(x, y, MCVehic, ::Landscape.Transparent); } } } @@ -387,7 +387,7 @@ void C4SolidMask::Repair(C4Rect where) // record changed landscape in MatBuff *pPix = GBackPix(x,y); // put - ::Landscape.SetPix2(x, y, MCVehic, ::Landscape.TRANSPARENT); + ::Landscape.SetPix2(x, y, MCVehic, ::Landscape.Transparent); } } } From 20f95bf01881d2999e0e767dce4db84240550f02 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Thu, 6 Aug 2015 20:06:13 +0200 Subject: [PATCH 23/97] buildfix for MSVC compiler --- src/landscape/C4Landscape.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/landscape/C4Landscape.h b/src/landscape/C4Landscape.h index 43cda18d1..3cac7f6f4 100644 --- a/src/landscape/C4Landscape.h +++ b/src/landscape/C4Landscape.h @@ -79,7 +79,7 @@ public: // either foreground or background map. We can use C4M_MaxTexIndex as a value // here because this value is reserved anyway for the differential landscape // encoding. - const uint8_t Transparent = C4M_MaxTexIndex; + static const uint8_t Transparent = C4M_MaxTexIndex; void Default(); void Clear(bool fClearMapCreator=true, bool fClearSky=true, bool fClearRenderer=true); From 8ec159d7555607f46ed34ddcaabae5537cc37111 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sat, 8 Aug 2015 21:49:57 -0400 Subject: [PATCH 24/97] Remove some unnecessary restrictions from /script message board command (#1369). --- src/gui/C4MessageInput.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/gui/C4MessageInput.cpp b/src/gui/C4MessageInput.cpp index eb08e6166..f10b1ca52 100644 --- a/src/gui/C4MessageInput.cpp +++ b/src/gui/C4MessageInput.cpp @@ -592,8 +592,6 @@ bool C4MessageInput::ProcessCommand(const char *szCommand) { if (!Game.IsRunning) return false; if (!Game.DebugMode) return false; - if (!::Network.isEnabled() && Game.ScenarioFile.IsPacked()) return false; - if (::Network.isEnabled() && !::Network.isHost()) return false; ::Control.DoInput(CID_Script, new C4ControlScript(pCmdPar, C4ControlScript::SCOPE_Console), CDT_Decide); return true; From 8e5aed4bea1da6bd6ce3fd7d682df03cf9479574 Mon Sep 17 00:00:00 2001 From: Nicolas Hake Date: Sun, 9 Aug 2015 19:16:39 +0200 Subject: [PATCH 25/97] Update TRADEMARK and add trademark reference to credits (#1370) I don't like that the FMOD and Clonk trademarks are separated, but we don't have enough space in the credits screen to do it differently. --- TRADEMARK | 18 ++++++++++-------- src/gui/C4StartupAboutDlg.cpp | 3 +++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/TRADEMARK b/TRADEMARK index 52b17861a..1a5c46e6f 100644 --- a/TRADEMARK +++ b/TRADEMARK @@ -1,14 +1,16 @@ -Clonk Trademark License - 'Clonk' is a registered trademark of Matthes Bender. It may be used within -software products which are using source code from the OpenClonk project -with the following limitations: +software products which are using source code or game content as made public +on the Clonk website (or derived from such) with the following limitations: If the word 'Clonk' is used as the name of anything in your software product then you must include the following notice in a suitable place (e.g. credits -screen): "Clonk" is a registered trademark of Matthes Bender. +screen): 'Clonk' is a registered trademark of Matthes Bender. If the title of your software product contains the word 'Clonk' then you must -prefix the word with an added name of your choosing, e.g. 'MyClonk' or -'PortableClonk' and you must subtitle your project with the term 'An OpenClonk -project'. \ No newline at end of file +PREFIX the word with an added name of your choosing, e.g. 'MyClonk' or +'PortableClonk' and you must include the trademark notice above in a suitable +place (e.g. credits screen or splash screen). + +If you are making your source code or game content available to other parties +in a way which allows adaptation you must include a copy of this license along +with any other applicable licenses. diff --git a/src/gui/C4StartupAboutDlg.cpp b/src/gui/C4StartupAboutDlg.cpp index faecb752e..39f011255 100644 --- a/src/gui/C4StartupAboutDlg.cpp +++ b/src/gui/C4StartupAboutDlg.cpp @@ -48,6 +48,9 @@ C4StartupAboutDlg::C4StartupAboutDlg() : C4StartupDlg(LoadResStr("IDS_DLG_ABOUT" AddElement(btn = new C4GUI::CallbackButton(LoadResStr("IDS_BTN_CHECKFORUPDATES"), caButtons.GetGridCell(2,3,0,1,iButtonWidth,C4GUI_ButtonHgt,true), &C4StartupAboutDlg::OnUpdateBtn)); btn->SetToolTip(LoadResStr("IDS_DESC_CHECKONLINEFORNEWVERSIONS")); #endif + + AddElement(new C4GUI::Label("'Clonk' is a registered trademark of Matthes Bender.", + caButtons.GetFromBottom(rUseFont.GetLineHeight()))); } C4StartupAboutDlg::~C4StartupAboutDlg() From 638ed81608d81c0b7d2e1d0f8ca3c53850e792f6 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 9 Aug 2015 13:36:08 -0400 Subject: [PATCH 26/97] Implement background material controls in Windows editor. Also removed auto-sort from the material combo boxes (so sky is on top in both) and put true background materials (i.e. sky and tunnel) on top. --- src/editor/C4ConsoleWin32.cpp | 182 +++++++++++++++++++--------------- src/res/engine.rc | 20 ++-- src/res/resource.h | 12 +-- 3 files changed, 118 insertions(+), 96 deletions(-) diff --git a/src/editor/C4ConsoleWin32.cpp b/src/editor/C4ConsoleWin32.cpp index 6dbe41f67..98d9e0bb0 100644 --- a/src/editor/C4ConsoleWin32.cpp +++ b/src/editor/C4ConsoleWin32.cpp @@ -331,6 +331,7 @@ public: hbmExact(0) { pPreviewWindow = NULL; + toolsDlg->ModeBack = true; } void LoadBitmaps(HINSTANCE instance) @@ -345,8 +346,6 @@ public: if (!hbmRect2) hbmRect2=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_RECT2)); if (!hbmFill2) hbmFill2=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_FILL2)); if (!hbmPicker2) hbmPicker2=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_PICKER2)); - if (!hbmIFT) hbmIFT=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_IFT)); - if (!hbmNoIFT) hbmNoIFT=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_NOIFT)); if (!hbmDynamic) hbmDynamic=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_DYNAMIC)); if (!hbmStatic) hbmStatic=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_STATIC)); if (!hbmExact) hbmExact=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_EXACT)); @@ -461,43 +460,33 @@ INT_PTR CALLBACK ToolsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) Console.ToolsDlg.SetTool(C4TLS_Picker, false); return true; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case IDC_BUTTONIFT: - Console.ToolsDlg.SetIFT(true); - return true; - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case IDC_BUTTONNOIFT: - Console.ToolsDlg.SetIFT(false); - return true; - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case IDC_COMBOMATERIAL: + case IDC_COMBOFGMATERIAL: case IDC_COMBOBGMATERIAL: + case IDC_COMBOFGTEXTURE: case IDC_COMBOBGTEXTURE: switch (HIWORD(wParam)) { case CBN_SELCHANGE: { + // New material or texture selected. Get selection string wchar_t str[100]; - int32_t cursel = SendDlgItemMessage(hDlg,IDC_COMBOMATERIAL,CB_GETCURSEL,0,0); - SendDlgItemMessage(hDlg,IDC_COMBOMATERIAL,CB_GETLBTEXT,cursel,(LPARAM)str); - Console.ToolsDlg.SetMaterial(StdStrBuf(str).getData()); - break; - } - } - return true; - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case IDC_COMBOTEXTURE: - switch (HIWORD(wParam)) - { - case CBN_SELCHANGE: - { - wchar_t str[100]; - int32_t cursel = SendDlgItemMessage(hDlg,IDC_COMBOTEXTURE,CB_GETCURSEL,0,0); - SendDlgItemMessage(hDlg,IDC_COMBOTEXTURE,CB_GETLBTEXT,cursel,(LPARAM)str); - Console.ToolsDlg.SetTexture(StdStrBuf(str).getData()); - break; - } + WORD idCombo = LOWORD(wParam); + int32_t cursel = SendDlgItemMessage(hDlg, idCombo, CB_GETCURSEL, 0, 0); + SendDlgItemMessage(hDlg, idCombo, CB_GETLBTEXT, cursel, (LPARAM)str); + // Convert to ascii + StdStrBuf str_buf(str); + const char *astr = str_buf.getData(); + // Update appropriate setting in drawing tool + switch (idCombo) + { + case IDC_COMBOFGMATERIAL: Console.ToolsDlg.SetMaterial(astr); break; + case IDC_COMBOFGTEXTURE: Console.ToolsDlg.SetTexture(astr); break; + case IDC_COMBOBGMATERIAL: Console.ToolsDlg.SetBackMaterial(astr); break; + case IDC_COMBOBGTEXTURE: Console.ToolsDlg.SetBackTexture(astr); break; + } } return true; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } + } return false; //---------------------------------------------------------------------------------------- } @@ -947,6 +936,8 @@ bool C4ConsoleGUI::ToolsDlgOpen(C4ToolsDlg *dlg) SetWindowTextW(dlg->state->hDialog,LoadResStrW("IDS_DLG_TOOLS")); SetDlgItemTextW(dlg->state->hDialog,IDC_STATICMATERIAL,LoadResStrW("IDS_CTL_MATERIAL")); SetDlgItemTextW(dlg->state->hDialog,IDC_STATICTEXTURE,LoadResStrW("IDS_CTL_TEXTURE")); + SetDlgItemTextW(dlg->state->hDialog, IDC_STATICFOREGROUND, LoadResStrW("IDS_CTL_FOREGROUND")); + SetDlgItemTextW(dlg->state->hDialog, IDC_STATICBACKGROUND, LoadResStrW("IDS_CTL_BACKGROUND")); // Load bitmaps if necessary dlg->state->LoadBitmaps(Application.GetInstance()); // create target ctx for OpenGL rendering @@ -963,10 +954,32 @@ bool C4ConsoleGUI::ToolsDlgOpen(C4ToolsDlg *dlg) void C4ConsoleGUI::ToolsDlgInitMaterialCtrls(class C4ToolsDlg *dlg) { - SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOMATERIAL,CB_ADDSTRING,0,GetWideLPARAM(C4TLS_MatSky)); - for (int32_t cnt=0; cnt< ::MaterialMap.Num; cnt++) - SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOMATERIAL,CB_ADDSTRING,0,GetWideLPARAM(::MaterialMap.Map[cnt].Name)); - SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOMATERIAL,CB_SELECTSTRING,0,GetWideLPARAM(dlg->Material)); + // All foreground materials + SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOFGMATERIAL,CB_ADDSTRING,0,GetWideLPARAM(C4TLS_MatSky)); + for (int32_t cnt = 0; cnt < ::MaterialMap.Num; cnt++) + { + SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOFGMATERIAL, CB_ADDSTRING, 0, GetWideLPARAM(::MaterialMap.Map[cnt].Name)); + } + // Background materials: True background materials first; then the "funny" stuff + SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_ADDSTRING, 0, GetWideLPARAM(C4TLS_MatSky)); + for (int32_t cnt = 0; cnt < ::MaterialMap.Num; cnt++) + { + if (::MaterialMap.Map[cnt].Density == C4M_Background) + { + SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_ADDSTRING, 0, GetWideLPARAM(::MaterialMap.Map[cnt].Name)); + } + } + SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_ADDSTRING, 0, (LPARAM)L"----------"); + for (int32_t cnt = 0; cnt < ::MaterialMap.Num; cnt++) + { + if (::MaterialMap.Map[cnt].Density != C4M_Background) + { + SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_ADDSTRING, 0, GetWideLPARAM(::MaterialMap.Map[cnt].Name)); + } + } + // Select current materials + SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOFGMATERIAL,CB_SELECTSTRING,0,GetWideLPARAM(dlg->Material)); + SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_SELECTSTRING, 0, GetWideLPARAM(dlg->BackMaterial)); } void C4ToolsDlg::UpdateToolCtrls() @@ -987,61 +1000,71 @@ void C4ToolsDlg::UpdateToolCtrls() void C4ConsoleGUI::ToolsDlgSelectTexture(C4ToolsDlg *dlg, const char *texture) { - SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOTEXTURE,CB_SELECTSTRING,0,GetWideLPARAM(texture)); + SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOFGTEXTURE,CB_SELECTSTRING,0,GetWideLPARAM(texture)); } void C4ConsoleGUI::ToolsDlgSelectMaterial(C4ToolsDlg *dlg, const char *material) { - SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOMATERIAL,CB_SELECTSTRING,0,GetWideLPARAM(material)); + SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOFGMATERIAL,CB_SELECTSTRING,0,GetWideLPARAM(material)); } void C4ConsoleGUI::ToolsDlgSelectBackTexture(C4ToolsDlg *dlg, const char *texture) { - // TODO + SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGTEXTURE, CB_SELECTSTRING, 0, GetWideLPARAM(texture)); } void C4ConsoleGUI::ToolsDlgSelectBackMaterial(C4ToolsDlg *dlg, const char *material) { - // TODO + SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_SELECTSTRING, 0, GetWideLPARAM(material)); } void C4ToolsDlg::UpdateTextures() { - // Refill dlg - SendDlgItemMessage(state->hDialog,IDC_COMBOTEXTURE,CB_RESETCONTENT,0,(LPARAM)0); - // bottom-most: any invalid textures - bool fAnyEntry = false; int32_t cnt; const char *szTexture; - if (::Landscape.Mode!=C4LSC_Exact) - for (cnt=0; (szTexture=::TextureMap.GetTexture(cnt)); cnt++) - { - if (!::TextureMap.GetIndex(Material, szTexture, false)) + // Refill foreground and background combo boxes in dlg + WORD boxes[2] = { IDC_COMBOFGTEXTURE, IDC_COMBOBGTEXTURE }; + const char *materials[2] = { Material, BackMaterial }; + const char *textures[2] = { Texture, BackTexture }; + for (int i = 0; i < 2; ++i) + { + WORD box = boxes[i]; + const char *material = materials[i]; + const char *texture = textures[i]; + // clear previous + SendDlgItemMessage(state->hDialog, box, CB_RESETCONTENT, 0, (LPARAM)0); + // bottom-most: any invalid textures + bool fAnyEntry = false; int32_t cnt; const char *szTexture; + if (::Landscape.Mode != C4LSC_Exact) + for (cnt = 0; (szTexture = ::TextureMap.GetTexture(cnt)); cnt++) { - // hide normal maps from texture selection - // theoretically, they could be used for drawing but they clutter the list and they don't look good - if (!WildcardMatch("*_NRM", szTexture)) + if (!::TextureMap.GetIndex(material, szTexture, false)) { - fAnyEntry = true; - SendDlgItemMessage(state->hDialog, IDC_COMBOTEXTURE, CB_INSERTSTRING, 0, GetWideLPARAM(szTexture)); + // hide normal maps from texture selection + // theoretically, they could be used for drawing but they clutter the list and they don't look good + if (!WildcardMatch("*_NRM", szTexture)) + { + fAnyEntry = true; + SendDlgItemMessage(state->hDialog, box, CB_INSERTSTRING, 0, GetWideLPARAM(szTexture)); + } } } - } - // separator - if (fAnyEntry) - { - SendDlgItemMessage(state->hDialog,IDC_COMBOTEXTURE,CB_INSERTSTRING,0,(LPARAM)L"-------"); - } - - // atop: valid textures - for (cnt=0; (szTexture=::TextureMap.GetTexture(cnt)); cnt++) - { - // Current material-texture valid? Always valid for exact mode - if (::TextureMap.GetIndex(Material,szTexture,false) || ::Landscape.Mode==C4LSC_Exact) + // separator + if (fAnyEntry) { - SendDlgItemMessage(state->hDialog,IDC_COMBOTEXTURE,CB_INSERTSTRING,0,GetWideLPARAM(szTexture)); + SendDlgItemMessage(state->hDialog, box, CB_INSERTSTRING, 0, (LPARAM)L"-------"); } + + // atop: valid textures + for (cnt = 0; (szTexture = ::TextureMap.GetTexture(cnt)); cnt++) + { + // Current material-texture valid? Always valid for exact mode + if (::TextureMap.GetIndex(material, szTexture, false) || ::Landscape.Mode == C4LSC_Exact) + { + SendDlgItemMessage(state->hDialog, box, CB_INSERTSTRING, 0, GetWideLPARAM(szTexture)); + } + } + // reselect current + SendDlgItemMessage(state->hDialog, box, CB_SELECTSTRING, 0, GetWideLPARAM(texture)); } - // reselect current - SendDlgItemMessage(state->hDialog,IDC_COMBOTEXTURE,CB_SELECTSTRING,0,GetWideLPARAM(Texture)); } void C4ToolsDlg::NeedPreviewUpdate() @@ -1114,27 +1137,22 @@ void C4ToolsDlg::InitGradeCtrl() bool C4ToolsDlg::PopMaterial() { if (!state->hDialog) return false; - SetFocus(GetDlgItem(state->hDialog,IDC_COMBOMATERIAL)); - SendDlgItemMessage(state->hDialog,IDC_COMBOMATERIAL,CB_SHOWDROPDOWN,true,0); + SetFocus(GetDlgItem(state->hDialog,IDC_COMBOFGMATERIAL)); + SendDlgItemMessage(state->hDialog,IDC_COMBOFGMATERIAL,CB_SHOWDROPDOWN,true,0); return true; } bool C4ToolsDlg::PopTextures() { if (!state->hDialog) return false; - SetFocus(GetDlgItem(state->hDialog,IDC_COMBOTEXTURE)); - SendDlgItemMessage(state->hDialog,IDC_COMBOTEXTURE,CB_SHOWDROPDOWN,true,0); + SetFocus(GetDlgItem(state->hDialog,IDC_COMBOFGTEXTURE)); + SendDlgItemMessage(state->hDialog,IDC_COMBOFGTEXTURE,CB_SHOWDROPDOWN,true,0); return true; } void C4ToolsDlg::UpdateIFTControls() { - if (!state->hDialog) - return; - SendDlgItemMessage(state->hDialog,IDC_BUTTONNOIFT,BM_SETSTATE,(ModeIFT==0),0); - UpdateWindow(GetDlgItem(state->hDialog,IDC_BUTTONNOIFT)); - SendDlgItemMessage(state->hDialog,IDC_BUTTONIFT,BM_SETSTATE,(ModeIFT==1),0); - UpdateWindow(GetDlgItem(state->hDialog,IDC_BUTTONIFT)); + // not using IFT } void C4ToolsDlg::UpdateLandscapeModeCtrls() @@ -1166,8 +1184,6 @@ void C4ToolsDlg::EnableControls() SendDlgItemMessage(hDialog,IDC_BUTTONRECT,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)((iLandscapeMode>=C4LSC_Static) ? state->hbmRect : state->hbmRect2)); SendDlgItemMessage(hDialog,IDC_BUTTONFILL,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)((iLandscapeMode>=C4LSC_Exact) ? state->hbmFill : state->hbmFill2)); SendDlgItemMessage(hDialog,IDC_BUTTONPICKER,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)((iLandscapeMode>=C4LSC_Static) ? state->hbmPicker : state->hbmPicker2)); - SendDlgItemMessage(hDialog,IDC_BUTTONIFT,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)state->hbmIFT); - SendDlgItemMessage(hDialog,IDC_BUTTONNOIFT,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)state->hbmNoIFT); SendDlgItemMessage(hDialog,IDC_BUTTONMODEDYNAMIC,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)state->hbmDynamic); SendDlgItemMessage(hDialog,IDC_BUTTONMODESTATIC,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)state->hbmStatic); SendDlgItemMessage(hDialog,IDC_BUTTONMODEEXACT,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)state->hbmExact); @@ -1177,12 +1193,14 @@ void C4ToolsDlg::EnableControls() EnableWindow(GetDlgItem(hDialog,IDC_BUTTONRECT),(iLandscapeMode>=C4LSC_Static)); EnableWindow(GetDlgItem(hDialog,IDC_BUTTONFILL),(iLandscapeMode>=C4LSC_Exact)); EnableWindow(GetDlgItem(hDialog,IDC_BUTTONPICKER),(iLandscapeMode>=C4LSC_Static)); - EnableWindow(GetDlgItem(hDialog,IDC_BUTTONIFT),(iLandscapeMode>=C4LSC_Static)); - EnableWindow(GetDlgItem(hDialog,IDC_BUTTONNOIFT),(iLandscapeMode>=C4LSC_Static)); - EnableWindow(GetDlgItem(hDialog,IDC_COMBOMATERIAL),(iLandscapeMode>=C4LSC_Static)); - EnableWindow(GetDlgItem(hDialog,IDC_COMBOTEXTURE),(iLandscapeMode>=C4LSC_Static) && !SEqual(Material,C4TLS_MatSky)); + EnableWindow(GetDlgItem(hDialog,IDC_COMBOFGMATERIAL),(iLandscapeMode>=C4LSC_Static)); + EnableWindow(GetDlgItem(hDialog,IDC_COMBOFGTEXTURE),(iLandscapeMode>=C4LSC_Static) && !SEqual(Material,C4TLS_MatSky)); + EnableWindow(GetDlgItem(hDialog,IDC_COMBOBGMATERIAL), (iLandscapeMode >= C4LSC_Static) && !SEqual(Material, C4TLS_MatSky)); + EnableWindow(GetDlgItem(hDialog, IDC_COMBOBGTEXTURE), (iLandscapeMode >= C4LSC_Static) && !SEqual(Material, C4TLS_MatSky) && !SEqual(BackMaterial, C4TLS_MatSky)); EnableWindow(GetDlgItem(hDialog,IDC_STATICMATERIAL),(iLandscapeMode>=C4LSC_Static)); EnableWindow(GetDlgItem(hDialog,IDC_STATICTEXTURE),(iLandscapeMode>=C4LSC_Static) && !SEqual(Material,C4TLS_MatSky)); + EnableWindow(GetDlgItem(hDialog,IDC_STATICFOREGROUND), (iLandscapeMode >= C4LSC_Static)); + EnableWindow(GetDlgItem(hDialog,IDC_STATICBACKGROUND), (iLandscapeMode >= C4LSC_Static)); EnableWindow(GetDlgItem(hDialog,IDC_SLIDERGRADE),(iLandscapeMode>=C4LSC_Static)); EnableWindow(GetDlgItem(hDialog,IDC_PREVIEW),(iLandscapeMode>=C4LSC_Static)); diff --git a/src/res/engine.rc b/src/res/engine.rc index 158832579..2f07cf8b9 100644 --- a/src/res/engine.rc +++ b/src/res/engine.rc @@ -136,7 +136,7 @@ BEGIN 22,114,12,WS_EX_STATICEDGE END -IDD_TOOLS DIALOGEX 0, 0, 194, 55 +IDD_TOOLS DIALOGEX 0, 0, 335, 55 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION CAPTION "TOOLS" FONT 8, "MS Sans Serif", 0, 0, 0x1 @@ -147,13 +147,17 @@ BEGIN PUSHBUTTON "Button1",IDC_BUTTONFILL,92,2,16,16,BS_BITMAP CONTROL "Slider1",IDC_SLIDERGRADE,"msctls_trackbar32",TBS_VERT | TBS_TOP | TBS_NOTICKS | WS_TABSTOP,59,18,10,36 - LTEXT "MATERIAL",IDC_STATICMATERIAL,112,3,78,8 - LTEXT "TEXTURE",IDC_STATICTEXTURE,112,27,78,8 - PUSHBUTTON "",IDC_BUTTONNOIFT,71,20,18,15,BS_BITMAP - PUSHBUTTON "",IDC_BUTTONIFT,71,36,18,15,BS_BITMAP - COMBOBOX IDC_COMBOMATERIAL,112,12,78,100,CBS_DROPDOWNLIST | - CBS_SORT | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBOTEXTURE,112,36,78,100,CBS_DROPDOWNLIST | + LTEXT "MATERIAL",IDC_STATICMATERIAL,168,6,78,8 + LTEXT "TEXTURE",IDC_STATICTEXTURE,255,6,78,8 + LTEXT "FOREGROUND",IDC_STATICFOREGROUND,108,20,54,8 + LTEXT "BACKGROUND",IDC_STATICBACKGROUND,108,38,54,8 + COMBOBOX IDC_COMBOFGMATERIAL,168,18,78,100,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBOFGTEXTURE,252,18,78,100,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBOBGMATERIAL,168,36,78,100,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBOBGTEXTURE,252,36,78,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "",IDC_PREVIEW,"Static",SS_BLACKFRAME,24,21,33,30, WS_EX_TRANSPARENT | WS_EX_CLIENTEDGE diff --git a/src/res/resource.h b/src/res/resource.h index d71e0d630..5bcdb34ee 100644 --- a/src/res/resource.h +++ b/src/res/resource.h @@ -12,12 +12,10 @@ #define IDB_FILL2 1007 #define IDB_HALT 1008 #define IDB_HALT2 1009 -#define IDB_IFT 1010 #define IDB_LINE 1011 #define IDB_LINE2 1012 #define IDB_MOUSE 1013 #define IDB_MOUSE2 1014 -#define IDB_NOIFT 1015 #define IDB_PICKER 1016 #define IDB_PICKER2 1017 #define IDB_PLAY 1018 @@ -28,7 +26,6 @@ #define IDC_BUTTONBRUSH 2000 #define IDC_BUTTONFILL 2001 #define IDC_BUTTONHALT 2002 -#define IDC_BUTTONIFT 2003 #define IDC_BUTTONLINE 2004 #define IDC_BUTTONMODEDRAW 2005 #define IDC_BUTTONMODEDYNAMIC 2006 @@ -36,14 +33,13 @@ #define IDC_BUTTONMODEEXACT 2008 #define IDC_BUTTONMODEPLAY 2009 #define IDC_BUTTONMODESTATIC 2010 -#define IDC_BUTTONNOIFT 2011 #define IDC_BUTTONPICKER 2012 #define IDC_BUTTONPLAY 2013 #define IDC_BUTTONRECT 2014 #define IDC_BUTTONRELOADDEF 2015 #define IDC_COMBOINPUT 2016 -#define IDC_COMBOMATERIAL 2017 -#define IDC_COMBOTEXTURE 2018 +#define IDC_COMBOFGMATERIAL 2017 +#define IDC_COMBOFGTEXTURE 2018 #define IDC_EDITDATA 2019 #define IDC_EDITOUTPUT 2020 #define IDC_PREVIEW 2021 @@ -61,6 +57,10 @@ #define IDC_GFXERR_YINP 2034 #define IDC_GFXERR_FSCRN 2035 #define IDC_GFXERR_INVAL 2036 +#define IDC_STATICFOREGROUND 2037 +#define IDC_STATICBACKGROUND 2038 +#define IDC_COMBOBGMATERIAL 2039 +#define IDC_COMBOBGTEXTURE 2040 #define IDD_COMPONENT 3000 #define IDD_CONSOLE 3001 #define IDD_PROPERTIES 3002 From 8ca07b7bc47fe1b639a6b6fbf1db9f9a4b5896cf Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 9 Aug 2015 17:36:54 -0400 Subject: [PATCH 27/97] Fix left/right audio pan in OpenAL build. --- src/platform/C4SoundSystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/C4SoundSystem.cpp b/src/platform/C4SoundSystem.cpp index b27bcfc50..b49cef86c 100644 --- a/src/platform/C4SoundSystem.cpp +++ b/src/platform/C4SoundSystem.cpp @@ -439,7 +439,7 @@ void C4SoundInstance::Execute() Mix_Volume(iChannel, (iVol * MIX_MAX_VOLUME) / (100 * 256)); Mix_SetPanning(iChannel, Clamp((100 - iPan) * 256 / 100, 0, 255), Clamp((100 + iPan) * 256 / 100, 0, 255)); #elif AUDIO_TK == AUDIO_TK_OPENAL - alSource3f(iChannel, AL_POSITION, 0, 0, 0); // FIXME + alSource3f(iChannel, AL_POSITION, Clamp(float(iPan)/100.0f, -1.0f, +1.0f), 0, 0.7f); alSourcef(iChannel, AL_GAIN, float(iVol) / (100.0f*256.0f)); #endif } From d92df758a8aabdd320fc9b1273129d06a33506d7 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 9 Aug 2015 18:40:42 -0400 Subject: [PATCH 28/97] Added pitch parameter to Sound() script function and allow pitch and sound level to be modified for sounds that have already been started. Sound() called when the instance is already running used to fail. Now, it always succeeds (also for script sync safety) but updates the sound level and pitch parameters. SoundAt has not been modified since it allows creation of multiple concurrent sound instance of the same effect without object context. --- docs/sdk/script/fn/Sound.xml | 7 ++++ docs/sdk/script/fn/SoundAt.xml | 6 ++++ src/gamescript/C4GameScript.cpp | 30 +++++++++++----- src/platform/C4SoundSystem.cpp | 63 ++++++++++++++++++++++++++------- src/platform/C4SoundSystem.h | 8 +++-- 5 files changed, 89 insertions(+), 25 deletions(-) diff --git a/docs/sdk/script/fn/Sound.xml b/docs/sdk/script/fn/Sound.xml index 25b060411..b519dd856 100644 --- a/docs/sdk/script/fn/Sound.xml +++ b/docs/sdk/script/fn/Sound.xml @@ -45,9 +45,16 @@ The further away the sound effect from the player, the more quiet it is played. By default, the sound will not be hearable anymore in a distance of 700 pixels. A custom distance can be specified here. + + int + pitch + Pitch modification between -90 and 1000. Values larger than zero let the sound play the faster and at a higher pitch. The resulting speed multiplication factor is (pitch + 100) / 100. + + Plays a sound. The specified sound file has to be available in the group Sound.ocg, in the active scenario file, or in any loaded object definition. The audibility of object local sounds will depend on the position of the object relative to the visible viewports. + When a sound effect is already played in the same context (calling object or globally), it is not played again. Instead, only the volume and pitch parameters are updated. This feature can be used to adjust sound parameters live e.g. to tune the pitch of a motor sound based on its speed. FindObject(Find_ID(WindGenerator))->Sound("Fanfare", false, 50); diff --git a/docs/sdk/script/fn/SoundAt.xml b/docs/sdk/script/fn/SoundAt.xml index 6ebd975ef..c2c1f67ea 100644 --- a/docs/sdk/script/fn/SoundAt.xml +++ b/docs/sdk/script/fn/SoundAt.xml @@ -43,6 +43,12 @@ The further away the sound effect from the player, the more quiet it is played. By default, the sound will not be hearable anymore in a distance of 700 pixels. A custom distance can be specified here. + + int + pitch + Pitch modification between -90 and 1000. Values larger than zero let the sound play the faster and at a higher pitch. The resulting speed multiplication factor is (pitch + 100) / 100. + + Plays a sound at the specified position. The specified sound file has to be available in the group Sound.ocg, in the active scenario file, or in any loaded object definition. diff --git a/src/gamescript/C4GameScript.cpp b/src/gamescript/C4GameScript.cpp index 6b7c4fa9f..49bfba87f 100644 --- a/src/gamescript/C4GameScript.cpp +++ b/src/gamescript/C4GameScript.cpp @@ -485,7 +485,7 @@ static C4Void FnBlastFree(C4PropList * _this, long iX, long iY, long iLevel, Nil return C4Void(); } -static bool FnSoundAt(C4PropList * _this, C4String *szSound, long iX, long iY, Nillable iLevel, Nillable iAtPlayer, long iCustomFalloffDistance) +static bool FnSoundAt(C4PropList * _this, C4String *szSound, long iX, long iY, Nillable iLevel, Nillable iAtPlayer, long iCustomFalloffDistance, long iPitch) { // play here? if (!iAtPlayer.IsNil()) @@ -510,12 +510,12 @@ static bool FnSoundAt(C4PropList * _this, C4String *szSound, long iX, long iY, N iX += pObj->GetX(); iY += pObj->GetY(); } - StartSoundEffectAt(FnStringPar(szSound),iX,iY,iLevel,iCustomFalloffDistance); + StartSoundEffectAt(FnStringPar(szSound), iX, iY, iLevel, iCustomFalloffDistance, iPitch); // always return true (network safety!) return true; } -static bool FnSound(C4PropList * _this, C4String *szSound, bool fGlobal, Nillable iLevel, Nillable iAtPlayer, long iLoop, long iCustomFalloffDistance) +static bool FnSound(C4PropList * _this, C4String *szSound, bool fGlobal, Nillable iLevel, Nillable iAtPlayer, long iLoop, long iCustomFalloffDistance, long iPitch) { // play here? if (!iAtPlayer.IsNil()) @@ -536,14 +536,26 @@ static bool FnSound(C4PropList * _this, C4String *szSound, bool fGlobal, Nillabl // target object C4Object *pObj = NULL; if (!fGlobal) pObj = Object(_this); - // already playing? - if (iLoop >= 0 && GetSoundInstance(FnStringPar(szSound), pObj)) - return false; - // try to play effect + // play/stop? if (iLoop >= 0) - StartSoundEffect(FnStringPar(szSound),!!iLoop,iLevel,pObj, iCustomFalloffDistance); + { + // already playing? + C4SoundInstance *inst = GetSoundInstance(FnStringPar(szSound), pObj); + if (inst) + { + // then just update parameters + SoundUpdate(inst, iLevel, iPitch); + } + else + { + // try to play effect + StartSoundEffect(FnStringPar(szSound), !!iLoop, iLevel, pObj, iCustomFalloffDistance, iPitch); + } + } else - StopSoundEffect(FnStringPar(szSound),pObj); + { + StopSoundEffect(FnStringPar(szSound), pObj); + } // always return true (network safety!) return true; } diff --git a/src/platform/C4SoundSystem.cpp b/src/platform/C4SoundSystem.cpp index b49cef86c..286507423 100644 --- a/src/platform/C4SoundSystem.cpp +++ b/src/platform/C4SoundSystem.cpp @@ -47,7 +47,7 @@ public: bool Load(const char *szFileName, C4Group &hGroup); bool Load(BYTE *pData, size_t iDataLen, bool fRaw=false); // load directly from memory void Execute(); - C4SoundInstance *New(bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0); + C4SoundInstance *New(bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0, int32_t iPitch = 0); C4SoundInstance *GetInstance(C4Object *pObj); void ClearPointers(C4Object *pObj); int32_t GetStartedInstanceCount(int32_t iX, int32_t iY, int32_t iRad); // local @@ -66,7 +66,8 @@ public: ~C4SoundInstance(); protected: C4SoundEffect *pEffect; - int32_t iVolume, iPan, iChannel; + int32_t iVolume, iPan, iPitch, iChannel; + bool pitch_dirty; C4TimeMilliseconds tStarted; int32_t iNearInstanceMax; bool fLooping; @@ -77,7 +78,7 @@ public: C4Object *getObj() const { return pObj; } bool isStarted() const { return iChannel != -1; } void Clear(); - bool Create(C4SoundEffect *pEffect, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iNearInstanceMax = 0, int32_t iFalloffDistance = 0); + bool Create(C4SoundEffect *pEffect, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iNearInstanceMax = 0, int32_t iFalloffDistance = 0, int32_t inPitch = 0); bool CheckStart(); bool Start(); bool Stop(); @@ -85,6 +86,7 @@ public: void Execute(); void SetVolume(int32_t inVolume) { iVolume = inVolume; } void SetPan(int32_t inPan) { iPan = inPan; } + void SetPitch(int32_t inPitch); void SetVolumeByPos(int32_t x, int32_t y); void SetObj(C4Object *pnObj) { pObj = pnObj; } void ClearPointers(C4Object *pObj); @@ -185,13 +187,13 @@ void C4SoundEffect::Execute() } } -C4SoundInstance *C4SoundEffect::New(bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance) +C4SoundInstance *C4SoundEffect::New(bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch) { // check: too many instances? if (!fLoop && Instances >= C4MaxSoundInstances) return NULL; // create & init sound instance C4SoundInstance *pInst = new C4SoundInstance(); - if (!pInst->Create(this, fLoop, iVolume, pObj, 0, iCustomFalloffDistance)) { delete pInst; return NULL; } + if (!pInst->Create(this, fLoop, iVolume, pObj, 0, iCustomFalloffDistance, iPitch)) { delete pInst; return NULL; } // add to list AddInst(pInst); // return @@ -254,7 +256,8 @@ void C4SoundEffect::RemoveInst(C4SoundInstance *pInst) C4SoundInstance::C4SoundInstance(): pEffect (NULL), - iVolume (0), iPan (0), + iVolume(0), iPan(0), iPitch(0), + pitch_dirty(false), iChannel (-1), pNext (NULL) { @@ -271,7 +274,7 @@ void C4SoundInstance::Clear() iChannel = -1; } -bool C4SoundInstance::Create(C4SoundEffect *pnEffect, bool fLoop, int32_t inVolume, C4Object *pnObj, int32_t inNearInstanceMax, int32_t iFalloffDistance) +bool C4SoundInstance::Create(C4SoundEffect *pnEffect, bool fLoop, int32_t inVolume, C4Object *pnObj, int32_t inNearInstanceMax, int32_t iFalloffDistance, int32_t inPitch) { // Sound check if (!Config.Sound.RXSound || !pnEffect) return false; @@ -282,6 +285,7 @@ bool C4SoundInstance::Create(C4SoundEffect *pnEffect, bool fLoop, int32_t inVolu // Set tStarted = C4TimeMilliseconds::Now(); iVolume = inVolume; iPan = 0; iChannel = -1; + iPitch = inPitch; pitch_dirty = (iPitch != 0); iNearInstanceMax = inNearInstanceMax; this->iFalloffDistance = iFalloffDistance; pObj = pnObj; @@ -291,6 +295,13 @@ bool C4SoundInstance::Create(C4SoundEffect *pnEffect, bool fLoop, int32_t inVolu return true; } +void C4SoundInstance::SetPitch(int32_t inPitch) +{ + // set pitch and update on next call to Execute + iPitch = inPitch; + pitch_dirty = true; +} + bool C4SoundInstance::CheckStart() { // already started? @@ -441,6 +452,12 @@ void C4SoundInstance::Execute() #elif AUDIO_TK == AUDIO_TK_OPENAL alSource3f(iChannel, AL_POSITION, Clamp(float(iPan)/100.0f, -1.0f, +1.0f), 0, 0.7f); alSourcef(iChannel, AL_GAIN, float(iVol) / (100.0f*256.0f)); + if (pitch_dirty) + { + // set pitch; map -90..+100 range to 0.1f..2.0f + alSourcef(iChannel, AL_PITCH, Max(float(iPitch + 100) / 100.0f, 0.1f)); + pitch_dirty = false; + } #endif } } @@ -566,7 +583,7 @@ C4SoundEffect* C4SoundSystem::GetEffect(const char *szSndName) return pSfx; // Is still NULL if nothing is found } -C4SoundInstance *C4SoundSystem::NewEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance) +C4SoundInstance *C4SoundSystem::NewEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch) { // Sound not active if (!Config.Sound.RXSound) return NULL; @@ -574,7 +591,7 @@ C4SoundInstance *C4SoundSystem::NewEffect(const char *szSndName, bool fLoop, int C4SoundEffect *csfx; if (!(csfx=GetEffect(szSndName))) return NULL; // Play - return csfx->New(fLoop, iVolume, pObj, iCustomFalloffDistance); + return csfx->New(fLoop, iVolume, pObj, iCustomFalloffDistance, iPitch); } C4SoundInstance *C4SoundSystem::FindInstance(const char *szSndName, C4Object *pObj) @@ -659,20 +676,20 @@ void C4SoundSystem::ClearPointers(C4Object *pObj) pEff->ClearPointers(pObj); } -C4SoundInstance *StartSoundEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance) +C4SoundInstance *StartSoundEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch) { // Sound check if (!Config.Sound.RXSound) return NULL; // Start new - return Application.SoundSystem.NewEffect(szSndName, fLoop, iVolume, pObj, iCustomFalloffDistance); + return Application.SoundSystem.NewEffect(szSndName, fLoop, iVolume, pObj, iCustomFalloffDistance, iPitch); } -C4SoundInstance *StartSoundEffectAt(const char *szSndName, int32_t iX, int32_t iY, int32_t iVolume, int32_t iCustomFallofDistance) +C4SoundInstance *StartSoundEffectAt(const char *szSndName, int32_t iX, int32_t iY, int32_t iVolume, int32_t iCustomFallofDistance, int32_t iPitch) { // Sound check if (!Config.Sound.RXSound) return NULL; // Create - C4SoundInstance *pInst = StartSoundEffect(szSndName, false, iVolume, NULL, iCustomFallofDistance); + C4SoundInstance *pInst = StartSoundEffect(szSndName, false, iVolume, NULL, iCustomFallofDistance, iPitch); // Set volume by position if (pInst) pInst->SetVolumeByPos(iX, iY); // Return @@ -704,6 +721,7 @@ void SoundLevel(const char *szSndName, C4Object *pObj, int32_t iLevel) pInst->SetVolume(iLevel); pInst->Execute(); } + void SoundPan(const char *szSndName, C4Object *pObj, int32_t iPan) { // Find instance @@ -713,3 +731,22 @@ void SoundPan(const char *szSndName, C4Object *pObj, int32_t iPan) pInst->SetPan(iPan); pInst->Execute(); } + +void SoundPitch(const char *szSndName, C4Object *pObj, int32_t iPitch) +{ + // Find instance + C4SoundInstance *pInst = Application.SoundSystem.FindInstance(szSndName, pObj); + if (!pInst) return; + // Set pitch + pInst->SetPitch(iPitch); + pInst->Execute(); +} + +void SoundUpdate(C4SoundInstance *pInst, int32_t iLevel, int32_t iPitch) +{ + // Set sound data + pInst->SetVolume(iLevel); + pInst->SetPitch(iPitch); + // Ensure it's reflected in audio engine + pInst->Execute(); +} diff --git a/src/platform/C4SoundSystem.h b/src/platform/C4SoundSystem.h index a5797159e..29c6280e7 100644 --- a/src/platform/C4SoundSystem.h +++ b/src/platform/C4SoundSystem.h @@ -41,7 +41,7 @@ public: void Clear(); void Execute(); int32_t LoadEffects(C4Group &hGroup); - C4SoundInstance *NewEffect(const char *szSound, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0); + C4SoundInstance *NewEffect(const char *szSound, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0, int32_t iPitch = 0); C4SoundInstance *FindInstance(const char *szSound, C4Object *pObj); bool Init(); void ClearPointers(C4Object *pObj); @@ -53,12 +53,14 @@ protected: int32_t RemoveEffect(const char *szFilename); }; -C4SoundInstance *StartSoundEffect(const char *szSndName, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj=NULL, int32_t iCustomFalloffDistance=0); -C4SoundInstance *StartSoundEffectAt(const char *szSndName, int32_t iX, int32_t iY, int32_t iVolume = 100, int32_t iCustomFallofDistance=0); +C4SoundInstance *StartSoundEffect(const char *szSndName, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0, int32_t iPitch = 0); +C4SoundInstance *StartSoundEffectAt(const char *szSndName, int32_t iX, int32_t iY, int32_t iVolume = 100, int32_t iCustomFallofDistance = 0, int32_t iPitch = 0); C4SoundInstance *GetSoundInstance(const char *szSndName, C4Object *pObj); void StopSoundEffect(const char *szSndName, C4Object *pObj); void SoundLevel(const char *szSndName, C4Object *pObj, int32_t iLevel); void SoundPan(const char *szSndName, C4Object *pObj, int32_t iPan); +void SoundPitch(const char *szSndName, C4Object *pObj, int32_t iPitch); +void SoundUpdate(C4SoundInstance *inst, int32_t iLevel, int32_t iPitch); #endif From 042d00c1d2de90809aa29a9aecc540689608693d Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 9 Aug 2015 19:04:29 -0400 Subject: [PATCH 29/97] Fade airship sound pitch when motor is turned on and off. --- .../Vehicles.ocd/Airship.ocd/Script.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/planet/Objects.ocd/Vehicles.ocd/Airship.ocd/Script.c b/planet/Objects.ocd/Vehicles.ocd/Airship.ocd/Script.c index 5154afe8c..5a74f7b58 100644 --- a/planet/Objects.ocd/Vehicles.ocd/Airship.ocd/Script.c +++ b/planet/Objects.ocd/Vehicles.ocd/Airship.ocd/Script.c @@ -114,16 +114,21 @@ public func FxIntAirshipMovementTimer(object target, proplist effect, int time) CreateParticle("Smoke", i, 18, 0, 0, PV_Random(36, 2 * 36), particles, 2); } // Fan-blade sound - if (!enginesound) + if (enginesound < 50) { - enginesound = true; - Sound("FanLoop",nil,nil,nil,1); + // Fade pitch from -45 to 0 + enginesound += 5; + Sound("FanLoop",nil,nil,nil, 1, 0, enginesound - 50); } } - else if(enginesound == true) + else if(enginesound) { - Sound("FanLoop", nil, nil, nil, -1); - enginesound = false; + // Fade pitch from 0 to minimum -45, then turn off + enginesound = Max(enginesound - 10); + if (enginesound) + Sound("FanLoop", nil, nil, nil, 1, 0, enginesound - 50); + else + Sound("FanLoop", nil, nil, nil, -1); } // Wind movement if in the air From f873e81bf03b7ea5b0f5b1120953ce09ff02a661 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 9 Aug 2015 19:28:07 -0400 Subject: [PATCH 30/97] Fade airplane sound pitch when motor is turned on and off. --- .../Vehicles.ocd/Airplane.ocd/Script.c | 64 +++++++++++++++---- 1 file changed, 50 insertions(+), 14 deletions(-) diff --git a/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c b/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c index e2b17e129..3b28a860a 100644 --- a/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c +++ b/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c @@ -143,7 +143,7 @@ public func ContainedStop(object clonk) public func StartFlight(int new_throttle) { - AddEffect("IntSoundDelay",this,1,1,this); + SetPropellerSpeedTarget(100); SetAction("Fly"); throttle = new_throttle; } @@ -151,8 +151,7 @@ public func StartFlight(int new_throttle) public func StartInstantFlight(int angle, int new_throttle) { angle -= 10; - var effect = AddEffect("IntSoundDelay",this,1,1,this); - effect.Immediate = true; + SetPropellerSpeed(100); SetAction("Fly"); throttle = new_throttle; thrust = new_throttle; @@ -164,22 +163,12 @@ public func StartInstantFlight(int angle, int new_throttle) public func CancelFlight() { - RemoveEffect("IntSoundDelay",this); - Sound("PropellerLoop",0,100,nil,-1); + SetPropellerSpeedTarget(0); SetAction("Land"); rdir = 0; throttle = 0; } -private func FxIntSoundDelayTimer(object target, effect, int timer) -{ - if(timer >= 78 || (effect.Immediate && timer >= 5)) - { - Sound("PropellerLoop",0,100,nil,1); - return -1; - } -} - private func FxIntPlaneTimer(object target, effect, int timer) { //Lift @@ -367,6 +356,53 @@ public func PlaneDismount(object clonk) return true; } + +/* Propeller sound */ + +local prop_speed, prop_speed_target, prop_speed_timer; // current and target propeller speed [0, 100] + +// Instantly set new propeller speed +private func SetPropellerSpeed(int new_speed) +{ + if (prop_speed_timer) + { + RemoveTimer(this.PropellerSpeedTimer); + prop_speed_timer = false; + } + return SetPropellerSound(prop_speed = prop_speed_target = new_speed); +} + +// Schedule fading to new propeller speed +private func SetPropellerSpeedTarget(int new_speed_target) +{ + prop_speed_target = new_speed_target; + if (!prop_speed_timer) prop_speed_timer = AddTimer(this.PropellerSpeedTimer, 10); + return true; +} + +// Execute fading to new propeller speed +private func PropellerSpeedTimer() +{ + prop_speed = BoundBy(prop_speed_target, prop_speed - 10, prop_speed + 4); + if (prop_speed == prop_speed_target) + { + RemoveTimer(this.PropellerSpeedTimer); + prop_speed_timer = false; + } + return SetPropellerSound(prop_speed); +} + +// Set propeller speed sound. 0 = off, 100 = max speed. +private func SetPropellerSound(int speed) +{ + if (speed <= 0) + return Sound("PropellerLoop",0,100,nil,-1); + else + return Sound("PropellerLoop",0,100,nil,1,0,(speed-100)*2/3); +} + +/* Properties */ + func IsShipyardProduct() { return true; } local ActMap = { From a45c5afe60470105b83a1f96bebbe013f2d6637d Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 9 Aug 2015 19:41:16 -0400 Subject: [PATCH 31/97] Fix mape build. --- src/mape/cpp-handles/stub-handle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mape/cpp-handles/stub-handle.cpp b/src/mape/cpp-handles/stub-handle.cpp index 6953fc36b..33330e5aa 100644 --- a/src/mape/cpp-handles/stub-handle.cpp +++ b/src/mape/cpp-handles/stub-handle.cpp @@ -54,7 +54,7 @@ class C4Draw *pDraw = NULL; bool EraseItemSafe(const char *szFilename) {return false;} void Smoke(int32_t tx, int32_t ty, int32_t level, DWORD dwClr) {} -class C4SoundInstance *StartSoundEffectAt(const char *, int32_t, int32_t, int32_t, int32_t) { return NULL; } +class C4SoundInstance *StartSoundEffectAt(const char *, int32_t, int32_t, int32_t, int32_t, int32_t) { return NULL; } C4Config::C4Config() {} C4Config::~C4Config() {} From 134fc2799b83cd028a9ce82d5de60a515a09845a Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 9 Aug 2015 21:28:29 -0400 Subject: [PATCH 32/97] Do not remove looping sounds on inaudibility in OpenAL. This caused some sounds to not play at all when the object was inaudible at the position the sound was initially launched, but then moved into view (e.g. elevator cases or the planes in The Raid). --- src/platform/C4SoundSystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/C4SoundSystem.cpp b/src/platform/C4SoundSystem.cpp index 286507423..10c20c188 100644 --- a/src/platform/C4SoundSystem.cpp +++ b/src/platform/C4SoundSystem.cpp @@ -383,8 +383,8 @@ bool C4SoundInstance::Stop() bool C4SoundInstance::Playing() { if (!pEffect) return false; -#if AUDIO_TK == AUDIO_TK_FMOD if (fLooping) return true; +#if AUDIO_TK == AUDIO_TK_FMOD return isStarted() ? FSOUND_GetCurrentSample(iChannel) == pEffect->pSample : C4TimeMilliseconds::Now() < tStarted + pEffect->Length; #elif AUDIO_TK == AUDIO_TK_SDL_MIXER From 53d1ac8eac63353948badfd7cdf6a5e27cd0b054 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 9 Aug 2015 23:13:32 -0400 Subject: [PATCH 33/97] Fix angle adjustment for instant-flight command of airplane. It was wrong for planes flying to the left, which caused planes to fly too low in the Raid.ocs intro. --- planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c b/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c index 3b28a860a..7b34467e6 100644 --- a/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c +++ b/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c @@ -150,7 +150,8 @@ public func StartFlight(int new_throttle) public func StartInstantFlight(int angle, int new_throttle) { - angle -= 10; + if (angle < 0) angle += 360; + if (angle < 180) angle -= 10; else angle += 10; SetPropellerSpeed(100); SetAction("Fly"); throttle = new_throttle; From 5e03c9a8dbee2776c62a34afd0daab2ff9f35c86 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 9 Aug 2015 23:26:56 -0400 Subject: [PATCH 34/97] The Raid: Minor fixes, decoration, dialogue and map adjustments. --- planet/Missions.ocf/Raid.ocs/Map.bmp | Bin 74578 -> 0 bytes planet/Missions.ocf/Raid.ocs/MapBg.bmp | Bin 0 -> 74578 bytes planet/Missions.ocf/Raid.ocs/MapFg.bmp | Bin 0 -> 74578 bytes planet/Missions.ocf/Raid.ocs/Objects.c | 536 ++++++++---------- planet/Missions.ocf/Raid.ocs/Scenario.txt | 8 +- planet/Missions.ocf/Raid.ocs/Script.c | 9 +- .../Raid.ocs/System.ocg/DlgMave.c | 47 +- .../Raid.ocs/System.ocg/DlgPyrit.c | 14 + .../Raid.ocs/System.ocg/Gold_NoSell.c | 5 +- .../Raid.ocs/System.ocg/SeqAttack.c | 5 +- .../Raid.ocs/System.ocg/StringTblDE.txt | 34 +- .../Raid.ocs/System.ocg/StringTblUS.txt | 34 +- 12 files changed, 338 insertions(+), 354 deletions(-) delete mode 100644 planet/Missions.ocf/Raid.ocs/Map.bmp create mode 100644 planet/Missions.ocf/Raid.ocs/MapBg.bmp create mode 100644 planet/Missions.ocf/Raid.ocs/MapFg.bmp diff --git a/planet/Missions.ocf/Raid.ocs/Map.bmp b/planet/Missions.ocf/Raid.ocs/Map.bmp deleted file mode 100644 index 9ae6bdf6c21ff8e2daa12c4fcee574b4bbcfbfa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74578 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 literal 0 HcmV?d00001 diff --git a/planet/Missions.ocf/Raid.ocs/MapFg.bmp b/planet/Missions.ocf/Raid.ocs/MapFg.bmp new file mode 100644 index 0000000000000000000000000000000000000000..06a857df6e0a38fd0210f98d1d752c9a2b913dbc GIT binary patch literal 74578 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

P{tb++512lc}I`{;qggZZWKPF=ugp z`>#>VCv&b;Z?`P7{<^UllBini+Au8=wQfoSP#yBk4Qo z$aL$hTtww;an^&lAY=WyXsQh0toqQt;K+lN2r@@Gvmi+Vd2Yy_s|5#+O3O)dOl2N! zHiBw(&!jc7U}U39wdyxYJ(Wtpu_-#jQG=HWt#bQC2l?d4c2SvbVva!g;!Z|sJ8gKA9dmWz@*@ zx~m6iVrjx2rko97b?GMueuzDZMN-Cn0U;|*wa)3#K-W=Oo>!I|`H7>Xs0b}FKlTll z_DLGtWNIsp^lzqS=0`&uS`SjqPA25AdUg}f+~knGA<+6VTl=O{r47Jv~`5|8WlYlfT_UxZ}T9A*7vs**lsbW7KHWLmhrAE|_u zQ4s)zprwXrk(9n9l8Uc5-x=BYQpDWqA)nK=Sq#N{scP+K(~N1iz2&90U9l?1GgJg@ z6^SVnElY~7CW-x|NHRf(?o;lm77d>gC}2#oEQVGuBP}$9kt1lJi)bI=0YvrU5=N&{ zOdN4q3?wW#+T{r#Sdv7|?TMsDkc7>iE{n>%JD#;W9d9y1l&8}Ux8i6U9Q6y-@tiwk zbcGc%S67z=QgWf;MAT)FS(%EHL1aYIIN_D3zSGl?J6Grt2Ses4SlZ{Pc7gsSEvcD? z9J(l|(`Q#^H{^?==14niV>whr(_FOl8zY24Qo2&NJ76b>8ugE*5)6qnEcB$jNm^-Y zx$+v~B8YUXb33@x<`Rau0ZG4tWUA2{ns<61+sE+gUt_JL;sj4oYQu{%C^<PQ#YG^x#z*@;#+HzFk5sqsDJC?Ay+apo{M;(fwot985>j-@JQOmY+?1#Jt=iX__< z{-Bn07gp*zb)p%p!7`8e2b&HpTGHB*=$xKNmIm+-S@Ux_2)e{0lDm$=U84U`7Gs*f zca-YtouO8GFSaovg;-UNiXu&5q?4k>OHETGl7J)eUGt+ojwGyKcf*hT%10KmkP$*h zr0XhMilf&t|FBNM0$7#02`|w~siKM!9$$@G7*pdUX8ZPuh`D*Y6zQUH+f5zBYEDMBW49;OccRUlQdXba>N;6a3tlAbCio4LJA(1?RKg!b$p4z%@nQ9 zz2+wdO14(as*~u#)noGLKw7`Ym_)TkZc6oVwsSisoF9ooj=_<)tMtNf$-I*p} zFZ+qF%u$}R!|nZgUkj?)k+}C6aEW%)V#oXCaKC+yXnROfaTJPBx!`D!wB|?2kv=n^ zp+eB)wW2ACJIy5s9>-!DX31IFKkijn8ly8Q77A1AoE4Lg2u3ocCE43MO@qQ{{? zFJ82^MbeuMb3PsE_V(qi9FE+@g@InBNzYhCl#Rn|regK%n3hUlb1rI1)p_OWD*PmG zrxU)ynY9jzq|-F;Wzu|zS1yoBlGIH#RZQ;?qNKlPsDj0z;RR9=P@W_Klu6>V0|)+U zP_j}Ht=vN9!A^eT3li2;_0CL}=*`#5OJgH~G)5fBKkl&Cy5z~bVC_6=%ua+Cnykx9 zzdDcI2f)k5isLtp{gkPS9NP*rL^qR>Bvr26MgJh_yQ{05wmu6t&eDKvQ$()aC_O2< zge3RZZA}tdk8o6a+=>f5DF87bMb3G$i;+3=dlEOnWtc$VojX0e9|>>O7&}s?qXh!^#5cq0D$&f24%8sEKqQ*lj==xT7v+j!dFoTZuaO z7#tb$Lykn!p&Ny1vm>F8o4&i=xuiJ?bxrK&f;uxW2TE?0qQOy+gz)r9Ga$LWuB0`l zQkM{DOah>|nTc>2&}HR1N2Pw;$kIXi&&&@GlGG_TJ(I7h|L(jG6chz%zUC9ZFd+9m zbs~pl5XL1(!xAarl^cG0^c5Mn4Agba?VeaME!Lyj28!kV;-#g0>hg8e77 z)UBoVB^Q_+NvKf@czDV(6%(X25^~b6R^8pbRId!yp5%KbvBN(FEXoOzUEcb43hrb1 z+X80B0gS=x&tZSJ~;GOjfw#fD*(g^v_^QuwGM1EiB7 z!p|W+^hjVvIU)IEXhda7I&)<)f;Pn>Q$QyYZ+p#90aHs|aTGVnD;$YR85)ZnR@G

r1G~8IL6X-hDpM*gP(=Cgp^uQUUY(B`;ylS3 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 YA#g(Agun@b69Oj$P6(V3_*Mw~e=OuFv;Y7A literal 0 HcmV?d00001 diff --git a/planet/Missions.ocf/Raid.ocs/Objects.c b/planet/Missions.ocf/Raid.ocs/Objects.c index 11c494e0e..230821e5f 100644 --- a/planet/Missions.ocf/Raid.ocs/Objects.c +++ b/planet/Missions.ocf/Raid.ocs/Objects.c @@ -1,123 +1,98 @@ /* Automatically created objects file */ -static g_chemical, g_cabin, g_sawmill, g_workshop, g_flagpole, g_windmill, npc_newton, npc_lara, npc_lisa, npc_woody, npc_rocky, npc_mave, npc_pyrit, npc_clonko, npc_matthi, npc_dora; +static g_chemical, g_cabin, g_sawmill, g_workshop, g_windmill, g_flagpole, npc_newton, npc_lara, npc_lisa, npc_woody, npc_rocky, npc_mave, npc_pyrit, npc_clonko, npc_matthi, npc_dora; func InitializeObjects() { - var Rule_BaseRespawn01 = CreateObject(Rule_BaseRespawn, 0, 0); - Rule_BaseRespawn01->SetInventoryTransfer(true); - Rule_BaseRespawn01->SetFreeCrew(true); - - CreateObjectAbove(Grass, 1121, 429); - CreateObjectAbove(Grass, 1185, 444); + var Rule_BaseRespawn001 = CreateObject(Rule_BaseRespawn); + Rule_BaseRespawn001->SetInventoryTransfer(true); + Rule_BaseRespawn001->SetFreeCrew(true); - CreateObject(Rule_NoPowerNeed, 0, 0); + CreateObject(Rule_NoPowerNeed); - CreateObject(Rule_TeamAccount, 0, 0); + CreateObject(Rule_TeamAccount); CreateObjectAbove(EnvPack_Scarecrow, 1218, 440); CreateObjectAbove(EnvPack_Guidepost, 835, 369); - CreateObjectAbove(EnvPack_TreeTrunks, 808, 368); + CreateObject(EnvPack_TreeTrunks, 808, 368); CreateObjectAbove(SproutBerryBush, 1154, 445); - var Branch0012 = CreateObjectAbove(Branch, 1509, 664); - Branch0012->SetR(-26); - Branch0012->SetPosition(1509, 657); + var Branch001 = CreateObject(Branch, 1509, 657); + Branch001->SetR(-26); CreateObjectAbove(Trunk, 1194, 454); CreateObjectAbove(Tree_Coconut, 1487, 669); - var Tree_Coniferous0018 = CreateObjectAbove(Tree_Coniferous, 1068, 408); - Tree_Coniferous0018->SetR(6); - Tree_Coniferous0018->SetPosition(1068, 363); - var Tree_Coniferous0022 = CreateObjectAbove(Tree_Coniferous, 1032, 403); - Tree_Coniferous0022->SetR(-8); - Tree_Coniferous0022->SetPosition(1032, 358); + var Tree_Coniferous001 = CreateObject(Tree_Coniferous, 1068, 363); + Tree_Coniferous001->SetR(6); CreateObjectAbove(Tree_Coniferous, 1371, 576); CreateObjectAbove(Tree_Coniferous, 1258, 470); - CreateObjectAbove(Tree_Coniferous, 1085, 429); - CreateObjectAbove(Tree_Coniferous, 1155, 441); - var Tree_Coniferous0042 = CreateObjectAbove(Tree_Coniferous, 1302, 503); - Tree_Coniferous0042->SetR(30); - Tree_Coniferous0042->SetPosition(1302, 464); - var Tree_Coniferous0046 = CreateObjectAbove(Tree_Coniferous, 1328, 541); - Tree_Coniferous0046->SetR(20); - Tree_Coniferous0046->SetPosition(1328, 499); + var Tree_Coniferous002 = CreateObject(Tree_Coniferous, 1302, 464); + Tree_Coniferous002->SetR(30); CreateObjectAbove(Tree_Coniferous, 1219, 441); CreateObjectAbove(EnvPack_Guidepost, 2054, 521); - CreateObjectAbove(Tree_Coniferous, 2107, 520); - CreateObjectAbove(Tree_Coniferous, 2421, 612); - CreateObjectAbove(Tree_Coniferous, 2569, 576); - CreateObjectAbove(Trunk, 2631, 589); CreateObjectAbove(SproutBerryBush, 2599, 590); CreateObjectAbove(SproutBerryBush, 2521, 582); - CreateObjectAbove(SproutBerryBush, 3332, 653); + CreateObject(SproutBerryBush, 3332, 645); CreateObjectAbove(SproutBerryBush, 2674, 593); - var Branch0084 = CreateObjectAbove(Branch, 2335, 607); - Branch0084->SetR(21); - Branch0084->SetPosition(2335, 600); + var Branch002 = CreateObject(Branch, 2335, 600); + Branch002->SetR(21); CreateObjectAbove(BigRock, 3273, 609); - var LargeCaveMushroom0086 = CreateObjectAbove(LargeCaveMushroom, 2877, 1342); - LargeCaveMushroom0086->SetClrModulation(0xffe1dde0); - var LargeCaveMushroom0090 = CreateObjectAbove(LargeCaveMushroom, 3101, 1371); - LargeCaveMushroom0090->SetClrModulation(0xffdde4da); - var LargeCaveMushroom0094 = CreateObjectAbove(LargeCaveMushroom, 2971, 1339); - LargeCaveMushroom0094->SetClrModulation(0xffe0eef5); - var LargeCaveMushroom0098 = CreateObjectAbove(LargeCaveMushroom, 2793, 1261); - LargeCaveMushroom0098->SetClrModulation(0xffdcd2ed); + var LargeCaveMushroom001 = CreateObjectAbove(LargeCaveMushroom, 2877, 1342); + LargeCaveMushroom001->SetClrModulation(0xffe1dde0); + var LargeCaveMushroom002 = CreateObjectAbove(LargeCaveMushroom, 3101, 1371); + LargeCaveMushroom002->SetClrModulation(0xffdde4da); + var LargeCaveMushroom003 = CreateObjectAbove(LargeCaveMushroom, 2971, 1339); + LargeCaveMushroom003->SetClrModulation(0xffe0eef5); + var LargeCaveMushroom004 = CreateObjectAbove(LargeCaveMushroom, 2793, 1261); + LargeCaveMushroom004->SetClrModulation(0xffdcd2ed); CreateObjectAbove(Tree_Coconut, 1822, 679); + CreateObjectAbove(Tree_Coniferous2, 2567, 583); + CreateObjectAbove(Tree_Coniferous2, 2107, 528); + var Tree_Coniferous2001 = CreateObject(Tree_Coniferous2, 1328, 499); + Tree_Coniferous2001->SetR(20); + CreateObjectAbove(Tree_Coniferous2, 1157, 449); - var Basement0123 = CreateObjectAbove(Basement, 2720, 615); - Basement0123->SetCategory(C4D_StaticBack); - var Basement0122 = CreateObjectAbove(Basement, 2897, 603); - Basement0122->SetCategory(C4D_StaticBack); - var Basement0121 = CreateObjectAbove(Basement, 2935, 604); - Basement0121->SetCategory(C4D_StaticBack); - var Basement0120 = CreateObjectAbove(Basement, 2967, 604); - Basement0120->SetCategory(C4D_StaticBack); - var Basement0119 = CreateObjectAbove(Basement, 3019, 622); - Basement0119->SetCategory(C4D_StaticBack); - var Basement0118 = CreateObjectAbove(Basement, 3061, 624); - Basement0118->SetCategory(C4D_StaticBack); - var Basement0117 = CreateObjectAbove(Basement, 3171, 607); - Basement0117->SetCategory(C4D_StaticBack); - var Basement0116 = CreateObjectAbove(Basement, 3205, 608); - Basement0116->SetCategory(C4D_StaticBack); - var Basement0115 = CreateObjectAbove(Basement, 3230, 609); - Basement0115->SetCategory(C4D_StaticBack); - var Basement0114 = CreateObjectAbove(Basement, 2837, 616); - Basement0114->SetCategory(C4D_StaticBack); - var Basement0113 = CreateObjectAbove(Basement, 2796, 617); - Basement0113->SetCategory(C4D_StaticBack); - var Basement0112 = CreateObjectAbove(Basement, 2758, 616); - Basement0112->SetCategory(C4D_StaticBack); - var Basement0111 = CreateObjectAbove(Basement, 581, 374); - Basement0111->SetCategory(C4D_StaticBack); - var Basement0110 = CreateObjectAbove(Basement, 733, 373); - Basement0110->SetCategory(C4D_StaticBack); - var Basement0109 = CreateObjectAbove(Basement, 618, 374); - Basement0109->SetCategory(C4D_StaticBack); - var Basement0108 = CreateObjectAbove(Basement, 93, 395); - Basement0108->SetCategory(C4D_StaticBack); - var Basement0107 = CreateObjectAbove(Basement, 464, 372); - Basement0107->SetCategory(C4D_StaticBack); - var Basement0106 = CreateObjectAbove(Basement, 758, 374); - Basement0106->SetCategory(C4D_StaticBack); + CreateObjectAbove(Tree_Coniferous, 1102, 432); - var Foundry0124 = CreateObjectAbove(Foundry, 944, 782); - var Foundry0127 = CreateObjectAbove(Foundry, 2958, 596); + var Tree_Coniferous2002 = CreateObject(Tree_Coniferous2, 1032, 358); + Tree_Coniferous2002->SetR(-8); + CreateObjectAbove(Tree_Coniferous3, 2359, 624); + CreateObjectAbove(Tree_Coniferous3, 2424, 609); + + CreateObject(Basement, 758, 370); + CreateObject(Basement, 464, 368); + CreateObject(Basement, 93, 391); + CreateObject(Basement, 618, 370); + CreateObject(Basement, 733, 369); + CreateObject(Basement, 581, 370); + CreateObject(Basement, 2758, 612); + CreateObject(Basement, 2796, 613); + CreateObject(Basement, 2837, 612); + CreateObject(Basement, 3233, 603); + CreateObject(Basement, 3205, 604); + CreateObject(Basement, 3171, 603); + CreateObject(Basement, 3061, 620); + CreateObject(Basement, 3019, 618); + CreateObject(Basement, 2967, 600); + CreateObject(Basement, 2935, 600); + CreateObject(Basement, 2897, 599); + CreateObject(Basement, 2720, 611); + + var Foundry002 = CreateObjectAbove(Foundry, 944, 782); + var Foundry001 = CreateObjectAbove(Foundry, 2958, 596); g_chemical = CreateObjectAbove(ChemicalLab, 734, 365); g_chemical.StaticSaveVar = "g_chemical"; @@ -132,7 +107,7 @@ func InitializeObjects() g_workshop = CreateObjectAbove(ToolsWorkshop, 609, 365); g_workshop.StaticSaveVar = "g_workshop"; - var ToolsWorkshop0139 = CreateObjectAbove(ToolsWorkshop, 2905, 595); + var ToolsWorkshop001 = CreateObjectAbove(ToolsWorkshop, 2905, 595); CreateObjectAbove(Castle_ConstructionSite, 281, 343); @@ -140,41 +115,42 @@ func InitializeObjects() CreateObjectAbove(InventorsLab, 3212, 599); - var Shipyard0146 = CreateObjectAbove(Shipyard, 2763, 608); + var Shipyard001 = CreateObjectAbove(Shipyard, 2763, 608); CreateObjectAbove(Loom, 3080, 616); - var StoneDoor0150 = CreateObjectAbove(StoneDoor, 540, 1263); - StoneDoor0150->SetComDir(COMD_Down); + var StoneDoor001 = CreateObject(StoneDoor, 540, 1244); + StoneDoor001->SetComDir(COMD_Down); - var SpinWheel0151 = CreateObjectAbove(SpinWheel, 571, 1263); - SpinWheel0151->SetStoneDoor(StoneDoor0150); - - var WindGenerator0269 = CreateObjectAbove(WindGenerator, 3163, 599); - WindGenerator0269->SetCategory(C4D_StaticBack); - - g_flagpole = CreateObjectAbove(Flagpole, 502, 369); - g_flagpole->SetNeutral(true); - g_flagpole.StaticSaveVar = "g_flagpole"; + var SpinWheel001 = CreateObjectAbove(SpinWheel, 571, 1263); + SpinWheel001->SetStoneDoor(StoneDoor001); g_windmill = CreateObjectAbove(Windmill, 665, 351); g_windmill->SetCategory(C4D_StaticBack); g_windmill.StaticSaveVar = "g_windmill"; - var Elevator0361 = CreateObjectAbove(Elevator, 76, 387); - Elevator0361->SetDir(DIR_Right); - Elevator0361->CreateShaft(530); - Elevator0361->SetCasePosition(905); + g_flagpole = CreateObjectAbove(Flagpole, 502, 369); + g_flagpole.StaticSaveVar = "g_flagpole"; + g_flagpole->SetNeutral(true); - var Lorry0369 = CreateObjectAbove(Lorry, 25, 779); - Lorry0369->SetR(11); - Lorry0369->SetPosition(25, 771); - var Lorry0371 = CreateObjectAbove(Lorry, 3188, 598); + CreateObjectAbove(WindGenerator, 3163, 599); - var Catapult0373 = CreateObjectAbove(Catapult, 2795, 608); - Catapult0373->SetRDir(4); - Catapult0373->SetObjectLayer(Catapult0373); + var Elevator001 = CreateObjectAbove(Elevator, 76, 387); + Elevator001->SetDir(DIR_Right); + Elevator001->CreateShaft(530); + Elevator001->SetCasePosition(905); + var Elevator002 = CreateObjectAbove(Elevator, 985, 782); + Elevator002->CreateShaft(30); + Elevator002->SetCasePosition(800); + var Lorry001 = CreateObject(Lorry, 25, 771); + Lorry001->SetR(11); + var Lorry002 = CreateObject(Lorry, 3188, 591); + Lorry002->SetR(6); + Lorry002->SetRDir(7); + var Catapult001 = CreateObjectAbove(Catapult, 2795, 608); + Catapult001->SetRDir(-5); + Catapult001->SetObjectLayer(Catapult001); npc_newton = CreateObjectAbove(Clonk, 226, 321); npc_newton->SetColor(0xffff); npc_newton->SetName("Newton"); @@ -242,249 +218,211 @@ func InitializeObjects() npc_dora->SetObjectLayer(npc_dora); npc_dora->SetSkin(3); - CreateObjectAbove(Fish, 1923, 729); - CreateObjectAbove(Fish, 1924, 746); + CreateObjectAbove(Fish, 1889, 728); + CreateObjectAbove(Fish, 1879, 726); - npc_dora->SetDialogue("Dora",true); + var Mosquito001 = CreateObjectAbove(Mosquito, 2292, 514); + Mosquito001->SetXDir(-6); + Mosquito001->SetCommand("Call", Mosquito001, nil, 0, nil, "MissionComplete"); - var Pickaxe0478 = npc_rocky->CreateContents(Pickaxe); + var Sickle001 = npc_matthi->CreateContents(Sickle); - npc_rocky->SetDialogue("Rocky",true); + npc_matthi->SetDialogue("Matthi",true); - var Axe0473 = npc_woody->CreateContents(Axe); - - npc_woody->SetDialogue("Woody",true); - npc_lisa->SetDialogue("Lisa",true); - npc_lara->SetDialogue("Lara",true); - - var Hammer0462 = npc_newton->CreateContents(Hammer); - - npc_newton->SetDialogue("Newton",true); - - var Bucket0460 = npc_mave->CreateContents(Bucket); - - npc_mave->SetDialogue("Mave",false); - - var Hammer0455 = npc_pyrit->CreateContents(Hammer); - var Hammer0454 = npc_pyrit->CreateContents(Hammer); - - npc_pyrit->SetDialogue("Pyrit",true); - - var Hammer0451 = npc_clonko->CreateContents(Hammer); + var Hammer001 = npc_clonko->CreateContents(Hammer); npc_clonko->SetDialogue("Clonko",true); - var Sickle0448 = npc_matthi->CreateContents(Sickle); + var Hammer002 = npc_pyrit->CreateContents(Hammer); + var Hammer003 = npc_pyrit->CreateContents(Hammer); - npc_matthi->SetDialogue("Matthi",true); + npc_pyrit->SetDialogue("Pyrit",true); + + var Bucket001 = npc_mave->CreateContents(Bucket); + + npc_mave->SetDialogue("Mave",false); + + var Hammer004 = npc_newton->CreateContents(Hammer); + + npc_newton->SetDialogue("Newton",true); + npc_lara->SetDialogue("Lara",true); + npc_lisa->SetDialogue("Lisa",true); + + var Axe001 = npc_woody->CreateContents(Axe); + + npc_woody->SetDialogue("Woody",true); + + var Pickaxe001 = npc_rocky->CreateContents(Pickaxe); + + npc_rocky->SetDialogue("Rocky",true); + npc_dora->SetDialogue("Dora",true); CreateObjectAbove(Skull, 1566, 703); CreateObjectAbove(Skull, 3124, 1378); - CreateObjectAbove(Rock, 685, 594); - CreateObjectAbove(Rock, 793, 488); - CreateObjectAbove(Rock, 1244, 515); - CreateObjectAbove(Rock, 1480, 735); - CreateObjectAbove(Rock, 794, 895); - CreateObjectAbove(Rock, 311, 447); - CreateObjectAbove(Rock, 1243, 792); - CreateObjectAbove(Rock, 1231, 737); - CreateObjectAbove(Rock, 563, 922); - CreateObjectAbove(Rock, 1219, 1088); - CreateObjectAbove(Rock, 428, 1319); - CreateObjectAbove(Rock, 2100, 951); - CreateObjectAbove(Rock, 1922, 1161); - CreateObjectAbove(Rock, 2277, 968); - CreateObjectAbove(Rock, 2405, 696); - CreateObjectAbove(Rock, 2893, 989); - CreateObjectAbove(Rock, 3131, 689); - CreateObjectAbove(Rock, 3266, 1379); + CreateObject(Rock, 685, 593); + CreateObject(Rock, 793, 487); + CreateObject(Rock, 1244, 514); + CreateObject(Rock, 1480, 734); + CreateObject(Rock, 794, 894); + CreateObject(Rock, 311, 446); + CreateObject(Rock, 1243, 791); + CreateObject(Rock, 1231, 736); + CreateObject(Rock, 563, 921); + CreateObject(Rock, 1219, 1087); + CreateObject(Rock, 428, 1318); + CreateObject(Rock, 2100, 950); + CreateObject(Rock, 1922, 1160); + CreateObject(Rock, 2277, 967); + CreateObject(Rock, 2405, 695); + CreateObject(Rock, 2893, 988); + CreateObject(Rock, 3131, 688); + CreateObject(Rock, 3266, 1378); CreateObjectAbove(Ore, 2226, 943); - Foundry0127->CreateContents(Ore); - Foundry0127->CreateContents(Ore); - Foundry0127->CreateContents(Ore); + Foundry001->CreateContents(Ore, 3); - CreateObjectAbove(Loam, 1030, 449); - CreateObjectAbove(Loam, 1122, 920); - CreateObjectAbove(Loam, 1492, 804); - CreateObjectAbove(Loam, 935, 1132); - CreateObjectAbove(Loam, 456, 1004); - CreateObjectAbove(Loam, 2315, 632); - CreateObjectAbove(Loam, 2582, 790); - CreateObjectAbove(Loam, 3056, 725); - CreateObjectAbove(Loam, 3235, 792); - CreateObjectAbove(Loam, 3167, 949); - CreateObjectAbove(Loam, 2630, 1052); - CreateObjectAbove(Loam, 3238, 1150); - CreateObjectAbove(Loam, 2734, 1245); - CreateObjectAbove(Loam, 3003, 1345); - Foundry0124->CreateContents(Loam); - Foundry0124->CreateContents(Loam); - CreateObjectAbove(Loam, 951, 1333); + CreateObject(Loam, 1030, 446); + CreateObject(Loam, 1122, 917); + CreateObject(Loam, 1492, 801); + CreateObjectAbove(Loam, 926, 1166); + CreateObject(Loam, 456, 1001); + CreateObject(Loam, 2315, 629); + CreateObject(Loam, 2582, 787); + CreateObject(Loam, 3056, 722); + CreateObject(Loam, 3235, 789); + CreateObject(Loam, 3167, 946); + CreateObject(Loam, 2630, 1049); + CreateObject(Loam, 3238, 1147); + CreateObject(Loam, 2734, 1242); + CreateObject(Loam, 3003, 1342); + Foundry002->CreateContents(Loam, 2); + CreateObject(Loam, 951, 1330); CreateObjectAbove(Loam, 970, 1355); - CreateObjectAbove(Loam, 952, 1364); - CreateObjectAbove(Loam, 808, 1336); - CreateObjectAbove(Loam, 737, 1322); - CreateObjectAbove(Loam, 652, 1280); - CreateObjectAbove(Loam, 797, 1391); - CreateObjectAbove(Loam, 1021, 1339); + CreateObjectAbove(Loam, 952, 1399); + CreateObject(Loam, 808, 1333); + CreateObject(Loam, 737, 1319); + CreateObject(Loam, 652, 1277); + CreateObject(Loam, 797, 1388); + CreateObjectAbove(Loam, 1012, 1391); CreateObjectAbove(Loam, 492, 1263); CreateObjectAbove(Loam, 504, 1263); CreateObjectAbove(Loam, 500, 1263); CreateObjectAbove(Metal, 2217, 942); - ToolsWorkshop0139->CreateContents(Metal); - ToolsWorkshop0139->CreateContents(Metal); - ToolsWorkshop0139->CreateContents(Metal); - Shipyard0146->CreateContents(Metal); - Shipyard0146->CreateContents(Metal); - Shipyard0146->CreateContents(Metal); - Shipyard0146->CreateContents(Metal); - Lorry0371->CreateContents(Metal); - Lorry0371->CreateContents(Metal); + ToolsWorkshop001->CreateContents(Metal, 3); + Shipyard001->CreateContents(Metal, 4); + Lorry002->CreateContents(Metal, 2); - CreateObjectAbove(Moss, 1529, 681); + CreateObject(Moss, 1529, 680); - ToolsWorkshop0139->CreateContents(Wood); - ToolsWorkshop0139->CreateContents(Wood); - ToolsWorkshop0139->CreateContents(Wood); - Shipyard0146->CreateContents(Wood); - Shipyard0146->CreateContents(Wood); - Shipyard0146->CreateContents(Wood); - Shipyard0146->CreateContents(Wood); + ToolsWorkshop001->CreateContents(Wood, 3); + Shipyard001->CreateContents(Wood, 4); - var Crate0548 = CreateObjectAbove(Crate, 2836, 607); + ToolsWorkshop001->CreateContents(Pickaxe, 2); - var Hammer0549 = Crate0548->CreateContents(Hammer); - Hammer0549->SetR(50); - ToolsWorkshop0139->CreateContents(Hammer); - ToolsWorkshop0139->CreateContents(Hammer); + Lorry001->CreateContents(Axe, 3); - Foundry0124->CreateContents(Bucket); - Foundry0124->CreateContents(Bucket); - Foundry0124->CreateContents(Bucket); + var Crate001 = CreateObjectAbove(Crate, 2836, 607); + + Crate001->CreateContents(Hammer); + ToolsWorkshop001->CreateContents(Hammer, 2); + + Foundry002->CreateContents(Bucket, 3); CreateObjectAbove(Bucket, 435, 1271); - Lorry0369->CreateContents(Axe); - Lorry0369->CreateContents(Axe); - Lorry0369->CreateContents(Axe); - - ToolsWorkshop0139->CreateContents(Pickaxe); - ToolsWorkshop0139->CreateContents(Pickaxe); - CreateObjectAbove(Crate, 2849, 607); CreateObjectAbove(Crate, 444, 1271); CreateObjectAbove(Crate, 473, 1263); CreateObjectAbove(Crate, 403, 1271); - var Barrel0560 = Foundry0124->CreateContents(Barrel); - Barrel0560->SetColor(0xff000000); - Barrel0560->AddRestoreMode(Foundry0124); - var Barrel0562 = Foundry0124->CreateContents(Barrel); - Barrel0562->SetColor(0xff000000); - Barrel0562->AddRestoreMode(Foundry0124); - var Barrel0564 = CreateObjectAbove(Barrel, 484, 367); - Barrel0564->SetR(23); - Barrel0564->SetColor(0xff000000); - Barrel0564->SetObjectLayer(Barrel0564); - Barrel0564->SetPosition(484, 361); - var Barrel0566 = CreateObjectAbove(Barrel, 648, 351); - Barrel0566->SetR(-22); - Barrel0566->SetColor(0xff000000); - Barrel0566->SetObjectLayer(Barrel0566); - Barrel0566->SetPosition(648, 345); - var Barrel0568 = CreateObjectAbove(Barrel, 244, 321); - Barrel0568->SetColor(0xff000000); - Barrel0568->SetObjectLayer(Barrel0568); - var Barrel0570 = CreateObjectAbove(Barrel, 396, 343); - Barrel0570->SetColor(0xff000000); - Barrel0570->SetObjectLayer(Barrel0570); + var Barrel001 = Foundry002->CreateContents(Barrel); + Barrel001->AddRestoreMode(Foundry002, 944, 757); + Barrel001->SetColor(0xff000000); + var Barrel002 = Foundry002->CreateContents(Barrel); + Barrel002->AddRestoreMode(Foundry002, 944, 757); + Barrel002->SetColor(0xff000000); + var Barrel003 = CreateObject(Barrel, 484, 361); + Barrel003->SetR(23); + Barrel003->SetColor(0xff000000); + Barrel003->SetObjectLayer(Barrel003); + var Barrel004 = CreateObject(Barrel, 648, 345); + Barrel004->SetR(-22); + Barrel004->SetColor(0xff000000); + Barrel004->SetObjectLayer(Barrel004); + var Barrel005 = CreateObjectAbove(Barrel, 244, 321); + Barrel005->SetColor(0xff000000); + Barrel005->SetObjectLayer(Barrel005); + var Barrel006 = CreateObjectAbove(Barrel, 396, 343); + Barrel006->SetColor(0xff000000); + Barrel006->SetObjectLayer(Barrel006); CreateObjectAbove(Mushroom, 1192, 448); - CreateObjectAbove(Mushroom, 1170, 440); + CreateObjectAbove(Mushroom, 1170, 439); CreateObjectAbove(Mushroom, 1492, 663); - CreateObjectAbove(Mushroom, 1131, 436); - CreateObjectAbove(Mushroom, 1523, 675); - CreateObjectAbove(Mushroom, 1163, 440); + CreateObjectAbove(Mushroom, 1131, 434); + CreateObjectAbove(Mushroom, 1523, 674); + CreateObjectAbove(Mushroom, 1163, 438); CreateObjectAbove(Mushroom, 1070, 414); CreateObjectAbove(Mushroom, 1010, 399); CreateObjectAbove(Mushroom, 960, 400); CreateObjectAbove(Mushroom, 1175, 440); CreateObjectAbove(Mushroom, 1120, 432); - CreateObjectAbove(Mushroom, 989, 400); - CreateObjectAbove(Mushroom, 968, 400); - CreateObjectAbove(Mushroom, 1013, 400); - CreateObjectAbove(Mushroom, 1496, 664); - CreateObjectAbove(Mushroom, 1088, 424); + CreateObjectAbove(Mushroom, 989, 398); + CreateObjectAbove(Mushroom, 968, 398); + CreateObjectAbove(Mushroom, 1013, 399); + CreateObjectAbove(Mushroom, 1496, 662); + CreateObjectAbove(Mushroom, 1088, 423); CreateObjectAbove(Mushroom, 1545, 696); - CreateObjectAbove(Mushroom, 1223, 440); + CreateObjectAbove(Mushroom, 1223, 438); CreateObjectAbove(Mushroom, 943, 399); - CreateObjectAbove(Mushroom, 1006, 400); + CreateObjectAbove(Mushroom, 1006, 399); - var Seaweed0652 = CreateObjectAbove(Seaweed, 1952, 903); - Seaweed0652->SetPhase(26); - var Seaweed0655 = CreateObjectAbove(Seaweed, 2013, 911); - Seaweed0655->SetPhase(1); - var Seaweed0658 = CreateObjectAbove(Seaweed, 1903, 887); - Seaweed0658->SetPhase(57); - var Seaweed0661 = CreateObjectAbove(Seaweed, 1983, 911); - Seaweed0661->SetPhase(35); - var Seaweed0664 = CreateObjectAbove(Seaweed, 2207, 942); - Seaweed0664->SetPhase(29); - var Seaweed0667 = CreateObjectAbove(Seaweed, 2127, 895); - Seaweed0667->SetPhase(44); - var Seaweed0670 = CreateObjectAbove(Seaweed, 2227, 943); - Seaweed0670->SetPhase(29); - var Seaweed0673 = CreateObjectAbove(Seaweed, 2191, 927); - Seaweed0673->SetPhase(29); - var Seaweed0676 = CreateObjectAbove(Seaweed, 2232, 943); - Seaweed0676->SetPhase(66); - var Seaweed0679 = CreateObjectAbove(Seaweed, 2269, 927); - Seaweed0679->SetPhase(66); - var Seaweed0682 = CreateObjectAbove(Seaweed, 2249, 935); - Seaweed0682->SetPhase(66); + CreateObjectAbove(Seaweed, 1952, 903); + CreateObjectAbove(Seaweed, 2013, 911); + CreateObjectAbove(Seaweed, 1903, 887); + CreateObjectAbove(Seaweed, 1983, 911); + CreateObjectAbove(Seaweed, 2207, 942); + CreateObjectAbove(Seaweed, 2127, 895); + CreateObjectAbove(Seaweed, 2227, 943); + CreateObjectAbove(Seaweed, 2191, 927); + CreateObjectAbove(Seaweed, 2232, 943); + CreateObjectAbove(Seaweed, 2269, 927); + CreateObjectAbove(Seaweed, 2249, 935); CreateObjectAbove(DynamiteBox, 2844, 607); CreateObjectAbove(DynamiteBox, 452, 1271); - var DynamiteBox0687 = CreateObjectAbove(DynamiteBox, 430, 1271); - DynamiteBox0687->SetR(10); - DynamiteBox0687->SetPosition(430, 1269); + var DynamiteBox001 = CreateObject(DynamiteBox, 430, 1269); + DynamiteBox001->SetR(10); - var MetalBarrel0688 = CreateObjectAbove(MetalBarrel, 395, 1271); - MetalBarrel0688->SetColor(0xff000000); - var MetalBarrel0690 = CreateObjectAbove(MetalBarrel, 421, 1271); - MetalBarrel0690->SetR(-104); - MetalBarrel0690->SetColor(0xff000000); - MetalBarrel0690->SetPosition(421, 1268); - var MetalBarrel0692 = CreateObjectAbove(MetalBarrel, 411, 1271); - MetalBarrel0692->SetColor(0xff000000); - var MetalBarrel0694 = CreateObjectAbove(MetalBarrel, 385, 1271); - MetalBarrel0694->SetColor(0xff000000); + var MetalBarrel001 = CreateObjectAbove(MetalBarrel, 395, 1271); + MetalBarrel001->SetColor(0xff000000); + var MetalBarrel002 = CreateObject(MetalBarrel, 421, 1268); + MetalBarrel002->SetR(-104); + MetalBarrel002->SetColor(0xff000000); + var MetalBarrel003 = CreateObjectAbove(MetalBarrel, 411, 1271); + MetalBarrel003->SetColor(0xff000000); + var MetalBarrel004 = CreateObjectAbove(MetalBarrel, 385, 1271); + MetalBarrel004->SetColor(0xff000000); - var PowderKeg0696 = CreateObjectAbove(PowderKeg, 378, 1271); - PowderKeg0696->SetR(99); - PowderKeg0696->SetPosition(378, 1268); - - var WindBag0698 = CreateObjectAbove(WindBag, 382, 1271); - WindBag0698->SetR(-29); - WindBag0698->SetPosition(382, 1268); - - CreateObjectAbove(Firestone, 1272, 962); - CreateObjectAbove(Firestone, 1763, 901); - CreateObjectAbove(Firestone, 1415, 709); - CreateObjectAbove(Firestone, 772, 622); - CreateObjectAbove(Firestone, 1196, 494); - CreateObjectAbove(Firestone, 345, 693); - Lorry0371->CreateContents(Firestone); - Lorry0371->CreateContents(Firestone); - CreateObjectAbove(Firestone, 2460, 1367); - CreateObjectAbove(Firestone, 2893, 672); - CreateObjectAbove(Firestone, 2998, 960); - CreateObjectAbove(Firestone, 3266, 1173); - CreateObjectAbove(Firestone, 2653, 1130); - CreateObjectAbove(Firestone, 2410, 1166); - CreateObjectAbove(Firestone, 2853, 1379); + var PowderKeg001 = CreateObject(PowderKeg, 378, 1268); + PowderKeg001->SetR(99); + var WindBag001 = CreateObject(WindBag, 382, 1268); + WindBag001->SetR(-29); + CreateObject(Firestone, 1272, 961); + CreateObject(Firestone, 1763, 900); + CreateObject(Firestone, 1415, 708); + CreateObject(Firestone, 772, 621); + CreateObject(Firestone, 1196, 493); + CreateObject(Firestone, 345, 692); + Lorry002->CreateContents(Firestone, 2); + CreateObject(Firestone, 2460, 1366); + CreateObject(Firestone, 2893, 671); + CreateObject(Firestone, 2998, 959); + CreateObject(Firestone, 3266, 1172); + CreateObject(Firestone, 2653, 1129); + CreateObject(Firestone, 2410, 1165); + CreateObject(Firestone, 2853, 1378); return true; } diff --git a/planet/Missions.ocf/Raid.ocs/Scenario.txt b/planet/Missions.ocf/Raid.ocs/Scenario.txt index 8e7d84946..81ae43a7b 100644 --- a/planet/Missions.ocf/Raid.ocs/Scenario.txt +++ b/planet/Missions.ocf/Raid.ocs/Scenario.txt @@ -13,16 +13,16 @@ Goals=Goal_Raid=1 Rules=Rule_TeamAccount=1;Rule_NoPowerNeed=1;Rule_BaseRespawn=1; [Player1] -Knowledge=Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;ChemicalLab=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Barrel=1;Dynamite=1;DynamiteBox=1;Loam=1;Bucket=1;GoldBar=1;Metal=1;Pipe=1 +Knowledge=Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;ChemicalLab=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Barrel=1;Dynamite=1;DynamiteBox=1;Loam=1;Bucket=1;GoldBar=1;Metal=1;Pipe=1;WallKit=1 [Player2] -Knowledge=Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;ChemicalLab=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Barrel=1;Dynamite=1;DynamiteBox=1;Loam=1;Bucket=1;GoldBar=1;Metal=1;Pipe=1 +Knowledge=Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;ChemicalLab=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Barrel=1;Dynamite=1;DynamiteBox=1;Loam=1;Bucket=1;GoldBar=1;Metal=1;Pipe=1;WallKit=1 [Player3] -Knowledge=Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;ChemicalLab=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Barrel=1;Dynamite=1;DynamiteBox=1;Loam=1;Bucket=1;GoldBar=1;Metal=1;Pipe=1 +Knowledge=Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;ChemicalLab=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Barrel=1;Dynamite=1;DynamiteBox=1;Loam=1;Bucket=1;GoldBar=1;Metal=1;Pipe=1;WallKit=1 [Player4] -Knowledge=Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;ChemicalLab=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Barrel=1;Dynamite=1;DynamiteBox=1;Loam=1;Bucket=1;GoldBar=1;Metal=1;Pipe=1 +Knowledge=Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;ChemicalLab=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Barrel=1;Dynamite=1;DynamiteBox=1;Loam=1;Bucket=1;GoldBar=1;Metal=1;Pipe=1;WallKit=1 [Landscape] Sky=Clouds2 diff --git a/planet/Missions.ocf/Raid.ocs/Script.c b/planet/Missions.ocf/Raid.ocs/Script.c index 94d6c9cbc..73838232f 100644 --- a/planet/Missions.ocf/Raid.ocs/Script.c +++ b/planet/Missions.ocf/Raid.ocs/Script.c @@ -21,7 +21,8 @@ static g_is_initialized, // intro started g_mave_oil_spoken, // got the key offer from Mave g_got_maves_key, // got the key from Mave g_dora_spoken, // got rumour about oil lake from Clonko - g_clonko_spoken; // got rumour about oil lake from Dora + g_clonko_spoken, // got rumour about oil lake from Dora + g_oil_delivered; // oil delivered, all done! func Initialize() { @@ -94,7 +95,8 @@ func JoinPlayer(int plr, object crew, bool no_placement) func StartAttackSequence(object chopping_clonk) { - return StartSequence("AttackSequence", 0, chopping_clonk); + if (!chopping_clonk) chopping_clonk = GetCursor(GetPlayerByIndex()); + return StartSequence("Attack", 0, chopping_clonk); } @@ -102,7 +104,8 @@ func StartAttackSequence(object chopping_clonk) func OnPlaneLoaded(object plane, object oil) { - if (!plane || !oil) return false; // disappeared in that one frame? + if (!plane || !oil || g_oil_delivered) return false; // disappeared in that one frame? + g_oil_delivered = true; oil->Enter(plane); g_goal->SetStageDone(); g_goal->SetFulfilled(); diff --git a/planet/Missions.ocf/Raid.ocs/System.ocg/DlgMave.c b/planet/Missions.ocf/Raid.ocs/System.ocg/DlgMave.c index 38449b000..4f79dbb1b 100644 --- a/planet/Missions.ocf/Raid.ocs/System.ocg/DlgMave.c +++ b/planet/Missions.ocf/Raid.ocs/System.ocg/DlgMave.c @@ -40,13 +40,15 @@ func Dlg_Mave_6(object clonk) func Dlg_Mave_7(object clonk) { - MessageBox("$Mave7$", clonk, clonk); // how? +var options = [["$Mave7$", "Dlg_Mave_Loam"], ["$Mave12$", "Dlg_Mave_Elev"], ["$MaveBye$", "StopDialogue()"]]; + MessageBox("", clonk, clonk, nil, false, options); // how cross lake? where elevator? return true; } -func Dlg_Mave_8(object clonk) +func Dlg_Mave_Loam(object clonk) { MessageBox("$Mave8$", clonk, dlg_target); // build loam + SetDialogueProgress(9); return true; } @@ -66,7 +68,15 @@ func Dlg_Mave_11(object clonk) { MessageBox("$Mave11$", clonk, dlg_target); // tools in foundry StopDialogue(); - SetDialogueProgress(9); + SetDialogueProgress(7); + return true; +} + +func Dlg_Mave_Elev(object clonk) +{ + MessageBox("$Mave13$", clonk, dlg_target); // the elevator leads to the oil chamber + StopDialogue(); + SetDialogueProgress(7); return true; } @@ -112,43 +122,49 @@ func Dlg_Mave_105(object clonk) func Dlg_Mave_106(object clonk) { - MessageBox("$Mave106$", clonk, dlg_target); // u need key + MessageBox("$Mave106$", clonk, dlg_target); // chamber is down the shaft return true; } func Dlg_Mave_107(object clonk) { - MessageBox("$Mave107$", clonk, clonk); // k key plz + MessageBox("$Mave107$", clonk, dlg_target); // u need key return true; } func Dlg_Mave_108(object clonk) { - MessageBox("$Mave108$", clonk, dlg_target); // i give key 4 gold bar - g_mave_oil_spoken = true; // this updates Pyrit's dialogue - but not enough to warrant a new attention marker + MessageBox("$Mave108$", clonk, clonk); // k key plz return true; } func Dlg_Mave_109(object clonk) +{ + MessageBox("$Mave109$", clonk, dlg_target); // i give key 4 gold bar + g_mave_oil_spoken = true; // this updates Pyrit's dialogue - but not enough to warrant a new attention marker + return true; +} + +func Dlg_Mave_110(object clonk) { // gold bar found? var gold_bar = clonk->FindContents(GoldBar); if (!gold_bar) gold_bar = FindObject(Find_AtRect(-30,-30,60,60), Find_ID(GoldBar)); if (gold_bar) return Dlg_Mave_200(clonk, gold_bar); // not found yet - MessageBox("$Mave109$", clonk, clonk); // where is gold? - return true; -} - -func Dlg_Mave_110(object clonk) -{ - MessageBox("$Mave110$", clonk, dlg_target); // no idea + MessageBox("$Mave110$", clonk, clonk); // where is gold? return true; } func Dlg_Mave_111(object clonk) { - MessageBox("$Mave111$", clonk, dlg_target); // bring nuggets 2 foundry 4 gold bar + MessageBox("$Mave111$", clonk, dlg_target); // no idea + return true; +} + +func Dlg_Mave_112(object clonk) +{ + MessageBox("$Mave112$", clonk, dlg_target); // bring nuggets 2 foundry 4 gold bar SetBroadcast(false); StopDialogue(); SetDialogueProgress(109); @@ -161,6 +177,7 @@ func Dlg_Mave_111(object clonk) func Dlg_Mave_200(object clonk, object gold_bar) { gold_bar->RemoveObject(); + g_allow_gold_sale = true; SetBroadcast(true); MessageBox("$Mave200$", clonk, clonk); // here is gold bar SetDialogueProgress(201); diff --git a/planet/Missions.ocf/Raid.ocs/System.ocg/DlgPyrit.c b/planet/Missions.ocf/Raid.ocs/System.ocg/DlgPyrit.c index d7a3e5e55..02769be42 100644 --- a/planet/Missions.ocf/Raid.ocs/System.ocg/DlgPyrit.c +++ b/planet/Missions.ocf/Raid.ocs/System.ocg/DlgPyrit.c @@ -98,6 +98,7 @@ func Dlg_Pyrit_15(object clonk) MessageBox("$Pyrit15$", clonk, dlg_target); // take con plans for plane g_pyrit_spoken = true; g_goal->SetStagePlane(); + AddTimer(this.CheckOilAtPlane, 10); SetBroadcast(false); StopDialogue(); SetDialogueProgress(16); @@ -110,6 +111,19 @@ func Dlg_Pyrit_15(object clonk) return true; } +// called every 10 frames after plane+oil task has been given +func CheckOilAtPlane() +{ + var barrel; + for (var plane in FindObjects(Find_ID(Plane))) + if (barrel = plane->FindObject(plane->Find_AtRect(-30,-10,60,20), Find_ID(MetalBarrel))) + { + RemoveTimer(Scenario.CheckOilAtPlane); + ScheduleCall(nil, Global.GameCall, 1,1, "OnPlaneLoaded", plane, barrel); + } + return true; +} + func Dlg_Pyrit_16(object clonk) { // ask how to build plane unless it has been built diff --git a/planet/Missions.ocf/Raid.ocs/System.ocg/Gold_NoSell.c b/planet/Missions.ocf/Raid.ocs/System.ocg/Gold_NoSell.c index 5651438a1..ea74fb85c 100644 --- a/planet/Missions.ocf/Raid.ocs/System.ocg/Gold_NoSell.c +++ b/planet/Missions.ocf/Raid.ocs/System.ocg/Gold_NoSell.c @@ -1,3 +1,6 @@ #appendto Nugget #appendto GoldBar -func IsValuable(){} \ No newline at end of file + +static g_allow_gold_sale; + +func IsValuable() { return g_allow_gold_sale; } \ No newline at end of file diff --git a/planet/Missions.ocf/Raid.ocs/System.ocg/SeqAttack.c b/planet/Missions.ocf/Raid.ocs/System.ocg/SeqAttack.c index 58078763e..8c4b9d95e 100644 --- a/planet/Missions.ocf/Raid.ocs/System.ocg/SeqAttack.c +++ b/planet/Missions.ocf/Raid.ocs/System.ocg/SeqAttack.c @@ -29,7 +29,7 @@ func Attack_1() pilot->SetColor(0xff101010); pilot->SetDir(DIR_Left); //plane->FaceLeft(); - plane->StartInstantFlight(270, 15); + plane->StartInstantFlight(260, 15); plane->SetXDir(-15); plane->MakeInvincible(); this.planes[i] = plane; @@ -64,8 +64,9 @@ func Attack_5() MessageBoxAll("$Attack3$", npc_lara, true); // oh god! for (var i=0; i<3; ++i) { - this.planes[i]->StartInstantFlight(280, 15); + this.planes[i]->StartInstantFlight(270, 15); this.planes[i]->SetXDir(-15); + this.planes[i]->SetYDir(0); } SetViewTarget(g_flagpole); // NPCs go nuts diff --git a/planet/Missions.ocf/Raid.ocs/System.ocg/StringTblDE.txt b/planet/Missions.ocf/Raid.ocs/System.ocg/StringTblDE.txt index 681590f99..e6b43a41c 100644 --- a/planet/Missions.ocf/Raid.ocs/System.ocg/StringTblDE.txt +++ b/planet/Missions.ocf/Raid.ocs/System.ocg/StringTblDE.txt @@ -28,9 +28,9 @@ Newton100=Hey %s! Hast du den Angriff überstanden? Newton101=Bestens. Ich konnte das Spektakel in aller Ruhe aus dem Wald beobachten. Newton102=Wir werden Monate brauchen, um alles wieder aufzubauen. Und in der Zeit sind wir ihren Angriffen schutzlos ausgesetzt. Newton103=Wer sind denn die Angreifer? -Newton104=Das sind die Schergen von \"König\" Hörx. Wir haben uns geweigert, unfaire Tribute abzuführen und nun wollen sie an uns ein Exempel statuieren. -Newton105=Wieso \"König\"? -Newton106=Er hat eine Krone auf dem Kopf. Na und? Wir haben ihn nicht gewählt. Wir werden niemals einen Herrscher anerkennen, der keine demokratische Legitimation hat! +Newton104=Das sind die Schergen von König Hörx. Wir haben uns geweigert, unfaire Tribute abzuführen und nun wollen sie an uns ein Exempel statuieren. +Newton105=Aber er ist unser König, oder? +Newton106=Er hat eine Krone auf dem Kopf. Na und? Wir haben ihn nicht gewählt. Wir werden niemals einen Herrscher anerkennen, der uns nur tyrannisiert! Newton107=Okay. Aber was wollt ihr nun tun? Newton108=Nichts. Es ist hoffnungslos. Wir werden alle sterben. Es sei denn... Newton109=...? @@ -49,9 +49,9 @@ Newton121=Viel Glück! Du wirst es brauchen. Newton200=Newton, ich habe ein Flugzeug für den Gegenschlag auf Hörx. Aber leider keinen Treibstoff. Newton200a=Newton, ich habe die Pläne für ein Flugzeug für den Gegenschlag auf Hörx. Aber leider keinen Treibstoff. -Newton201=Sehr gut, %s. Du brauchst Öl? Das ist in der Tat ein Problem. Hörx hat den Privatbesitz von Öl unter Strafe gestellt. +Newton201=Sehr gut, %s. Du brauchst Öl? Das ist in der Tat ein Problem. Hörx hat den Besitz von Öl unter Strafe gestellt. Newton202=Natürlich haben wir uns nicht daran gehalten. Aber für unsere Verteidigung und den Burgenbau mussten wir alles verkaufen. -Newton203=Hier im Dorf ist nichts mehr. Frag mal Mave in der Höhle. Der hamstert vielleicht noch etwas. +Newton203=Hier im Dorf ist nichts mehr. Aber wir haben noch Öl in der Höhle unter diesem Dorf. Frag mal Mave, neben dem Hochofen. Der passt auf den Schlüssel auf. Lara1=Wir brauchen mehr Holz. Dann schaffen wir heute vor der Dunkelheit noch das äußere Gerüst. @@ -115,24 +115,28 @@ Mave8=Du könntest meinen Hochofen nutzen, um Lehm zu bauen. Mave9=Wie funktioniert das mit dem Lehm? Mave10=Oh, das ist ganz einfach: Fülle einen Eimer{{Bucket}} mit Erde und ein Fass{{Barrel}} mit Wasser, lege beides in den Hochofen und starte die Lehmproduktion. Mave11=Die Werkzeuge im Hochofen kannst du benutzen. +Mave12=Wohin führt der Fahrstuhlschacht? +Mave13=Das ist der Fahrstuhl zur Kammer mit unseren Ölreserven. Leider ist der Weg von einem Vulkan geflutet. Hm. Vielleicht könnte man das Wasser aus dem See benutzen, um die Lava abzukühlen. +MaveBye=Tschüss. Mave100=Hi Mave. Weißt du, wo ich Öl finden könnte? -Mave101=Oh, Öl. Du weißt, dass wir auf Dekret des Königs keine privaten Vorräte haben dürfen? +Mave101=Oh, Öl. Du weißt, dass wir auf Dekret des Königs keine Vorräte haben dürfen? Mave102=Es ist wichtig. Ich will den König töten. Mave103=Das klingt nach einem noblen Plan. Vielleicht kann ich dir helfen... Mave104=Ja, bitte! -Mave105=Nicht so hastig. Es gibt da eine geheime Kammer. Sie ist inzwischen tief unter diesen Lavaseen begraben. Aber die Wände sind aus purem Granit. Also denke ich, dass die Höhle noch intakt ist. -Mave106=Um die Kammer zu betreten, brauchst du einen Schlüssel. -Mave107=Okay. Gib Schlüssel bitte. -Mave108=Ich verkaufe ihn dir für einen Goldbarren. -Mave109=Wo finde ich Gold? -Mave110=Wenn ich das wüsste, wäre ich selber mit der Spitzhacke losgezogen. Normalerweise liegen die Goldadern irgendwo im Untergrund. -Mave111=Wenn du Nuggets gefunden hast, kannst du sie bei mir im Hochofen zu einem Barren schmelzen. +Mave105=Nicht so hastig. Es gibt am unteren Ende dieses Fahrstuhlschachtes einen Weg, der zu einer Kammer führt. Sie ist inzwischen tief unter diesen Lavaseen begraben. +Mave106=Aber die Wände sind aus purem Granit. Also denke ich, dass die Höhle noch intakt ist. +Mave107=Um die Kammer zu betreten, brauchst du einen Schlüssel. +Mave108=Okay. Gib Schlüssel bitte. +Mave109=Ich verkaufe ihn dir für einen Goldbarren. +Mave110=Wo finde ich Gold? +Mave111=Wenn ich das wüsste, wäre ich selber mit der Spitzhacke losgezogen. Normalerweise liegen die Goldadern irgendwo im Untergrund. +Mave112=Wenn du Nuggets gefunden hast, kannst du sie bei mir im Hochofen zu einem Barren schmelzen. Mave200=Hier ist dein Goldbarren. Mave201=Es war mir eine Ehre, mit dir Geschäfte zu machen. Hier ist dein Schlüssel. -Mave202=Wo finde ich die versteckte Kammer? -Mave203=Sie ist tief unter den Lavaseen begraben. Vielleicht kannst du das Wasser aus dem See benutzen, um die Lava abzukühlen? +Mave202=Wo finde ich die Kammer? +Mave203=Sie ist am unteren Ende dieses Fahrstuhles, tief unter den Lavaseen begraben. Vielleicht kannst du das Wasser aus dem See benutzen, um die Lava abzukühlen? Pyrit1=Hi, bist du Pyrit? diff --git a/planet/Missions.ocf/Raid.ocs/System.ocg/StringTblUS.txt b/planet/Missions.ocf/Raid.ocs/System.ocg/StringTblUS.txt index b3dfd1d2e..6d74eb4bd 100644 --- a/planet/Missions.ocf/Raid.ocs/System.ocg/StringTblUS.txt +++ b/planet/Missions.ocf/Raid.ocs/System.ocg/StringTblUS.txt @@ -28,9 +28,9 @@ Newton100=Hey %s! Did you survive the attacks? Newton101=Yes. As you can see. I was able to watch the disaster from the forest. Newton102=It will take us months to rebuild everything. In the meantime, we'll be defenseless against their attacks. Newton103=Who are the attackers? -Newton104=It's the henchmen of \"king\" Harx. We've refused to pay unfair tributes to him. Now they want to set an example on us. -Newton105=Why \"king\"? -Newton106=He's got a crown on his head. So what? We haven't voted for him. We will never acknowledge a monarch that has no democratic legitimation! +Newton104=It's the henchmen of king Harx. We've refused to pay unfair tributes to him. Now they want to set an example on us. +Newton105=But he is our king, isn't he? +Newton106=He's got a crown on his head. So what? We haven't voted for him. We will never acknowledge a monarch who only oppresses us! Newton107=Okay. What will you do now? Newton108=Nothing. It's hopeless. We will all die. Except if... Newton109=...? @@ -49,9 +49,9 @@ Newton121=Good luck! You will need it. Newton200=Newton, I've built a plane for the counter-attack on Harx. But I don't have any fuel yet. Newton200a=Newton, I've got plans for a plane for the counter-attack on Harx. But I don't have any fuel yet. -Newton201=Very good, %s. So you need oil? That is a problem indeed. Harx has outlawed private possession of oil. +Newton201=Very good, %s. So you need oil? That is a problem indeed. Harx has outlawed possession of oil. Newton202=We don't care for his silly rules of course. But we needed to sell our oil to fund the defense and construction of the castle. -Newton203=We've got nothing left here in the village. But you could ask Mave down in the cave. He likes to have spare stockings of things. +Newton203=We've got nothing left here in the village. But we have oil a hidden chamber in the cave below this village. You could ask Mave down in the cave beside the foundry for the key. Lara1=We need more wood, so we can at least finish the scaffolds before nightfall. @@ -115,24 +115,28 @@ Mave8=You could use my foundry to build some loam. Mave9=How do I build loam? Mave10=Oh, that is easy: Fill a bucket{{Bucket}} with earth and fill a barrel{{Barrel}} with water. Then put both into the foundry and produce loam. Mave11=You can find the necessary tools in my foundry. +Mave12=Where does this elevator shaft lead? +Mave13=This elevator leads to the chamber with our oil reserves. Unfortunately, the path got flooded by the volcano. Maybe water from the lake can be used to extinguish the lava? +MaveBye=Bye. Mave100=Hi Mave. Do you have an idea where to find oil? -Mave101=Oh, oil. You know we're not supposed to own private reserves, right? +Mave101=Oh, oil. You know we're not supposed to own reserves, right? Mave102=It's very important! I'm trying to kill the king. Mave103=That sounds like a noble plan. Maybe I could help you... Mave104=Yes, please! -Mave105=Not so hasty. I've got a secret chamber. It's buried below these lava lakes but the walls are of solid granite so I think it should still be intact. -Mave106=To enter it, you need a key. -Mave107=Okay. Give key please. -Mave108=I'll sell it to you for one gold bar. -Mave109=Where can I find gold? -Mave110=If I knew that, I would mine it myself. Typically it's somewhere underground. -Mave111=When you have found gold nuggets, you can use my foundry to melt them to a shiny bar. +Mave105=Not so hasty. Down this elevator shaft there's a path that leads to a chamber. It's buried below these lava lakes now. +Mave106=But the walls are of solid granite so I think it should still be intact. +Mave107=To enter it, you need a key. +Mave108=Okay. Give key please. +Mave109=I'll sell it to you for one gold bar. +Mave110=Where can I find gold? +Mave111=If I knew that, I would mine it myself. Typically it's somewhere underground. +Mave112=When you have found gold nuggets, you can use my foundry to melt them to a shiny bar. Mave200=Here is your gold bar. Mave201=Glad to make business with you. Here is your key. -Mave202=Where can I find the hidden chamber? -Mave203=It's buried below the lava lakes. Maybe you can use water to cool the lava? +Mave202=Where can I find the oil chamber? +Mave203=It's down this elevator, buried below the lava lakes. Maybe you can use water to cool the lava? Pyrit1=Hi, are you Pyrit? From 0d16e67066da8722e46182e95052dd689dee1b1c Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Mon, 10 Aug 2015 00:34:43 -0400 Subject: [PATCH 35/97] Order mat-tex combinations by appearance in texture map instead of by palette index when zooming map to landscape. This should simplify insertion of new textures at arbitrary drawing orders without reassigning palette indices (the latter would invalidate all old maps). --- docs/sdk/material/index.xml | 3 ++- src/landscape/C4Landscape.cpp | 9 ++++++--- src/landscape/C4Texture.cpp | 28 +++++++++++++++++++++++++++- src/landscape/C4Texture.h | 4 +++- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/docs/sdk/material/index.xml b/docs/sdk/material/index.xml index 8f41b8ea6..a7e181fab 100644 --- a/docs/sdk/material/index.xml +++ b/docs/sdk/material/index.xml @@ -12,7 +12,8 @@

TexMap.txt
Lookup table for color indices in static and dynamic landscapes. Colors 0-255 are matched to a material-texture-reference, except in Map.bmp static landscapes, where colors 0-127 are matched to a material-texture reference, and 128-255 are matched to the same list of references, except they are marked 'underground'. - The engine will draw materials with a higher index above those with a lower index so that, e.g. using the standard table, rough chunks of earth will overlap water which has a smooth border. Mineral resources have an even higher index so that their rough border overlaps the earth and not the other way around. This is also the reason why there might be differing numbers of total pixels of a given material drawn than you might expect just from calculating the square sizes of the unzoomed map materials. + Each line may contain one material-texture-entry in the format Index=Material-Texture. For example, 12=Earth-earth-topsoil would define color index 12 as earth material with the texture taken from a file called earth-topsoil.png. + The engine will draw materials in the order they are defined in the TexMap file, irrespective of assigned palette indices. Materials drawn late overwrite materials drawn early so that, e.g. using the standard table, rough chunks of earth will overlap water which has a smooth border. Mineral resources have an even higher index so that their rough border overlaps the earth and not the other way around. For this reason, there might be differing numbers of total pixels of a given material drawn than you might expect just from calculating the square sizes of the unzoomed map materials. If a custom map fails with the message 'texture n undefined' you should define the specified texture in the TexMap. You should always use a paint program capable of editing indexed color palettes without modifying the palette (MS Paint is not suited for this).
*.ocm
diff --git a/src/landscape/C4Landscape.cpp b/src/landscape/C4Landscape.cpp index af18dd68a..e74ab1b8c 100644 --- a/src/landscape/C4Landscape.cpp +++ b/src/landscape/C4Landscape.cpp @@ -2239,12 +2239,15 @@ bool C4Landscape::TexOZoom(CSurface8 * sfcMap, CSurface8 * sfcMapBkg, int32_t iM int32_t iIndex; // ChunkOZoom all used textures - for (iIndex=1; iIndex0) + for (auto i = ::TextureMap.Order.begin(); i != ::TextureMap.Order.end(); ++i) + { + iIndex = *i; + if (dwpTextureUsage[iIndex] > 0) { // ChunkOZoom map to landscape - ChunkOZoom(sfcMap,sfcMapBkg,iMapX,iMapY,iMapWdt,iMapHgt,iIndex,iToX,iToY); + ChunkOZoom(sfcMap, sfcMapBkg, iMapX, iMapY, iMapWdt, iMapHgt, iIndex, iToX, iToY); } + } // Done return true; diff --git a/src/landscape/C4Texture.cpp b/src/landscape/C4Texture.cpp index 8e8be8223..b923792af 100644 --- a/src/landscape/C4Texture.cpp +++ b/src/landscape/C4Texture.cpp @@ -123,6 +123,8 @@ bool C4TextureMap::AddEntry(BYTE byIndex, const char *szMaterial, const char *sz // Landscape must be notified (new valid pixel clr) ::Landscape.HandleTexMapUpdate(); } + // Add last in order list + Order.push_back(byIndex); return true; } @@ -180,6 +182,8 @@ void C4TextureMap::Clear() } FirstTexture=NULL; fInitialized = false; + Order.clear(); + Order.reserve(C4M_MaxTexIndex); } bool C4TextureMap::LoadFlags(C4Group &hGroup, const char *szEntryName, bool *pOverloadMaterials, bool *pOverloadTextures) @@ -316,12 +320,15 @@ bool C4TextureMap::SaveMap(C4Group &hGroup, const char *szEntryName) if (fOverloadTextures) sTexMapFile.Append("# Import textures from global file as well" LineFeed "OverloadTextures" LineFeed); sTexMapFile.Append(LineFeed); // add entries - for (int32_t i = 0; i < C4M_MaxTexIndex; i++) + for (auto iter = Order.begin(); iter != Order.end(); ++iter) + { + int32_t i = *iter; if (!Entry[i].isNull()) { // compose line sTexMapFile.AppendFormat("%d=%s-%s" LineFeed, i, Entry[i].GetMaterialName(), Entry[i].GetTextureName()); } + } // create new buffer allocated with new [], because C4Group cannot handle StdStrBuf-buffers size_t iBufSize = sTexMapFile.getLength(); BYTE *pBuf = new BYTE[iBufSize]; @@ -372,7 +379,12 @@ bool C4TextureMap::HasTextures(C4Group &hGroup) void C4TextureMap::MoveIndex(BYTE byOldIndex, BYTE byNewIndex) { + if (byNewIndex == byOldIndex) return; Entry[byNewIndex] = Entry[byOldIndex]; + Entry[byOldIndex].Clear(); + auto old_entry = std::find_if(Order.begin(), Order.end(), + [byOldIndex](const int32_t &entry) { return entry == byOldIndex; }); + if (old_entry != Order.end()) *old_entry = byNewIndex; fEntriesAdded = true; } @@ -494,6 +506,20 @@ void C4TextureMap::Default() fOverloadMaterials=false; fOverloadTextures=false; fInitialized = false; + Order.clear(); + Order.reserve(C4M_MaxTexIndex); +} + +void C4TextureMap::RemoveEntry(int32_t iIndex) +{ + // remove entry from table and order vector + if (Inside(iIndex, 1, C4M_MaxTexIndex - 1)) + { + Entry[iIndex].Clear(); + auto last_entry = std::remove_if(Order.begin(), Order.end(), + [iIndex](const int32_t &entry) { return entry == iIndex; }); + Order.erase(last_entry, Order.end()); + } } void C4TextureMap::StoreMapPalette(CStdPalette *Palette, C4MaterialMap &rMaterial) diff --git a/src/landscape/C4Texture.h b/src/landscape/C4Texture.h index 6248b6819..7a4ef33f4 100644 --- a/src/landscape/C4Texture.h +++ b/src/landscape/C4Texture.h @@ -69,6 +69,7 @@ public: ~C4TextureMap(); protected: C4TexMapEntry Entry[C4M_MaxTexIndex]; + std::vector Order; // drawing order in map2landscape. Reflects order in MatMap.txt file. C4Texture *FirstTexture; bool fOverloadMaterials; bool fOverloadTextures; @@ -77,7 +78,7 @@ public: bool fEntriesAdded; public: const C4TexMapEntry *GetEntry(int32_t iIndex) const { return Inside(iIndex, 0, C4M_MaxTexIndex-1) ? &Entry[iIndex] : NULL; } - void RemoveEntry(int32_t iIndex) { if (Inside(iIndex, 1, C4M_MaxTexIndex-1)) Entry[iIndex].Clear(); } + void RemoveEntry(int32_t iIndex); void Default(); void Clear(); void StoreMapPalette(CStdPalette *, C4MaterialMap &rMaterials); @@ -98,6 +99,7 @@ public: int32_t GetTextureIndex(const char *pTexName); BYTE DefaultBkgMatTex(BYTE fg) const; protected: + friend class C4Landscape; }; extern C4TextureMap TextureMap; From 5ef76d63a9ac2b86fecfa0ded06129641e560184 Mon Sep 17 00:00:00 2001 From: Nicolas Hake Date: Sun, 16 Aug 2015 14:20:15 +0200 Subject: [PATCH 36/97] Log the same shader code as is actually compiled For whatever reason, the shader code that was passed to the compiler was different from the code that got written to the shader log. This is a huge pain in the ass when trying to debug shader errors because the line information is completely wrong. I assume this decision was a premature optimization, so I've removed it and we'll now log the exact same code as the shader compiler sees. --- src/graphics/C4Shader.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/graphics/C4Shader.cpp b/src/graphics/C4Shader.cpp index f4b265570..792da939a 100644 --- a/src/graphics/C4Shader.cpp +++ b/src/graphics/C4Shader.cpp @@ -317,19 +317,20 @@ bool C4Shader::Init(const char *szWhat, const char **szUniforms) if (hProg) Clear(); #endif + StdStrBuf VertexShader = Build(VertexSlices, true), + FragmentShader = Build(FragmentSlices, true); + // Dump if (C4Shader::IsLogging()) { ShaderLogF("******** Vertex shader for %s:", szWhat); - ShaderLog(Build(VertexSlices, true).getData()); + ShaderLog(VertexShader.getData()); ShaderLogF("******** Fragment shader for %s:", szWhat); - ShaderLog(Build(FragmentSlices, true).getData()); + ShaderLog(FragmentShader.getData()); } #ifndef USE_CONSOLE // Attempt to create shaders - StdStrBuf VertexShader = Build(VertexSlices), - FragmentShader = Build(FragmentSlices); hVert = Create(GL_VERTEX_SHADER_ARB, FormatString("%s vertex shader", szWhat).getData(), VertexShader.getData()); From b3f81ef3ede95351e4eb4e77e44b44720fa29623 Mon Sep 17 00:00:00 2001 From: David Dormagen Date: Sun, 16 Aug 2015 23:14:16 +0200 Subject: [PATCH 37/97] increased lava damage The lava now does not only do the damage via the fire system but also does some direct damage. Further increasing it might be good. Test it now. --- planet/System.ocg/Fire.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/planet/System.ocg/Fire.c b/planet/System.ocg/Fire.c index 9f0e3407e..432cbf75d 100644 --- a/planet/System.ocg/Fire.c +++ b/planet/System.ocg/Fire.c @@ -74,7 +74,8 @@ global func Incinerate( // Called if the object is submerged in incendiary material (for example in lava). global func OnInIncendiaryMaterial() { - return this->Incinerate(10, NO_OWNER); + this->DoEnergy(-7, false, FX_Call_EngFire, NO_OWNER); + return this->Incinerate(15, NO_OWNER); } // Makes the calling object non flammable. From dfebd7996cb77dbf350412cb8ac6ae6abd4fe6d4 Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Mon, 17 Aug 2015 21:49:46 -0400 Subject: [PATCH 38/97] Make sure mape loads texture map indices as specified in TexMap.txt What happens is that mape first loads the TexMap.txt, however adding all the texmap entries internally fails, because the materials and textures are not yet loaded. However, mape must first load the TexMap to see if OverloadMaterials or OverloadTextures are present in it, to know what materials/textures to actually load. --- src/mape/diskview.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/mape/diskview.c b/src/mape/diskview.c index 701f1a687..a6253d24c 100644 --- a/src/mape/diskview.c +++ b/src/mape/diskview.c @@ -185,6 +185,11 @@ static gboolean mape_disk_view_load_materials(MapeDiskView* disk_view, ); } + /* Load texture map. Note that this effectively only reads the + * OverloadMaterials and OverloadTextures flags, because the indices + * cannot be assigned yet, because materials and textures have not + * been loaded. However, materials and textures can only be loaded + * once we know whether we are overloading or not. */ texture_map = mape_texture_map_new(); if(mape_texture_map_load_map(texture_map, group, error) == FALSE) { @@ -270,6 +275,11 @@ static gboolean mape_disk_view_load_materials(MapeDiskView* disk_view, g_object_unref(texture_map); mape_mapgen_set_root_group(parent_group); + /* Load the texture map again, because now that we have materials + * and textures loaded, we can actually assign the indices in the + * texture map. */ + mape_texture_map_load_map(texture_map, group, error); + #if 0 if(overloaded_group != NULL) mape_group_destroy(overloaded_group); From a61a91798bdf4e068b73c2e79436b21d0799aa4a Mon Sep 17 00:00:00 2001 From: Maikel de Vries Date: Tue, 18 Aug 2015 12:36:46 +0200 Subject: [PATCH 39/97] move DrawMaterial to map library functions --- planet/Arena.ocf/DarkMine.ocs/Map.c | 15 ---------- .../Libraries.ocd/Map.ocd/Script.c | 19 +++++++++++++ planet/Worlds.ocf/AcidRift.ocs/Map.c | 25 +++++++---------- planet/Worlds.ocf/Chine.ocs/Map.c | 17 ----------- planet/Worlds.ocf/FloodedVeins.ocs/Map.c | 28 +++++++++---------- planet/Worlds.ocf/GoldRush.ocs/Map.c | 18 ------------ planet/Worlds.ocf/IronPeak.ocs/Map.c | 17 ----------- planet/Worlds.ocf/Krakatoa.ocs/Map.c | 17 ----------- 8 files changed, 42 insertions(+), 114 deletions(-) diff --git a/planet/Arena.ocf/DarkMine.ocs/Map.c b/planet/Arena.ocf/DarkMine.ocs/Map.c index 5cb693c0b..3148b96cd 100644 --- a/planet/Arena.ocf/DarkMine.ocs/Map.c +++ b/planet/Arena.ocf/DarkMine.ocs/Map.c @@ -240,21 +240,6 @@ public func DrawConnections(connections) /*-- Helper Functions --*/ -// Draws some material inside an island. -public func DrawMaterial(string mat, proplist onto_mask, int speck_size, int ratio) -{ - if (!speck_size) - speck_size = 4; - if (!ratio) - ratio = 15; - // Use random checker algorithm to draw patches of the material. - var rnd_checker = {Algo = MAPALGO_RndChecker, Ratio = ratio, Wdt = speck_size, Hgt = speck_size}; - rnd_checker = {Algo = MAPALGO_Turbulence, Iterations = 4, Op = rnd_checker}; - var algo = {Algo = MAPALGO_And, Op = [onto_mask, rnd_checker]}; - Draw(mat, algo); - return; -} - public func DrawVariations(string mat, int ratio, int sx, int sy) { var rand_algo = {Algo=MAPALGO_RndChecker, Ratio = ratio, Wdt = sx, Hgt = sy}; diff --git a/planet/Objects.ocd/Libraries.ocd/Map.ocd/Script.c b/planet/Objects.ocd/Libraries.ocd/Map.ocd/Script.c index 5f0b944f2..6448d2b51 100644 --- a/planet/Objects.ocd/Libraries.ocd/Map.ocd/Script.c +++ b/planet/Objects.ocd/Libraries.ocd/Map.ocd/Script.c @@ -66,6 +66,25 @@ func DrawOre(int num, array rect) { return DrawSpots("Ore", num, [8,12], [14,20] func DrawGold(int num, array rect) { return DrawSpots("Gold", num, [10,14], [10,14], rect, nil); } func DrawRock(int num, array rect) { return DrawSpots("Rock-rock", num, [20,80], [6,8], rect, nil, [["Rock-rock_cracked", 3,10], ["Granite", 6,2]]); } +// Draws the given material onto an existing mask with given size and ratio. +public func DrawMaterial(string mat, proplist onto_mask, speck_size, int ratio) +{ + // Defaults and check whether speck size is an array. + if (!speck_size) + speck_size = 4; + if (!ratio) + ratio = 15; + if (GetType(speck_size) != C4V_Array) + speck_size = [speck_size, speck_size]; + // Use random checker algorithm to draw patches of the material. + var rnd_checker = {Algo = MAPALGO_RndChecker, Ratio = ratio, Wdt = speck_size[0], Hgt = speck_size[1]}; + rnd_checker = {Algo = MAPALGO_Turbulence, Iterations = 4, Op = rnd_checker}; + var material_mask = {Algo = MAPALGO_And, Op = [onto_mask, rnd_checker]}; + // Draw the material onto the calling map object. + this->Draw(mat, material_mask); + return; +} + func DrawWaterVeins(int num, array rect) { while (num--) DrawLiquidVein("Water", 3, 5, rect); diff --git a/planet/Worlds.ocf/AcidRift.ocs/Map.c b/planet/Worlds.ocf/AcidRift.ocs/Map.c index d87a2504b..84ada61f4 100644 --- a/planet/Worlds.ocf/AcidRift.ocs/Map.c +++ b/planet/Worlds.ocf/AcidRift.ocs/Map.c @@ -1,3 +1,13 @@ +/** + Acid Rift + Mine the rubies before it's too late + + @author Sven2 +*/ + + +#include Library_Map + //static const SCENPAR_MapSize = 2; //static const SCENPAR_Difficulty = 2; @@ -152,21 +162,6 @@ func InitializeMap(proplist map) /*-- Helper Functions --*/ -// Draws some material inside an existing mask. -private func DrawMaterial(string mat, proplist onto_mask, speck_size, int ratio) -{ - if (!speck_size) - speck_size = [4,4]; - if (!ratio) - ratio = 15; - if (GetType(speck_size) != C4V_Array) speck_size = [speck_size, speck_size]; - // Use random checker algorithm to draw patches of the material. - var rnd_checker = {Algo = MAPALGO_RndChecker, Ratio = ratio, Wdt = speck_size[0], Hgt = speck_size[1]}; - rnd_checker = {Algo = MAPALGO_Turbulence, Iterations = 4, Op = rnd_checker}; - var algo = {Algo = MAPALGO_And, Op = [onto_mask, rnd_checker]}; - return Draw(mat, algo); -} - // Find places matching mask and draw spots of material on it private func DrawPatches(int num, ...) { diff --git a/planet/Worlds.ocf/Chine.ocs/Map.c b/planet/Worlds.ocf/Chine.ocs/Map.c index 91f12ea48..a171dfb70 100644 --- a/planet/Worlds.ocf/Chine.ocs/Map.c +++ b/planet/Worlds.ocf/Chine.ocs/Map.c @@ -194,20 +194,3 @@ public func DrawChineTop(proplist map, proplist chine) map->Draw("Sky", right); return; } - - -/*-- Helper Functions --*/ - -// Draws some material inside an existing mask. -public func DrawMaterial(string mat, proplist onto_mask, int speck_size, int ratio) -{ - if (!speck_size) - speck_size = 4; - if (!ratio) - ratio = 15; - // Use random checker algorithm to draw patches of the material. - var rnd_checker = {Algo = MAPALGO_RndChecker, Ratio = ratio, Wdt = speck_size, Hgt = speck_size}; - rnd_checker = {Algo = MAPALGO_Turbulence, Iterations = 4, Op = rnd_checker}; - var algo = {Algo = MAPALGO_And, Op = [onto_mask, rnd_checker]}; - return Draw(mat, algo); -} diff --git a/planet/Worlds.ocf/FloodedVeins.ocs/Map.c b/planet/Worlds.ocf/FloodedVeins.ocs/Map.c index 5e64efa11..2553fa757 100644 --- a/planet/Worlds.ocf/FloodedVeins.ocs/Map.c +++ b/planet/Worlds.ocf/FloodedVeins.ocs/Map.c @@ -185,7 +185,19 @@ public func DrawGemVeins(proplist map, int size, int difficulty) var tunnels = Duplicate("Tunnel"); var tunnels_algo = {Algo = MAPALGO_Layer, Layer = tunnels}; tunnels_algo = {Algo = MAPALGO_And, Op = [tunnels_algo, {Algo = MAPALGO_Rect, X = 0, Y = hgt - water_level, Wdt = wdt, Hgt = water_level}]}; - map->Draw("Water", tunnels_algo); + map->Draw("Water", tunnels_algo); + + // On insane the background material of the bottom part is water. + if (difficulty == 3) + { + for (var x = 0; x < wdt; x++) + { + for (var y = water_level; y < hgt; y++) + { + // TODO: wait for background pixel setting. + } + } + } return; } @@ -307,17 +319,3 @@ public func IsLineOverlap(int x1, int y1, int x2, int y2, int x3, int y3, int x4 return !a && Inside(x3, x1, x2) && Inside(y3, y1, y2); // lines are parallel return a * c >= 0 && !(a * a / (c * c + 1)) && b * c >= 0 && !(b * b/(c * c + 1)); } - -// Draws some material inside an existing mask. -public func DrawMaterial(string mat, proplist onto_mask, int speck_size, int ratio) -{ - if (!speck_size) - speck_size = 4; - if (!ratio) - ratio = 15; - // Use random checker algorithm to draw patches of the material. - var rnd_checker = {Algo = MAPALGO_RndChecker, Ratio = ratio, Wdt = speck_size, Hgt = speck_size}; - rnd_checker = {Algo = MAPALGO_Turbulence, Iterations = 4, Op = rnd_checker}; - var algo = {Algo = MAPALGO_And, Op = [onto_mask, rnd_checker]}; - return Draw(mat, algo); -} diff --git a/planet/Worlds.ocf/GoldRush.ocs/Map.c b/planet/Worlds.ocf/GoldRush.ocs/Map.c index 19819100b..1babddd0f 100644 --- a/planet/Worlds.ocf/GoldRush.ocs/Map.c +++ b/planet/Worlds.ocf/GoldRush.ocs/Map.c @@ -96,23 +96,5 @@ public func DrawMaterials(proplist rect, proplist surface) var rnd_border = {Algo = MAPALGO_And, Op = [border, rnd_checker]}; Draw("Sand", rnd_border); Draw("Earth-earth_topsoil", rnd_border); - return; } - - -/*-- Helper Functions --*/ - -// Draws some material inside an existing mask. -public func DrawMaterial(string mat, proplist onto_mask, int speck_size, int ratio) -{ - if (!speck_size) - speck_size = 4; - if (!ratio) - ratio = 15; - // Use random checker algorithm to draw patches of the material. - var rnd_checker = {Algo = MAPALGO_RndChecker, Ratio = ratio, Wdt = speck_size, Hgt = speck_size}; - rnd_checker = {Algo = MAPALGO_Turbulence, Iterations = 4, Op = rnd_checker}; - var algo = {Algo = MAPALGO_And, Op = [onto_mask, rnd_checker]}; - return Draw(mat, algo); -} diff --git a/planet/Worlds.ocf/IronPeak.ocs/Map.c b/planet/Worlds.ocf/IronPeak.ocs/Map.c index cb649a97f..19e4f6991 100644 --- a/planet/Worlds.ocf/IronPeak.ocs/Map.c +++ b/planet/Worlds.ocf/IronPeak.ocs/Map.c @@ -82,20 +82,3 @@ public func DrawMountainBorder(proplist surface) DrawMaterial("Rock-rock_cracked", border, 3, 30); return; } - - -/*-- Helper Functions --*/ - -// Draws some material inside an existing mask. -public func DrawMaterial(string mat, proplist onto_mask, int speck_size, int ratio) -{ - if (!speck_size) - speck_size = 3; - if (!ratio) - ratio = 15; - // Use random checker algorithm to draw patches of the material. - var rnd_checker = {Algo = MAPALGO_RndChecker, Ratio = ratio, Wdt = speck_size, Hgt = speck_size}; - rnd_checker = {Algo = MAPALGO_Turbulence, Iterations = 4, Op = rnd_checker}; - var algo = {Algo = MAPALGO_And, Op = [onto_mask, rnd_checker]}; - return Draw(mat, algo); -} diff --git a/planet/Worlds.ocf/Krakatoa.ocs/Map.c b/planet/Worlds.ocf/Krakatoa.ocs/Map.c index 6912665ea..b1633d5f1 100644 --- a/planet/Worlds.ocf/Krakatoa.ocs/Map.c +++ b/planet/Worlds.ocf/Krakatoa.ocs/Map.c @@ -191,20 +191,3 @@ public func DrawChasm(proplist map, proplist volcano, proplist chasm) map->Draw("Gold", core); return; } - - -/*-- Helper Functions --*/ - -// Draws some material inside an island. -public func DrawMaterial(string mat, proplist onto_mask, int speck_size, int ratio) -{ - if (!speck_size) - speck_size = 4; - if (!ratio) - ratio = 15; - // Use random checker algorithm to draw patches of the material. - var rnd_checker = {Algo = MAPALGO_RndChecker, Ratio = ratio, Wdt = speck_size, Hgt = speck_size}; - rnd_checker = {Algo = MAPALGO_Turbulence, Iterations = 4, Op = rnd_checker}; - var algo = {Algo = MAPALGO_And, Op = [onto_mask, rnd_checker]}; - return Draw(mat, algo); -} From 2aa753c6a555165853dde6f3422af2d151b13292 Mon Sep 17 00:00:00 2001 From: Maikel de Vries Date: Tue, 18 Aug 2015 18:41:26 +0200 Subject: [PATCH 40/97] acid gold mine: map script and scenario parameters The landscape and difficulty settings still require some fine tuning. --- .../Worlds.ocf/AcidGoldMine.ocs/Landscape.txt | 122 ----------- planet/Worlds.ocf/AcidGoldMine.ocs/Map.c | 170 +++++++++++++++ .../AcidGoldMine.ocs/ParameterDefs.txt | 47 +++++ .../Worlds.ocf/AcidGoldMine.ocs/Scenario.txt | 11 +- planet/Worlds.ocf/AcidGoldMine.ocs/Script.c | 199 ++++++++++-------- .../AcidGoldMine.ocs/StringTblDE.txt | 19 ++ .../AcidGoldMine.ocs/StringTblUS.txt | 19 ++ 7 files changed, 367 insertions(+), 220 deletions(-) delete mode 100644 planet/Worlds.ocf/AcidGoldMine.ocs/Landscape.txt create mode 100644 planet/Worlds.ocf/AcidGoldMine.ocs/Map.c create mode 100644 planet/Worlds.ocf/AcidGoldMine.ocs/ParameterDefs.txt create mode 100644 planet/Worlds.ocf/AcidGoldMine.ocs/StringTblDE.txt create mode 100644 planet/Worlds.ocf/AcidGoldMine.ocs/StringTblUS.txt diff --git a/planet/Worlds.ocf/AcidGoldMine.ocs/Landscape.txt b/planet/Worlds.ocf/AcidGoldMine.ocs/Landscape.txt deleted file mode 100644 index b36aee5bb..000000000 --- a/planet/Worlds.ocf/AcidGoldMine.ocs/Landscape.txt +++ /dev/null @@ -1,122 +0,0 @@ -/** - Acid world - - @author Sven2 -*/ - -overlay VaryTex { turbulence=10; algo=rndchecker; zoomX=-100; zoomY=-100; }; -overlay Mats { algo=rndchecker; a=10; zoomX=-100; zoomY=-100; turbulence=100; y=48px; hgt=168px; }; -overlay GraniteTop { algo=border; a=0; b=2; mat=Granite; oy=2px; turbulence=0; }; -overlay LavaSurround { algo=border; a=0; b=2; mat=DuroLava; oy=14px; turbulence=10; }; -overlay SoilBorder { algo=border; a=1; b=1; mat=Earth; tex=earth_midSoil; loosebounds=1; }; -overlay SideLava { mat=DuroLava; algo=bozo; turbulence=100; }; -overlay Ground { algo=poly; - point { x=-50px; y=112px; }; - point { x=0px; y=112px; }; - point { x=24px; y=98px; }; - point { x=30px; y=28px; }; - point { x=60px; y=28px; }; - point { x=72px; y=140px; }; - point { x=90px; y=140px; }; - point { x=102px; y=98px; }; - point { x=200px; y=98px; }; - point { x=200px; y=420px; }; - point { x=-50px; y=420px; }; -}; - -map AcidWorld { - - // Acid lake - overlay { mat=Acid; y=42px; sub=0; }; - overlay { mat=Acid; y=126px; }; - - // Ground - Ground { - turbulence=10; - mat=Earth; tex=earth; - - // Dark earth border - SoilBorder { a=20; b=20; }; - SoilBorder { a=2; b=2; tex=earth_topSoil; }; - - // Rock border - overlay { algo=border; mat=Rock; tex=rock_cracked; a=1; b=1;}; - - // Light earth variation - VaryTex { mat=Earth; tex=earth_dry; }; - - // In earth acid - Mats { turbulence=10000; y=140px; hgt=70px; a=3; mat=Acid; }; - Mats { turbulence=10000; y=210px; hgt=25px; a=0; mat=Acid; }; - - // In earth water - Mats { turbulence=10000; y=182px; hgt=56px; a=5; zoomX=10; zoomY=10; mat=Water; SoilBorder; }; - - // Lava bottom - overlay { turbulence=10; y=238px; hgt=20px; mat=DuroLava; loosebounds=1; GraniteTop; }; - Mats { turbulence=10000; y=266px; a=0; mat=DuroLava; loosebounds=1; SoilBorder; }; - Mats { turbulence=100; algo=sin; y=266px; a=0; mat=DuroLava; loosebounds=1; SoilBorder; }; - - // Caves - overlay Caves { algo=rndchecker; a=2; zoomX=-100; zoomY=10; mask=1; turbulence=10; y=172px; hgt=64px; - overlay {algo=border; a=3; b=0; mat=Tunnel; invert=1; - overlay {mat=Earth; tex=earth_topSoil; algo=border; a=1; b=1;}; - }; - }; - - // Ground materials - Mats { mat=Firestone; a=20; y=124px; hgt=100px; turbulence=1000; }; - Mats { mat=Rock; zoomX=10; a=5; VaryTex { mat=rock; tex=rock_cracked;};}; - Mats { mat=Coal; y=56px; hgt=140px; turbulence=1000; }; - Mats { mat=Ore; y=84px; hgt=112px; turbulence=10; }; - Mats { mat=Granite; y=196px; }; - Mats { mat=Granite; y=244px; a=1; hgt=28px; }; - overlay { algo=bozo; mat=Gold; a=10; y=270px; hgt=55px; zoomX=10; zoomY=10; turbulence=100; }; - Mats { mat=Gold; a=4; y=270px; hgt=30px; zoomX=10; zoomY=10; }; - - // Ground border - Ground { mask=1; overlay {algo=border; mat=Rock; tex=rock_cracked; a=2; b=1; turbulence=10; };}; - - // Some safety granit in pit - overlay { x=60px; y=112px; wdt=36px; hgt=39px; mat=Granite; loosebounds=1; turbulence=10; VaryTex { mat=Rock; }; }; - - // Mid cave - overlay { x=45px; y=140px; wdt=10px; hgt=17px; turbulence=10; loosebounds=1; mat=Tunnel; - overlay { x=24; y=0px; wdt=72; hgt=280px; turbulence=10; loosebounds=1; }; - SoilBorder; - }; - - }; - - // Granite border - overlay BorderL { - mat=Granite; algo=poly; turbulence=10; - - point { x=-50px; y=168px; }; - point { x=6px; y=168px; }; - point { x=12px; y=224px; }; - point { x=36px; y=300px; }; - point { x=36px; y=420px; }; - point { x=-50px; y=420px; }; - }; - overlay BorderR { - mat=Granite; algo=poly; turbulence=10; - point { x=200px; y=168px; }; - point { x=114px; y=168px; }; - point { x=108px; y=224px; }; - point { x=84px; y=300px; }; - point { x=84px; y=420px; }; - point { x=200px; y=420px; }; - }; -// overlay {mat =Granite; y=260px; }; - - BorderL { mask=1; overlay { algo=border; a=5; b=5; invert=1; mask=1; SideLava; }; }; - BorderR { mask=1; overlay { algo=border; a=5; b=5; invert=1; mask=1; SideLava; }; }; - - overlay { mat=DuroLava; y=305px; turbulence=10; loosebounds=1; }; - - // Extra gold - overlay { x=102px; y=112px; wdt=12px; hgt=6px; mat=Gold; loosebounds=1; turbulence=10; }; - overlay { x=54px; y=255px; wdt=10px; hgt=12px; mat=Gold; loosebounds=1; turbulence=10; }; - -}; \ No newline at end of file diff --git a/planet/Worlds.ocf/AcidGoldMine.ocs/Map.c b/planet/Worlds.ocf/AcidGoldMine.ocs/Map.c new file mode 100644 index 000000000..9e1cd6ad8 --- /dev/null +++ b/planet/Worlds.ocf/AcidGoldMine.ocs/Map.c @@ -0,0 +1,170 @@ +/** + Acid Gold Mine + An acid lake with a cliff leading to a volcanic gold mine. + + @author Sven2, Maikel +*/ + +#include Library_Map + + +// Called be the engine: draw the complete map here. +protected func InitializeMap(proplist map) +{ + // Retrieve the settings according to the MapSize setting. + // TODO: Change map size and rescale algorithms accordingly. + var map_size; + if (SCENPAR_MapSize == 1) + map_size = [90, 240]; + if (SCENPAR_MapSize == 2) + map_size = [90, 240]; + if (SCENPAR_MapSize == 3) + map_size = [90, 240]; + + // Set the map size and define different areas on the vertical axes. + // The horizontal size is fixed for all map sizes. + map->Resize(map_size[0], map_size[1]); + var wdt = map.Wdt; + var hgt = map.Hgt; + var acid_level = 32; // Top of the acid lake. + var acid_hills = 75; // Top of the hills in the acid lake. + var acid_bottom = 106; // Bottom of the acid lake. + var ground_middle = 160; // Middle of the solid ground. + var ground_bottom = 180; // Bottom of the solid ground. + + // Acid lake: draw first and let rest overwrite this layer. + var acid_lake = {Algo = MAPALGO_Rect, X = 0, Y = acid_level, Wdt = wdt, Hgt = hgt}; + map->Draw("Acid:Sky", acid_lake); + + // Draw the basic shape of the earth and add different earth types. + var ground = GetGroundShape(map, acid_level, acid_hills, acid_bottom); + map->Draw("Earth", ground); + map->DrawMaterial("Earth-earth_topSoil", ground, 4, 30); + map->DrawMaterial("Earth-earth_midSoil", ground, 4, 30); + map->DrawMaterial("Earth-earth_dry", ground, 4, 30); + map->DrawMaterial("Earth-earth_rough", ground, 4, 30); + var ground_border = {Algo = MAPALGO_Border, Left = [1, -1], Right = [1, -1], Top = -1, Op = ground}; + map->DrawMaterial("Rock-rock_cracked", ground_border, 4, 40); + map->DrawMaterial("Rock-rock", ground_border, 4, 40); + + // Fill the basic shape with materials. + var ground_toplayer = {Algo = MAPALGO_Rect, X = 0, Y = acid_level, Wdt = wdt, Hgt = acid_hills - acid_level}; + ground_toplayer = {Algo = MAPALGO_Turbulence, Amplitude = 12, Scale = 8, Iterations = 4, Seed = Random(65536), Op = ground_toplayer}; + ground_toplayer = {Algo = MAPALGO_And, Op = [ground, ground_toplayer]}; + var ground_middle1layer = {Algo = MAPALGO_Rect, X = 0, Y = acid_hills, Wdt = wdt, Hgt = acid_bottom - acid_hills}; + ground_middle1layer = {Algo = MAPALGO_Turbulence, Amplitude = 12, Scale = 8, Iterations = 4, Seed = Random(65536), Op = ground_middle1layer}; + ground_middle1layer = {Algo = MAPALGO_And, Op = [ground, ground_middle1layer]}; + var ground_middle2layer = {Algo = MAPALGO_Rect, X = 0, Y = acid_bottom, Wdt = wdt, Hgt = ground_middle - acid_bottom}; + ground_middle2layer = {Algo = MAPALGO_Turbulence, Amplitude = 12, Scale = 8, Iterations = 4, Seed = Random(65536), Op = ground_middle2layer}; + ground_middle2layer = {Algo = MAPALGO_And, Op = [ground, ground_middle2layer]}; + var ground_bottomlayer = {Algo = MAPALGO_Rect, X = 0, Y = ground_middle, Wdt = wdt, Hgt = ground_bottom - ground_middle}; + ground_bottomlayer = {Algo = MAPALGO_Turbulence, Amplitude = 12, Scale = 8, Iterations = 4, Seed = Random(65536), Op = ground_bottomlayer}; + ground_bottomlayer = {Algo = MAPALGO_And, Op = [ground, ground_bottomlayer]}; + // Fill the top layer with rock. + map->DrawMaterial("Rock-rock_cracked", ground_toplayer, [6, 2], 6); + map->DrawMaterial("Rock-rock", ground_toplayer, [6, 2], 6); + // Fill the first middle layer with materials and rock. + map->DrawMaterial("Rock-rock_cracked", ground_toplayer, [6, 2], 6); + map->DrawMaterial("Rock-rock_cracked", ground_toplayer, [12, 3], 6); + map->DrawMaterial("Rock-rock", ground_middle1layer, [12, 3], 6); + map->DrawMaterial("Ore", ground_middle1layer, [12, 3], 8); + map->DrawMaterial("Coal", ground_middle1layer, [12, 3], 8); + map->DrawMaterial("Firestone", ground_middle1layer, [12, 3], 8); + // Fill the second middle layer with materials and acid. + map->DrawMaterial("Granite", ground_middle2layer, [12, 2], 10); + map->DrawMaterial("Rock", ground_middle2layer, [12, 2], 8); + map->DrawMaterial("Tunnel", ground_middle2layer, [10, 4], 10); + map->DrawMaterial("Ore", ground_middle2layer, [12, 3], 5); + map->DrawMaterial("Coal", ground_middle2layer, [12, 3], 5); + map->DrawMaterial("Firestone", ground_middle2layer, [12, 3], 5); + map->DrawMaterial("Acid", ground_middle2layer, [6, 3], 10); + // Fill the bottom layer with acid and granite. + map->DrawMaterial("Granite", ground_bottomlayer, [12, 2], 10); + map->DrawMaterial("Rock", ground_bottomlayer, [12, 2], 6); + map->DrawMaterial(["Water", "Acid", "DuroLava"][SCENPAR_Difficulty - 1], ground_bottomlayer, [8, 3], 10); + map->DrawMaterial("Acid", ground_bottomlayer, [6, 3], 10); + + // Reinforce the lower parts of the acid lake, height depends on difficulty. + var lake_pit = {Algo = MAPALGO_Rect, X = 48, Y = acid_bottom - 12, Wdt = 20, Hgt = 22 - SCENPAR_Difficulty}; + lake_pit = {Algo = MAPALGO_Turbulence, Amplitude = 8, Scale = 6, Iterations = 2, Seed = Random(65536), Op = lake_pit}; + lake_pit = {Algo = MAPALGO_And, Op = [ground, lake_pit]}; + map->Draw("Granite", lake_pit); + map->DrawMaterial("Rock-rock_cracked", lake_pit, 2, 15); + map->DrawMaterial("Rock-rock", lake_pit, 2, 15); + + // Draw the map sides and the upper part of the volcano out of granite. + var granite = GetGraniteShape(map, ground_bottom); + map->Draw("Granite", granite); + map->DrawMaterial("Rock-rock_cracked", granite, 5, 25); + map->DrawMaterial("Rock-rock", granite, 5, 25); + map->DrawMaterial("DuroLava", granite, 5, 25); + map->DrawMaterial("DuroLava", granite, 2, 15); + map->Draw("Granite", {Algo = MAPALGO_Border, Wdt = 2, Op = granite}); + + // Draw the volcano using lava, granite and gold. + var lava = GetLavaShape(map, granite, ground_bottom); + var lava_gold = {Algo = MAPALGO_And, Op = [lava, {Algo = MAPALGO_Rect, X = 0, Y = ground_bottom + 8 * SCENPAR_Difficulty, Wdt = wdt, Hgt = hgt}]}; + map->Draw("DuroLava", lava); + map->DrawMaterial("Granite", lava, 5, 25); + map->DrawMaterial("Gold", lava_gold, 5, 25); + var lava_bottom = {Algo = MAPALGO_Rect, X = 0, Y = hgt - 8, Wdt = wdt, Hgt = hgt}; + var lava_bottom_rnd = {Algo = MAPALGO_Turbulence, Amplitude = 12, Scale = 8, Iterations = 4, Seed = Random(65536), Op = lava_bottom}; + lava_bottom = {Algo = MAPALGO_And, Op = [lava_bottom, lava_bottom_rnd]}; + map->Draw("DuroLava", lava_bottom); + + // Create an underground spot where wind is available. + var wind_spot = {Algo = MAPALGO_Rect, X = 38, Y = acid_bottom - 4, Wdt = 8 - SCENPAR_Difficulty, Hgt = 8 - SCENPAR_Difficulty}; + wind_spot = {Algo = MAPALGO_Turbulence, Amplitude = 4, Scale = 4, Iterations = 1, Seed = Random(65536), Op = wind_spot}; + map->Draw("Sky", wind_spot); + var wind_spot_border = {Algo = MAPALGO_Border, Wdt = 1, Op = wind_spot}; + wind_spot_border = {Algo = MAPALGO_Turbulence, Amplitude = 4, Scale = 4, Iterations = 1, Seed = Random(65536), Op = wind_spot_border}; + map->Draw("Tunnel", wind_spot_border); + + // Place some additional gold at the bottom of the acid lake. + var acid_gold = {Algo = MAPALGO_Rect, X = 82, Y = acid_hills + 4, Wdt = 5 - SCENPAR_Difficulty, Hgt = 5 - SCENPAR_Difficulty}; + acid_gold = {Algo = MAPALGO_Turbulence, Amplitude = 4, Scale = 4, Iterations = 1, Seed = Random(65536), Op = acid_gold}; + map->Draw("Gold", acid_gold); + var acid_gold_border = {Algo = MAPALGO_Border, Wdt = -1, Op = acid_gold}; + map->Draw("Granite", acid_gold_border); + + // Fix the liquid borders of the water and acid in the ground. + FixLiquidBorders(); + + // Return true to tell the engine a map has been successfully created. + return true; +} + +public func GetGroundShape(proplist map, int acid_level, int acid_hills, int acid_bottom) +{ + var wdt = map.Wdt; + var hgt = map.Hgt; + var ground_x = [0, 18, 23, 45, 54, 68, 77, 90, 90, 0]; + var ground_y = [acid_hills, acid_hills, acid_level - 10, acid_level - 10, acid_bottom, acid_bottom, acid_hills, acid_hills, hgt, hgt]; + var ground = {Algo = MAPALGO_Polygon, X = ground_x, Y = ground_y}; + var ground_rnd = {Algo = MAPALGO_Turbulence, Amplitude = 10, Scale = 10, Iterations = 4, Seed = Random(65536), Op = ground}; + ground = {Algo = MAPALGO_Or, Op = [ground, ground_rnd]}; + return ground; +} + +public func GetGraniteShape(proplist map, int ground_bottom) +{ + var wdt = map.Wdt; + var hgt = map.Hgt; + var granite_layer = {Algo = MAPALGO_Rect, X = 0, Y = ground_bottom, Wdt = wdt, Hgt = 5}; + var granite_x = [ 0, 4, 8, 24, 24, wdt-24, wdt-24, wdt-8, wdt-4, wdt, wdt, 0]; + var granite_y = [128, 128, 170, 229, hgt, hgt, 229, 170, 128, 128, hgt+20, hgt+20]; + var granite_side = {Algo = MAPALGO_Polygon, X = granite_x, Y = granite_y}; + var granite = {Algo = MAPALGO_Or, Op = [granite_side, granite_layer]}; + var granite_rnd = {Algo = MAPALGO_Turbulence, Amplitude = 12, Scale = 8, Iterations = 4, Seed = Random(65536), Op = granite}; + granite = {Algo = MAPALGO_Or, Op = [granite, granite_rnd]}; + return granite; +} + +public func GetLavaShape(proplist map, proplist granite, int ground_bottom) +{ + var wdt = map.Wdt; + var hgt = map.Hgt; + var lava = {Algo = MAPALGO_Rect, X = 0, Y = ground_bottom, Wdt = wdt, Hgt = hgt}; + lava = {Algo = MAPALGO_And, Op = [lava, {Algo = MAPALGO_Not, Op = granite}, {Algo = MAPALGO_Not, Op = granite}]}; + return lava; +} diff --git a/planet/Worlds.ocf/AcidGoldMine.ocs/ParameterDefs.txt b/planet/Worlds.ocf/AcidGoldMine.ocs/ParameterDefs.txt new file mode 100644 index 000000000..52e9fa9ae --- /dev/null +++ b/planet/Worlds.ocf/AcidGoldMine.ocs/ParameterDefs.txt @@ -0,0 +1,47 @@ +[ParameterDef] +Name=$Difficulty$ +Description=$DescDifficulty$ +ID=Difficulty +Default=1 +LeagueValue=2 + + [Options] + + [Option] + Name=$DiffNormal$ + Description=$DescDiffNormal$ + Value=1 + + [Option] + Name=$DiffHard$ + Description=$DescDiffHard$ + Value=2 + + [Option] + Name=$DiffInsane$ + Description=$DescDiffInsane$ + Value=3 + +[ParameterDef] +Name=$MapSize$ +Description=$DescMapSize$ +ID=MapSize +Default=1 +LeagueValue=1 + + [Options] + + [Option] + Name=$MapSmall$ + Description=$DescMapSmall$ + Value=1 + + [Option] + Name=$MapAverage$ + Description=$DescMapAverage$ + Value=2 + + [Option] + Name=$MapLarge$ + Description=$DescMapLarge$ + Value=3 diff --git a/planet/Worlds.ocf/AcidGoldMine.ocs/Scenario.txt b/planet/Worlds.ocf/AcidGoldMine.ocs/Scenario.txt index 234aac49a..4f3269681 100644 --- a/planet/Worlds.ocf/AcidGoldMine.ocs/Scenario.txt +++ b/planet/Worlds.ocf/AcidGoldMine.ocs/Scenario.txt @@ -7,10 +7,6 @@ Difficulty=100 [Definitions] Definition1=Objects.ocd -[Game] -Goals=Goal_Wealth=1; -Rules=Rule_TeamAccount=1;Rule_BuyAtFlagpole=1; - [Player1] Crew=Clonk=2 @@ -25,11 +21,8 @@ Crew=Clonk=2 [Landscape] Sky=Clouds1 -TopOpen=1 -BottomOpen=0 -MapWidth=120 -MapHeight=315 -MapZoom=6 +MapWidth=90 +MapHeight=240 [Weather] Climate=00,0,0,00 diff --git a/planet/Worlds.ocf/AcidGoldMine.ocs/Script.c b/planet/Worlds.ocf/AcidGoldMine.ocs/Script.c index 3a3514be6..e5f5c749d 100644 --- a/planet/Worlds.ocf/AcidGoldMine.ocs/Script.c +++ b/planet/Worlds.ocf/AcidGoldMine.ocs/Script.c @@ -1,71 +1,34 @@ /** - Acid gold mine + Acid Gold Mine + An acid lake with a cliff leading to a volcanic gold mine. - @author Sven2 + @author Sven2 */ -static g_highest_plr_count; // max number of players that were ever in the round protected func Initialize() { - // Goal - var goal = FindObject(Find_ID(Goal_Wealth)); - if (!goal) goal = CreateObject(Goal_Wealth); - goal->SetWealthGoal(200); // updated in InitializePlayer - // Rules - if (!ObjectCount(Find_ID(Rule_TeamAccount))) CreateObject(Rule_TeamAccount); - // Acid rain! - Cloud->Place(10); - Cloud->SetPrecipitation("Acid", 100); - // SKy - SetSkyParallax(1, 20,20, 0,0, nil, nil); - // Earthquacks and lava! - Earthquake->SetChance(100); - Volcano->SetChance(2); - Volcano->SetMaterial("DuroLava"); - Meteor->SetChance(22); - // We aren't doing much outside anyway; celestials are a bit of a waste - /*var time = CreateObject(Environment_Time); - time->SetTime(60*12); - time->SetCycleSpeed(20);*/ - // Starting materials in lorry - var pos = FindTopSpot(); - var lorry = CreateObjectAbove(Lorry, pos.x, pos.y); - if (lorry) - { - lorry->CreateContents(WallKit,5); - lorry->CreateContents(Wood,12); - lorry->CreateContents(Metal,5); - lorry->CreateContents(Bread,8); - lorry->CreateContents(Firestone,5); - lorry->CreateContents(Dynamite,3); - lorry->CreateContents(DynamiteBox,2); - } - // Mushrooms before any earth materials, because they create their own caves - LargeCaveMushroom->Place(15, Shape->Rectangle(LandscapeWidth() / 4, 172 * 6, LandscapeWidth() / 2, 60 * 6)); - // Create earth materials - // Create them in big clusters so the whole object arrangement looks a bit less uniform and more interesting - PlaceBatches([Firestone], 3, 100, 5); - PlaceBatches([Rock, Loam, Loam], 10, 200, 10); - // Create some chests in caves - var chest_pos, chest; - var chest_sets = [[[DynamiteBox,2], [Dynamite,5], [Bread,5]], [[Loam,5], [WallKit,3], [Wood,8]], [[Bread,10],[Firestone,5],[Wood,8]]]; - for (var i=0; i<3; ++i) - if (chest_pos = FindLocation(Loc_Material("Tunnel"), Loc_Wall(CNAT_Bottom))) - if (chest = CreateObjectAbove(Chest, chest_pos.x, chest_pos.y)) - for (var chest_fill in chest_sets[i]) - chest->CreateContents(chest_fill[0],chest_fill[1]); - // A barrel - if (chest_pos = FindLocation(Loc_Material("Tunnel"), Loc_Wall(CNAT_Bottom))) - CreateObjectAbove(Barrel, chest_pos.x, chest_pos.y); - // Misc vegetation - SproutBerryBush->Place(5, Shape->Rectangle(0, LandscapeHeight() / 4, LandscapeWidth(), LandscapeHeight() * 3 / 4)); - Mushroom->Place(5, Shape->Rectangle(0, LandscapeHeight() / 4, LandscapeWidth(), LandscapeHeight() * 3 / 4)); - Tree_Coniferous_Burned->Place(2, Shape->Rectangle(0, 0, LandscapeWidth(), LandscapeHeight() / 4)); - // Bottom item killer - var fx = AddEffect("KeepAreaClear", nil, 1, 5); - fx.search_criterion=Find_And(Find_AtRect(0,LandscapeHeight()-10,LandscapeWidth(),10), Find_Not(Find_Category(C4D_StaticBack))); - return true; + // Rules: team account and buying at flagpole. + CreateObject(Rule_TeamAccount); + CreateObject(Rule_BuyAtFlagpole); + + // Goal: gain wealth dependent on difficulty. + var goal = CreateObject(Goal_Wealth); + goal->SetWealthGoal(100 + 150 * SCENPAR_Difficulty); + + // Initialize different parts of the scenario. + InitEnvironment(SCENPAR_Difficulty); + InitVegetation(SCENPAR_MapSize); + InitAnimals(SCENPAR_MapSize); + InitMaterial(4 - SCENPAR_Difficulty); + return; +} + +protected func OnGoalsFulfilled() +{ + // Give the remaining players their achievement. + GainScenarioAchievement("Done", BoundBy(SCENPAR_Difficulty, 1, 3)); + return false; } @@ -77,32 +40,19 @@ protected func InitializePlayer(int plr) SetPlayerZoomByViewRange(plr, 500, nil, PLRZOOM_Direct | PLRZOOM_LimitMax); SetPlayerViewLock(plr, true); - // Position and materials - var i, crew; - for (i=0; crew=GetCrew(plr,i); ++i) + // Position crew and give them materials. + var index = 0, crew; + while (crew = GetCrew(plr, index)) { var pos = FindTopSpot(); - crew->SetPosition(pos.x, pos.y-10); + crew->SetPosition(pos.x, pos.y - 10); crew->CreateContents(Shovel); - if (!i) - { + // First clonk can construct, others can chop. + if (index == 0) crew->CreateContents(Hammer); - } - else if (i==1) - { + else crew->CreateContents(Axe); - } - } - - // Update goal: More players need to mine more gold - if (GetPlayerCount() > g_highest_plr_count) - { - g_highest_plr_count = GetPlayerCount(); - var goal = FindObject(Find_ID(Goal_Wealth)); - if (goal) - { - goal->SetWealthGoal(BoundBy(125+75*g_highest_plr_count, 225, 300)); - } + index++; } // Give the player basic plus pumping knowledge. @@ -112,22 +62,93 @@ protected func InitializePlayer(int plr) // Give the player the elementary base materials. GivePlayerElementaryBaseMaterial(plr); - return; } -private func FindTopSpot() -{ - return FindLocation(Loc_InRect(LandscapeWidth()/4,0,LandscapeWidth()/2,LandscapeHeight()/9), Loc_Wall(CNAT_Bottom), Loc_Space(10, CNAT_Top)) ?? {x=LandscapeWidth()/3+Random(30), y=LandscapeHeight()/12 }; -} - /*-- Scenario Initialization --*/ +private func InitEnvironment(int difficulty) +{ + // Acid rain. + Cloud->Place(8 + 2 * difficulty); + Cloud->SetPrecipitation("Acid", 100); + // Sky. + SetSkyParallax(1, 20, 20, 0,0, nil, nil); + // Some natural disasters. + Earthquake->SetChance(100); + Volcano->SetChance(1 + difficulty); + Volcano->SetMaterial("DuroLava"); + Meteor->SetChance(16 + 4 * difficulty); + // Bottom item killer. + var fx = AddEffect("KeepAreaClear", nil, 1, 5); + fx.search_criterion=Find_And(Find_AtRect(0, LandscapeHeight() - 10, LandscapeWidth(), 10), Find_Not(Find_Category(C4D_StaticBack))); + return; +} + +private func InitVegetation(int map_size) +{ + // Mushrooms before any earth materials, because they create their own caves. + LargeCaveMushroom->Place(15, Shape->Rectangle(LandscapeWidth() / 4, 172 * 6, LandscapeWidth() / 2, 60 * 6)); + // Create earth materials + // Create them in big clusters so the whole object arrangement looks a bit less uniform and more interesting. + PlaceBatches([Firestone], 3, 100, 5); + PlaceBatches([Rock, Loam, Loam], 10, 200, 10); + // Misc vegetation + SproutBerryBush->Place(5, Shape->Rectangle(0, LandscapeHeight() / 4, LandscapeWidth(), LandscapeHeight() * 3 / 4)); + Mushroom->Place(5, Shape->Rectangle(0, LandscapeHeight() / 4, LandscapeWidth(), LandscapeHeight() * 3 / 4)); + Tree_Coniferous_Burned->Place(2, Shape->Rectangle(0, 0, LandscapeWidth(), LandscapeHeight() / 4)); + return; +} + +private func InitAnimals(int map_size) +{ + return; +} + +private func InitMaterial(int amount) +{ + // Starting materials in lorry. + var pos = FindTopSpot(); + var lorry = CreateObjectAbove(Lorry, pos.x, pos.y); + if (lorry) + { + lorry->CreateContents(WallKit, 5); + lorry->CreateContents(Wood, 12); + lorry->CreateContents(Metal, 5); + lorry->CreateContents(Bread, 8); + lorry->CreateContents(Firestone, 5); + lorry->CreateContents(Dynamite, 3); + lorry->CreateContents(DynamiteBox, 2); + } + // Create some chests in caves. + var chest_pos, chest; + var chest_sets = [[[DynamiteBox,2], [Dynamite,5], [Bread,5]], [[Loam,5], [WallKit,3], [Wood,8]], [[Bread,10],[Firestone,5],[Wood,8]]]; + for (var i = 0; i < 3; ++i) + if (chest_pos = FindLocation(Loc_Material("Tunnel"), Loc_Wall(CNAT_Bottom))) + if (chest = CreateObjectAbove(Chest, chest_pos.x, chest_pos.y)) + for (var chest_fill in chest_sets[i]) + chest->CreateContents(chest_fill[0], chest_fill[1]); + // A barrel somewhere in a cave. + if (chest_pos = FindLocation(Loc_Material("Tunnel"), Loc_Wall(CNAT_Bottom))) + CreateObjectAbove(Barrel, chest_pos.x, chest_pos.y); + + return; +} + + +/*-- Helper Functions --*/ + +private func FindTopSpot() +{ + return FindLocation(Loc_InRect(LandscapeWidth() / 4, 0, LandscapeWidth() / 2, LandscapeHeight() / 9), Loc_Wall(CNAT_Bottom), Loc_Space(10, CNAT_Top)) ?? { x = LandscapeWidth() / 3 + Random(30), y = LandscapeHeight() / 12 }; +} + global func FxKeepAreaClearTimer(object q, proplist fx, int time) { for (var obj in FindObjects(fx.search_criterion)) - if (obj) obj->RemoveObject(); + if (obj) + obj->RemoveObject(); return FX_OK; } diff --git a/planet/Worlds.ocf/AcidGoldMine.ocs/StringTblDE.txt b/planet/Worlds.ocf/AcidGoldMine.ocs/StringTblDE.txt new file mode 100644 index 000000000..bd0d3c937 --- /dev/null +++ b/planet/Worlds.ocf/AcidGoldMine.ocs/StringTblDE.txt @@ -0,0 +1,19 @@ +# Scenario parameters: difficulty +Difficulty=Schwierigkeit +DescDifficulty=Setzt die Schwierigkeit dieser Runde. +DiffNormal=Normal +DescDiffNormal=Die Schwierigkeit dieser Runde ist normal. +DiffHard=Schwer +DescDiffHard=Die Schwierigkeit dieser Runde ist schwer. +DiffInsane=Irrsinnig +DescDiffInsane=Die Schwierigkeit dieser Runde ist irrsinnig. + +# Scenario parameters: map size +MapSize=Kartengröße +DescMapSize=Setzt die Kartengröße dieser Runde. +MapSmall=Klein +DescMapSmall=Die Karte dieser Runde wird klein sein +MapAverage=Durchschnittlich +DescMapAverage=Die Karte dieser Runde wird durchschnittlich sein. +MapLarge=Groß +DescMapLarge=Die Karte dieser Runde wird groß sein. diff --git a/planet/Worlds.ocf/AcidGoldMine.ocs/StringTblUS.txt b/planet/Worlds.ocf/AcidGoldMine.ocs/StringTblUS.txt new file mode 100644 index 000000000..ec0653e17 --- /dev/null +++ b/planet/Worlds.ocf/AcidGoldMine.ocs/StringTblUS.txt @@ -0,0 +1,19 @@ +# Scenario parameters: difficulty +Difficulty=Difficulty +DescDifficulty=Sets this round's difficulty. +DiffNormal=Normal +DescDiffNormal=This round's difficulty will be set to normal. +DiffHard=Hard +DescDiffHard=This round's difficulty will be set to hard. +DiffInsane=Insane +DescDiffInsane=This round's difficulty will be set to insane. + +# Scenario parameters: map size +MapSize=Map size +DescMapSize=Sets this round's map size. +MapSmall=Small +DescMapSmall=This round's map will be small. +MapAverage=Average +DescMapAverage=This round's map will be average. +MapLarge=Large +DescMapLarge=This round's map will be large. From 1827ed53cabfa5987843f0a1ec974ccf6e1f84aa Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 18 Aug 2015 19:16:13 -0400 Subject: [PATCH 41/97] Enhance mapscript functions for use with background materials Add GetBackPixel, GetDefaultBackgroundIndex, GetMaterialTextureIndex, and make SetPixel accept a background color. --- docs/sdk/script/MapScript.xml | 10 +++- src/landscape/C4MapScript.cpp | 92 ++++++++++++++++++++++++++++++----- 2 files changed, 87 insertions(+), 15 deletions(-) diff --git a/docs/sdk/script/MapScript.xml b/docs/sdk/script/MapScript.xml index 8c4bcf90c..e0f065331 100644 --- a/docs/sdk/script/MapScript.xml +++ b/docs/sdk/script/MapScript.xml @@ -488,10 +488,16 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer}); Recreates the calling layer or map surface in the given size. All contents are deleted and the layer is filled with zeroes. Use functions Duplicate and Blit to backup and restore any old layer contents if you want to extent the map without losing its contents. Returns true on success. proplist Duplicate(any mask_spec, array rect); Creates a new layer with the same size and surface contents as this layer. If a rect is given, the new layer is smaller and contains only the portion included in rect. If mask_spec is given, only pixels passing the mask are set and all other pixels in the new layer are zero. + int GetDefaultBackgroundIndex(any col); + Returns the material-texture index of the default background color of the given color. It may be given either as string (mattex) or palette index. + int GetMaterialTextureIndex(string mattex); + Returns the material-texture index of the given string. Can be either "Sky", "Transparent", a material name, or a material-texture combination. int GetPixel(int x, int y); Gets the pixel color at the given position in this layer. If x,y is outside the layer, zero is returned. - bool SetPixel(int x, int y, any new_color); - Sets the pixel at position x,y in this layer to new_color. Color may be given as string (mattex) or palette index. Returns true on success. + int GetBackPixel(int x, int y); + Gets the pixel color of the background material at the given position in this layer. If x,y is outside the layer, zero is returned. + bool SetPixel(int x, int y, any new_fg, any new_bg); + Sets the pixel and the background pixel at position x,y in this layer to new_fg and new_bg, respectively. Color may be given as string (mattex) or palette index. Use nil to keep foreground or background unchanged. Returns true on success. int GetPixelCount(any mask_spec, array rect); Returns number of pixels on this layer or map within rect that fulfill mask_spec. bool FindPosition(proplist out_pos, mask_spec, array rect, int max_tries); diff --git a/src/landscape/C4MapScript.cpp b/src/landscape/C4MapScript.cpp index 306e1cab3..93580f9f8 100644 --- a/src/landscape/C4MapScript.cpp +++ b/src/landscape/C4MapScript.cpp @@ -292,6 +292,37 @@ static C4PropList *FnLayerDuplicate(C4PropList * _this, const C4Value &mask_spec return new_layer; } +static int32_t FnLayerGetMaterialTextureIndex(C4PropList * _this, C4String* mattex) +{ + if (!mattex) return -1; + + uint8_t col; + if (!TexColSingle(mattex->GetCStr(), col)) + return -1; + + return col; +} + +static int32_t FnLayerGetDefaultBackgroundIndex(C4PropList * _this, const C4Value &value) +{ + uint8_t fg; + C4String* str; + + if ((str = value.getStr())) + { + if (!TexColSingle(str->GetCStr(), fg)) + return -1; + } + else + { + if (!Inside(value.getInt(), 0, 255)) + return -1; + fg = value.getInt(); + } + + return ::MapScript.pTexMap->DefaultBkgMatTex(fg); +} + static int32_t FnLayerGetPixel(C4PropList * _this, int32_t x, int32_t y) { // Layer script function: Query pixel at position x,y from _this layer @@ -300,31 +331,63 @@ static int32_t FnLayerGetPixel(C4PropList * _this, int32_t x, int32_t y) return layer->GetPix(x,y,0); } -// TODO: Add function to get background pixel +static int32_t FnLayerGetBackPixel(C4PropList * _this, int32_t x, int32_t y) +{ + // Layer script function: Query pixel at position x,y from _this layer + C4MapScriptLayer *layer = _this->GetMapScriptLayer(); + if (!layer) return 0; + return layer->GetBackPix(x,y,0); +} -static bool FnLayerSetPixel(C4PropList * _this, int32_t x, int32_t y, const C4Value &to_value_c4v) +static bool FnLayerSetPixel(C4PropList * _this, int32_t x, int32_t y, const C4Value& fg_value_c4v, const C4Value& bg_value_c4v) { // Layer script function: Set pixel at position x,y to to_value in _this layer C4MapScriptLayer *layer = _this->GetMapScriptLayer(); if (!layer) return false; - C4String *to_value_s; uint8_t fg, bg; - // TODO: Allow to set custom background material - if ((to_value_s = to_value_c4v.getStr())) + if (fg_value_c4v.GetType() == C4V_Nil) { - if (!FnParTexCol(to_value_s, fg, bg)) - throw new C4AulExecError("MapLayer::SetPixel: Trying to set invalid pixel value."); + fg = layer->GetPix(x,y,0); } else { - int32_t val = to_value_c4v.getInt(); - if (!Inside(val, 0, 255)) - throw new C4AulExecError("MapLayer::SetPixel: Trying to set invalid pixel value."); - - fg = val; - bg = ::MapScript.pTexMap->DefaultBkgMatTex(fg); + const C4Value& val = fg_value_c4v; + C4String *str = val.getStr(); + if (str != NULL) + { + if (!TexColSingle(str->GetCStr(), fg)) + throw new C4AulExecError("MapLayer::SetPixel: Trying to set invalid pixel value."); + } + else + { + if (!Inside(val.getInt(), 0, 255)) + throw new C4AulExecError("MapLayer::SetPixel: Trying to set invalid pixel value."); + fg = val.getInt(); + } } + + if (bg_value_c4v.GetType() == C4V_Nil) + { + bg = layer->GetBackPix(x,y,0); + } + else + { + const C4Value& val = bg_value_c4v; + C4String *str = val.getStr(); + if (str != NULL) + { + if (!TexColSingle(str->GetCStr(), bg)) + throw new C4AulExecError("MapLayer::SetPixel: Trying to set invalid pixel value."); + } + else + { + if (!Inside(val.getInt(), 0, 255)) + throw new C4AulExecError("MapLayer::SetPixel: Trying to set invalid pixel value."); + bg = val.getInt(); + } + } + return layer->SetPix(x,y,fg,bg); } @@ -617,7 +680,10 @@ void C4MapScriptHost::AddEngineFunctions() ::AddFunc(this, "Blit", FnLayerBlit); ::AddFunc(this, "CreateLayer", FnCreateLayer); ::AddFunc(this, "Duplicate", FnLayerDuplicate); + ::AddFunc(this, "GetMaterialTextureIndex", FnLayerGetMaterialTextureIndex); + ::AddFunc(this, "GetDefaultBackgroundIndex", FnLayerGetDefaultBackgroundIndex); ::AddFunc(this, "GetPixel", FnLayerGetPixel); + ::AddFunc(this, "GetBackPixel", FnLayerGetBackPixel); ::AddFunc(this, "SetPixel", FnLayerSetPixel); ::AddFunc(this, "GetPixelCount", FnLayerGetPixelCount); ::AddFunc(this, "Resize", FnLayerResize); From 5d047d4e44e3d0b3d6f6230ca430ba88cd8fc7ed Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 18 Aug 2015 19:36:58 -0400 Subject: [PATCH 42/97] mape: Move second texture map read pass before crossmapping materials Otherwise the default textures are not set correctly. --- src/mape/diskview.c | 5 ----- src/mape/mattexview.c | 9 +++++++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/mape/diskview.c b/src/mape/diskview.c index a6253d24c..ba15fffb4 100644 --- a/src/mape/diskview.c +++ b/src/mape/diskview.c @@ -275,11 +275,6 @@ static gboolean mape_disk_view_load_materials(MapeDiskView* disk_view, g_object_unref(texture_map); mape_mapgen_set_root_group(parent_group); - /* Load the texture map again, because now that we have materials - * and textures loaded, we can actually assign the indices in the - * texture map. */ - mape_texture_map_load_map(texture_map, group, error); - #if 0 if(overloaded_group != NULL) mape_group_destroy(overloaded_group); diff --git a/src/mape/mattexview.c b/src/mape/mattexview.c index 26f436b80..9a0def024 100644 --- a/src/mape/mattexview.c +++ b/src/mape/mattexview.c @@ -134,6 +134,15 @@ gboolean mape_mat_tex_view_reload(MapeMatTexView* view, } } + /* Load the texture map again, because now that we have materials + * and textures loaded, we can actually assign the indices in the + * texture map. */ + if (!mape_texture_map_load_map(new_tex_map, base_group, error)) + { + g_object_unref(new_mat_map); + return FALSE; + } + mape_material_map_set_default_textures(new_mat_map, new_tex_map); if(view->mat_map != NULL) g_object_unref(view->mat_map); From 035cbb01b2279f1e6ebb209ee5a82206e824dbde Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 18 Aug 2015 19:37:38 -0400 Subject: [PATCH 43/97] mape: draw mattex indices above 127 --- src/mape/mapgen.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/mape/mapgen.c b/src/mape/mapgen.c index 683fb8ce9..ca73feb1f 100644 --- a/src/mape/mapgen.c +++ b/src/mape/mapgen.c @@ -244,7 +244,7 @@ mape_mapgen_render(const gchar* filename, guint out_rowstride; unsigned int in_rowstride; guint datawidth; - guint8 matclrs[128 * 4]; + guint8 matclrs[256 * 4]; unsigned int x, y; unsigned int matnum; @@ -329,7 +329,8 @@ mape_mapgen_render(const gchar* filename, { for(x = 0; x < out_width; ++x) { - matnum = *in_p & 0x7f; + matnum = *in_p; + if(matclrs[matnum * 4] == 0) { mape_mapgen_read_color( From 0cdafc278b6eaea0602a8532ee926b941fe4472e Mon Sep 17 00:00:00 2001 From: Armin Burgmeier Date: Tue, 4 Aug 2015 23:16:36 -0400 Subject: [PATCH 44/97] Transform all mesh data to Clonk reference frame on load Instead of doing the transformation when drawing a mesh. This allows making the OpenGL normal matrix more consistent, since it does not include the Ogre-To-Clonk transformation, and so that the transformation does not need to be inverted in the shader. As a side effect, all Attach transformations were updated, since before they were specified in the OGRE reference frame, not the Clonk reference frame. --- CMakeLists.txt | 1 + .../Raid.ocs/System.ocg/DlgPyrit.c | 2 +- .../TreasureHunt.ocs/System.ocg/SeqIntro.c | 4 +- planet/Objects.ocd/Clonk.ocd/Script.c | 2 +- .../CaptureTheFlag.ocd/Flag.ocd/Script.c | 2 +- .../Items.ocd/Tools.ocd/Axe.ocd/Script.c | 6 +- .../Items.ocd/Tools.ocd/Barrel.ocd/Script.c | 4 +- .../Items.ocd/Tools.ocd/Boompack.ocd/Script.c | 6 +- .../Items.ocd/Tools.ocd/Bucket.ocd/Script.c | 4 +- .../Items.ocd/Tools.ocd/Crate.ocd/Script.c | 6 +- .../Items.ocd/Tools.ocd/Hammer.ocd/Script.c | 2 +- .../Items.ocd/Tools.ocd/Lantern.ocd/Script.c | 4 +- .../Items.ocd/Tools.ocd/Pickaxe.ocd/Script.c | 2 +- .../Tools.ocd/PowderKeg.ocd/Script.c | 4 +- .../Items.ocd/Tools.ocd/Sickle.ocd/Script.c | 4 +- .../Tools.ocd/TeleGlove.ocd/Script.c | 4 +- .../Items.ocd/Tools.ocd/WindBag.ocd/Script.c | 2 +- .../Weapons.ocd/GrenadeLauncher.ocd/Script.c | 2 +- .../Weapons.ocd/Javelin.ocd/Script.c | 2 +- .../Items.ocd/Weapons.ocd/Musket.ocd/Script.c | 2 +- .../Items.ocd/Weapons.ocd/Shield.ocd/Script.c | 10 +- .../Items.ocd/Weapons.ocd/Sword.ocd/Script.c | 4 +- .../SproutBerryBush.ocd/Sprout.ocd/Script.c | 2 +- .../Vehicles.ocd/Airplane.ocd/Script.c | 2 +- .../Vehicles.ocd/Catapult.ocd/Script.c | 2 +- src/graphics/C4Draw.cpp | 5 +- src/graphics/C4Draw.h | 2 - src/graphics/C4DrawMeshGL.cpp | 21 +-- src/lib/StdMesh.cpp | 6 +- src/lib/StdMeshLoader.cpp | 152 ++++++++++++++++++ src/lib/StdMeshLoader.h | 10 ++ src/lib/StdMeshLoaderBinary.cpp | 72 +++++++-- src/lib/StdMeshLoaderXml.cpp | 63 ++++---- src/object/C4ObjectScript.cpp | 12 +- 34 files changed, 306 insertions(+), 122 deletions(-) create mode 100644 src/lib/StdMeshLoader.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c1d740c6..680b88fab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -370,6 +370,7 @@ set(OC_CLONK_SOURCES src/lib/StdMeshLoaderBinaryChunks.h src/lib/StdMeshLoaderBinary.cpp src/lib/StdMeshLoaderDataStream.h + src/lib/StdMeshLoader.cpp src/lib/StdMeshLoader.h src/lib/StdMeshLoaderXml.cpp src/lib/StdMeshMaterial.cpp diff --git a/planet/Missions.ocf/Raid.ocs/System.ocg/DlgPyrit.c b/planet/Missions.ocf/Raid.ocs/System.ocg/DlgPyrit.c index 02769be42..ab1ce6849 100644 --- a/planet/Missions.ocf/Raid.ocs/System.ocg/DlgPyrit.c +++ b/planet/Missions.ocf/Raid.ocs/System.ocg/DlgPyrit.c @@ -193,7 +193,7 @@ static const Pyrit_Hammer_SwingTime = 40; func Dlg_Pyrit_Init(object clonk) { // Pyit has a red hat! - clonk->AttachMesh(Hat, "skeleton_head", "main", Trans_Translate(0,5500)); + clonk->AttachMesh(Hat, "skeleton_head", "main", Trans_Translate(5500, 0, 0)); // Clonk moves slowly. clonk.ActMap = { Prototype = Clonk.ActMap, Walk = { Prototype = Clonk.ActMap.Walk } }; clonk.ActMap.Walk.Speed /= 3; diff --git a/planet/Missions.ocf/TreasureHunt.ocs/System.ocg/SeqIntro.c b/planet/Missions.ocf/TreasureHunt.ocs/System.ocg/SeqIntro.c index b41e1bdab..430096257 100644 --- a/planet/Missions.ocf/TreasureHunt.ocs/System.ocg/SeqIntro.c +++ b/planet/Missions.ocf/TreasureHunt.ocs/System.ocg/SeqIntro.c @@ -31,8 +31,8 @@ func Intro_Init(object flagpole) this.pilot->SetObjectLayer(this.pilot); // Pyit has a red hat! - this.pilot->AttachMesh(Hat, "skeleton_head", "main", Trans_Translate(0,5500)); - + this.pilot->AttachMesh(Hat, "skeleton_head", "main", Trans_Translate(5500, 0, 0)); + // Dialogue object also used as helper container for clonks this.dialogue = this.pilot->SetDialogue("Pyrit"); this.dialogue->SetInteraction(false); diff --git a/planet/Objects.ocd/Clonk.ocd/Script.c b/planet/Objects.ocd/Clonk.ocd/Script.c index 54faf7a0b..401b99bcb 100644 --- a/planet/Objects.ocd/Clonk.ocd/Script.c +++ b/planet/Objects.ocd/Clonk.ocd/Script.c @@ -489,7 +489,7 @@ func AttachBackpack() { //Places a backpack onto the clonk backpack = AttachMesh(BackpackGraphic, "skeleton_body", "main", - Trans_Mul(Trans_Rotate(180,0,1,0), Trans_Scale(700,700,400), Trans_Translate(0,4000,1000))); + Trans_Mul(Trans_Rotate(180,1,0,0), Trans_Scale(700,400,700), Trans_Translate(4000,-1000,0))); } func RemoveBackpack() diff --git a/planet/Objects.ocd/Goals.ocd/CaptureTheFlag.ocd/Flag.ocd/Script.c b/planet/Objects.ocd/Goals.ocd/CaptureTheFlag.ocd/Flag.ocd/Script.c index baf81c028..131f8d72c 100644 --- a/planet/Objects.ocd/Goals.ocd/CaptureTheFlag.ocd/Flag.ocd/Script.c +++ b/planet/Objects.ocd/Goals.ocd/CaptureTheFlag.ocd/Flag.ocd/Script.c @@ -82,7 +82,7 @@ protected func FxFlagCarriedStart(object target, effect, int temp) effect.x=target->GetX(); effect.y=target->GetY(); - var trans = Trans_Mul(Trans_Translate(0, -17000, 0), Trans_Rotate(-90, 0, 1, 0)); + var trans = Trans_Mul(Trans_Translate(-17000, 0, 0), Trans_Rotate(90, 1, 0, 0)); effect.mesh_id = target->AttachMesh(this, "pos_back1", "main", trans); this.Visibility = VIS_None; diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/Axe.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/Axe.ocd/Script.c index f3f37d529..9869031bd 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/Axe.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/Axe.ocd/Script.c @@ -28,9 +28,9 @@ public func GetCarryTransform() { var act = Contained()->GetAction(); if(act != "Walk" && act != "Jump") - return Trans_Mul(Trans_Translate(0,4500,0), Trans_Rotate(-90,0,1,0), Trans_Rotate(180,0,0,1) ); + return Trans_Mul(Trans_Translate(4500,0,0), Trans_Rotate(90,1,0,0), Trans_Rotate(180,0,1,0) ); - return Trans_Rotate(90, 0, 1, 0); + return Trans_Rotate(-90, 1, 0, 0); } public func GetCarrySpecial(clonk) { @@ -377,4 +377,4 @@ local Name = "$Name$"; local Description = "$Description$"; local UsageHelp = "$UsageHelp$"; local Rebuy = true; -local ChopStrength = 10; \ No newline at end of file +local ChopStrength = 10; diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/Barrel.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/Barrel.ocd/Script.c index 8d27ab2a0..9ff5f64ca 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/Barrel.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/Barrel.ocd/Script.c @@ -13,9 +13,9 @@ local iVolume; public func GetCarryTransform(clonk) { if(GetCarrySpecial(clonk)) - return Trans_Translate(0, 1000, -6500); + return Trans_Translate(1000, 6500, 0); - return Trans_Translate(-1500, 1500, 0); + return Trans_Translate(1500, 0, -1500); } public func GetCarryPhase() { diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/Boompack.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/Boompack.ocd/Script.c index 563b8c147..d987036f5 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/Boompack.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/Boompack.ocd/Script.c @@ -26,9 +26,9 @@ public func GetCarryPhase() { return 700; } public func GetCarryTransform(clonk) { if(GetCarrySpecial(clonk)) - return Trans_Translate(0, 0, -6500); + return Trans_Translate(0, 6500, 0); - return Trans_Translate(-1500, 0, 0); + return Trans_Translate(0, 0, -1500); } protected func Construction() @@ -174,7 +174,7 @@ public func OnMount(clonk) var iDir = 1; if(clonk->GetDir() == 1) iDir = -1; clonk->PlayAnimation("PosRocket", 10, Anim_Const(0), Anim_Const(1000)); - riderattach = AttachMesh(clonk, "main", "pos_tool1", Trans_Mul(Trans_Translate(2000, -1000, -2000*iDir), Trans_Rotate(90*iDir,0,1,0))); + riderattach = AttachMesh(clonk, "main", "pos_tool1", Trans_Mul(Trans_Translate(-1000,2000*iDir,2000), Trans_Rotate(-90*iDir,1,0,0))); //Modify picture transform to fit icon on clonk mount //clean pic transform rotations diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/Bucket.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/Bucket.ocd/Script.c index 92450713d..79a285a47 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/Bucket.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/Bucket.ocd/Script.c @@ -15,7 +15,7 @@ public func GetCarryMode() { return CARRY_HandBack; } public func GetCarryBone() { return "main"; } public func GetCarryTransform() { - return Trans_Mul(Trans_Rotate(-90, 0, 0, 1), Trans_Translate(-4000,3500)); + return Trans_Mul(Trans_Rotate(90, 0, 1, 0), Trans_Translate(3500, 0, -4000)); } public func ControlUse(object clonk, int iX, int iY) @@ -250,4 +250,4 @@ protected func Definition(def) local Name = "$Name$"; local Description = "$Description$"; local UsageHelp = "$UsageHelp$"; -local Collectible = true; \ No newline at end of file +local Collectible = true; diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/Crate.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/Crate.ocd/Script.c index d7ffbeb85..464c375b0 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/Crate.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/Crate.ocd/Script.c @@ -15,9 +15,9 @@ public func GetCarryPhase() { return 800; } public func GetCarryTransform(clonk) { if(GetCarrySpecial(clonk)) - return Trans_Translate(0, 3500, -6500); + return Trans_Translate(3500, 6500, 0); - return Trans_Translate(-1500, 0, 0); + return Trans_Translate(0, 0, -1500); } protected func Construction() @@ -73,4 +73,4 @@ func Hit() local Name = "$Name$"; local Collectible = false; local ContainBlast = true; -local Touchable = 2; \ No newline at end of file +local Touchable = 2; diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/Hammer.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/Hammer.ocd/Script.c index fd6e6ed8f..c2368324c 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/Hammer.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/Hammer.ocd/Script.c @@ -10,7 +10,7 @@ private func Hit(int x, int y) public func GetCarryMode() { return CARRY_HandBack; } public func GetCarryBone() { return "main"; } -public func GetCarryTransform() { return Trans_Rotate(90,0,1,0); } +public func GetCarryTransform() { return Trans_Rotate(-90,1,0,0); } public func IsTool() { return true; } public func IsToolProduct() { return true; } diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/Lantern.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/Lantern.ocd/Script.c index bb713ff03..cb063e452 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/Lantern.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/Lantern.ocd/Script.c @@ -55,7 +55,7 @@ public func GetCarryMode() { return CARRY_HandBack; } public func GetCarryBone() { return "main"; } public func GetCarryTransform() { - return Trans_Rotate(-90,0,0,1); + return Trans_Rotate(-90,0,1,0); } private func Definition(def) { @@ -70,4 +70,4 @@ public func IsToolProduct() { return true; } local Name = "$Name$"; local Description = "$Description$"; local UsageHelp = "$UsageHelp$"; -local Collectible = true; \ No newline at end of file +local Collectible = true; diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/Pickaxe.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/Pickaxe.ocd/Script.c index 78c9f0e7a..706c650c2 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/Pickaxe.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/Pickaxe.ocd/Script.c @@ -15,7 +15,7 @@ public func GetCarryBone() { return "main"; } public func GetCarrySpecial(clonk) { if(using == 1) return "pos_hand2"; } public func GetCarryTransform() { - return Trans_Rotate(-90, 0, 1, 0); + return Trans_Rotate(90, 1, 0, 0); } diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/PowderKeg.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/PowderKeg.ocd/Script.c index 49fd25e07..89d45974a 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/PowderKeg.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/PowderKeg.ocd/Script.c @@ -12,9 +12,9 @@ local count; public func GetCarryTransform(clonk) { if(GetCarrySpecial(clonk)) - return Trans_Translate(0, 1000, -6500); + return Trans_Translate(1000, -6500, 0); - return Trans_Mul(Trans_Translate(-1500,1500,0),Trans_Rotate(180,0,1,0)); + return Trans_Mul(Trans_Translate(1500, 0, -1500),Trans_Rotate(180,1,0,0)); } public func GetCarryPhase() { return 900; } diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/Sickle.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/Sickle.ocd/Script.c index b16bd1f11..48abc2602 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/Sickle.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/Sickle.ocd/Script.c @@ -12,7 +12,7 @@ private func Hit() public func GetCarryMode() { return CARRY_HandBack; } public func GetCarryBone() { return "main"; } -public func GetCarryTransform() { return Trans_Rotate(270,0,1,0); } +public func GetCarryTransform() { return Trans_Rotate(90,1,0,0); } public func ControlUseStart(object clonk, int x, int y) { @@ -61,4 +61,4 @@ local Collectible = 1; local Name = "$Name$"; local Description = "$Description$"; local UsageHelp = "$UsageHelp$"; -local Rebuy = true; \ No newline at end of file +local Rebuy = true; diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/TeleGlove.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/TeleGlove.ocd/Script.c index b758d2f4b..af85a0ab1 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/TeleGlove.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/TeleGlove.ocd/Script.c @@ -31,8 +31,8 @@ public func GetCarryBone() { return "main"; } public func GetCarryTransform() { //Left hand's bone is different? I don't know, but this is a work-around. - if(carry_bone == "pos_hand1") return Trans_Rotate(180,0,0,1); - return Trans_Rotate(-90,0,0,1); + if(carry_bone == "pos_hand1") return Trans_Rotate(180,0,1,0); + return Trans_Rotate(-90,0,1,0); } protected func HoldingEnabled() { return true; } diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/WindBag.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/WindBag.ocd/Script.c index 675ceaaa2..d3d3298c8 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/WindBag.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/WindBag.ocd/Script.c @@ -25,7 +25,7 @@ public func GetCarryMode(clonk) { return CARRY_Musket; } public func GetCarryTransform() { - return Trans_Mul(Trans_Rotate(220, 0, 0, 1), Trans_Rotate(-30, 1, 0, 0), Trans_Rotate(26, 0, 1, 0)); + return Trans_Mul(Trans_Rotate(220, 0, 1, 0), Trans_Rotate(30, 0, 0, 1), Trans_Rotate(-26, 1, 0, 0)); } public func GetCarryPhase() { return 600; } diff --git a/planet/Objects.ocd/Items.ocd/Weapons.ocd/GrenadeLauncher.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Weapons.ocd/GrenadeLauncher.ocd/Script.c index 6fb254fb6..cc43789e2 100644 --- a/planet/Objects.ocd/Items.ocd/Weapons.ocd/GrenadeLauncher.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Weapons.ocd/GrenadeLauncher.ocd/Script.c @@ -21,7 +21,7 @@ public func GetCarrySpecial(clonk) { if(fAiming > 0) return "pos_hand2"; } public func GetCarryBone() { return "main"; } public func GetCarryTransform() { - return Trans_Mul(Trans_Rotate(-90,0,1,0), Trans_Rotate(10,1,0,0)); + return Trans_Mul(Trans_Rotate(90,1,0,0), Trans_Rotate(-10,0,0,1)); } local animation_set; diff --git a/planet/Objects.ocd/Items.ocd/Weapons.ocd/Javelin.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Weapons.ocd/Javelin.ocd/Script.c index 14619eb11..98b7a674f 100644 --- a/planet/Objects.ocd/Items.ocd/Weapons.ocd/Javelin.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Weapons.ocd/Javelin.ocd/Script.c @@ -32,7 +32,7 @@ local aiming; public func GetCarryMode(clonk) { if(aiming >= 0) return CARRY_HandBack; } public func GetCarryBone() { return "Javelin"; } public func GetCarrySpecial(clonk) { if(aiming > 0) return "pos_hand2"; } -public func GetCarryTransform() { if(aiming == 1) return Trans_Rotate(180, 1, 0, 0); } +public func GetCarryTransform() { if(aiming == 1) return Trans_Rotate(180, 0, 0, 1); } public func ControlUseStart(object clonk, int x, int y) { diff --git a/planet/Objects.ocd/Items.ocd/Weapons.ocd/Musket.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Weapons.ocd/Musket.ocd/Script.c index 657c9dea3..91f833e6b 100644 --- a/planet/Objects.ocd/Items.ocd/Weapons.ocd/Musket.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Weapons.ocd/Musket.ocd/Script.c @@ -21,7 +21,7 @@ public func GetCarrySpecial(clonk) { if(fAiming > 0) return "pos_hand2"; } public func GetCarryBone() { return "main"; } public func GetCarryTransform() { - return Trans_Rotate(-90, 0, 1, 0); + return Trans_Rotate(90, 1, 0, 0); } local animation_set; diff --git a/planet/Objects.ocd/Items.ocd/Weapons.ocd/Shield.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Weapons.ocd/Shield.ocd/Script.c index 6d33ab530..8735cd541 100644 --- a/planet/Objects.ocd/Items.ocd/Weapons.ocd/Shield.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Weapons.ocd/Shield.ocd/Script.c @@ -280,18 +280,18 @@ public func GetCarryMode() { return CARRY_HandBack; } public func GetCarrySpecial(clonk) { return carry_bone; } public func GetCarryTransform(clonk, sec, back) { - if(aim_anim && !sec) return Trans_Mul(Trans_Rotate(180,0,0,1),Trans_Rotate(90,0,0,1)); - if(aim_anim && sec) return Trans_Mul(Trans_Rotate(180,1,0,0), Trans_Rotate(90,0,0,1)); + if(aim_anim && !sec) return Trans_Mul(Trans_Rotate(180,0,1,0),Trans_Rotate(90,0,1,0)); + if(aim_anim && sec) return Trans_Mul(Trans_Rotate(180,0,0,1), Trans_Rotate(90,0,1,1)); if(mTrans != nil) return mTrans; if(!sec) { - if(back) return Trans_Mul(Trans_Rotate(-90, 0, 0, 1),Trans_Translate(0,0,400)); + if(back) return Trans_Mul(Trans_Rotate(-90, 0, 1, 0),Trans_Translate(0,-400,0)); return nil; } - if(back) return Trans_Mul(Trans_Mul(Trans_Rotate(90, 0, 0, 1),Trans_Rotate(180, 0, 1)),Trans_Translate(0,0,400)); - return Trans_Rotate(180,1,0,0); + if(back) return Trans_Mul(Trans_Mul(Trans_Rotate(90, 0, 1, 0),Trans_Rotate(180, 1, 0, 0)),Trans_Translate(0,-400,0)); + return Trans_Rotate(180,0,0,1); } public func IsWeapon() { return true; } diff --git a/planet/Objects.ocd/Items.ocd/Weapons.ocd/Sword.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Weapons.ocd/Sword.ocd/Script.c index a3333c156..9d4cd89e3 100644 --- a/planet/Objects.ocd/Items.ocd/Weapons.ocd/Sword.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Weapons.ocd/Sword.ocd/Script.c @@ -20,8 +20,8 @@ public func GetCarryBone() { return "main"; } public func GetCarrySpecial(clonk) { return carry_bone; } public func GetCarryTransform(clonk, sec, back) { - if(back) return Trans_Mul(Trans_Rotate(180,0,0,1), Trans_Rotate(90,0,1,0), Trans_Translate(0,-7000,0)); - return Trans_Rotate(90, 0, 1, 0); + if(back) return Trans_Mul(Trans_Rotate(180,0,1,0), Trans_Rotate(-90,1,0,0), Trans_Translate(-7000,0,0)); + return Trans_Rotate(-90, 1, 0, 0); } local magic_number; diff --git a/planet/Objects.ocd/Vegetation.ocd/SproutBerryBush.ocd/Sprout.ocd/Script.c b/planet/Objects.ocd/Vegetation.ocd/SproutBerryBush.ocd/Sprout.ocd/Script.c index b671fbdf1..3a14f318e 100644 --- a/planet/Objects.ocd/Vegetation.ocd/SproutBerryBush.ocd/Sprout.ocd/Script.c +++ b/planet/Objects.ocd/Vegetation.ocd/SproutBerryBush.ocd/Sprout.ocd/Script.c @@ -81,7 +81,7 @@ func AddLeaves(bool fullyGrown) // add two leaves for(var i = 1; i <= 2; ++i) { - var rtrans = Trans_Rotate(Random(360), 0, 1, 0); + var rtrans = Trans_Rotate(Random(360), 1, 0, 0); var matrix = Trans_Mul(Trans_Scale(1, 1, 1), rtrans); if(fullyGrown) matrix = rtrans; diff --git a/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c b/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c index 7b34467e6..b46e3c77c 100644 --- a/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c +++ b/planet/Objects.ocd/Vehicles.ocd/Airplane.ocd/Script.c @@ -345,7 +345,7 @@ public func PlaneMount(object clonk) { SetOwner(clonk->GetController()); clonk->PlayAnimation("Stand", 15, nil, Anim_Const(1000)); - clonkmesh = AttachMesh(clonk,"pilot","skeleton_body",Trans_Mul(Trans_Rotate(180,0,1,0), Trans_Translate(0,-3000,-1000)),AM_DrawBefore); + clonkmesh = AttachMesh(clonk,"pilot","skeleton_body",Trans_Mul(Trans_Rotate(180, 1, 0, 0), Trans_Translate(-3000, 1000, 0)),AM_DrawBefore); return true; } diff --git a/planet/Objects.ocd/Vehicles.ocd/Catapult.ocd/Script.c b/planet/Objects.ocd/Vehicles.ocd/Catapult.ocd/Script.c index b753106f4..398672458 100644 --- a/planet/Objects.ocd/Vehicles.ocd/Catapult.ocd/Script.c +++ b/planet/Objects.ocd/Vehicles.ocd/Catapult.ocd/Script.c @@ -196,7 +196,7 @@ public func ActivateEntrance(object clonk) SetAnimationPosition(aim_anim, Anim_Const(150)); clonk->Enter(this); SetOwner(clonk->GetController()); - clonkmesh = AttachMesh(clonk,"shot","skeleton_body",Trans_Mul(Trans_Rotate(180,0,1,0), Trans_Translate(0,-3000,-1000)),AM_DrawBefore); + clonkmesh = AttachMesh(clonk,"shot","skeleton_body",Trans_Mul(Trans_Rotate(180, 1, 0, 0), Trans_Translate(-3000, 1000, 0)),AM_DrawBefore); clonk->PlayAnimation("CatapultSit", 5, Anim_Const(0), Anim_Const(1000)); } } diff --git a/src/graphics/C4Draw.cpp b/src/graphics/C4Draw.cpp index 9c2ae83b5..fa87d9678 100644 --- a/src/graphics/C4Draw.cpp +++ b/src/graphics/C4Draw.cpp @@ -42,9 +42,6 @@ extern "C" { // Global access pointer C4Draw *pDraw=NULL; -// Transformation matrix to convert meshes from Ogre to Clonk coordinate system -const StdMeshMatrix C4Draw::OgreToClonk = StdMeshMatrix::Scale(-1.0f, 1.0f, 1.0f) * StdMeshMatrix::Rotate(float(M_PI)/2.0f, 1.0f, 0.0f, 0.0f) * StdMeshMatrix::Rotate(float(M_PI)/2.0f, 0.0f, 0.0f, 1.0f); - inline DWORD GetTextShadowClr(DWORD dwTxtClr) { return RGBA(((dwTxtClr >> 0) % 256) / 3, ((dwTxtClr >> 8) % 256) / 3, ((dwTxtClr >> 16) % 256) / 3, (dwTxtClr >> 24) % 256); @@ -498,7 +495,7 @@ bool C4Draw::RenderMesh(StdMeshInstance &instance, C4Surface * sfcTarget, float // Update bone matrices and vertex data (note this also updates attach transforms and child transforms) instance.UpdateBoneTransforms(); // Order faces according to MeshTransformation (note pTransform does not affect Z coordinate, so does not need to be taken into account for correct ordering) - StdMeshMatrix mat = OgreToClonk; + StdMeshMatrix mat = StdMeshMatrix::Identity(); if(MeshTransform) mat = *MeshTransform * mat; instance.ReorderFaces(&mat); // Render mesh diff --git a/src/graphics/C4Draw.h b/src/graphics/C4Draw.h index 3b20328c0..6c12245af 100644 --- a/src/graphics/C4Draw.h +++ b/src/graphics/C4Draw.h @@ -156,8 +156,6 @@ class C4FoWRegion; class C4Draw { public: - static const StdMeshMatrix OgreToClonk; - C4Draw(): MaxTexSize(0) { } virtual ~C4Draw() { pDraw=NULL; } public: diff --git a/src/graphics/C4DrawMeshGL.cpp b/src/graphics/C4DrawMeshGL.cpp index f1171b694..3b9b94fd0 100644 --- a/src/graphics/C4DrawMeshGL.cpp +++ b/src/graphics/C4DrawMeshGL.cpp @@ -841,32 +841,16 @@ void CStdGL::PerformMesh(StdMeshInstance &instance, float tx, float ty, float tw static const float FOV = 60.0f; static const float TAN_FOV = tan(FOV / 2.0f / 180.0f * M_PI); - // Convert OgreToClonk matrix to column-major order - // TODO: This must be executed after C4Draw::OgreToClonk was - // initialized - is this guaranteed at this position? - static const float OgreToClonkGL[16] = - { - C4Draw::OgreToClonk(0,0), C4Draw::OgreToClonk(1,0), C4Draw::OgreToClonk(2,0), 0, - C4Draw::OgreToClonk(0,1), C4Draw::OgreToClonk(1,1), C4Draw::OgreToClonk(2,1), 0, - C4Draw::OgreToClonk(0,2), C4Draw::OgreToClonk(1,2), C4Draw::OgreToClonk(2,2), 0, - C4Draw::OgreToClonk(0,3), C4Draw::OgreToClonk(1,3), C4Draw::OgreToClonk(2,3), 1 - }; - - static const bool OgreToClonkParity = C4Draw::OgreToClonk.Determinant() > 0.0f; - const StdMesh& mesh = instance.GetMesh(); - bool parity = OgreToClonkParity; + bool parity = false; // Convert bounding box to clonk coordinate system // (TODO: We should cache this, not sure where though) - // TODO: Note that this does not generally work with an arbitrary transformation this way const StdMeshBox& box = mesh.GetBoundingBox(); StdMeshVector v1, v2; v1.x = box.x1; v1.y = box.y1; v1.z = box.z1; v2.x = box.x2; v2.y = box.y2; v2.z = box.z2; - v1 = OgreToClonk * v1; // TODO: Include translation - v2 = OgreToClonk * v2; // TODO: Include translation // Vector from origin of mesh to center of mesh const StdMeshVector MeshCenter = (v1 + v2)/2.0f; @@ -1039,9 +1023,6 @@ void CStdGL::PerformMesh(StdMeshInstance &instance, float tx, float ty, float tw glMultMatrixf(Matrix); } - // Convert from Ogre to Clonk coordinate system - glMultMatrixf(OgreToClonkGL); - DWORD dwModClr = BlitModulated ? BlitModulateClr : 0xffffffff; const C4Rect clipRect = GetClipRect(); diff --git a/src/lib/StdMesh.cpp b/src/lib/StdMesh.cpp index a76d9a5d2..03942a1c3 100644 --- a/src/lib/StdMesh.cpp +++ b/src/lib/StdMesh.cpp @@ -261,15 +261,15 @@ namespace } } - // Mirror is wrt X axis + // Mirror is wrt Z axis void MirrorKeyFrame(StdMeshKeyFrame& frame, const StdMeshTransformation& old_bone_transformation, const StdMeshTransformation& new_inverse_bone_transformation) { // frame was a keyframe of a track for old_bone and was now transplanted to new_bone. + frame.Transformation.rotate.x = -frame.Transformation.rotate.x; frame.Transformation.rotate.y = -frame.Transformation.rotate.y; - frame.Transformation.rotate.z = -frame.Transformation.rotate.z; StdMeshVector d = old_bone_transformation.scale * (old_bone_transformation.rotate * frame.Transformation.translate); - d.x = -d.x; + d.z = -d.z; frame.Transformation.translate = new_inverse_bone_transformation.rotate * (new_inverse_bone_transformation.scale * d); // TODO: scale diff --git a/src/lib/StdMeshLoader.cpp b/src/lib/StdMeshLoader.cpp new file mode 100644 index 000000000..9bd785113 --- /dev/null +++ b/src/lib/StdMeshLoader.cpp @@ -0,0 +1,152 @@ +/* + * OpenClonk, http://www.openclonk.org + * + * Copyright (c) 2010-2015, The OpenClonk Team and contributors + * + * Distributed under the terms of the ISC license; see accompanying file + * "COPYING" for details. + * + * "Clonk" is a registered trademark of Matthes Bender, used with permission. + * See accompanying file "TRADEMARK" for details. + * + * To redistribute this file separately, substitute the full license texts + * for the above references. + */ + +// A loader for the OGRE .mesh binary file format + +#include + +#include + +namespace +{ + // Transpose a StdMeshMatrix. The translate component of + // the input matrix must be 0. + StdMeshMatrix Transpose(const StdMeshMatrix& matrix) + { + assert(fabs(matrix(0,3)) < 1e-6); + assert(fabs(matrix(1,3)) < 1e-6); + assert(fabs(matrix(2,3)) < 1e-6); + + StdMeshMatrix result; + + result(0,0) = matrix(0,0); + result(0,1) = matrix(1,0); + result(0,2) = matrix(2,0); + result(0,3) = 0.0f; + result(1,0) = matrix(0,1); + result(1,1) = matrix(1,1); + result(1,2) = matrix(2,1); + result(1,3) = 0.0f; + result(2,0) = matrix(0,2); + result(2,1) = matrix(1,2); + result(2,2) = matrix(2,2); + result(2,3) = 0.0f; + + return result; + } + + // Transformation matrix to convert meshes from Ogre to Clonk coordinate system + const StdMeshMatrix OgreToClonkMatrix = StdMeshMatrix::Scale(-1.0f, 1.0f, 1.0f) * StdMeshMatrix::Rotate(float(M_PI)/2.0f, 1.0f, 0.0f, 0.0f) * StdMeshMatrix::Rotate(float(M_PI)/2.0f, 0.0f, 0.0f, 1.0f); + + const StdMeshMatrix OgreToClonkInverse = StdMeshMatrix::Inverse(OgreToClonkMatrix); + const StdMeshMatrix OgreToClonkInverseTranspose = Transpose(OgreToClonkInverse); + const float OgreToClonkDeterminant = OgreToClonkMatrix.Determinant(); +} + +namespace OgreToClonk +{ + +StdMeshVector TransformVector(const StdMeshVector& vector) +{ + return OgreToClonkMatrix * vector; +} + +StdMeshVector TransformPseudoVector(const StdMeshVector& vector) +{ + // TODO: This works only for improper rotations... otherwise it might be better + // to write vector as an antisymmetric tensor and do the matrix transform. + return OgreToClonkDeterminant * (OgreToClonkMatrix * vector); +} + +StdMeshVector TransformNormalVector(const StdMeshVector& vector) +{ + return OgreToClonkInverseTranspose * vector; +} + +StdMeshVector TransformScaleVector(const StdMeshVector& vector) +{ + // TODO: Check we didn't introduce shear components + StdMeshMatrix scale = StdMeshMatrix::Scale(vector.x, vector.y, vector.z); + StdMeshMatrix transformed = OgreToClonkMatrix * scale * OgreToClonkInverse; + + StdMeshVector result; + result.x = transformed(0,0); + result.y = transformed(1,1); + result.z = transformed(2,2); + return result; +} + +StdMeshQuaternion TransformQuaternion(const StdMeshQuaternion& quaternion) +{ + StdMeshVector axis; + axis.x = quaternion.x; + axis.y = quaternion.y; + axis.z = quaternion.z; + + StdMeshVector transformed = TransformPseudoVector(axis); + + StdMeshQuaternion result; + result.w = quaternion.w; + result.x = transformed.x; + result.y = transformed.y; + result.z = transformed.z; + + return result; +} + +StdSubMesh::Vertex TransformVertex(const StdSubMesh::Vertex& vertex) +{ + StdMeshVector pos, normal; + pos.x = vertex.x; + pos.y = vertex.y; + pos.z = vertex.z; + normal.x = vertex.nx; + normal.y = vertex.ny; + normal.z = vertex.nz; + + pos = TransformVector(pos); + normal = TransformNormalVector(normal); + + StdSubMesh::Vertex result = vertex; + result.x = pos.x; + result.y = pos.y; + result.z = pos.z; + result.nx = normal.x; + result.ny = normal.y; + result.nz = normal.z; + + return result; +} + +StdMeshTransformation TransformTransformation(const StdMeshTransformation& trans) +{ + StdMeshTransformation result; + result.scale = TransformScaleVector(trans.scale); + result.rotate = TransformQuaternion(trans.rotate); + result.translate = TransformVector(trans.translate); + + // Consistency check: + /*StdMeshMatrix matrix = StdMeshMatrix::Transform(trans); + matrix = OgreToClonk * matrix * OgreToClonkInverse; + + StdMeshMatrix matrix2 = StdMeshMatrix::Transform(result); + for(int i = 0; i < 3; ++i) + for(int j = 0; j < 4; ++j) + assert(fabs(matrix(i,j) - matrix2(i,j)) < 1e-3);*/ + + return result; +} + +} diff --git a/src/lib/StdMeshLoader.h b/src/lib/StdMeshLoader.h index 2ef98eb51..e63ae55fe 100644 --- a/src/lib/StdMeshLoader.h +++ b/src/lib/StdMeshLoader.h @@ -20,6 +20,16 @@ #define INC_StdMeshLoader #include +namespace OgreToClonk +{ + StdMeshVector TransformVector(const StdMeshVector& vector); + StdMeshVector TransformPseudoVector(const StdMeshVector& vector); + StdMeshVector TransformNormalVector(const StdMeshVector& vector); + StdMeshVector TransformScaleVector(const StdMeshVector& vector); + StdMeshQuaternion TransformQuaternion(const StdMeshQuaternion& quaternion); + StdSubMesh::Vertex TransformVertex(const StdSubMesh::Vertex& vertex); + StdMeshTransformation TransformTransformation(const StdMeshTransformation& transformation); +} class StdMeshLoader { diff --git a/src/lib/StdMeshLoaderBinary.cpp b/src/lib/StdMeshLoaderBinary.cpp index 42015e66c..41dc4de4c 100644 --- a/src/lib/StdMeshLoaderBinary.cpp +++ b/src/lib/StdMeshLoaderBinary.cpp @@ -27,9 +27,6 @@ #include #include -#include -#include - namespace { bool VertexDeclarationIsSane(const boost::ptr_vector &decl, const char *filename) @@ -174,7 +171,7 @@ namespace break; } } - vertices.push_back(vertex); + vertices.push_back(OgreToClonk::TransformVertex(vertex)); // Advance vertex buffer cursors BOOST_FOREACH(const Ogre::Mesh::ChunkGeometryVertexBuffer &buf, geo.vertexBuffers) cursors[buf.index] += buf.vertexSize; @@ -419,6 +416,7 @@ void StdMeshSkeletonLoader::LoadSkeletonBinary(const char* groupname, const char kf.Transformation.rotate = catkf.rotation; kf.Transformation.scale = catkf.scale; kf.Transformation.translate = bone.InverseTransformation.rotate * (bone.InverseTransformation.scale * catkf.translation); + kf.Transformation = OgreToClonk::TransformTransformation(kf.Transformation); } } } @@ -427,10 +425,11 @@ void StdMeshSkeletonLoader::LoadSkeletonBinary(const char* groupname, const char BOOST_FOREACH(StdMeshBone *bone, Skeleton->Bones) { if (bone->Parent) - { - bone->Transformation = bone->Parent->Transformation * bone->Transformation; - bone->InverseTransformation = StdMeshTransformation::Inverse(bone->Transformation); - } + bone->Transformation = bone->Parent->Transformation * OgreToClonk::TransformTransformation(bone->Transformation); + else + bone->Transformation = OgreToClonk::TransformTransformation(bone->Transformation); + + bone->InverseTransformation = StdMeshTransformation::Inverse(bone->Transformation); } StoreSkeleton(groupname, filename, Skeleton); @@ -454,13 +453,6 @@ StdMesh *StdMeshLoader::LoadMeshBinary(const char *sourcefile, size_t length, co // Generate mesh from data Ogre::Mesh::ChunkMesh &cmesh = *static_cast(root.get()); std::unique_ptr mesh(new StdMesh); - mesh->BoundingBox = cmesh.bounds; - mesh->BoundingRadius = cmesh.radius; - - // We allow bounding box to be empty if it's only due to X direction since - // this is what goes inside the screen in Clonk. - if(mesh->BoundingBox.y1 == mesh->BoundingBox.y2 || mesh->BoundingBox.z1 == mesh->BoundingBox.z2) - throw Ogre::Mesh::EmptyBoundingBox(); // if the mesh has a skeleton, then try loading // it from the loader by the definition name @@ -553,6 +545,56 @@ StdMesh *StdMeshLoader::LoadMeshBinary(const char *sourcefile, size_t length, co vertex.bone_weight[0] = 1.0f; } } + + // Construct bounding box. Don't use bounds and radius from cmesh + // because they are in a different coordinate frame. + //mesh->BoundingBox = cmesh.bounds; + //mesh->BoundingRadius = cmesh.radius; + + bool first = true; + for (unsigned int i = 0; i < mesh->SubMeshes.size() + 1; ++i) + { + const std::vector* vertices = NULL; + if (i < mesh->SubMeshes.size()) + vertices = &mesh->SubMeshes[i].Vertices; + else + vertices = &mesh->SharedVertices; + + for (unsigned int j = 0; j < vertices->size(); ++j) + { + const StdMeshVertex& vertex = (*vertices)[j]; + + const float d = std::sqrt(vertex.x*vertex.x + + vertex.y*vertex.y + + vertex.z*vertex.z); + + // First vertex + if (first) + { + mesh->BoundingBox.x1 = mesh->BoundingBox.x2 = vertex.x; + mesh->BoundingBox.y1 = mesh->BoundingBox.y2 = vertex.y; + mesh->BoundingBox.z1 = mesh->BoundingBox.z2 = vertex.z; + mesh->BoundingRadius = d; + first = false; + } + else + { + mesh->BoundingBox.x1 = Min(vertex.x, mesh->BoundingBox.x1); + mesh->BoundingBox.x2 = Max(vertex.x, mesh->BoundingBox.x2); + mesh->BoundingBox.y1 = Min(vertex.y, mesh->BoundingBox.y1); + mesh->BoundingBox.y2 = Max(vertex.y, mesh->BoundingBox.y2); + mesh->BoundingBox.z1 = Min(vertex.z, mesh->BoundingBox.z1); + mesh->BoundingBox.z2 = Max(vertex.z, mesh->BoundingBox.z2); + mesh->BoundingRadius = Max(mesh->BoundingRadius, d); + } + } + } + + // We allow bounding box to be empty if it's only due to Z direction since + // this is what goes inside the screen in Clonk. + if(mesh->BoundingBox.x1 == mesh->BoundingBox.x2 || mesh->BoundingBox.y1 == mesh->BoundingBox.y2) + throw Ogre::Mesh::EmptyBoundingBox(); + return mesh.release(); } diff --git a/src/lib/StdMeshLoaderXml.cpp b/src/lib/StdMeshLoaderXml.cpp index 4e29ab5d0..9a3565281 100644 --- a/src/lib/StdMeshLoaderXml.cpp +++ b/src/lib/StdMeshLoaderXml.cpp @@ -142,10 +142,33 @@ void StdMeshLoader::StdMeshXML::LoadGeometry(StdMesh& mesh, std::vectorBoundingBox.y1 == mesh->BoundingBox.y2 || mesh->BoundingBox.z1 == mesh->BoundingBox.z2) + if(mesh->BoundingBox.x1 == mesh->BoundingBox.x2 || mesh->BoundingBox.y1 == mesh->BoundingBox.y2) xml.Error(StdCopyStrBuf("Bounding box is empty"), mesh_elem); // Read skeleton, if any @@ -528,6 +533,7 @@ void StdMeshSkeletonLoader::LoadSkeletonXml(const char* groupname, const char* f frame.Transformation.scale = s; frame.Transformation.rotate = StdMeshQuaternion::AngleAxis(angle, r); frame.Transformation.translate = bone->InverseTransformation.rotate * (bone->InverseTransformation.scale * d); + frame.Transformation = OgreToClonk::TransformTransformation(frame.Transformation); } } } @@ -541,13 +547,14 @@ void StdMeshSkeletonLoader::LoadSkeletonXml(const char* groupname, const char* f // transformations, not bone+parent. for (unsigned int i = 0; i < Skeleton->GetNumBones(); ++i) { + // Apply parent transformation if (Skeleton->Bones[i]->Parent) - { - // Apply parent transformation - Skeleton->Bones[i]->Transformation = Skeleton->Bones[i]->Parent->Transformation * Skeleton->Bones[i]->Transformation; - // Update inverse - Skeleton->Bones[i]->InverseTransformation = StdMeshTransformation::Inverse(Skeleton->Bones[i]->Transformation); - } + Skeleton->Bones[i]->Transformation = Skeleton->Bones[i]->Parent->Transformation * OgreToClonk::TransformTransformation(Skeleton->Bones[i]->Transformation); + else + Skeleton->Bones[i]->Transformation = OgreToClonk::TransformTransformation(Skeleton->Bones[i]->Transformation); + + // Update inverse + Skeleton->Bones[i]->InverseTransformation = StdMeshTransformation::Inverse(Skeleton->Bones[i]->Transformation); } StoreSkeleton(groupname, filename, Skeleton); diff --git a/src/object/C4ObjectScript.cpp b/src/object/C4ObjectScript.cpp index 9b4f4c209..5334430cb 100644 --- a/src/object/C4ObjectScript.cpp +++ b/src/object/C4ObjectScript.cpp @@ -2280,17 +2280,15 @@ static bool FnCreateParticleAtBone(C4Object* Obj, C4String* szName, C4String* sz } else { dir.x = dir.y = dir.z = 0.0f; } // Apply the bone transformation to them, to go from bone coordinates - // to mesh coordinates (note that bone coordinates use the OGRE - // coordinate system, so they need to be transformed to Clonk coordinates). - const StdMeshMatrix ClonkToOgre = StdMeshMatrix::Inverse(C4Draw::OgreToClonk); + // to mesh coordinates. // This is a good example why we should have different types for // position vectors and displacement vectors. TODO. - StdMeshVector transformed_x = transform * (ClonkToOgre * x); + StdMeshVector transformed_x = transform * x; transformed_x.x += transform(0,3); transformed_x.y += transform(1,3); transformed_x.z += transform(2,3); - x = C4Draw::OgreToClonk * transformed_x; - dir = C4Draw::OgreToClonk * (transform * (ClonkToOgre * dir)); + x = transformed_x; + dir = transform * dir; // Apply MeshTransformation in the mesh reference frame C4Value value; Obj->GetProperty(P_MeshTransformation, &value); @@ -2310,8 +2308,6 @@ static bool FnCreateParticleAtBone(C4Object* Obj, C4String* szName, C4String* sz StdMeshVector v1, v2; v1.x = box.x1; v1.y = box.y1; v1.z = box.z1; v2.x = box.x2; v2.y = box.y2; v2.z = box.z2; - v1 = C4Draw::OgreToClonk * v1; // TODO: Include translation - v2 = C4Draw::OgreToClonk * v2; // TODO: Include translation const float tx = fixtof(Obj->fix_x) + Obj->Def->Shape.GetX(); const float ty = fixtof(Obj->fix_y) + Obj->Def->Shape.GetY(); const float twdt = Obj->Def->Shape.Wdt; From 49effe46225bf6c6aa41a2598660a88515011ba0 Mon Sep 17 00:00:00 2001 From: Maikel de Vries Date: Wed, 19 Aug 2015 08:10:25 +0200 Subject: [PATCH 45/97] let AI handle the musket and fix tracking riding clonks --- .../HelperFunctions.ocd/DefCore.txt | 4 ++ .../EnemyAI.ocd/HelperFunctions.ocd/Script.c | 33 +++++++++ .../Helpers.ocd/EnemyAI.ocd/Script.c | 67 +++++++++++++++---- 3 files changed, 91 insertions(+), 13 deletions(-) create mode 100644 planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/HelperFunctions.ocd/DefCore.txt create mode 100644 planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/HelperFunctions.ocd/Script.c diff --git a/planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/HelperFunctions.ocd/DefCore.txt b/planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/HelperFunctions.ocd/DefCore.txt new file mode 100644 index 000000000..45aeeb87a --- /dev/null +++ b/planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/HelperFunctions.ocd/DefCore.txt @@ -0,0 +1,4 @@ +[DefCore] +id=AI_HelperFunctions +Version=6,0 +Category=C4D_StaticBack diff --git a/planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/HelperFunctions.ocd/Script.c b/planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/HelperFunctions.ocd/Script.c new file mode 100644 index 000000000..95d0ac66f --- /dev/null +++ b/planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/HelperFunctions.ocd/Script.c @@ -0,0 +1,33 @@ +/** + AI Helper Functions + Functionality that helps the AI. + + @author Maikel +*/ + + +// Returns the object that determines the movement of the target. +// For example the object the target is attached to or contained in. +private func GetTargetMovementObject(object target) +{ + // If attached: return the object the target is attached to. + if (target->GetProcedure() == DFA_ATTACH) + if (target->GetActionTarget()) + return target->GetActionTarget(); + // Default: return the target itself. + return target; +} + +// Returns the x-speed of the target or the object that causes its movement. +private func GetTargetXDir(object target, int prec) +{ + var moving_target = GetTargetMovementObject(target); + return moving_target->GetXDir(prec); +} + +// Returns the y-speed of the target or the object that causes its movement. +private func GetTargetYDir(object target, int prec) +{ + var moving_target = GetTargetMovementObject(target); + return moving_target->GetYDir(prec); +} \ No newline at end of file diff --git a/planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/Script.c b/planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/Script.c index 24c3c4cb4..d9f3606d4 100644 --- a/planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/Script.c +++ b/planet/Objects.ocd/Helpers.ocd/EnemyAI.ocd/Script.c @@ -1,3 +1,14 @@ +/** + Enemy AI + Controls enemy behaviour. + + @author Sven2 +*/ + + +#include AI_HelperFunctions + + static const S2AI_DefMaxAggroDistance = 200, // lose sight to target if it is this far away (unles we're ranged - then always guard the range rect) S2AI_DefGuardRangeX = 300, // search targets this far away in either direction (searching in rectangle) S2AI_DefGuardRangeY = 150, // search targets this far away in either direction (searching in rectangle) @@ -309,8 +320,8 @@ private func ExecuteVehicle(fx) var dx = tx-x, dy=ty-y+20; var power = Sqrt((GetGravity()*dx*dx) / Max(Abs(dx)+dy,1)); var dt = dx * 10 / power; - dx += fx.target->GetXDir(dt); - dy += fx.target->GetYDir(dt); + tx += GetTargetXDir(fx.target, dt); + ty += GetTargetYDir(fx.target, dt); if (!fx.target->GetContact(-1)) dy += GetGravity()*dt*dt/200; power = Sqrt((GetGravity()*dx*dx) / Max(Abs(dx)+dy,1)); power = power + Random(11)-5; // some variation @@ -358,20 +369,24 @@ private func ExecuteRanged(fx) return; } // Stuck in aim procedure check? - if (GetEffect("IntAimCheckProcedure", this) && !this->ReadyToAction()) return ExecuteStand(fx); + if (GetEffect("IntAimCheckProcedure", this) && !this->ReadyToAction()) + return ExecuteStand(fx); // Calculate offset to target. Take movement into account // Also aim for the head (y-4) so it's harder to evade by jumping var x=GetX(), y=GetY(), tx=fx.target->GetX(), ty=fx.target->GetY()-4; var d = Distance(x,y,tx,ty); var dt = d * 10 / fx.projectile_speed; // projected travel time of the arrow - tx += fx.target->GetXDir(dt); - ty += fx.target->GetYDir(dt); + tx += GetTargetXDir(fx.target, dt); + ty += GetTargetYDir(fx.target, dt); if (!fx.target->GetContact(-1)) ty += GetGravity()*dt*dt/200; // Path to target free? if (PathFree(x,y,tx,ty)) { // Get shooting angle var shooting_angle = GetBallisticAngle(tx-x, ty-y, fx.projectile_speed, 160); + if (fx.ranged_direct) + shooting_angle = Angle(x, y, tx, ty, 10); + //Log("AI: Ranged attack calculated angle %d from coordinates (%d, %d) and (%d, %d)", shooting_angle, x, y, tx, ty); if (GetType(shooting_angle) != C4V_Nil) { // No ally on path? @@ -385,8 +400,8 @@ private func ExecuteRanged(fx) { //Message("Bow @ %d!!!", shooting_angle); // Aim/Shoot there - x = Sin(shooting_angle,100); - y = -Cos(shooting_angle,100); + x = Sin(shooting_angle, 1000, 10); + y = -Cos(shooting_angle, 1000, 10); fx.aim_weapon->ControlUseHolding(this, x,y); if (this->IsAiming() && fx.time >= fx.aim_time + fx.aim_wait) { @@ -561,24 +576,43 @@ private func FindInventoryWeapon(fx) fx.ammo_check = nil; fx.ranged = false; // Find weapon in inventory, mark it as equipped and set according strategy, etc. if (fx.weapon = fx.vehicle) + { if (CheckVehicleAmmo(fx, fx.weapon)) { fx.strategy = fx.ai.ExecuteVehicle; fx.ranged=true; fx.aim_wait = 20; fx.ammo_check = fx.ai.CheckVehicleAmmo; return true; } else fx.weapon = nil; + } if (fx.weapon = FindContents(GrenadeLauncher)) + { if (HasBombs(fx, fx.weapon)) { fx.strategy = fx.ai.ExecuteRanged; fx.projectile_speed = 75; fx.aim_wait = 85; fx.ammo_check = fx.ai.HasBombs; fx.ranged=true; return true; } else fx.weapon = nil; + } if (fx.weapon = FindContents(Bow)) + { if (HasArrows(fx, fx.weapon)) { fx.strategy = fx.ai.ExecuteRanged; fx.projectile_speed = 100; fx.aim_wait = 0; fx.ammo_check = fx.ai.HasArrows; fx.ranged=true; return true; } else fx.weapon = nil; - if (fx.weapon = FindContents(Javelin)) { fx.strategy = fx.ai.ExecuteRanged; fx.projectile_speed = this.ThrowSpeed*21/100; fx.aim_wait = 16; fx.ranged=true; return true; } - if (fx.weapon = FindContents(Firestone)) { fx.strategy = fx.ai.ExecuteThrow; return true; } - if (fx.weapon = FindContents(Rock)) { fx.strategy = fx.ai.ExecuteThrow; return true; } - if (fx.weapon = FindContents(Sword)) { fx.strategy = fx.ai.ExecuteMelee; return true; } + } + if (fx.weapon = FindContents(Musket)) + { + if (HasAmmo(fx, fx.weapon)) + { fx.strategy = fx.ai.ExecuteRanged; fx.projectile_speed = 200; fx.aim_wait = 85; fx.ammo_check = fx.ai.HasAmmo; fx.ranged=true; fx.ranged_direct = true; return true; } + else + fx.weapon = nil; + } + if (fx.weapon = FindContents(Javelin)) + { fx.strategy = fx.ai.ExecuteRanged; fx.projectile_speed = this.ThrowSpeed*21/100; fx.aim_wait = 16; fx.ranged=true; return true; } + if (fx.weapon = FindContents(Firestone)) + { fx.strategy = fx.ai.ExecuteThrow; return true; } + if (fx.weapon = FindContents(Rock)) + { fx.strategy = fx.ai.ExecuteThrow; return true; } + if (fx.weapon = FindContents(Lantern)) + { fx.strategy = fx.ai.ExecuteThrow; return true; } + if (fx.weapon = FindContents(Sword)) + { fx.strategy = fx.ai.ExecuteMelee; return true; } //if (fx.weapon = Contents(0)) { fx.strategy = fx.ai.ExecuteThrow; return true; } - don't throw empty bow, etc. // no weapon :( return false; @@ -591,6 +625,13 @@ private func HasArrows(fx, object weapon) return false; } +private func HasAmmo(fx, object weapon) +{ + if (weapon->Contents(0)) return true; + if (FindObject(Find_Container(this), Find_Func("IsMusketAmmo"))) return true; + return false; +} + private func HasBombs(fx, object weapon) { if (weapon->Contents(0)) return true; @@ -660,9 +701,9 @@ private func GetBallisticAngle(int dx, int dy, int v, int max_angle) // q is in 1/10000 (pix/frame)^4 var q = v**4 - g*(g*dx*dx-2*dy*v*v); // dy is negative up if (q<0) return nil; // out of range - var a = (Angle(0,0,g*dx,Sqrt(q)-v*v)+180)%360-180; + var a = (Angle(0, 0, g * dx, Sqrt(q) - v * v, 10) + 1800) % 3600 - 1800; // Check bounds - if(!Inside(a, -max_angle, max_angle)) return nil; + if(!Inside(a, -10 * max_angle, 10 * max_angle)) return nil; return a; } From a63e8f495527944d53e3d7caf1c31c915ac9a761 Mon Sep 17 00:00:00 2001 From: Maikel de Vries Date: Wed, 19 Aug 2015 08:10:52 +0200 Subject: [PATCH 46/97] improve the AI testing scenario --- planet/Tests.ocf/AI.ocs/MapBg.bmp | Bin 0 -> 4346 bytes planet/Tests.ocf/AI.ocs/MapFg.bmp | Bin 0 -> 4346 bytes planet/Tests.ocf/AI.ocs/Scenario.txt | 3 +- planet/Tests.ocf/AI.ocs/Script.c | 232 ++++++++++++++++++++++++--- 4 files changed, 213 insertions(+), 22 deletions(-) create mode 100644 planet/Tests.ocf/AI.ocs/MapBg.bmp create mode 100644 planet/Tests.ocf/AI.ocs/MapFg.bmp diff --git a/planet/Tests.ocf/AI.ocs/MapBg.bmp b/planet/Tests.ocf/AI.ocs/MapBg.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4d21eaaffb63df30c2cfd08972585297b31c6a73 GIT binary patch literal 4346 zcmeH`&1w`u6oro|X{^}NG7?Z1;@YJl5RD;mf)h8o5L{*B?@nBpg%HWlCWzoN;v0yd zK7ryZ2tI@Bfr8eOf+Bvm{XsLG0T+Uco}_2G?mczxIj6e&SJF{6pS6S1J?<8{&T<{l zA-<)pQaX0{`$f?j>MvhgZJK}aHPM3I(yp@0%Gt?r<(%bg?VMCJ|2i~%RVfuZdFq5N z&CQ7g7)RRx-21G_ja}VXnrSBVpWoJzM-xh{ZuY0a7mCqoY4wd}ZavfW&DT1!u%f|( zm)hCcQDpAc`=J&u-(?4Uk@;|*zc6oGHGgiAYO+z%@+vhj=*&5Sb=us1s{4H{WxB?DSpY-v?Lu1y5SKEr_nHgWdd`44NL_>de zR;rm>7g9IhDR%NBU%743mPTNz+Yg^iGk1fcCo^d0eUM1c0$FEzwY?N&PeXh=v{ZHm=y!n`oac~!#A^Zr1%B<_4k(c(yHA%um%#s& zK=WSy@oJ7%#_0VC{>3m-7_)hD@;7wL?bxj}Tej>ejbYe>+;_PT#lHBFMk~PxYD}Sp nU<|sYHA2vW8C%*zFc#a|{6Wy#>xx|hT>@PKT>@PK|2TnfxF>;T literal 0 HcmV?d00001 diff --git a/planet/Tests.ocf/AI.ocs/MapFg.bmp b/planet/Tests.ocf/AI.ocs/MapFg.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c91076740a3269d280ba575836c5a71eb361a98d GIT binary patch literal 4346 zcmeH`&1w`u6oro|X;RwKG7?Z1;@YJl5RD;mf{9t^LU5IhzdLbZ7D6OHn;?SAh;JZ* z`UHxvAovWf2MStC3X1sM_6N;$23!a(dXk>$y7$z%=bY;9Ur9&ReAW(1_qdzqI?HuH z<9th7rF87@_lu%6)L*)`+BE;-YpeykrCnv0m9vxM$~nu~+BvCc{xv>%RVfuZdFq5N z&CG}e7)RRx-21FU8@sx(Fx5=xKfkRbkH(Z(-Rw_-FBGHG!s;7M-Fl|$o3C|dZbgd^ zUTSA&N0GT(?+2Q{e3u>YMdrhK{=%$n)$F->s>w!4ORLntpfl$P)@gJ5sqR01q5|yk z)9YGXT-5s8ppAE*;4x1geALCcHLb1O0aw6b>XSaccxcS}@M>GpJTv3#m(OU*ifHIh zPfIm(YdpB9nzIm>r{@jNUXOkvK_5(LOGT{&K7n(#$8@vsm4~1cK zB^O*XE=JD`>IC4t=hsA(s^K+39^M=yY&HF;(r~O3!!o_1L<4#(3L(1kK)fU&c26;iEQD3DXp zJXf;)mWZ7v5hb+N z&GQzJUBGGcdtj)WCd2USn4R%gH94cFhKD>#$Z9xq4EPJIIWh1V-!4`-GC+@KgIs#( zuI!9@^eaWn0v-?N01pYB4$T$%6Ffb11~f-JMCyS$67gtSOZCV%kbyah_!hj8XF_Sf z+yT9y2{N3(Qy}Y1ueO(>>}h~+hnC9D0R1j7gYz8Fk9bXBpun%a+W{rga`)*H=o0v! z5@_DbKVHq@$_Twb!M_-W3L`czFaL&axgEKcX3Lg6r4bB!kozw8q1YEc)MzCbLX9Z2 o5R5>#w1x;;Fe6KQ2u5OCn?DFzdtI?hpi7`jpi7`j;2$UO4e4B;=>Px# literal 0 HcmV?d00001 diff --git a/planet/Tests.ocf/AI.ocs/Scenario.txt b/planet/Tests.ocf/AI.ocs/Scenario.txt index c3d84d751..a7d30505c 100644 --- a/planet/Tests.ocf/AI.ocs/Scenario.txt +++ b/planet/Tests.ocf/AI.ocs/Scenario.txt @@ -1,7 +1,6 @@ [Head] -Title=AIBattle +Title=AITest Version=6,0 -MaxPlayer=2 [Landscape] MapWidth=20 diff --git a/planet/Tests.ocf/AI.ocs/Script.c b/planet/Tests.ocf/AI.ocs/Script.c index 7336911d1..e57eb4d83 100644 --- a/planet/Tests.ocf/AI.ocs/Script.c +++ b/planet/Tests.ocf/AI.ocs/Script.c @@ -1,25 +1,53 @@ -func Initialize() +/** + AI + Tests for the AI system. + + @author Maikel +*/ + + +static script_enemy1; +static script_enemy2; + +protected func Initialize() { - // Script player as opponent. - CreateScriptPlayer("S2", 0xffffc000, nil, CSPF_FixedAttributes); + // Script player functions as an opponent + CreateScriptPlayer("Enemy 1", 0xffff0000, nil, CSPF_FixedAttributes | CSPF_NoEliminationCheck | CSPF_Invisible); + CreateScriptPlayer("Enemy 2", 0xff000000, nil, CSPF_FixedAttributes | CSPF_NoEliminationCheck | CSPF_Invisible); + + + return; } -func InitializePlayer(int plr) + +/*-- Player Initialization --*/ + +protected func InitializePlayer(int plr) { - if (GetPlayerType(plr) == C4PT_Script) return InitializeScriptPlayer(plr); - GetCrew(plr)->SetPosition(LandscapeWidth()-10, 190); - GetCrew(plr)->CreateContents(Bow); - GetCrew(plr)->CreateContents(Arrow); - GetCrew(plr)->CreateContents(Rock); - GetCrew(plr)->CreateContents(Rock); - GetCrew(plr)->CreateContents(Rock); - GetCrew(plr)->CreateContents(Rock); - GetCrew(plr)->CreateContents(Rock); - GetCrew(plr)->CreateContents(Rock); - return true; + // Make all players hostile to each other. + //for (var plr1 in GetPlayers()) + // for (var plr2 in GetPlayers()) + Log("%d", plr); + + // Initialize script players differently. + if (GetPlayerType(plr) == C4PT_Script) + return InitializeScriptPlayer(plr); + + // Everything visible to the observer. + SetFoW(false, plr); + SetPlayerZoomByViewRange(plr, LandscapeWidth(), LandscapeHeight(), PLRZOOM_Direct | PLRZOOM_Set | PLRZOOM_LimitMax); + var container = CreateObject(RelaunchContainer, LandscapeWidth() / 2, LandscapeHeight() / 2); + GetCrew(plr)->Enter(container); + + // Add test control effect. + var effect = AddEffect("IntTestControl", nil, 100, 2); + effect.testnr = 1; + effect.launched = false; + effect.plr = plr; + return; } -func InitializeScriptPlayer(int plr) +protected func InitializeScriptPlayer(int plr) { // Remove old crew. var index = 0; @@ -28,12 +56,16 @@ func InitializeScriptPlayer(int plr) GetCrew(plr, index)->RemoveObject(); index++; } - // Create enemies - CreateEnemy(Clonk, 40,200, plr, [GrenadeLauncher, IronBomb, IronBomb, IronBomb, IronBomb, IronBomb, IronBomb, IronBomb, IronBomb, IronBomb, IronBomb, IronBomb, IronBomb, IronBomb], 40); + + // Store the script player number. + if (script_enemy1 == nil) + script_enemy1 = plr; + else if (script_enemy2 == nil) + script_enemy2 = plr; return; } -func CreateEnemy(id clonktype, int x,int y, int plr, array contents, int life) +global func CreateEnemy(id clonktype, int x,int y, int plr, array contents, int life) { var enemy = CreateObjectAbove(clonktype, x, y, plr); if (!enemy) return nil; @@ -42,6 +74,166 @@ func CreateEnemy(id clonktype, int x,int y, int plr, array contents, int life) enemy->SetMaxEnergy(life); if (contents) for (var c in contents) enemy->CreateContents(c); S2AI->AddAI(enemy); - //CreateObjectAbove(EnergyBar)->SetTarget(enemy); + enemy->AddEnergyBar(); return enemy; } + +/*-- AI Tests --*/ + +global func Test1_OnStart(int plr) +{ + CreateEnemy(Clonk, 120, 258, script_enemy1, [GrenadeLauncher, IronBomb, IronBomb, IronBomb, IronBomb, IronBomb], 50); + CreateEnemy(Clonk, 392, 258, script_enemy2, [Sword], 50); + // Log what the test is about. + Log("AI battle: grenade launcher vs. sword."); + return true; +} + +global func Test1_Completed() +{ + if (ObjectCount(Find_OCF(OCF_Alive), Find_Owner(script_enemy1)) == 0 || ObjectCount(Find_OCF(OCF_Alive), Find_Owner(script_enemy2)) == 0) + return true; + return false; +} + +global func Test1_OnFinished() +{ + RemoveAll(Find_Owner(script_enemy1)); + RemoveAll(Find_Owner(script_enemy2)); + return; +} + + +global func Test2_OnStart(int plr) +{ + CreateEnemy(Clonk, 120, 258, script_enemy1, [Firestone, Firestone, Firestone, Firestone, Firestone, Firestone, Firestone, Firestone, Firestone], 50); + CreateEnemy(Clonk, 392, 258, script_enemy2, [Lantern, Lantern, Lantern, Lantern, Lantern, Lantern, Lantern, Lantern, Lantern], 50); + // Log what the test is about. + Log("AI battle: firestone vs. lantern."); + return true; +} + +global func Test2_Completed() +{ + if (ObjectCount(Find_OCF(OCF_Alive), Find_Owner(script_enemy1)) == 0 || ObjectCount(Find_OCF(OCF_Alive), Find_Owner(script_enemy2)) == 0) + return true; + return false; +} + +global func Test2_OnFinished() +{ + RemoveAll(Find_Owner(script_enemy1)); + RemoveAll(Find_Owner(script_enemy2)); + return; +} + + +global func Test3_OnStart(int plr) +{ + CreateEnemy(Clonk, 120, 258, script_enemy1, [Musket, LeadShot, Sword], 50); + CreateEnemy(Clonk, 392, 258, script_enemy2, [Sword, Bow, Arrow], 50); + // Log what the test is about. + Log("AI battle: musket vs. bow."); + return true; +} + +global func Test3_Completed() +{ + if (ObjectCount(Find_OCF(OCF_Alive), Find_Owner(script_enemy1)) == 0 || ObjectCount(Find_OCF(OCF_Alive), Find_Owner(script_enemy2)) == 0) + return true; + return false; +} + +global func Test3_OnFinished() +{ + RemoveAll(Find_Owner(script_enemy1)); + RemoveAll(Find_Owner(script_enemy2)); + return; +} + + + +/*-- Test Control --*/ + +// Aborts the current test and launches the specified test instead. +global func LaunchTest(int nr) +{ + // Get the control effect. + var effect = GetEffect("IntTestControl", nil); + if (!effect) + { + // Create a new control effect and launch the test. + effect = AddEffect("IntTestControl", nil, 100, 2); + effect.testnr = nr; + effect.launched = false; + effect.plr = GetPlayerByIndex(0, C4PT_User); + return; + } + // Finish the currently running test. + Call(Format("~Test%d_OnFinished", effect.testnr)); + // Start the requested test by just setting the test number and setting + // effect.launched to false, effect will handle the rest. + effect.testnr = nr; + effect.launched = false; + return; +} + +// Calling this function skips the current test, does not work if last test has been ran already. +global func SkipTest() +{ + // Get the control effect. + var effect = GetEffect("IntTestControl", nil); + if (!effect) + return; + // Finish the previous test. + Call(Format("~Test%d_OnFinished", effect.testnr)); + // Start the next test by just increasing the test number and setting + // effect.launched to false, effect will handle the rest. + effect.testnr++; + effect.launched = false; + return; +} + + +/*-- Test Effect --*/ + +global func FxIntTestControlStart(object target, proplist effect, int temporary) +{ + if (temporary) + return FX_OK; + // Set default interval. + effect.Interval = 2; + return FX_OK; +} + +global func FxIntTestControlTimer(object target, proplist effect) +{ + // Launch new test if needed. + if (!effect.launched) + { + // Log test start. + Log("====================================="); + Log("Test %d started:", effect.testnr); + // Start the test if available, otherwise finish test sequence. + if (!Call(Format("~Test%d_OnStart", effect.testnr), effect.plr)) + { + Log("Test %d not available, the previous test was the last test.", effect.testnr); + Log("====================================="); + Log("All tests have been successfully completed!"); + return -1; + } + effect.launched = true; + } + // Check whether the current test has been finished. + if (Call(Format("Test%d_Completed", effect.testnr))) + { + effect.launched = false; + //RemoveTest(); + // Call the test on finished function. + Call(Format("~Test%d_OnFinished", effect.testnr)); + // Log result and increase test number. + Log("Test %d successfully completed.", effect.testnr); + effect.testnr++; + } + return FX_OK; +} From 0d102d21846521c788563b36af218523291b8d52 Mon Sep 17 00:00:00 2001 From: David Dormagen Date: Thu, 20 Aug 2015 13:38:05 +0200 Subject: [PATCH 47/97] explosion: fix nil-pointer when object removes itself on death After doing damage to an object, you cannot be sure that the object persists. It might have been blown to smithereens. So, catch that case. --- planet/System.ocg/Explode.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/planet/System.ocg/Explode.c b/planet/System.ocg/Explode.c index 9e720ea43..0724b52c0 100644 --- a/planet/System.ocg/Explode.c +++ b/planet/System.ocg/Explode.c @@ -308,7 +308,9 @@ global func BlastObjects(int x, int y, int level, object container, int cause_pl if (cat & C4D_Living) { obj->DoEnergy(level / -2, false, FX_Call_EngBlast, cause_plr); + if (!obj) continue; obj->DoDamage(level / 2, FX_Call_DmgBlast, cause_plr); + if (!obj) continue; } // Killtracing for projectiles. if (cat & C4D_Object) From 5ec9999d4c8cadd3c8d6103c6ef3471cda771031 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Thu, 20 Aug 2015 13:14:34 -0400 Subject: [PATCH 48/97] Fix crash on global or scenario script reload. The string table of System.ocg scripts (except the global System.ocg) pointed to nowhere after the initial load phase, but is still required for reload. Added a ref counting option to keep these string tables alive. --- src/c4group/C4LangStringTable.cpp | 2 +- src/c4group/C4LangStringTable.h | 4 ++++ src/game/C4Game.cpp | 10 ++++++---- src/script/C4ScriptHost.cpp | 20 ++++++++++++++++++-- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/c4group/C4LangStringTable.cpp b/src/c4group/C4LangStringTable.cpp index d2f1adbc5..8d29e9fa2 100644 --- a/src/c4group/C4LangStringTable.cpp +++ b/src/c4group/C4LangStringTable.cpp @@ -23,7 +23,7 @@ #include "C4LangStringTable.h" #include "C4InputValidation.h" -C4LangStringTable::C4LangStringTable() {} +C4LangStringTable::C4LangStringTable() : ref_count(1) {} bool C4LangStringTable::HasTranslation(const std::string &text) const { diff --git a/src/c4group/C4LangStringTable.h b/src/c4group/C4LangStringTable.h index 2dad9a812..5cdc71ca7 100644 --- a/src/c4group/C4LangStringTable.h +++ b/src/c4group/C4LangStringTable.h @@ -30,6 +30,7 @@ class C4LangStringTable : public C4ComponentHost typedef std::map Table; mutable Table strings; void PopulateStringTable() const; + int32_t ref_count; // ref counter initialized to 1 on ctor; delete when zero is reached public: C4LangStringTable(); const std::string &Translate(const std::string &text) const; @@ -39,6 +40,9 @@ public: void ReplaceStrings(StdStrBuf &rBuf); void ReplaceStrings(const StdStrBuf &rBuf, StdStrBuf &rTarget); + void AddRef() { ++ref_count; } + void DelRef() { if (!--ref_count) delete this; } + class NoSuchTranslation : public std::runtime_error { public: diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index dc1664339..ca7dc28d4 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -2827,14 +2827,14 @@ bool C4Game::LoadAdditionalSystemGroup(C4Group &parent_group) char fn[_MAX_FNAME+1] = { 0 }; if (SysGroup.OpenAsChild(&parent_group, C4CFN_System)) { - C4LangStringTable SysGroupString; - C4Language::LoadComponentHost(&SysGroupString, SysGroup, C4CFN_ScriptStringTbl, Config.General.LanguageEx); + C4LangStringTable *pSysGroupString = new C4LangStringTable(); + C4Language::LoadComponentHost(pSysGroupString, SysGroup, C4CFN_ScriptStringTbl, Config.General.LanguageEx); // load custom scenario control definitions if (SysGroup.FindEntry(C4CFN_PlayerControls)) { Log("[!]Loading local scenario player control definitions..."); C4PlayerControlFile PlayerControlFile; - if (!PlayerControlFile.Load(SysGroup, C4CFN_PlayerControls, &SysGroupString)) + if (!PlayerControlFile.Load(SysGroup, C4CFN_PlayerControls, pSysGroupString)) { // non-fatal error here Log("[!]Error loading scenario defined player controls"); @@ -2854,12 +2854,14 @@ bool C4Game::LoadAdditionalSystemGroup(C4Group &parent_group) // host will be destroyed by script engine, so drop the references C4ScriptHost *scr = new C4ExtraScriptHost(); scr->Reg2List(&ScriptEngine); - scr->Load(SysGroup, fn, Config.General.LanguageEx, &SysGroupString); + scr->Load(SysGroup, fn, Config.General.LanguageEx, pSysGroupString); } // if it's a physical group: watch out for changes if (!SysGroup.IsPacked() && Game.pFileMonitor) Game.pFileMonitor->AddDirectory(SysGroup.GetFullName().getData()); SysGroup.Close(); + // release string table if no longer used + pSysGroupString->DelRef(); } return true; } diff --git a/src/script/C4ScriptHost.cpp b/src/script/C4ScriptHost.cpp index 2d81c6e2c..569a8124f 100644 --- a/src/script/C4ScriptHost.cpp +++ b/src/script/C4ScriptHost.cpp @@ -51,6 +51,11 @@ void C4ScriptHost::Clear() LocalValues.Clear(); SourceScripts.clear(); SourceScripts.push_back(this); + if (stringTable) + { + stringTable->DelRef(); + stringTable = NULL; + } // remove includes Includes.clear(); Appends.clear(); @@ -62,7 +67,12 @@ bool C4ScriptHost::Load(C4Group &hGroup, const char *szFilename, // Base load bool fSuccess = ComponentHost.Load(hGroup,szFilename,szLanguage); // String Table - stringTable = pLocalTable; + if (stringTable != pLocalTable) + { + if (stringTable) stringTable->DelRef(); + stringTable = pLocalTable; + if (stringTable) stringTable->AddRef(); + } // set name ScriptName.Ref(ComponentHost.GetFilePath()); // preparse script @@ -73,7 +83,13 @@ bool C4ScriptHost::Load(C4Group &hGroup, const char *szFilename, bool C4ScriptHost::LoadData(const char *szFilename, const char *szData, class C4LangStringTable *pLocalTable) { - stringTable = pLocalTable; + // String Table + if (stringTable != pLocalTable) + { + if (stringTable) stringTable->DelRef(); + stringTable = pLocalTable; + if (stringTable) stringTable->AddRef(); + } ScriptName.Copy(szFilename); StdStrBuf tempScript; From cf940d639bd7c84450d735a0ad753c05e7452279 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Thu, 20 Aug 2015 20:19:38 -0400 Subject: [PATCH 49/97] Fix memory leak caused by circular prop list chains. The shapes library has such pointer chains. The leaks were getting pretty heavy because they included pointers to C4AulFuncs, which kept a lot of parts of the script engine and string tables in memory. --- src/C4Globals.cpp | 1 + src/game/C4Game.cpp | 3 ++ src/mape/cpp-handles/stub-handle.cpp | 1 + src/script/C4PropList.cpp | 50 ++++++++++++++++++++++++++-- src/script/C4PropList.h | 11 ++++-- src/script/C4ScriptStandalone.cpp | 1 + 6 files changed, 62 insertions(+), 5 deletions(-) diff --git a/src/C4Globals.cpp b/src/C4Globals.cpp index 9ea087f8d..cf744e8c8 100644 --- a/src/C4Globals.cpp +++ b/src/C4Globals.cpp @@ -33,6 +33,7 @@ C4Set C4PropList::PropLists; #endif C4Set C4PropListNumbered::PropLists; +C4Set C4PropListScript::PropLists; std::vector C4PropListNumbered::ShelvedPropLists; int32_t C4PropListNumbered::EnumerationIndex = 0; C4StringTable Strings; diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index ca7dc28d4..0ba73b559 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -603,6 +603,9 @@ void C4Game::Clear() C4PropListNumbered::ClearShelve(); // may be nonempty if there was a fatal error during section load ScriptEngine.Clear(); + // delete any remaining prop lists from circular chains + C4PropListNumbered::ClearNumberedPropLists(); + C4PropListScript::ClearScriptPropLists(); MainSysLangStringTable.Clear(); ScenarioLangStringTable.Clear(); CloseScenario(); diff --git a/src/mape/cpp-handles/stub-handle.cpp b/src/mape/cpp-handles/stub-handle.cpp index 33330e5aa..8ab569038 100644 --- a/src/mape/cpp-handles/stub-handle.cpp +++ b/src/mape/cpp-handles/stub-handle.cpp @@ -38,6 +38,7 @@ C4Set C4PropList::PropLists; #endif C4Set C4PropListNumbered::PropLists; +C4Set C4PropListScript::PropLists; std::vector C4PropListNumbered::ShelvedPropLists; int32_t C4PropListNumbered::EnumerationIndex = 0; C4StringTable Strings; diff --git a/src/script/C4PropList.cpp b/src/script/C4PropList.cpp index 751e5f051..4aa1ddbea 100644 --- a/src/script/C4PropList.cpp +++ b/src/script/C4PropList.cpp @@ -134,6 +134,20 @@ void C4PropListNumbered::ClearShelve() ShelvedPropLists.clear(); } +void C4PropListNumbered::ClearNumberedPropLists() +{ + // empty all proplists to ensure safe deletion of proplists with circular references + // note that this the call to Clear() might delete some prop lists. So it is assumed that + // PropLists does not shrink its table as the number of values goes down + C4PropListNumbered *const* p_next = PropLists.First(), *const* p; + while ((p = p_next)) + { + p_next = PropLists.Next(p); + // check *p since it might have been deleted by clearing the previous prop list + if (*p) (*p)->Clear(); + } +} + C4PropListNumbered::C4PropListNumbered(C4PropList * prototype): C4PropList(prototype), Number(-1) { } @@ -190,6 +204,28 @@ C4PropListNumbered::~C4PropListNumbered() Log("removing numbered proplist without number"); } +void C4PropListScript::ClearScriptPropLists() +{ + // empty all proplists to ensure safe deletion of proplists with circular references + // note that this the call to Clear() might delete some prop lists. So it is assumed that + // PropLists does not shrink its table as the number of values goes down + // However, some values may be skipped due to table consolidation. Just fix it by iterating over the table until it's empty. + C4PropListScript *const* p_next, *const* p; + while ((p_next = PropLists.First())) + { + while ((p = p_next)) + { + p_next = PropLists.Next(p); + // check *p since it might have been deleted by clearing the previous prop list + if (*p) + { + C4Value ref(C4VPropList(*p)); // keep a reference because prop list might delete itself within clearing method otherwise + (*p)->Clear(); + } + } + } +} + void C4PropListStatic::RefCompileFunc(StdCompiler *pComp, C4ValueNumbers * numbers) const { assert(!pComp->isCompiler()); @@ -609,7 +645,7 @@ C4PropertyName C4PropList::GetPropertyP(C4PropertyName n) const return P_LAST; } -int32_t C4PropList::GetPropertyInt(C4PropertyName n) const +int32_t C4PropList::GetPropertyInt(C4PropertyName n, int32_t default_val) const { C4String * k = &Strings.P[n]; if (Properties.Has(k)) @@ -618,9 +654,9 @@ int32_t C4PropList::GetPropertyInt(C4PropertyName n) const } if (GetPrototype()) { - return GetPrototype()->GetPropertyInt(n); + return GetPrototype()->GetPropertyInt(n, default_val); } - return 0; + return default_val; } C4PropList *C4PropList::GetPropertyPropList(C4PropertyName n) const @@ -800,3 +836,11 @@ unsigned int C4Set::Hash(C4PropList * const & e) { return C4Set::Hash(static_cast(reinterpret_cast(e))); } + +template<> template<> +unsigned int C4Set::Hash(C4PropListScript * const & e) +{ + // since script prop lists are only put in the set for reference keeping, just hash by pointer + // but use only some of the more significant bits because + return reinterpret_cast(e) / 63; +} diff --git a/src/script/C4PropList.h b/src/script/C4PropList.h index 5bf519695..29a910ae6 100644 --- a/src/script/C4PropList.h +++ b/src/script/C4PropList.h @@ -113,7 +113,7 @@ public: C4Value Call(C4String * k, C4AulParSet *pPars=0, bool fPassErrors=false); C4Value Call(const char * k, C4AulParSet *pPars=0, bool fPassErrors=false); C4PropertyName GetPropertyP(C4PropertyName k) const; - int32_t GetPropertyInt(C4PropertyName k) const; + int32_t GetPropertyInt(C4PropertyName k, int32_t default_val = 0) const; C4PropList *GetPropertyPropList(C4PropertyName k) const; bool HasProperty(C4String * k) const { return Properties.Has(k); } // not allowed on frozen proplists @@ -216,6 +216,7 @@ public: static void ShelveNumberedPropLists(); // unnumber all proplists and put them on the shelve. To be used on remaining objects before a savegame load. static void UnshelveNumberedPropLists(); // re-insert shelved proplists into main list static void ClearShelve(); + static void ClearNumberedPropLists(); // empty all properties in numbered prop lists. Used on game clear to ensure prop lists with circular references get cleared. protected: C4PropListNumbered(C4PropList * prototype = 0); void AcquireNumber(); // acquire a number and add to internal list @@ -232,8 +233,14 @@ protected: class C4PropListScript: public C4PropList { public: - C4PropListScript(C4PropList * prototype = 0): C4PropList(prototype) { } + C4PropListScript(C4PropList * prototype = 0) : C4PropList(prototype) { PropLists.Add(this); } + virtual ~C4PropListScript() { PropLists.Remove(this); } bool Delete() { return true; } + + static void ClearScriptPropLists(); // empty all properties in script-created prop lists. Used on game clear to ensure prop lists with circular references get cleared. + +protected: + static C4Set PropLists; }; // PropLists declared in the game data diff --git a/src/script/C4ScriptStandalone.cpp b/src/script/C4ScriptStandalone.cpp index ed7b6ca9b..6567c333a 100644 --- a/src/script/C4ScriptStandalone.cpp +++ b/src/script/C4ScriptStandalone.cpp @@ -34,6 +34,7 @@ C4Set C4PropList::PropLists; #endif C4Set C4PropListNumbered::PropLists; +C4Set C4PropListScript::PropLists; std::vector C4PropListNumbered::ShelvedPropLists; int32_t C4PropListNumbered::EnumerationIndex = 0; C4StringTable Strings; From d7a0d291e252c056def3055804edf2778a6262d1 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Fri, 21 Aug 2015 15:03:13 -0400 Subject: [PATCH 50/97] Fix 64 bit build. --- src/script/C4PropList.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/script/C4PropList.cpp b/src/script/C4PropList.cpp index 4aa1ddbea..56f16e302 100644 --- a/src/script/C4PropList.cpp +++ b/src/script/C4PropList.cpp @@ -842,5 +842,6 @@ unsigned int C4Set::Hash(C4PropListScrip { // since script prop lists are only put in the set for reference keeping, just hash by pointer // but use only some of the more significant bits because - return reinterpret_cast(e) / 63; + uintptr_t hash = reinterpret_cast(e); + return (unsigned int)(hash / 63); } From b2cc853887f496cfa4c940ba5fa719f847c82fa7 Mon Sep 17 00:00:00 2001 From: Clonkonaut Date: Sat, 22 Aug 2015 10:45:44 +0200 Subject: [PATCH 51/97] New hit sound for the lantern. Also, general glass break sound. --- .../Items.ocd/Tools.ocd/Lantern.ocd/Script.c | 4 ++-- planet/Sound.ocg/GlassBreak.ogg | Bin 0 -> 17723 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 planet/Sound.ocg/GlassBreak.ogg diff --git a/planet/Objects.ocd/Items.ocd/Tools.ocd/Lantern.ocd/Script.c b/planet/Objects.ocd/Items.ocd/Tools.ocd/Lantern.ocd/Script.c index cb063e452..b34d8004d 100644 --- a/planet/Objects.ocd/Items.ocd/Tools.ocd/Lantern.ocd/Script.c +++ b/planet/Objects.ocd/Items.ocd/Tools.ocd/Lantern.ocd/Script.c @@ -31,7 +31,7 @@ public func DummyDefinition() /*-- Ground Hitting --*/ -private func Hit2() +private func Hit() { Sound("GlassHit?"); } @@ -44,7 +44,7 @@ private func Hit2() // Cast some particles. // TODO? // Sound effects. - Sound("GlassHit?"); + Sound("GlassBreak"); Sound("Inflame"); Explode(10, true); } diff --git a/planet/Sound.ocg/GlassBreak.ogg b/planet/Sound.ocg/GlassBreak.ogg new file mode 100644 index 0000000000000000000000000000000000000000..700848aebddac89e752737a559240f38b2625d0a GIT binary patch literal 17723 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 literal 0 HcmV?d00001 From d363fda9c163360e82b3ad1208b8f30d04135edb Mon Sep 17 00:00:00 2001 From: Maikel de Vries Date: Sat, 22 Aug 2015 19:27:22 +0200 Subject: [PATCH 52/97] add smoke bomb Graphics by Win, sound by ala & from freesound. --- .../Weapons.ocd/SmokeBomb.ocd/Authors.txt | 3 + .../Weapons.ocd/SmokeBomb.ocd/DefCore.txt | 16 +++ .../Weapons.ocd/SmokeBomb.ocd/Graphics.8.png | Bin 0 -> 6831 bytes .../Weapons.ocd/SmokeBomb.ocd/Normal.8.png | Bin 0 -> 7472 bytes .../Weapons.ocd/SmokeBomb.ocd/Script.c | 124 ++++++++++++++++++ .../Weapons.ocd/SmokeBomb.ocd/Smoke.wav | Bin 0 -> 211276 bytes .../Weapons.ocd/SmokeBomb.ocd/SmokeSizzle.ogg | Bin 0 -> 78127 bytes .../Weapons.ocd/SmokeBomb.ocd/StringTblDE.txt | 3 + .../Weapons.ocd/SmokeBomb.ocd/StringTblUS.txt | 3 + 9 files changed, 149 insertions(+) create mode 100644 planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Authors.txt create mode 100644 planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/DefCore.txt create mode 100644 planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Graphics.8.png create mode 100644 planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Normal.8.png create mode 100644 planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Script.c create mode 100644 planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Smoke.wav create mode 100644 planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/SmokeSizzle.ogg create mode 100644 planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/StringTblDE.txt create mode 100644 planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/StringTblUS.txt diff --git a/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Authors.txt b/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Authors.txt new file mode 100644 index 000000000..64e0eee30 --- /dev/null +++ b/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Authors.txt @@ -0,0 +1,3 @@ +SmokeSizzle.ogg +luffy https://www.freesound.org/people/luffy/sounds/17299/ +CC Attribution 3.0 license (http://creativecommons.org/licenses/by/3.0/) \ No newline at end of file diff --git a/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/DefCore.txt b/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/DefCore.txt new file mode 100644 index 000000000..6b58f6c37 --- /dev/null +++ b/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/DefCore.txt @@ -0,0 +1,16 @@ +[DefCore] +id=SmokeBomb +Version=6,0 +Category=C4D_Object +Width=8 +Height=8 +Offset=-4,-4 +Picture=0,0,64,64 +Vertices=3 +VertexX=-2,3,0 +VertexY=-3,-3,4 +VertexFriction=20,20,20 +Value=25 +Mass=12 +Components=Firestone=1;Coal=1;Metal=1; +Rotate=1 diff --git a/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Graphics.8.png b/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Graphics.8.png new file mode 100644 index 0000000000000000000000000000000000000000..e161c02ffeaa8c9b310a80cfbd8f350d871d8255 GIT binary patch literal 6831 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 literal 0 HcmV?d00001 diff --git a/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Normal.8.png b/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Normal.8.png new file mode 100644 index 0000000000000000000000000000000000000000..94e06e9bcaa82b42068d10602bd8a3f003db6270 GIT binary patch literal 7472 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 effect.length) + return FX_Execute_Kill; + + // Increas interval to draw more particles. + if (time > effect.length / 6) + effect.Interval = 4; + if (time > effect.length / 4) + effect.Interval = 3; + if (time > effect.length / 3) + effect.Interval = 2; + if (time > 2 * effect.length / 3) + effect.Interval = 1; + + // Particles for smoke and a bit of fire. + var smoke_dx = GetVertex(0, VTX_X); + var smoke_dy = GetVertex(0, VTX_Y); + var fuse_dx = GetVertex(1, VTX_X); + var fuse_dy = GetVertex(1, VTX_Y); + var smoke_life = effect.lifetime + Random(effect.lifetime) / 2; + CreateParticle("Smoke", smoke_dx, smoke_dy, PV_Random(smoke_dx - 5, smoke_dx + 5), PV_Random(smoke_dy - 5, smoke_dy + 5), smoke_life, effect.smoke); + CreateParticle("SmokeThick", smoke_dx, smoke_dy, PV_Random(smoke_dx - 5, smoke_dx + 5), PV_Random(smoke_dy - 5, smoke_dy + 5), smoke_life, effect.smokethick); + CreateParticle("Fire", fuse_dx, fuse_dy, PV_Random(2 * fuse_dx - 3, 2 * fuse_dx + 3), PV_Random(2 * fuse_dy - 3, 2 * fuse_dy + 3), PV_Random(10, 20), Particles_Glimmer(), 2); + + return FX_OK; +} + +protected func FxIntSmokeBombStop(object target, proplist effect, int reason, bool temp) +{ + if (temp) + return FX_OK; + // Sound. + Sound("Smoke.wav", false, 100, nil, -1); + Sound("SmokeSizzle", false, 100, nil, -1); + RemoveObject(); + return FX_OK; +} + +public func IsWeapon() { return true; } +public func IsArmoryProduct() { return true; } + + +/*-- Properties --*/ + +local Collectible = 1; +local Name = "$Name$"; +local Description = "$Description$"; +local UsageHelp = "$UsageHelp$"; \ No newline at end of file diff --git a/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Smoke.wav b/planet/Objects.ocd/Items.ocd/Weapons.ocd/SmokeBomb.ocd/Smoke.wav new file mode 100644 index 0000000000000000000000000000000000000000..e4ddda008fec78bea859b89df91aa688746dfb1f GIT binary patch literal 211276 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 diff --git a/docs/sdk/script/SoundModifiers.xml b/docs/sdk/script/SoundModifiers.xml new file mode 100644 index 000000000..70c950fc5 --- /dev/null +++ b/docs/sdk/script/SoundModifiers.xml @@ -0,0 +1,338 @@ + + + + + Sound modifiers + Sound modifiers + + Usage + A number of different sound modifiers can be attached to sounds. Sound modifiers are accessed via script by passing a prop list defining them to the Sound script functions. Sample prop lists are already defined in the Ambience definition in Objects.ocd. If Objects.ocd is loaded, you can for example play the "Ding" sound with a reverb-effect: + Sound("Ding",,,,,,,Ambience.CaveModifier); + Custom modifiers may also be created using the prototype classes provided in the ambience object: + +// Play "Ding" sound with an extra-long reverb modifier +long_reverb_modifier = new Ambience.SoundModifier { + Type = C4SMT_Reverb, + Reverb_Decay_Time = 10000, +}; +Sound("Ding",,,,,,,long_reverb_modifier); +modifier->Release(); + + Sound modifiers are lazy-initialized, that is the filters are computed when the first sound with that effect is played. The engine also holds filters of any used modifiers attached to the used prop list in memory until released by the Release()-call provided by the ambience library, which wraps ChangeSoundModifier with appropriate parameters. + Since filter creation may cost some performance, it is recommended to create filter prop lists at round start and keep them for any effects. Please note that modifier lookup happens by prop list pointer only, not by its contents. Recreating and failing to release sound modifier prop lists therefore constitutes a memory-leak. + If sound modifiers are released, they are kept active until the last sound using them finishes. Note that for modifiers such as echo, this could still cut off sounds because the modifier outlasts the original sound (potentially forever for echo without decay). + Some existing modifiers may also be updated and updates reflected to the sounds played, even with those currently playing, by using the Update()-call such as in this example scenario script: + +static reverb_modifier; + +func Initialize() +{ + // Play "Ding" sound repeatedly and modify reverb + reverb_modifier = new Ambience.SoundModifier { + Type = C4SMT_Echo, + Echo_Feedback = 1000, + }; + Sound("Ding",,,,1,,,reverb_modifier); + ScheduleCall(nil, this.Timer, 30, 99999); + return true; +} + +func Timer() +{ + // Update effect every 30 frames + reverb_modifier.Echo_Feedback = Random(2) * 500; + reverb_modifier->Update(); + return true; +} + Note that runtime updating does not work for the reverb modifier in the openal-soft library. + + Global modifiers + Global modifiers can be set using the SetGlobalSoundModifier (see function documentation for example). These modifiers are applied to all sounds played in the viewport of a player or all players that do not have a modifier yet. Please note that it is not possible to combine multiple modifiers on a single sound. + + + + Property reference + The effect is selected from the Type-property, which may have the following values: + + + Constant + Effect + + + C4SMT_Reverb + Reverb effect caused by sound bouncing off walls in enclosed spaces. + + + C4SMT_Echo + Sound repeat as caused by loud sounds reflected in very large spaces. + + + C4SMT_Equalizer + Custom amplification of up to four definable frequency bands. Note: When running with OpenAL soft, only supported with version 1.16 or above (not shipped by default). + +
+ Each modifier has a number of parameters. These consult to standard parameters for the OpenAL EFX library by dividing all given integer values by 1000 to yield float values. + Reverb modifier + + + Property + Type + Default + Minmum + Maximum + Remarks + + + Reverb_Density + int + 1000 + 0 + 1000 + + + + Reverb_Diffusion + int + 1000 + 0 + 1000 + + + + Reverb_Gain + int + 316 + 0 + 1000 + + + + Reverb_GainHF + int + 1000 + 0 + 1000 + + + + Reverb_Decay_Time + int + 2910 + 100 + 20000 + + + + Reverb_Decay_HFRatio + int + 1300 + 100 + 20000 + + + + Reverb_Reflections_Gain + int + 500 + 0 + 3160 + + + + Reverb_Reflections_Delay + int + 15 + 0 + 300 + + + + Reverb_Late_Reverb_Gain + int + 706 + 0 + 10000 + + + + Reverb_Late_Reverb_Delay + int + 22 + 0 + 100 + + + + Reverb_Air_Absorption_GainHF + int + 994 + 892 + 1000 + + + + Reverb_Room_Rolloff_Factor + int + 0 + 0 + 10000 + + + + Reverb_Decay_HFLimit + bool + true + + + + +
+
+ Echo modifier + + + Property + Type + Default + Minmum + Maximum + Description + + + Echo_Delay + int + 100 + 0 + 207 + Time delay for first, centered echo. + + + Echo_LRDelay + int + 100 + 0 + 404 + Time delay for secondary, panning echo. + + + Echo_Damping + int + 500 + 0 + 990 + Amount of high-frequency damping. + + + Echo_Feedback + int + 500 + 0 + 1000 + Amount of original signal fed into the echo. A value of 1000 would lead to an infinite echo. + + + Echo_Spread + int + -1000 + -1000 + +1000 + Controls the amount of panning left and right, with the sign determining if the first jump is left or right. A value of zero means no echo panning. + +
+
+ Equalizer modifier + + + Property + Type + Default + Minmum + Maximum + Remarks + + + Equalizer_Low_Gain + int + 1000 + 126 + 7943 + + + + Equalizer_Low_Cutoff + int + 200000 + 50000 + 800000 + + + + Equalizer_Mid1_Gain + int + 1000 + 126 + 7943 + + + + Equalizer_Mid1_Center + int + 500000 + 200000 + 3000000 + + + + Equalizer_Mid1_Width + int + 1000 + 10 + 1000 + + + + Equalizer_Mid2_Gain + int + 1000 + 126 + 7943 + + + + Equalizer_Mid2_Center + int + 3000000 + 1000000 + 8000000 + + + + Equalizer_Mid2_Width + int + 1000 + 10 + 1000 + + + + Equalizer_High_Gain + int + 1000 + 126 + 7943 + + + + Equalizer_High_Cutoff + int + 6000000 + 4000000 + 16000000 + + +
+
+
+ Sven22015-07 +
diff --git a/docs/sdk/script/fn/SetGlobalSoundModifier.xml b/docs/sdk/script/fn/SetGlobalSoundModifier.xml new file mode 100644 index 000000000..5f18a8fd1 --- /dev/null +++ b/docs/sdk/script/fn/SetGlobalSoundModifier.xml @@ -0,0 +1,60 @@ + + + + + + SetGlobalSoundModifier + Effects + Sound + 7.0 OC + + bool + + + proplist + name + Modifier to be applied to all sounds. + + + int + player + If non-nil: Modifier is applied to sounds played in viewports owned by this player. + + + + + Sets a sound modifier to be applied to all sounds played that do not have a modifier already set. + Modifier precendence from highest to lowest is: +
  • Modifier given as parameter to Sound or SoundAt
  • +
  • Modifier assigned to the player owning the viewport which has its center closest to the sound source
  • +
  • Global modifier (as set by SetGlobalSoundModifier(modifier, nil);)
+ Only one modifier is applied at the time. It is not possible to combine multiple modifiers.
+ + + func Timer() +{ + // Is there a player? + var player = GetPlayerByIndex(0, C4PT_User); + if (player >= 0) + { + // Is the player controlling a clonk in a cave? + var mod = nil; + var clonk = GetCursor(player); + if (clonk) if (clonk->GetMaterial() == Material("Tunnel")) + { + // Controlled clonk is in a cave - do some cave sounds! + mod = Ambience.CaveModifier; + } + SetGlobalSoundModifier(mod, player); + } +} + Scenario timer script: When this function is called, it sets a cave reverb sound modifier whenever the clonk of the first player is in front of tunnel background. + + + Sound + SoundAt + Sound modifiers +
+ Sven22015-08 +
diff --git a/docs/sdk/script/fn/Sound.xml b/docs/sdk/script/fn/Sound.xml index b519dd856..72318fa5f 100644 --- a/docs/sdk/script/fn/Sound.xml +++ b/docs/sdk/script/fn/Sound.xml @@ -51,6 +51,12 @@ Pitch modification between -90 and 1000. Values larger than zero let the sound play the faster and at a higher pitch. The resulting speed multiplication factor is (pitch + 100) / 100. + + proplist + modifier + Sound modifier for special effects such as reverb or echo. See Sound modifiers. + + Plays a sound. The specified sound file has to be available in the group Sound.ocg, in the active scenario file, or in any loaded object definition. The audibility of object local sounds will depend on the position of the object relative to the visible viewports. @@ -63,6 +69,7 @@ SoundAt Music + Sound modifiers Sven22002-08 diff --git a/docs/sdk/script/fn/SoundAt.xml b/docs/sdk/script/fn/SoundAt.xml index c2c1f67ea..4ad2fc0ce 100644 --- a/docs/sdk/script/fn/SoundAt.xml +++ b/docs/sdk/script/fn/SoundAt.xml @@ -49,11 +49,18 @@ Pitch modification between -90 and 1000. Values larger than zero let the sound play the faster and at a higher pitch. The resulting speed multiplication factor is (pitch + 100) / 100. + + proplist + modifier + Sound modifier for special effects such as reverb or echo. See Sound modifiers. + + Plays a sound at the specified position. The specified sound file has to be available in the group Sound.ocg, in the active scenario file, or in any loaded object definition. Sound Music + Sound modifiers Sven22002-08 diff --git a/docs/sdk/script/index.xml b/docs/sdk/script/index.xml index e60705cfd..f9dd83669 100644 --- a/docs/sdk/script/index.xml +++ b/docs/sdk/script/index.xml @@ -46,6 +46,7 @@ Effects Querying Game Data Script Player (i.e. AI player) + Sound modifiers Libraries Shape diff --git a/planet/Objects.ocd/Environment.ocd/Ambience.ocd/Script.c b/planet/Objects.ocd/Environment.ocd/Ambience.ocd/Script.c index e3755a3a5..d3b521aaa 100644 --- a/planet/Objects.ocd/Environment.ocd/Ambience.ocd/Script.c +++ b/planet/Objects.ocd/Environment.ocd/Ambience.ocd/Script.c @@ -1,6 +1,6 @@ /** Ambience - Cares about the placement of purely visual objects. + Cares about the placement of purely visual objects and handles sound ambience The placement uses categories and thus is forward-compatible. */ @@ -105,4 +105,24 @@ CreateEnvironmentObjects("Temperate", Rectangle(LandscapeWidth()/2, 0, Landscape p_id->Place(amount_percentage, area); } -} \ No newline at end of file +} + +/* Sound ambience */ + +local SoundModifier, CaveModifier; + +func ReleaseSoundModifier() { return ChangeSoundModifier(this, true); } +func UpdateSoundModifier() { return ChangeSoundModifier(this, false); } // do not use + +func Definition() +{ + // Base sound modifier + SoundModifier = { + Release = Ambience.ReleaseSoundModifier, + Update = Ambience.UpdateSoundModifier, + }; + // Modifiers for different ambiences + CaveModifier = new SoundModifier { + Type = C4SMT_Reverb, + }; +} diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index 0ba73b559..43eac3858 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -86,6 +86,7 @@ static C4GameParameters GameParameters; static C4ScenarioParameterDefs GameScenarioParameterDefs; static C4ScenarioParameters GameStartupScenarioParameters; static C4RoundResults GameRoundResults; +static C4Value GameGlobalSoundModifier; C4Game::C4Game(): ScenarioParameterDefs(GameScenarioParameterDefs), @@ -101,7 +102,8 @@ C4Game::C4Game(): pFileMonitor(NULL), pSec1Timer(new C4GameSec1Timer()), fPreinited(false), StartupLogPos(0), QuitLogPos(0), - fQuitWithError(false) + fQuitWithError(false), + GlobalSoundModifier(GameGlobalSoundModifier) { Default(); } @@ -480,6 +482,9 @@ bool C4Game::Init() // Gamma pDraw->ApplyGamma(); + // Sound modifier from savegames + if (GlobalSoundModifier) SetGlobalSoundModifier(GlobalSoundModifier._getPropList()); + // Message board and upper board if (!Application.isEditor) { @@ -617,6 +622,7 @@ void C4Game::Clear() PlayerControlDefaultAssignmentSets.Clear(); PlayerControlDefs.Clear(); ::MeshMaterialManager.Clear(); + SetGlobalSoundModifier(NULL); Application.SoundSystem.Init(); // clear it up and re-init it for startup menu use // global fullscreen class is not cleared, because it holds the carrier window @@ -1654,6 +1660,7 @@ void C4Game::CompileFunc(StdCompiler *pComp, CompileSettings comp, C4ValueNumber pComp->Value(mkNamingAdapt(mkStringAdaptMA(CurrentScenarioSection), "CurrentScenarioSection", "")); pComp->Value(mkNamingAdapt(fResortAnyObject, "ResortAnyObj", false)); pComp->Value(mkNamingAdapt(iMusicLevel, "MusicLevel", 100)); + pComp->Value(mkNamingAdapt(mkParAdapt(GlobalSoundModifier, numbers), "GlobalSoundModifier", C4Value())); pComp->Value(mkNamingAdapt(NextMission, "NextMission", StdCopyStrBuf())); pComp->Value(mkNamingAdapt(NextMissionText, "NextMissionText", StdCopyStrBuf())); pComp->Value(mkNamingAdapt(NextMissionDesc, "NextMissionDesc", StdCopyStrBuf())); @@ -3708,3 +3715,20 @@ void C4Game::SetDefaultGamma() pDraw->SetGamma(0x000000, 0x808080, 0xffffff, iRamp); } } + +void C4Game::SetGlobalSoundModifier(C4PropList *new_modifier) +{ + // set in prop list (for savegames) and in sound system:: + C4SoundModifier *mod; + if (new_modifier) + { + GlobalSoundModifier.SetPropList(new_modifier); + mod = ::Application.SoundSystem.Modifiers.Get(new_modifier, true); + } + else + { + GlobalSoundModifier.Set0(); + mod = NULL; + } + ::Application.SoundSystem.Modifiers.SetGlobalModifier(mod, NO_OWNER); +} diff --git a/src/game/C4Game.h b/src/game/C4Game.h index ab3d5ce7d..18c97dc57 100644 --- a/src/game/C4Game.h +++ b/src/game/C4Game.h @@ -87,6 +87,7 @@ public: C4KeyboardInput &KeyboardInput; C4FileMonitor *pFileMonitor; C4GameSec1Timer *pSec1Timer; + C4Value &GlobalSoundModifier; // contains proplist for sound modifier to be applied to all new sounds played char CurrentScenarioSection[C4MaxName+1]; char ScenarioFilename[_MAX_PATH+1]; @@ -285,6 +286,7 @@ protected: public: bool ToggleChart(); // chart dlg on/off void SetMusicLevel(int32_t iToLvl); // change game music volume; multiplied by config volume for real volume + void SetGlobalSoundModifier(C4PropList *modifier_props); }; extern C4Game Game; diff --git a/src/game/C4Viewport.cpp b/src/game/C4Viewport.cpp index 02fb9a542..b52f2fcf5 100644 --- a/src/game/C4Viewport.cpp +++ b/src/game/C4Viewport.cpp @@ -1006,7 +1006,7 @@ C4Viewport* C4ViewportList::GetViewport(int32_t iPlayer, C4Viewport* pPrev) return NULL; } -int32_t C4ViewportList::GetAudibility(int32_t iX, int32_t iY, int32_t *iPan, int32_t iAudibilityRadius) +int32_t C4ViewportList::GetAudibility(int32_t iX, int32_t iY, int32_t *iPan, int32_t iAudibilityRadius, int32_t *outPlayer) { // default audibility radius if (!iAudibilityRadius) iAudibilityRadius = C4AudibilityRadius; @@ -1015,8 +1015,12 @@ int32_t C4ViewportList::GetAudibility(int32_t iX, int32_t iY, int32_t *iPan, int for (C4Viewport *cvp=FirstViewport; cvp; cvp=cvp->Next) { float distanceToCenterOfViewport = Distance(cvp->GetViewCenterX(),cvp->GetViewCenterY(),iX,iY); - iAudible = Max( iAudible, - Clamp(100-100*distanceToCenterOfViewport/C4AudibilityRadius,0,100) ); + int32_t audibility = Clamp(100 - 100 * distanceToCenterOfViewport / C4AudibilityRadius, 0, 100); + if (audibility > iAudible) + { + iAudible = audibility; + if (outPlayer) *outPlayer = cvp->Player; + } *iPan += (iX-(cvp->GetViewCenterX())) / 5; } *iPan = Clamp(*iPan, -100, 100); diff --git a/src/game/C4Viewport.h b/src/game/C4Viewport.h index 23181fdbf..1523f2828 100644 --- a/src/game/C4Viewport.h +++ b/src/game/C4Viewport.h @@ -145,7 +145,7 @@ public: #ifdef USE_WIN32_WINDOWS C4Viewport* GetViewport(HWND hwnd); #endif - int32_t GetAudibility(int32_t iX, int32_t iY, int32_t *iPan, int32_t iAudibilityRadius=0); + int32_t GetAudibility(int32_t iX, int32_t iY, int32_t *iPan, int32_t iAudibilityRadius = 0, int32_t *outPlayer = NULL); bool ViewportNextPlayer(); bool FreeScroll(C4Vec2D vScrollBy); // key callback: Scroll ownerless viewport by some offset diff --git a/src/gamescript/C4GameScript.cpp b/src/gamescript/C4GameScript.cpp index 49bfba87f..720a3ad8b 100644 --- a/src/gamescript/C4GameScript.cpp +++ b/src/gamescript/C4GameScript.cpp @@ -485,7 +485,7 @@ static C4Void FnBlastFree(C4PropList * _this, long iX, long iY, long iLevel, Nil return C4Void(); } -static bool FnSoundAt(C4PropList * _this, C4String *szSound, long iX, long iY, Nillable iLevel, Nillable iAtPlayer, long iCustomFalloffDistance, long iPitch) +static bool FnSoundAt(C4PropList * _this, C4String *szSound, long iX, long iY, Nillable iLevel, Nillable iAtPlayer, long iCustomFalloffDistance, long iPitch, C4PropList *modifier_props) { // play here? if (!iAtPlayer.IsNil()) @@ -503,6 +503,12 @@ static bool FnSoundAt(C4PropList * _this, C4String *szSound, long iX, long iY, N // default sound level if (iLevel.IsNil() || iLevel>100) iLevel=100; + // modifier from prop list + C4SoundModifier *modifier; + if (modifier_props) + modifier = Application.SoundSystem.Modifiers.Get(modifier_props, true); + else + modifier = NULL; // target object C4Object *pObj = Object(_this); if (pObj) @@ -515,7 +521,7 @@ static bool FnSoundAt(C4PropList * _this, C4String *szSound, long iX, long iY, N return true; } -static bool FnSound(C4PropList * _this, C4String *szSound, bool fGlobal, Nillable iLevel, Nillable iAtPlayer, long iLoop, long iCustomFalloffDistance, long iPitch) +static bool FnSound(C4PropList * _this, C4String *szSound, bool fGlobal, Nillable iLevel, Nillable iAtPlayer, long iLoop, long iCustomFalloffDistance, long iPitch, C4PropList *modifier_props) { // play here? if (!iAtPlayer.IsNil()) @@ -533,6 +539,12 @@ static bool FnSound(C4PropList * _this, C4String *szSound, bool fGlobal, Nillabl // default sound level if (iLevel.IsNil() || iLevel>100) iLevel=100; + // modifier from prop list + C4SoundModifier *modifier; + if (modifier_props) + modifier = Application.SoundSystem.Modifiers.Get(modifier_props, true); + else + modifier = NULL; // target object C4Object *pObj = NULL; if (!fGlobal) pObj = Object(_this); @@ -549,7 +561,7 @@ static bool FnSound(C4PropList * _this, C4String *szSound, bool fGlobal, Nillabl else { // try to play effect - StartSoundEffect(FnStringPar(szSound), !!iLoop, iLevel, pObj, iCustomFalloffDistance, iPitch); + StartSoundEffect(FnStringPar(szSound), !!iLoop, iLevel, pObj, iCustomFalloffDistance, iPitch, modifier); } } else @@ -560,6 +572,40 @@ static bool FnSound(C4PropList * _this, C4String *szSound, bool fGlobal, Nillabl return true; } +static bool FnChangeSoundModifier(C4PropList * _this, C4PropList *modifier_props, bool release) +{ + // internal function to be used by sound library: Updates sound modifier + C4SoundModifier *modifier = Application.SoundSystem.Modifiers.Get(modifier_props, false); + // modifier not found. May be due to savegame resume. + // In that case, creation/updates will happen automatically next time Sound() is called + // always return true for sync safety because the internal C4SoundModifierList is not synchronized + if (!modifier) return true; + if (release) + modifier->Release(); + else + modifier->Update(); + return true; +} + +static bool FnSetGlobalSoundModifier(C4PropList * _this, C4PropList *modifier_props, Nillable at_player) +{ + // set modifier to be applied to all future sounds + if (at_player.IsNil()) + { + // no player given: Global modifier for all players. + Game.SetGlobalSoundModifier(modifier_props); + } + else + { + // modifier for all viewports of a player + C4Player *plr = ::Players.Get(at_player); + if (!plr) return false; + plr->SetSoundModifier(modifier_props); + } + // always true on valid params for sync safety + return true; +} + static bool FnMusic(C4PropList * _this, C4String *szSongname, bool fLoop, long iFadeTime_ms) { bool success; @@ -2648,6 +2694,8 @@ void InitGameFunctionMap(C4AulScriptEngine *pEngine) AddFunc(pEngine, "CheckConstructionSite", FnCheckConstructionSite); AddFunc(pEngine, "Sound", FnSound); AddFunc(pEngine, "SoundAt", FnSoundAt); + AddFunc(pEngine, "ChangeSoundModifier", FnChangeSoundModifier); + AddFunc(pEngine, "SetGlobalSoundModifier", FnSetGlobalSoundModifier); AddFunc(pEngine, "Music", FnMusic); AddFunc(pEngine, "MusicLevel", FnMusicLevel); AddFunc(pEngine, "SetPlayList", FnSetPlayList); @@ -2953,6 +3001,11 @@ C4ScriptConstDef C4ScriptGameConstMap[]= { "ATTACH_Back" ,C4V_Int, C4ATTACH_Back }, { "ATTACH_MoveRelative" ,C4V_Int, C4ATTACH_MoveRelative }, + // sound modifier type + { "C4SMT_Reverb" ,C4V_Int, C4SoundModifier::C4SMT_Reverb }, + { "C4SMT_Echo" ,C4V_Int, C4SoundModifier::C4SMT_Echo }, + { "C4SMT_Equalizer" ,C4V_Int, C4SoundModifier::C4SMT_Equalizer }, + { NULL, C4V_Nil, 0} }; diff --git a/src/object/C4GameObjects.cpp b/src/object/C4GameObjects.cpp index e89523011..0dba599db 100644 --- a/src/object/C4GameObjects.cpp +++ b/src/object/C4GameObjects.cpp @@ -510,7 +510,10 @@ void C4GameObjects::ResetAudibility() { for (C4Object *obj : *this) if (obj) + { obj->Audible = obj->AudiblePan = 0; + obj->AudiblePlayer = NO_OWNER; + } } void C4GameObjects::SetOCF() diff --git a/src/object/C4Object.cpp b/src/object/C4Object.cpp index 2770c1d4d..4e06205a6 100644 --- a/src/object/C4Object.cpp +++ b/src/object/C4Object.cpp @@ -193,7 +193,8 @@ void C4Object::Default() OnFire=0; InLiquid=0; EntranceStatus=0; - Audible=0; + Audible=AudiblePan=0; + AudiblePlayer = NO_OWNER; t_contact=0; OCF=0; Action.Default(); @@ -302,7 +303,7 @@ bool C4Object::Init(C4PropList *pDef, C4Object *pCreator, UpdateFace(true); // Initial audibility - Audible=::Viewports.GetAudibility(GetX(), GetY(), &AudiblePan); + Audible=::Viewports.GetAudibility(GetX(), GetY(), &AudiblePan, 0, &AudiblePlayer); // Initial OCF SetOCF(); @@ -1885,7 +1886,7 @@ void C4Object::Draw(C4TargetFacet &cgo, int32_t iByPlayer, DrawMode eDrawMode, f if (!IsVisible(iByPlayer, !!eDrawMode)) return; // Line - if (Def->Line) { DrawLine(cgo); return; } + if (Def->Line) { DrawLine(cgo, iByPlayer); return; } // background particles (bounds not checked) if (BackParticles) BackParticles->Draw(cgo, this); @@ -1905,7 +1906,7 @@ void C4Object::Draw(C4TargetFacet &cgo, int32_t iByPlayer, DrawMode eDrawMode, f fYStretchObject=true; // Set audibility - if (!eDrawMode) SetAudibilityAt(cgo, GetX(), GetY()); + if (!eDrawMode) SetAudibilityAt(cgo, GetX(), GetY(), iByPlayer); // Output boundary if (!fYStretchObject && !eDrawMode && !(Category & C4D_Parallax)) @@ -2201,15 +2202,15 @@ void C4Object::DrawTopFace(C4TargetFacet &cgo, int32_t iByPlayer, DrawMode eDraw #endif } -void C4Object::DrawLine(C4TargetFacet &cgo) +void C4Object::DrawLine(C4TargetFacet &cgo, int32_t at_player) { // Nothing to draw if the object has less than two vertices if (Shape.VtxNum < 2) return; #ifndef USE_CONSOLE // Audibility - SetAudibilityAt(cgo, Shape.VtxX[0],Shape.VtxY[0]); - SetAudibilityAt(cgo, Shape.VtxX[Shape.VtxNum-1],Shape.VtxY[Shape.VtxNum-1]); + SetAudibilityAt(cgo, Shape.VtxX[0], Shape.VtxY[0], at_player); + SetAudibilityAt(cgo, Shape.VtxX[Shape.VtxNum - 1], Shape.VtxY[Shape.VtxNum - 1], at_player); // additive mode? PrepareDrawing(); // Draw line segments @@ -4147,13 +4148,18 @@ void C4Object::UpdateLight() if (Landscape.pFoW) Landscape.pFoW->Add(this); } -void C4Object::SetAudibilityAt(C4TargetFacet &cgo, int32_t iX, int32_t iY) +void C4Object::SetAudibilityAt(C4TargetFacet &cgo, int32_t iX, int32_t iY, int32_t player) { // target pos (parallax) float offX, offY, newzoom; GetDrawPosition(cgo, iX, iY, cgo.Zoom, offX, offY, newzoom); - Audible = Max(Audible, Clamp(100 - 100 * Distance(cgo.X + cgo.Wdt / 2, cgo.Y + cgo.Hgt / 2, offX, offY) / 700, 0, 100)); - AudiblePan = Clamp(200 * (offX - cgo.X - (cgo.Wdt / 2)) / cgo.Wdt, -100, 100); + int32_t audible_at_pos = Clamp(100 - 100 * Distance(cgo.X + cgo.Wdt / 2, cgo.Y + cgo.Hgt / 2, offX, offY) / 700, 0, 100); + if (audible_at_pos > Audible) + { + Audible = audible_at_pos; + AudiblePan = Clamp(200 * (offX - cgo.X - (cgo.Wdt / 2)) / cgo.Wdt, -100, 100); + AudiblePlayer = player; + } } bool C4Object::IsVisible(int32_t iForPlr, bool fAsOverlay) const diff --git a/src/object/C4Object.h b/src/object/C4Object.h index 384c924f8..b2b1c1138 100644 --- a/src/object/C4Object.h +++ b/src/object/C4Object.h @@ -136,7 +136,7 @@ public: int32_t Breath; int32_t InMat; // SyncClearance-NoSave // uint32_t Color; - int32_t Audible, AudiblePan; // NoSave // + int32_t Audible, AudiblePan, AudiblePlayer; // NoSave // int32_t lightRange; int32_t lightFadeoutRange; uint32_t lightColor; @@ -232,7 +232,7 @@ public: C4Real nxdir, C4Real nydir, C4Real nrdir, int32_t iController); void CompileFunc(StdCompiler *pComp, C4ValueNumbers *); virtual void Denumerate(C4ValueNumbers *); - void DrawLine(C4TargetFacet &cgo); + void DrawLine(C4TargetFacet &cgo, int32_t at_player); bool SetPhase(int32_t iPhase); void AssignRemoval(bool fExitContents=false); enum DrawMode { ODM_Normal=0, ODM_Overlay=1, ODM_BaseOnly=2 }; @@ -329,7 +329,7 @@ public: void SetAlive(bool Alive) { this->Alive = Alive; SetOCF(); } bool GetAlive() const { return Alive; } void UpdateLight(); - void SetAudibilityAt(C4TargetFacet &cgo, int32_t iX, int32_t iY); + void SetAudibilityAt(C4TargetFacet &cgo, int32_t iX, int32_t iY, int32_t player); bool IsVisible(int32_t iForPlr, bool fAsOverlay) const; // return whether an object is visible for the given player void SetRotation(int32_t nr); void PrepareDrawing() const; // set blit modulation and/or additive blitting diff --git a/src/platform/C4MusicSystem.h b/src/platform/C4MusicSystem.h index c55141455..76915de8f 100644 --- a/src/platform/C4MusicSystem.h +++ b/src/platform/C4MusicSystem.h @@ -78,6 +78,8 @@ private: ALCcontext* alcContext; public: void SelectContext(); + ALCcontext *GetContext() const { return alcContext; } + ALCdevice *GetDevice() const { return alcDevice; } #endif public: inline bool IsMODInitialized() {return MODInitialized;} diff --git a/src/platform/C4SoundIncludes.h b/src/platform/C4SoundIncludes.h index 507baccb1..940649615 100644 --- a/src/platform/C4SoundIncludes.h +++ b/src/platform/C4SoundIncludes.h @@ -31,8 +31,13 @@ #elif AUDIO_TK == AUDIO_TK_OPENAL # ifdef __APPLE__ # include +# include +# include +# include # else # include +# include +# include # endif typedef ALuint C4SoundHandle; # ifdef _WIN32 diff --git a/src/platform/C4SoundInstance.cpp b/src/platform/C4SoundInstance.cpp new file mode 100644 index 000000000..f53a60ef2 --- /dev/null +++ b/src/platform/C4SoundInstance.cpp @@ -0,0 +1,487 @@ +/* + * OpenClonk, http://www.openclonk.org + * + * Copyright (c) 1998-2000, Matthes Bender + * Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de/ + * Copyright (c) 2009-2013, The OpenClonk Team and contributors + * + * Distributed under the terms of the ISC license; see accompanying file + * "COPYING" for details. + * + * "Clonk" is a registered trademark of Matthes Bender, used with permission. + * See accompanying file "TRADEMARK" for details. + * + * To redistribute this file separately, substitute the full license texts + * for the above references. + */ + +/* Handles the sound bank and plays effects using DSoundX */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace C4SoundLoaders; + +C4SoundEffect::C4SoundEffect(): + Instances (0), + pSample (0), + FirstInst (NULL), + Next (NULL) +{ + Name[0]=0; +} + +C4SoundEffect::~C4SoundEffect() +{ + Clear(); +} + +void C4SoundEffect::Clear() +{ + while (FirstInst) RemoveInst(FirstInst); +#if AUDIO_TK == AUDIO_TK_FMOD + if (pSample) FSOUND_Sample_Free(pSample); +#elif AUDIO_TK == AUDIO_TK_SDL_MIXER + if (pSample) Mix_FreeChunk(pSample); +#elif AUDIO_TK == AUDIO_TK_OPENAL + if (pSample) alDeleteBuffers(1, &pSample); +#endif + pSample = 0; +} + +bool C4SoundEffect::Load(const char *szFileName, C4Group &hGroup) +{ + // Sound check + if (!Config.Sound.RXSound) return false; + // Locate sound in file + StdBuf WaveBuffer; + if (!hGroup.LoadEntry(szFileName, &WaveBuffer)) return false; + // load it from mem + if (!Load((BYTE*)WaveBuffer.getMData(), WaveBuffer.getSize())) return false; + // Set name + SCopy(szFileName,Name,C4MaxSoundName); + return true; +} + +bool C4SoundEffect::Load(BYTE *pData, size_t iDataLen, bool fRaw) +{ + // Sound check + if (!Config.Sound.RXSound) return false; + + SoundInfo info; + int32_t options = 0; + if (fRaw) + options |= SoundLoader::OPTION_Raw; + for (SoundLoader* loader = SoundLoader::first_loader; loader; loader = loader->next) + { + if (loader->ReadInfo(&info, pData, iDataLen)) + { + if (info.final_handle) + { + // loader supplied the handle specific to the sound system used; just assign to pSample + pSample = info.final_handle; + } + else + { +#if AUDIO_TK == AUDIO_TK_OPENAL + Application.MusicSystem.SelectContext(); + alGenBuffers(1, &pSample); + alBufferData(pSample, info.format, &info.sound_data[0], info.sound_data.size(), info.sample_rate); +#else + Log("SoundLoader does not provide a ready-made handle"); +#endif + } + SampleRate = info.sample_rate; + Length = info.sample_length*1000; + break; + } + } + *Name = '\0'; + return !!pSample; +} + +void C4SoundEffect::Execute() +{ + // check for instances that have stopped and volume changes + for (C4SoundInstance *pInst = FirstInst; pInst; ) + { + C4SoundInstance *pNext = pInst->pNext; + if (!pInst->Playing()) + RemoveInst(pInst); + else + pInst->Execute(); + pInst = pNext; + } +} + +C4SoundInstance *C4SoundEffect::New(bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch, C4SoundModifier *modifier) +{ + // check: too many instances? + if (!fLoop && Instances >= C4MaxSoundInstances) return NULL; + // create & init sound instance + C4SoundInstance *pInst = new C4SoundInstance(); + if (!pInst->Create(this, fLoop, iVolume, pObj, 0, iCustomFalloffDistance, iPitch, modifier)) { delete pInst; return NULL; } + // add to list + AddInst(pInst); + // return + return pInst; +} + +C4SoundInstance *C4SoundEffect::GetInstance(C4Object *pObj) +{ + for (C4SoundInstance *pInst = FirstInst; pInst; pInst = pInst->pNext) + if (pInst->getObj() == pObj) + return pInst; + return NULL; +} + +void C4SoundEffect::ClearPointers(C4Object *pObj) +{ + for (C4SoundInstance *pInst = FirstInst; pInst; pInst = pInst->pNext) + pInst->ClearPointers(pObj); +} + +int32_t C4SoundEffect::GetStartedInstanceCount(int32_t iX, int32_t iY, int32_t iRad) +{ + int32_t cnt = 0; + for (C4SoundInstance *pInst = FirstInst; pInst; pInst = pInst->pNext) + if (pInst->isStarted() && pInst->getObj() && pInst->Inside(iX, iY, iRad)) + cnt++; + return cnt; +} + +int32_t C4SoundEffect::GetStartedInstanceCount() +{ + int32_t cnt = 0; + for (C4SoundInstance *pInst = FirstInst; pInst; pInst = pInst->pNext) + if (pInst->isStarted() && pInst->Playing() && !pInst->getObj()) + cnt++; + return cnt; +} + +void C4SoundEffect::AddInst(C4SoundInstance *pInst) +{ + pInst->pNext = FirstInst; + FirstInst = pInst; + Instances++; +} +void C4SoundEffect::RemoveInst(C4SoundInstance *pInst) +{ + if (pInst == FirstInst) + FirstInst = pInst->pNext; + else + { + C4SoundInstance *pPos = FirstInst; + while (pPos && pPos->pNext != pInst) pPos = pPos->pNext; + if (pPos) + pPos->pNext = pInst->pNext; + } + delete pInst; + Instances--; +} + + +C4SoundInstance::C4SoundInstance(): + pEffect (NULL), + iVolume(0), iPan(0), iPitch(0), + player(NO_OWNER), + pitch_dirty(false), + iChannel (-1), + modifier(NULL), + has_local_modifier(false), + pNext (NULL) +{ +} + +C4SoundInstance::~C4SoundInstance() +{ + Clear(); +} + +void C4SoundInstance::Clear() +{ + Stop(); + iChannel = -1; + if (modifier) + { + modifier->DelRef(); + modifier = NULL; + has_local_modifier = false; + } +} + +bool C4SoundInstance::Create(C4SoundEffect *pnEffect, bool fLoop, int32_t inVolume, C4Object *pnObj, int32_t inNearInstanceMax, int32_t iFalloffDistance, int32_t inPitch, C4SoundModifier *modifier) +{ + // Sound check + if (!Config.Sound.RXSound || !pnEffect) return false; + // Already playing? Stop + if (Playing()) { Stop(); return false; } + // Set effect + pEffect = pnEffect; + // Set + tStarted = C4TimeMilliseconds::Now(); + iVolume = inVolume; iPan = 0; iChannel = -1; + iPitch = inPitch; pitch_dirty = (iPitch != 0); + iNearInstanceMax = inNearInstanceMax; + this->iFalloffDistance = iFalloffDistance; + pObj = pnObj; + fLooping = fLoop; + if ((this->modifier = modifier)) + { + modifier->AddRef(); + has_local_modifier = true; + } + SetPlayer(NO_OWNER); // may be updated on first execution + // Start + Execute(); + return true; +} + +void C4SoundInstance::SetPitch(int32_t inPitch) +{ + // set pitch and update on next call to Execute + iPitch = inPitch; + pitch_dirty = true; +} + +bool C4SoundInstance::CheckStart() +{ + // already started? + if (isStarted()) return true; + // don't bother if half the time is up and the sound is not looping + if (C4TimeMilliseconds::Now() > tStarted + pEffect->Length / 2 && !fLooping) + return false; + // do near-instances check + int32_t iNearInstances = pObj ? pEffect->GetStartedInstanceCount(pObj->GetX(), pObj->GetY(), C4NearSoundRadius) + : pEffect->GetStartedInstanceCount(); + // over maximum? + if (iNearInstances > iNearInstanceMax) return false; + // Start + return Start(); +} + +bool C4SoundInstance::Start() +{ +#if AUDIO_TK == AUDIO_TK_FMOD + // Start + if ((iChannel = FSOUND_PlaySound(FSOUND_FREE, pEffect->pSample)) == -1) + return false; + if (!FSOUND_SetLoopMode(iChannel, fLooping ? FSOUND_LOOP_NORMAL : FSOUND_LOOP_OFF)) + { Stop(); return false; } + // set position + if (C4TimeMilliseconds::Now() > tStarted + 20) + { + assert(pEffect->Length > 0); + int32_t iTime = (C4TimeMilliseconds::Now() - tStarted) % pEffect->Length; + FSOUND_SetCurrentPosition(iChannel, iTime / 10 * pEffect->SampleRate / 100); + } +#elif AUDIO_TK == AUDIO_TK_SDL_MIXER + // Be paranoid about SDL_Mixer initialisation + if (!Application.MusicSystem.MODInitialized) return false; + if ((iChannel = Mix_PlayChannel(-1, pEffect->pSample, fLooping? -1 : 0)) == -1) + return false; +#elif AUDIO_TK == AUDIO_TK_OPENAL + Application.MusicSystem.SelectContext(); + alGenSources(1, (ALuint*)&iChannel); + alSourcei(iChannel, AL_BUFFER, pEffect->pSample); + alSourcei(iChannel, AL_LOOPING, fLooping ? AL_TRUE : AL_FALSE); + if (modifier) modifier->ApplyTo(iChannel); + alSourcePlay(iChannel); +#else + return false; +#endif + // Safety: Don't execute if start failed, or Execute() would try to start again + if (!isStarted()) return false; + // Update volume + Execute(); + return true; +} + +bool C4SoundInstance::Stop() +{ + if (!pEffect) return false; + // Stop sound + bool fRet = true; +#if AUDIO_TK == AUDIO_TK_FMOD + if (Playing()) + fRet = !! FSOUND_StopSound(iChannel); +#elif AUDIO_TK == AUDIO_TK_SDL_MIXER + // iChannel == -1 will halt all channels. Is that right? + if (Playing()) + Mix_HaltChannel(iChannel); +#elif AUDIO_TK == AUDIO_TK_OPENAL + if (iChannel != -1) + { + if (Playing()) alSourceStop(iChannel); + ALuint c = iChannel; + alDeleteSources(1, &c); + } +#endif + iChannel = -1; + tStarted = 0; + fLooping = false; + return fRet; +} + +bool C4SoundInstance::Playing() +{ + if (!pEffect) return false; + if (fLooping) return true; +#if AUDIO_TK == AUDIO_TK_FMOD + return isStarted() ? FSOUND_GetCurrentSample(iChannel) == pEffect->pSample + : C4TimeMilliseconds::Now() < tStarted + pEffect->Length; +#elif AUDIO_TK == AUDIO_TK_SDL_MIXER + return Application.MusicSystem.MODInitialized && (iChannel != -1) && Mix_Playing(iChannel); +#elif AUDIO_TK == AUDIO_TK_OPENAL + if (iChannel == -1) + return false; + else + { + ALint state; + alGetSourcei(iChannel, AL_SOURCE_STATE, &state); + return state == AL_PLAYING; + } +#endif + return false; +} + +void C4SoundInstance::Execute() +{ + // Object deleted? + if (pObj && !pObj->Status) ClearPointers(pObj); + // initial values + int32_t iVol = iVolume * 256 * Config.Sound.SoundVolume / 100, iPan = C4SoundInstance::iPan; + // bound to an object? + if (pObj) + { + int iAudibility = pObj->Audible; + if (pObj->AudiblePlayer != player) SetPlayer(pObj->AudiblePlayer); + // apply custom falloff distance + if (iFalloffDistance) + { + iAudibility = Clamp(100 + (iAudibility - 100) * C4AudibilityRadius / iFalloffDistance, 0,100); + } + iVol = iVol * iAudibility / 100; + iPan += pObj->AudiblePan; + } + // sound off? + if (!iVol) + { + // stop, if started + if (isStarted()) + { +#if AUDIO_TK == AUDIO_TK_FMOD + FSOUND_StopSound(iChannel); +#elif AUDIO_TK == AUDIO_TK_SDL_MIXER + Mix_HaltChannel(iChannel); +#elif AUDIO_TK == AUDIO_TK_OPENAL + alDeleteSources(1, (ALuint*)&iChannel); +#endif + iChannel = -1; + } + } + else + { + // start + if (!isStarted()) + if (!CheckStart()) + return; + // set volume & panning +#if AUDIO_TK == AUDIO_TK_FMOD + FSOUND_SetVolume(iChannel, Clamp(iVol / 100, 0, 255)); + FSOUND_SetPan(iChannel, Clamp(256*(iPan+100)/200,0,255)); +#elif AUDIO_TK == AUDIO_TK_SDL_MIXER + Mix_Volume(iChannel, (iVol * MIX_MAX_VOLUME) / (100 * 256)); + Mix_SetPanning(iChannel, Clamp((100 - iPan) * 256 / 100, 0, 255), Clamp((100 + iPan) * 256 / 100, 0, 255)); +#elif AUDIO_TK == AUDIO_TK_OPENAL + alSource3f(iChannel, AL_POSITION, Clamp(float(iPan)/100.0f, -1.0f, +1.0f), 0, 0.7f); + alSourcef(iChannel, AL_GAIN, float(iVol) / (100.0f*256.0f)); + if (pitch_dirty) + { + // set pitch; map -90..+100 range to 0.1f..2.0f + alSourcef(iChannel, AL_PITCH, Max(float(iPitch + 100) / 100.0f, 0.1f)); + pitch_dirty = false; + } +#endif + } +} + +void C4SoundInstance::SetVolumeByPos(int32_t x, int32_t y) +{ + int32_t vol_player = NO_OWNER; + iVolume = ::Viewports.GetAudibility(x, y, &iPan, 0, &vol_player); + if (vol_player != player) SetPlayer(vol_player); +} + +void C4SoundInstance::ClearPointers(C4Object *pDelete) +{ + if (!Playing()) { Stop(); return; } + if (pObj == pDelete) + { + // stop if looping (would most likely loop forever) + if (fLooping) + Stop(); + // otherwise: set volume by last position + else + SetVolumeByPos(pObj->GetX(), pObj->GetY()); + pObj = NULL; + } +} + +bool C4SoundInstance::Inside(int32_t iX, int32_t iY, int32_t iRad) +{ + return pObj && + (pObj->GetX() - iX) * (pObj->GetX() - iX) + (pObj->GetY() - iY) * (pObj->GetY() - iY) <= iRad * iRad; +} + +void C4SoundInstance::SetModifier(C4SoundModifier *new_modifier, bool is_global) +{ + // do not overwrite local modifier with global one + if (is_global) + { + if (has_local_modifier) return; + } + else + { + // this sound has its own modifier now and doesn't care for global ones + has_local_modifier = (new_modifier != NULL); + } + if (new_modifier != modifier) + { + // update modifier and ref-count + C4SoundModifier *old_modifier = modifier; + modifier = new_modifier; + if (modifier) modifier->AddRef(); + if (old_modifier) old_modifier->DelRef(); + // Apply new modifier + if (isStarted()) + { + if (modifier) + { + modifier->ApplyTo(iChannel); + } + else + { +#if AUDIO_TK == AUDIO_TK_OPENAL + alSource3i(iChannel, AL_AUXILIARY_SEND_FILTER, AL_EFFECTSLOT_NULL, 0, AL_FILTER_NULL); +#endif + } + } + } +} + +void C4SoundInstance::SetPlayer(int32_t new_player) +{ + // update player and associated sound modifier + player = new_player; + SetModifier(::Application.SoundSystem.Modifiers.GetGlobalModifier(player), true); +} diff --git a/src/platform/C4SoundInstance.h b/src/platform/C4SoundInstance.h new file mode 100644 index 000000000..34c0500bc --- /dev/null +++ b/src/platform/C4SoundInstance.h @@ -0,0 +1,103 @@ +/* + * OpenClonk, http://www.openclonk.org + * + * Copyright (c) 1998-2000, Matthes Bender + * Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de/ + * Copyright (c) 2009-2013, The OpenClonk Team and contributors + * + * Distributed under the terms of the ISC license; see accompanying file + * "COPYING" for details. + * + * "Clonk" is a registered trademark of Matthes Bender, used with permission. + * See accompanying file "TRADEMARK" for details. + * + * To redistribute this file separately, substitute the full license texts + * for the above references. + */ + +/* Helper classes for individual sounds and effects in sound system. */ + +#include + +#include + +class C4Object; +class C4SoundModifier; + +class C4SoundEffect +{ + friend class C4SoundInstance; +public: + C4SoundEffect(); + ~C4SoundEffect(); +public: + char Name[C4MaxSoundName+1]; + int32_t Instances; + int32_t SampleRate, Length; + C4SoundHandle pSample; + C4SoundInstance *FirstInst; + C4SoundEffect *Next; +public: + void Clear(); + bool Load(const char *szFileName, C4Group &hGroup); + bool Load(BYTE *pData, size_t iDataLen, bool fRaw=false); // load directly from memory + void Execute(); + C4SoundInstance *New(bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0, int32_t iPitch = 0, C4SoundModifier *modifier = NULL); + C4SoundInstance *GetInstance(C4Object *pObj); + void ClearPointers(C4Object *pObj); + int32_t GetStartedInstanceCount(int32_t iX, int32_t iY, int32_t iRad); // local + int32_t GetStartedInstanceCount(); // global +protected: + void AddInst(C4SoundInstance *pInst); + void RemoveInst(C4SoundInstance *pInst); +}; + +class C4SoundInstance +{ + friend class C4SoundEffect; + friend class C4SoundSystem; + friend class C4SoundModifier; +protected: + C4SoundInstance(); +public: + ~C4SoundInstance(); +protected: + C4SoundEffect *pEffect; + int32_t iVolume, iPan, iPitch, iChannel; + bool pitch_dirty; + C4TimeMilliseconds tStarted; + int32_t iNearInstanceMax; + bool fLooping; + C4Object *pObj; + int32_t iFalloffDistance; + C4SoundModifier *modifier; + bool has_local_modifier; + C4SoundInstance *pNext; + + // NO_OWNER or a player number signifying which player owns the viewport in which the sound is heard (best) + // Note that this does NOT correspond to the player number given in the Sound() script function + // (i.e. sounds played only for one player). For example, a global GUI sound would have player==NO_OWNER even if + // it is played for a specific player only. + int32_t player; +public: + C4Object *getObj() const { return pObj; } + bool isStarted() const { return iChannel != -1; } + void Clear(); + bool Create(C4SoundEffect *pEffect, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iNearInstanceMax = 0, int32_t iFalloffDistance = 0, int32_t inPitch = 0, C4SoundModifier *modifier = NULL); + bool CheckStart(); + bool Start(); + bool Stop(); + bool Playing(); + void Execute(); + void SetVolume(int32_t inVolume) { iVolume = inVolume; } + void SetPan(int32_t inPan) { iPan = inPan; } + void SetPitch(int32_t inPitch); + void SetVolumeByPos(int32_t x, int32_t y); + void SetObj(C4Object *pnObj) { pObj = pnObj; } + void ClearPointers(C4Object *pObj); + bool Inside(int32_t iX, int32_t iY, int32_t iRad); + C4SoundModifier *GetModifier() const { return modifier; } + void SetModifier(C4SoundModifier *new_modifier, bool is_global); + void SetPlayer(int32_t new_player); +}; + diff --git a/src/platform/C4SoundModifiers.cpp b/src/platform/C4SoundModifiers.cpp new file mode 100644 index 000000000..ca66f7464 --- /dev/null +++ b/src/platform/C4SoundModifiers.cpp @@ -0,0 +1,342 @@ +/* + * OpenClonk, http://www.openclonk.org + * + * Copyright (c) 1998-2000, Matthes Bender + * Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de/ + * Copyright (c) 2015, The OpenClonk Team and contributors + * + * Distributed under the terms of the ISC license; see accompanying file + * "COPYING" for details. + * + * "Clonk" is a registered trademark of Matthes Bender, used with permission. + * See accompanying file "TRADEMARK" for details. + * + * To redistribute this file separately, substitute the full license texts + * for the above references. + */ + +/* Handles the sound bank and plays effects using DSoundX */ + +#include +#include +#include +#include +#include +#include +#include + +#if AUDIO_TK == AUDIO_TK_OPENAL +static LPALGENEFFECTS alGenEffects; +static LPALDELETEEFFECTS alDeleteEffects; +static LPALISEFFECT alIsEffect; +static LPALEFFECTI alEffecti; +static LPALEFFECTIV alEffectiv; +static LPALEFFECTF alEffectf; +static LPALEFFECTFV alEffectfv; +static LPALGETEFFECTI alGetEffecti; +static LPALGETEFFECTIV alGetEffectiv; +static LPALGETEFFECTF alGetEffectf; +static LPALGETEFFECTFV alGetEffectfv; +static LPALGENAUXILIARYEFFECTSLOTS alGenAuxiliaryEffectSlots; +static LPALDELETEAUXILIARYEFFECTSLOTS alDeleteAuxiliaryEffectSlots; +static LPALISAUXILIARYEFFECTSLOT alIsAuxiliaryEffectSlot; +static LPALAUXILIARYEFFECTSLOTI alAuxiliaryEffectSloti; +static LPALAUXILIARYEFFECTSLOTIV alAuxiliaryEffectSlotiv; +static LPALAUXILIARYEFFECTSLOTF alAuxiliaryEffectSlotf; +static LPALAUXILIARYEFFECTSLOTFV alAuxiliaryEffectSlotfv; +static LPALGETAUXILIARYEFFECTSLOTI alGetAuxiliaryEffectSloti; +static LPALGETAUXILIARYEFFECTSLOTIV alGetAuxiliaryEffectSlotiv; +static LPALGETAUXILIARYEFFECTSLOTF alGetAuxiliaryEffectSlotf; +static LPALGETAUXILIARYEFFECTSLOTFV alGetAuxiliaryEffectSlotfv; +#endif + +C4SoundModifier::C4SoundModifier(C4PropList *in_props) : instance_count(0) +#if AUDIO_TK == AUDIO_TK_OPENAL + , effect(0u), slot(0u) +#endif +{ + props.SetPropList(in_props); + Application.SoundSystem.Modifiers.Add(this); +#if AUDIO_TK == AUDIO_TK_OPENAL + Application.MusicSystem.SelectContext(); + alGenEffects(1, &effect); + alGenAuxiliaryEffectSlots(1, &slot); +#endif +} + +C4SoundModifier::~C4SoundModifier() +{ +#if AUDIO_TK == AUDIO_TK_OPENAL + // failsafe effect removal + if (alIsEffect(effect)) + alDeleteEffects(1, &effect); + if (alIsAuxiliaryEffectSlot(slot)) + alDeleteAuxiliaryEffectSlots(1, &slot); +#endif + Application.SoundSystem.Modifiers.Remove(this); +} + +void C4SoundModifier::Update() +{ +#if AUDIO_TK == AUDIO_TK_OPENAL + // update AL effect slot + if (slot) + { + alAuxiliaryEffectSloti(slot, AL_EFFECTSLOT_EFFECT, effect); + } +#endif + // update from props and mark as not released + released = false; +} + +void C4SoundModifier::ApplyTo(ALuint source) +{ + // apply slot to source if valid + if (slot) alSource3i(source, AL_AUXILIARY_SEND_FILTER, slot, 0, AL_FILTER_NULL); +} + +float C4SoundModifier::GetFloatProp(C4PropertyName key, float ratio, float default_value) +{ + // get scaled property and fill in default value + C4PropList *p = props._getPropList(); + return float(p->GetPropertyInt(key, int32_t(default_value * ratio))) / ratio; +} + +bool C4SoundModifier::GetBoolProp(C4PropertyName key, bool default_value) +{ + // get scaled property and fill in default value + C4PropList *p = props._getPropList(); + return (p->GetPropertyInt(key, int32_t(default_value ? 1 : 0)) != 0); +} + +C4SoundModifierReverb::C4SoundModifierReverb(C4PropList *in_props) + : C4SoundModifier(in_props) +{ +#if AUDIO_TK == AUDIO_TK_OPENAL + alEffecti(effect, AL_EFFECT_TYPE, AL_EFFECT_REVERB); +#endif +} + +void C4SoundModifierReverb::Update() +{ +#if AUDIO_TK == AUDIO_TK_OPENAL + // use the cave preset as default for the reverb modifier + Application.MusicSystem.SelectContext(); + alEffectf(effect, AL_REVERB_DENSITY, GetFloatProp(P_Reverb_Density, 1000, 1.0f)); + alEffectf(effect, AL_REVERB_DIFFUSION, GetFloatProp(P_Reverb_Diffusion, 1000, 1.0f)); + alEffectf(effect, AL_REVERB_GAIN, GetFloatProp(P_Reverb_Gain, 1000, 0.316f)); + alEffectf(effect, AL_REVERB_GAINHF, GetFloatProp(P_Reverb_GainHF, 1000, 1.0f)); + alEffectf(effect, AL_REVERB_DECAY_TIME, GetFloatProp(P_Reverb_Decay_Time, 1000, 2.91f)); + alEffectf(effect, AL_REVERB_DECAY_HFRATIO, GetFloatProp(P_Reverb_Decay_HFRatio, 1000, 1.3f)); + alEffectf(effect, AL_REVERB_REFLECTIONS_GAIN, GetFloatProp(P_Reverb_Reflections_Gain, 1000, 0.5f)); + alEffectf(effect, AL_REVERB_REFLECTIONS_DELAY, GetFloatProp(P_Reverb_Reflections_Delay, 1000, 0.015f)); + alEffectf(effect, AL_REVERB_LATE_REVERB_GAIN, GetFloatProp(P_Reverb_Late_Reverb_Gain, 1000, 0.706f)); + alEffectf(effect, AL_REVERB_LATE_REVERB_DELAY, GetFloatProp(P_Reverb_Late_Reverb_Delay, 1000, 0.022f)); + alEffectf(effect, AL_REVERB_AIR_ABSORPTION_GAINHF, GetFloatProp(P_Reverb_Air_Absorption_GainHF, 1000, 0.994f)); + alEffectf(effect, AL_REVERB_ROOM_ROLLOFF_FACTOR, GetFloatProp(P_Reverb_Room_Rolloff_Factor, 1000, 0.0f)); + alEffecti(effect, AL_REVERB_DECAY_HFLIMIT, GetBoolProp(P_Reverb_Decay_HFLimit, true) ? 1 : 0); +#endif + C4SoundModifier::Update(); +} + +C4SoundModifierEcho::C4SoundModifierEcho(C4PropList *in_props) + : C4SoundModifier(in_props) +{ +#if AUDIO_TK == AUDIO_TK_OPENAL + alEffecti(effect, AL_EFFECT_TYPE, AL_EFFECT_ECHO); +#endif +} + +void C4SoundModifierEcho::Update() +{ +#if AUDIO_TK == AUDIO_TK_OPENAL + // use default OpenAL echo preset + Application.MusicSystem.SelectContext(); + alEffectf(effect, AL_ECHO_DELAY, GetFloatProp(P_Echo_Delay, 1000, 0.1f)); + alEffectf(effect, AL_ECHO_LRDELAY, GetFloatProp(P_Echo_LRDelay, 1000, 0.1f)); + alEffectf(effect, AL_ECHO_DAMPING, GetFloatProp(P_Echo_Damping, 1000, 0.5f)); + alEffectf(effect, AL_ECHO_FEEDBACK, GetFloatProp(P_Echo_Feedback, 1000, 0.5f)); + alEffectf(effect, AL_ECHO_SPREAD, GetFloatProp(P_Echo_Spread, 1000, -1.0f)); +#endif + C4SoundModifier::Update(); +} + +C4SoundModifierEqualizer::C4SoundModifierEqualizer(C4PropList *in_props) + : C4SoundModifier(in_props) +{ +#if AUDIO_TK == AUDIO_TK_OPENAL + alEffecti(effect, AL_EFFECT_TYPE, AL_EFFECT_EQUALIZER); +#endif +} + +void C4SoundModifierEqualizer::Update() +{ +#if AUDIO_TK == AUDIO_TK_OPENAL + // use default OpenAL equalizer preset + Application.MusicSystem.SelectContext(); + alEffectf(effect, AL_EQUALIZER_LOW_GAIN, GetFloatProp(P_Equalizer_Low_Gain, 1000, 1.0f)); + alEffectf(effect, AL_EQUALIZER_LOW_CUTOFF, GetFloatProp(P_Equalizer_Low_Cutoff, 1000, 200.0f)); + alEffectf(effect, AL_EQUALIZER_MID1_GAIN, GetFloatProp(P_Equalizer_Mid1_Gain, 1000, 1.0f)); + alEffectf(effect, AL_EQUALIZER_MID1_CENTER, GetFloatProp(P_Equalizer_Mid1_Center, 1000, 500.0f)); + alEffectf(effect, AL_EQUALIZER_MID1_WIDTH, GetFloatProp(P_Equalizer_Mid1_Width, 1000, 1.0f)); + alEffectf(effect, AL_EQUALIZER_MID2_GAIN, GetFloatProp(P_Equalizer_Mid2_Gain, 1000, 1.0f)); + alEffectf(effect, AL_EQUALIZER_MID2_CENTER, GetFloatProp(P_Equalizer_Mid2_Center, 1000, 3000.0f)); + alEffectf(effect, AL_EQUALIZER_MID2_WIDTH, GetFloatProp(P_Equalizer_Mid2_Width, 1000, 1.0f)); + alEffectf(effect, AL_EQUALIZER_HIGH_GAIN, GetFloatProp(P_Equalizer_High_Gain, 1000, 1.0f)); + alEffectf(effect, AL_EQUALIZER_HIGH_CUTOFF, GetFloatProp(P_Equalizer_High_Cutoff, 1000, 6000.0f)); +#endif + C4SoundModifier::Update(); +} + +C4SoundModifierList::C4SoundModifierList() +{ + for (int32_t i = 0; i <= C4SoundModifier::C4SMT_Max; ++i) + is_effect_available[i] = false; +} + +void C4SoundModifierList::Init() +{ + is_initialized = false; +#if AUDIO_TK == AUDIO_TK_OPENAL +#define LOAD_ALPROC(x) ((void *&)(x) = alGetProcAddress(#x)) + Application.MusicSystem.SelectContext(); + if (!alcIsExtensionPresent(Application.MusicSystem.GetDevice(), "ALC_EXT_EFX")) + { + LogF("ALExt: No efx extensions available. Sound modifications disabled."); + return; + } + LOAD_ALPROC(alGenEffects); + LOAD_ALPROC(alDeleteEffects); + LOAD_ALPROC(alIsEffect); + LOAD_ALPROC(alEffecti); + LOAD_ALPROC(alEffectiv); + LOAD_ALPROC(alEffectf); + LOAD_ALPROC(alEffectfv); + LOAD_ALPROC(alGetEffecti); + LOAD_ALPROC(alGetEffectiv); + LOAD_ALPROC(alGetEffectf); + LOAD_ALPROC(alGetEffectfv); + LOAD_ALPROC(alGenAuxiliaryEffectSlots); + LOAD_ALPROC(alDeleteAuxiliaryEffectSlots); + LOAD_ALPROC(alIsAuxiliaryEffectSlot); + LOAD_ALPROC(alAuxiliaryEffectSloti); + LOAD_ALPROC(alAuxiliaryEffectSlotiv); + LOAD_ALPROC(alAuxiliaryEffectSlotf); + LOAD_ALPROC(alAuxiliaryEffectSlotfv); + LOAD_ALPROC(alGetAuxiliaryEffectSloti); + LOAD_ALPROC(alGetAuxiliaryEffectSlotiv); + LOAD_ALPROC(alGetAuxiliaryEffectSlotf); + LOAD_ALPROC(alGetAuxiliaryEffectSlotfv); + if (!alGenEffects) + { + LogF("ALExt: Error loading efx extensions. Sound modifications disabled."); + return; // safety + } + StdStrBuf sAvailableEffects(""); + StdStrBuf sUnavailableEffects(""); + ALenum test_effects[] = { AL_EFFECT_REVERB, AL_EFFECT_ECHO, AL_EFFECT_EQUALIZER, }; + ALuint effect = 0u; + alGenEffects(1, &effect); + ALenum err = alGetError(); + if (err != AL_NO_ERROR) + { + LogF("OpenAL alGenEffects Error: %s", alGetString(err)); + } + for (auto test_effect : test_effects) + { + alEffecti(effect, AL_EFFECT_TYPE, test_effect); + err = alGetError(); + bool is_ok = (err == AL_NO_ERROR); + is_effect_available[test_effect] = is_ok; + StdStrBuf *target_string; + if (!is_ok) target_string = &sUnavailableEffects; else target_string = &sAvailableEffects; + if (target_string->getLength()) target_string->Append(", "); + target_string->AppendFormat("%d", (int)test_effect); + if (!is_ok) target_string->AppendFormat(" (%s)", alGetString(err)); + } + if (alIsEffect(effect)) alDeleteEffects(1, &effect); + LogF("OpenAL extensions loaded. ON: %s. OFF: %s.", sAvailableEffects.getData(), sUnavailableEffects.getData()); +#undef LOAD_ALPROC +#else + // modifiers not supported + return; +#endif + is_initialized = true; +} + +void C4SoundModifierList::Clear() +{ + // Release all sounds. ref count should be zero now because sound instances should have been cleared before this call. + for (auto iter = sound_modifiers.begin(); iter != sound_modifiers.end(); ) + { + C4SoundModifier *modifier = *iter; + ++iter; + // release after iterator increase because deletion will modify the list + assert(modifier->GetRefCount() == 0); + modifier->Release(); + } +} + +C4SoundModifier *C4SoundModifierList::Get(class C4PropList *props, bool create_if_not_found) +{ + // find odifier by prop list + auto iter = std::find_if(sound_modifiers.begin(), sound_modifiers.end(), + [props](const C4SoundModifier *mod) { return mod->GetProps() == props; }); + if (iter != sound_modifiers.end()) return *iter; + // if not found, create if desired + if (!create_if_not_found) return NULL; + C4SoundModifier *modifier; + int32_t effect_type = props->GetPropertyInt(P_Type); + if (!is_effect_available[effect_type]) return NULL; // Not supported D: + switch (effect_type) + { + case C4SoundModifier::C4SMT_Reverb: + modifier = new C4SoundModifierReverb(props); + break; + case C4SoundModifier::C4SMT_Echo: + modifier = new C4SoundModifierEcho(props); + break; + case C4SoundModifier::C4SMT_Equalizer: + modifier = new C4SoundModifierEqualizer(props); + break; + default: + // invalid modifier + return NULL; + } + // initial parameter settings + modifier->Update(); + return modifier; +} + +void C4SoundModifierList::SetGlobalModifier(C4SoundModifier *new_modifier, int32_t player_number) +{ + // -1 based array access for NO_OWNER player number + int32_t global_modifier_index = player_number + 1; + if (global_modifier_index < 0) return; // safety + size_t index = static_cast(global_modifier_index); + if (index >= global_modifiers.size()) global_modifiers.resize(index+1); + if (new_modifier != global_modifiers[index]) + { + // Run new effects with new modifier + C4SoundModifier *old_modifier = global_modifiers[index]; + global_modifiers[index] = new_modifier; + // update existing sound effects first + for (C4SoundInstance *pInst = ::Application.SoundSystem.GetFirstInstance(); pInst; pInst = ::Application.SoundSystem.GetNextInstance(pInst)) + if (pInst->GetModifier() == old_modifier) // that check is not 100% correct but should cover all realistic use-cases + pInst->SetModifier(new_modifier, true); + // Reference counting + if (new_modifier) new_modifier->AddRef(); + if (old_modifier) old_modifier->DelRef(); + } +} + +C4SoundModifier *C4SoundModifierList::GetGlobalModifier(int32_t player_index) const +{ + // safety + int32_t list_index = player_index + 1; + if (list_index < 0 || static_cast(list_index) >= global_modifiers.size()) return NULL; + // get from player and fall back to global list + C4SoundModifier *result = global_modifiers[list_index]; + if (!result && list_index) result = global_modifiers[0]; + return result; +} diff --git a/src/platform/C4SoundModifiers.h b/src/platform/C4SoundModifiers.h new file mode 100644 index 000000000..051d7304c --- /dev/null +++ b/src/platform/C4SoundModifiers.h @@ -0,0 +1,129 @@ +/* + * OpenClonk, http://www.openclonk.org + * + * Copyright (c) 1998-2000, Matthes Bender + * Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de/ + * Copyright (c) 2015, The OpenClonk Team and contributors + * + * Distributed under the terms of the ISC license; see accompanying file + * "COPYING" for details. + * + * "Clonk" is a registered trademark of Matthes Bender, used with permission. + * See accompanying file "TRADEMARK" for details. + * + * To redistribute this file separately, substitute the full license texts + * for the above references. + */ + +/* Handles the sound bank and plays effects using FMOD */ + +#ifndef INC_C4SoundModifiers +#define INC_C4SoundModifiers + +#include +#include + +class C4SoundModifier +{ +public: + enum Type + { + C4SMT_None = 0x0, + C4SMT_Reverb = 0x1, + C4SMT_Echo = 0x4, + C4SMT_Equalizer = 0xc, + C4SMT_Max = 0xc // value of largest type + }; + + C4SoundModifier(C4PropList *in_props); + ~C4SoundModifier(); + +private: + // associated prop list for script interface + C4Value props; + + // number of sound instances currently using the modifier + int32_t instance_count; + + // set to true for sound modifiers released by script but with instance_count>0 + bool released; + +#if AUDIO_TK == AUDIO_TK_OPENAL +protected: + ALuint effect, slot; +#endif + +protected: + // get a property from the props proplist and divide by factor for float representation + float GetFloatProp(C4PropertyName key, float ratio, float default_value); + bool GetBoolProp(C4PropertyName key, bool default_value); + +public: + // update from props and mark as not released + virtual void Update(); + + // effect is deleted when marked for release and no instances are running + void Release() { if (!instance_count) delete this; else released = true; } + void AddRef() { ++instance_count; } + void DelRef() { if (!--instance_count && released) delete this; } + int32_t GetRefCount() const { return instance_count; } + + const C4PropList *GetProps() const { return props._getPropList(); } + +#if AUDIO_TK == AUDIO_TK_OPENAL + // apply to AL buffer + void ApplyTo(ALuint source); +#endif +}; + +// Reverb sound modifier: Adds effect of sound reflections in enclosed spaces +class C4SoundModifierReverb : public C4SoundModifier +{ +public: + C4SoundModifierReverb(C4PropList *in_props); + +public: + virtual void Update(); +}; + +// Echo: Repeats dampened version of input signal +class C4SoundModifierEcho : public C4SoundModifier +{ +public: + C4SoundModifierEcho(C4PropList *in_props); + +public: + virtual void Update(); +}; + +// Equalizer: Allows to specify low- mid- and high-frequency amplification and reduction +class C4SoundModifierEqualizer : public C4SoundModifier +{ +public: + C4SoundModifierEqualizer(C4PropList *in_props); + +public: + virtual void Update(); +}; + +// member of C4SoundSystem: Handles modifier management and EFX initialization +class C4SoundModifierList +{ +private: + bool is_initialized; + bool is_effect_available[C4SoundModifier::C4SMT_Max+1]; + std::list sound_modifiers; + std::vector global_modifiers; // global modifiers indexed by player number+1. Global modifier for all players in index 0. +public: + C4SoundModifierList(); + void Init(); + void Add(C4SoundModifier *new_modifier) { sound_modifiers.push_back(new_modifier); } + void Remove(C4SoundModifier *prev_modifier) { sound_modifiers.remove(prev_modifier); } + C4SoundModifier *Get(class C4PropList *props, bool create_if_not_found); + void Clear(); + void SetGlobalModifier(C4SoundModifier *new_modifier, int32_t player_index); + C4SoundModifier *GetGlobalModifier(int32_t player_index) const; + +}; + +#endif diff --git a/src/platform/C4SoundSystem.cpp b/src/platform/C4SoundSystem.cpp index 10c20c188..600271741 100644 --- a/src/platform/C4SoundSystem.cpp +++ b/src/platform/C4SoundSystem.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -29,466 +30,6 @@ #include #include -class C4SoundEffect -{ - friend class C4SoundInstance; -public: - C4SoundEffect(); - ~C4SoundEffect(); -public: - char Name[C4MaxSoundName+1]; - int32_t Instances; - int32_t SampleRate, Length; - C4SoundHandle pSample; - C4SoundInstance *FirstInst; - C4SoundEffect *Next; -public: - void Clear(); - bool Load(const char *szFileName, C4Group &hGroup); - bool Load(BYTE *pData, size_t iDataLen, bool fRaw=false); // load directly from memory - void Execute(); - C4SoundInstance *New(bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0, int32_t iPitch = 0); - C4SoundInstance *GetInstance(C4Object *pObj); - void ClearPointers(C4Object *pObj); - int32_t GetStartedInstanceCount(int32_t iX, int32_t iY, int32_t iRad); // local - int32_t GetStartedInstanceCount(); // global -protected: - void AddInst(C4SoundInstance *pInst); - void RemoveInst(C4SoundInstance *pInst); -}; - -class C4SoundInstance -{ - friend class C4SoundEffect; -protected: - C4SoundInstance(); -public: - ~C4SoundInstance(); -protected: - C4SoundEffect *pEffect; - int32_t iVolume, iPan, iPitch, iChannel; - bool pitch_dirty; - C4TimeMilliseconds tStarted; - int32_t iNearInstanceMax; - bool fLooping; - C4Object *pObj; - int32_t iFalloffDistance; - C4SoundInstance *pNext; -public: - C4Object *getObj() const { return pObj; } - bool isStarted() const { return iChannel != -1; } - void Clear(); - bool Create(C4SoundEffect *pEffect, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iNearInstanceMax = 0, int32_t iFalloffDistance = 0, int32_t inPitch = 0); - bool CheckStart(); - bool Start(); - bool Stop(); - bool Playing(); - void Execute(); - void SetVolume(int32_t inVolume) { iVolume = inVolume; } - void SetPan(int32_t inPan) { iPan = inPan; } - void SetPitch(int32_t inPitch); - void SetVolumeByPos(int32_t x, int32_t y); - void SetObj(C4Object *pnObj) { pObj = pnObj; } - void ClearPointers(C4Object *pObj); - bool Inside(int32_t iX, int32_t iY, int32_t iRad); -}; - -using namespace C4SoundLoaders; - -C4SoundEffect::C4SoundEffect(): - Instances (0), - pSample (0), - FirstInst (NULL), - Next (NULL) -{ - Name[0]=0; -} - -C4SoundEffect::~C4SoundEffect() -{ - Clear(); -} - -void C4SoundEffect::Clear() -{ - while (FirstInst) RemoveInst(FirstInst); -#if AUDIO_TK == AUDIO_TK_FMOD - if (pSample) FSOUND_Sample_Free(pSample); -#elif AUDIO_TK == AUDIO_TK_SDL_MIXER - if (pSample) Mix_FreeChunk(pSample); -#elif AUDIO_TK == AUDIO_TK_OPENAL - if (pSample) alDeleteBuffers(1, &pSample); -#endif - pSample = 0; -} - -bool C4SoundEffect::Load(const char *szFileName, C4Group &hGroup) -{ - // Sound check - if (!Config.Sound.RXSound) return false; - // Locate sound in file - StdBuf WaveBuffer; - if (!hGroup.LoadEntry(szFileName, &WaveBuffer)) return false; - // load it from mem - if (!Load((BYTE*)WaveBuffer.getMData(), WaveBuffer.getSize())) return false; - // Set name - SCopy(szFileName,Name,C4MaxSoundName); - return true; -} - -bool C4SoundEffect::Load(BYTE *pData, size_t iDataLen, bool fRaw) -{ - // Sound check - if (!Config.Sound.RXSound) return false; - - SoundInfo info; - int32_t options = 0; - if (fRaw) - options |= SoundLoader::OPTION_Raw; - for (SoundLoader* loader = SoundLoader::first_loader; loader; loader = loader->next) - { - if (loader->ReadInfo(&info, pData, iDataLen)) - { - if (info.final_handle) - { - // loader supplied the handle specific to the sound system used; just assign to pSample - pSample = info.final_handle; - } - else - { -#if AUDIO_TK == AUDIO_TK_OPENAL - Application.MusicSystem.SelectContext(); - alGenBuffers(1, &pSample); - alBufferData(pSample, info.format, &info.sound_data[0], info.sound_data.size(), info.sample_rate); -#else - Log("SoundLoader does not provide a ready-made handle"); -#endif - } - SampleRate = info.sample_rate; - Length = info.sample_length*1000; - break; - } - } - *Name = '\0'; - return !!pSample; -} - -void C4SoundEffect::Execute() -{ - // check for instances that have stopped and volume changes - for (C4SoundInstance *pInst = FirstInst; pInst; ) - { - C4SoundInstance *pNext = pInst->pNext; - if (!pInst->Playing()) - RemoveInst(pInst); - else - pInst->Execute(); - pInst = pNext; - } -} - -C4SoundInstance *C4SoundEffect::New(bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch) -{ - // check: too many instances? - if (!fLoop && Instances >= C4MaxSoundInstances) return NULL; - // create & init sound instance - C4SoundInstance *pInst = new C4SoundInstance(); - if (!pInst->Create(this, fLoop, iVolume, pObj, 0, iCustomFalloffDistance, iPitch)) { delete pInst; return NULL; } - // add to list - AddInst(pInst); - // return - return pInst; -} - -C4SoundInstance *C4SoundEffect::GetInstance(C4Object *pObj) -{ - for (C4SoundInstance *pInst = FirstInst; pInst; pInst = pInst->pNext) - if (pInst->getObj() == pObj) - return pInst; - return NULL; -} - -void C4SoundEffect::ClearPointers(C4Object *pObj) -{ - for (C4SoundInstance *pInst = FirstInst; pInst; pInst = pInst->pNext) - pInst->ClearPointers(pObj); -} - -int32_t C4SoundEffect::GetStartedInstanceCount(int32_t iX, int32_t iY, int32_t iRad) -{ - int32_t cnt = 0; - for (C4SoundInstance *pInst = FirstInst; pInst; pInst = pInst->pNext) - if (pInst->isStarted() && pInst->getObj() && pInst->Inside(iX, iY, iRad)) - cnt++; - return cnt; -} - -int32_t C4SoundEffect::GetStartedInstanceCount() -{ - int32_t cnt = 0; - for (C4SoundInstance *pInst = FirstInst; pInst; pInst = pInst->pNext) - if (pInst->isStarted() && pInst->Playing() && !pInst->getObj()) - cnt++; - return cnt; -} - -void C4SoundEffect::AddInst(C4SoundInstance *pInst) -{ - pInst->pNext = FirstInst; - FirstInst = pInst; - Instances++; -} -void C4SoundEffect::RemoveInst(C4SoundInstance *pInst) -{ - if (pInst == FirstInst) - FirstInst = pInst->pNext; - else - { - C4SoundInstance *pPos = FirstInst; - while (pPos && pPos->pNext != pInst) pPos = pPos->pNext; - if (pPos) - pPos->pNext = pInst->pNext; - } - delete pInst; - Instances--; -} - - -C4SoundInstance::C4SoundInstance(): - pEffect (NULL), - iVolume(0), iPan(0), iPitch(0), - pitch_dirty(false), - iChannel (-1), - pNext (NULL) -{ -} - -C4SoundInstance::~C4SoundInstance() -{ - Clear(); -} - -void C4SoundInstance::Clear() -{ - Stop(); - iChannel = -1; -} - -bool C4SoundInstance::Create(C4SoundEffect *pnEffect, bool fLoop, int32_t inVolume, C4Object *pnObj, int32_t inNearInstanceMax, int32_t iFalloffDistance, int32_t inPitch) -{ - // Sound check - if (!Config.Sound.RXSound || !pnEffect) return false; - // Already playing? Stop - if (Playing()) { Stop(); return false; } - // Set effect - pEffect = pnEffect; - // Set - tStarted = C4TimeMilliseconds::Now(); - iVolume = inVolume; iPan = 0; iChannel = -1; - iPitch = inPitch; pitch_dirty = (iPitch != 0); - iNearInstanceMax = inNearInstanceMax; - this->iFalloffDistance = iFalloffDistance; - pObj = pnObj; - fLooping = fLoop; - // Start - Execute(); - return true; -} - -void C4SoundInstance::SetPitch(int32_t inPitch) -{ - // set pitch and update on next call to Execute - iPitch = inPitch; - pitch_dirty = true; -} - -bool C4SoundInstance::CheckStart() -{ - // already started? - if (isStarted()) return true; - // don't bother if half the time is up and the sound is not looping - if (C4TimeMilliseconds::Now() > tStarted + pEffect->Length / 2 && !fLooping) - return false; - // do near-instances check - int32_t iNearInstances = pObj ? pEffect->GetStartedInstanceCount(pObj->GetX(), pObj->GetY(), C4NearSoundRadius) - : pEffect->GetStartedInstanceCount(); - // over maximum? - if (iNearInstances > iNearInstanceMax) return false; - // Start - return Start(); -} - -bool C4SoundInstance::Start() -{ -#if AUDIO_TK == AUDIO_TK_FMOD - // Start - if ((iChannel = FSOUND_PlaySound(FSOUND_FREE, pEffect->pSample)) == -1) - return false; - if (!FSOUND_SetLoopMode(iChannel, fLooping ? FSOUND_LOOP_NORMAL : FSOUND_LOOP_OFF)) - { Stop(); return false; } - // set position - if (C4TimeMilliseconds::Now() > tStarted + 20) - { - assert(pEffect->Length > 0); - int32_t iTime = (C4TimeMilliseconds::Now() - tStarted) % pEffect->Length; - FSOUND_SetCurrentPosition(iChannel, iTime / 10 * pEffect->SampleRate / 100); - } -#elif AUDIO_TK == AUDIO_TK_SDL_MIXER - // Be paranoid about SDL_Mixer initialisation - if (!Application.MusicSystem.MODInitialized) return false; - if ((iChannel = Mix_PlayChannel(-1, pEffect->pSample, fLooping? -1 : 0)) == -1) - return false; -#elif AUDIO_TK == AUDIO_TK_OPENAL - Application.MusicSystem.SelectContext(); - alGenSources(1, (ALuint*)&iChannel); - alSourcei(iChannel, AL_BUFFER, pEffect->pSample); - alSourcei(iChannel, AL_LOOPING, fLooping ? AL_TRUE : AL_FALSE); - alSourcePlay(iChannel); -#else - return false; -#endif - // Safety: Don't execute if start failed, or Execute() would try to start again - if (!isStarted()) return false; - // Update volume - Execute(); - return true; -} - -bool C4SoundInstance::Stop() -{ - if (!pEffect) return false; - // Stop sound - bool fRet = true; -#if AUDIO_TK == AUDIO_TK_FMOD - if (Playing()) - fRet = !! FSOUND_StopSound(iChannel); -#elif AUDIO_TK == AUDIO_TK_SDL_MIXER - // iChannel == -1 will halt all channels. Is that right? - if (Playing()) - Mix_HaltChannel(iChannel); -#elif AUDIO_TK == AUDIO_TK_OPENAL - if (iChannel != -1) - { - if (Playing()) alSourceStop(iChannel); - ALuint c = iChannel; - alDeleteSources(1, &c); - } -#endif - iChannel = -1; - tStarted = 0; - fLooping = false; - return fRet; -} - -bool C4SoundInstance::Playing() -{ - if (!pEffect) return false; - if (fLooping) return true; -#if AUDIO_TK == AUDIO_TK_FMOD - return isStarted() ? FSOUND_GetCurrentSample(iChannel) == pEffect->pSample - : C4TimeMilliseconds::Now() < tStarted + pEffect->Length; -#elif AUDIO_TK == AUDIO_TK_SDL_MIXER - return Application.MusicSystem.MODInitialized && (iChannel != -1) && Mix_Playing(iChannel); -#elif AUDIO_TK == AUDIO_TK_OPENAL - if (iChannel == -1) - return false; - else - { - ALint state; - alGetSourcei(iChannel, AL_SOURCE_STATE, &state); - return state == AL_PLAYING; - } -#endif - return false; -} - -void C4SoundInstance::Execute() -{ - // Object deleted? - if (pObj && !pObj->Status) ClearPointers(pObj); - // initial values - int32_t iVol = iVolume * 256 * Config.Sound.SoundVolume / 100, iPan = C4SoundInstance::iPan; - // bound to an object? - if (pObj) - { - int iAudibility = pObj->Audible; - // apply custom falloff distance - if (iFalloffDistance) - { - iAudibility = Clamp(100 + (iAudibility - 100) * C4AudibilityRadius / iFalloffDistance, 0,100); - } - iVol = iVol * iAudibility / 100; - iPan += pObj->AudiblePan; - } - // sound off? - if (!iVol) - { - // stop, if started - if (isStarted()) - { -#if AUDIO_TK == AUDIO_TK_FMOD - FSOUND_StopSound(iChannel); -#elif AUDIO_TK == AUDIO_TK_SDL_MIXER - Mix_HaltChannel(iChannel); -#elif AUDIO_TK == AUDIO_TK_OPENAL - alDeleteSources(1, (ALuint*)&iChannel); -#endif - iChannel = -1; - } - } - else - { - // start - if (!isStarted()) - if (!CheckStart()) - return; - // set volume & panning -#if AUDIO_TK == AUDIO_TK_FMOD - FSOUND_SetVolume(iChannel, Clamp(iVol / 100, 0, 255)); - FSOUND_SetPan(iChannel, Clamp(256*(iPan+100)/200,0,255)); -#elif AUDIO_TK == AUDIO_TK_SDL_MIXER - Mix_Volume(iChannel, (iVol * MIX_MAX_VOLUME) / (100 * 256)); - Mix_SetPanning(iChannel, Clamp((100 - iPan) * 256 / 100, 0, 255), Clamp((100 + iPan) * 256 / 100, 0, 255)); -#elif AUDIO_TK == AUDIO_TK_OPENAL - alSource3f(iChannel, AL_POSITION, Clamp(float(iPan)/100.0f, -1.0f, +1.0f), 0, 0.7f); - alSourcef(iChannel, AL_GAIN, float(iVol) / (100.0f*256.0f)); - if (pitch_dirty) - { - // set pitch; map -90..+100 range to 0.1f..2.0f - alSourcef(iChannel, AL_PITCH, Max(float(iPitch + 100) / 100.0f, 0.1f)); - pitch_dirty = false; - } -#endif - } -} - -void C4SoundInstance::SetVolumeByPos(int32_t x, int32_t y) -{ - iVolume = ::Viewports.GetAudibility(x, y, &iPan); -} - -void C4SoundInstance::ClearPointers(C4Object *pDelete) -{ - if (!Playing()) { Stop(); return; } - if (pObj == pDelete) - { - // stop if looping (would most likely loop forever) - if (fLooping) - Stop(); - // otherwise: set volume by last position - else - SetVolumeByPos(pObj->GetX(), pObj->GetY()); - pObj = NULL; - } -} - -bool C4SoundInstance::Inside(int32_t iX, int32_t iY, int32_t iRad) -{ - return pObj && - (pObj->GetX() - iX) * (pObj->GetX() - iX) + (pObj->GetY() - iY) * (pObj->GetY() - iY) <= iRad * iRad; -} - - C4SoundSystem::C4SoundSystem(): FirstSound (NULL) { @@ -507,6 +48,8 @@ bool C4SoundSystem::Init() // Might be reinitialisation ClearEffects(); + // (re)init EFX + Modifiers.Init(); // Open sound file if (!SoundFile.IsOpen()) if (!Reloc.Open(SoundFile, C4CFN_Sound)) return false; @@ -521,6 +64,7 @@ bool C4SoundSystem::Init() void C4SoundSystem::Clear() { ClearEffects(); + Modifiers.Clear(); // Close sound file SoundFile.Close(); } @@ -583,7 +127,7 @@ C4SoundEffect* C4SoundSystem::GetEffect(const char *szSndName) return pSfx; // Is still NULL if nothing is found } -C4SoundInstance *C4SoundSystem::NewEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch) +C4SoundInstance *C4SoundSystem::NewEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch, C4SoundModifier *modifier) { // Sound not active if (!Config.Sound.RXSound) return NULL; @@ -591,7 +135,7 @@ C4SoundInstance *C4SoundSystem::NewEffect(const char *szSndName, bool fLoop, int C4SoundEffect *csfx; if (!(csfx=GetEffect(szSndName))) return NULL; // Play - return csfx->New(fLoop, iVolume, pObj, iCustomFalloffDistance, iPitch); + return csfx->New(fLoop, iVolume, pObj, iCustomFalloffDistance, iPitch, modifier); } C4SoundInstance *C4SoundSystem::FindInstance(const char *szSndName, C4Object *pObj) @@ -676,20 +220,38 @@ void C4SoundSystem::ClearPointers(C4Object *pObj) pEff->ClearPointers(pObj); } -C4SoundInstance *StartSoundEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch) +C4SoundInstance *C4SoundSystem::GetFirstInstance() const +{ + // Return by searching through effect linked list. + for (C4SoundEffect *pSfx = FirstSound; pSfx; pSfx = pSfx->Next) + if (pSfx->FirstInst) return pSfx->FirstInst; + return NULL; +} + +C4SoundInstance *C4SoundSystem::GetNextInstance(C4SoundInstance *prev) const +{ + // Return by searching through instance linked list and parent linked list of effects + assert(prev && prev->pEffect); + if (prev->pNext) return prev->pNext; + for (C4SoundEffect *pSfx = prev->pEffect->Next; pSfx; pSfx = pSfx->Next) + if (pSfx->FirstInst) return pSfx->FirstInst; + return NULL; +} + +C4SoundInstance *StartSoundEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch, C4SoundModifier *modifier) { // Sound check if (!Config.Sound.RXSound) return NULL; // Start new - return Application.SoundSystem.NewEffect(szSndName, fLoop, iVolume, pObj, iCustomFalloffDistance, iPitch); + return Application.SoundSystem.NewEffect(szSndName, fLoop, iVolume, pObj, iCustomFalloffDistance, iPitch, modifier); } -C4SoundInstance *StartSoundEffectAt(const char *szSndName, int32_t iX, int32_t iY, int32_t iVolume, int32_t iCustomFallofDistance, int32_t iPitch) +C4SoundInstance *StartSoundEffectAt(const char *szSndName, int32_t iX, int32_t iY, int32_t iVolume, int32_t iCustomFallofDistance, int32_t iPitch, C4SoundModifier *modifier) { // Sound check if (!Config.Sound.RXSound) return NULL; // Create - C4SoundInstance *pInst = StartSoundEffect(szSndName, false, iVolume, NULL, iCustomFallofDistance, iPitch); + C4SoundInstance *pInst = StartSoundEffect(szSndName, false, iVolume, NULL, iCustomFallofDistance, iPitch, modifier); // Set volume by position if (pInst) pInst->SetVolumeByPos(iX, iY); // Return diff --git a/src/platform/C4SoundSystem.h b/src/platform/C4SoundSystem.h index 29c6280e7..841875210 100644 --- a/src/platform/C4SoundSystem.h +++ b/src/platform/C4SoundSystem.h @@ -21,6 +21,7 @@ #define INC_C4SoundSystem #include +#include const int32_t C4MaxSoundName=100, @@ -32,6 +33,7 @@ const int32_t SoundUnloadTime=60, SoundMaxUnloadSize=100000; class C4SoundInstance; class C4SoundEffect; +class C4SoundModifier; class C4SoundSystem { @@ -41,20 +43,24 @@ public: void Clear(); void Execute(); int32_t LoadEffects(C4Group &hGroup); - C4SoundInstance *NewEffect(const char *szSound, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0, int32_t iPitch = 0); + C4SoundInstance *NewEffect(const char *szSound, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0, int32_t iPitch = 0, C4SoundModifier *modifier = NULL); C4SoundInstance *FindInstance(const char *szSound, C4Object *pObj); + C4SoundInstance *GetFirstInstance() const; + C4SoundInstance *GetNextInstance(C4SoundInstance *prev) const; bool Init(); void ClearPointers(C4Object *pObj); + + C4SoundModifierList Modifiers; protected: C4Group SoundFile; - C4SoundEffect *FirstSound; + C4SoundEffect *FirstSound; // TODO: Add a hash map for sound lookup. Also add a global list for all running sound instances. void ClearEffects(); C4SoundEffect* GetEffect(const char *szSound); int32_t RemoveEffect(const char *szFilename); }; -C4SoundInstance *StartSoundEffect(const char *szSndName, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0, int32_t iPitch = 0); -C4SoundInstance *StartSoundEffectAt(const char *szSndName, int32_t iX, int32_t iY, int32_t iVolume = 100, int32_t iCustomFallofDistance = 0, int32_t iPitch = 0); +C4SoundInstance *StartSoundEffect(const char *szSndName, bool fLoop = false, int32_t iVolume = 100, C4Object *pObj = NULL, int32_t iCustomFalloffDistance = 0, int32_t iPitch = 0, C4SoundModifier *modifier = NULL); +C4SoundInstance *StartSoundEffectAt(const char *szSndName, int32_t iX, int32_t iY, int32_t iVolume = 100, int32_t iCustomFallofDistance = 0, int32_t iPitch = 0, C4SoundModifier *modifier = NULL); C4SoundInstance *GetSoundInstance(const char *szSndName, C4Object *pObj); void StopSoundEffect(const char *szSndName, C4Object *pObj); void SoundLevel(const char *szSndName, C4Object *pObj, int32_t iLevel); @@ -62,5 +68,4 @@ void SoundPan(const char *szSndName, C4Object *pObj, int32_t iPan); void SoundPitch(const char *szSndName, C4Object *pObj, int32_t iPitch); void SoundUpdate(C4SoundInstance *inst, int32_t iLevel, int32_t iPitch); - #endif diff --git a/src/player/C4Player.cpp b/src/player/C4Player.cpp index 77ff4c3d6..4bc5890f6 100644 --- a/src/player/C4Player.cpp +++ b/src/player/C4Player.cpp @@ -348,6 +348,9 @@ bool C4Player::Init(int32_t iNumber, int32_t iAtClient, const char *szAtClientNa // init graphs if (Game.pNetworkStatistics) CreateGraphs(); + // init sound mod + SetSoundModifier(SoundModifier._getPropList()); + return true; } @@ -852,6 +855,7 @@ void C4Player::Clear() CrewInfoList.Clear(); Menu.Clear(); BigIcon.Clear(); + SetSoundModifier(NULL); fFogOfWar=true; while (pMsgBoardQuery) { @@ -892,6 +896,7 @@ void C4Player::Default() ZoomLimitMinWdt=ZoomLimitMinHgt=ZoomLimitMaxWdt=ZoomLimitMaxHgt=ZoomWdt=ZoomHgt=0; ZoomLimitMinVal=ZoomLimitMaxVal=ZoomVal=Fix0; ViewLock = true; + SoundModifier.Set0(); } bool C4Player::Load(const char *szFilename, bool fSavegame) @@ -1100,6 +1105,8 @@ void C4Player::CompileFunc(StdCompiler *pComp, C4ValueNumbers * numbers) pComp->Value(mkNamingAdapt(mkParAdapt(Crew, numbers), "Crew" )); pComp->Value(mkNamingAdapt(CrewInfoList.iNumCreated, "CrewCreated", 0)); pComp->Value(mkNamingPtrAdapt( pMsgBoardQuery, "MsgBoardQueries" )); + pComp->Value(mkNamingAdapt(mkParAdapt(SoundModifier, numbers), "SoundModifier", C4Value())); + // Keys held down pComp->Value(Control); @@ -1874,3 +1881,22 @@ bool C4Player::GainScenarioAchievement(const char *achievement_id, int32_t value Achievements.SetValue(sAchvID.getData(), value, true); return true; } + +void C4Player::SetSoundModifier(C4PropList *new_modifier) +{ + // set modifier to be applied to all new sounds being played in a player's viewport + // update prop list parameter + C4SoundModifier *mod; + if (new_modifier) + { + SoundModifier.SetPropList(new_modifier); + mod = ::Application.SoundSystem.Modifiers.Get(new_modifier, true); + } + else + { + SoundModifier.Set0(); + mod = NULL; + } + // update in sound system + ::Application.SoundSystem.Modifiers.SetGlobalModifier(mod, Number); +} diff --git a/src/player/C4Player.h b/src/player/C4Player.h index 9abe754ac..c497809c6 100644 --- a/src/player/C4Player.h +++ b/src/player/C4Player.h @@ -137,6 +137,8 @@ public: class C4MessageBoardQuery *pMsgBoardQuery; // BigIcon C4FacetSurface BigIcon; + // Sound + C4Value SoundModifier; // Dynamic list C4Player *Next; @@ -205,6 +207,7 @@ public: bool IsInvisible() const; bool IsViewLocked() const { return ViewLock; } // return if view is fixed to cursor, so scrolling is not allowed void SetViewLocked(bool to_val); // lock or unlock free scrolling for player + void SetSoundModifier(C4PropList *new_modifier); // set modifier to be applied to all new sounds being played in a player's viewport protected: void ClearControl(); diff --git a/src/script/C4StringTable.cpp b/src/script/C4StringTable.cpp index f1acbe5a5..de71f1763 100644 --- a/src/script/C4StringTable.cpp +++ b/src/script/C4StringTable.cpp @@ -191,6 +191,35 @@ C4StringTable::C4StringTable() P[P_EditCursorCommands] = "EditCursorCommands"; P[P_IsPointContained] = "IsPointContained"; P[P_GetRandomPoint] = "GetRandomPoint"; + P[P_Type] = "Type"; + P[P_Reverb_Density] = "Reverb_Density"; + P[P_Reverb_Diffusion] = "Reverb_Diffusion"; + P[P_Reverb_Gain] = "Reverb_Gain"; + P[P_Reverb_GainHF] = "Reverb_GainHF"; + P[P_Reverb_Decay_Time] = "Reverb_Decay_Time"; + P[P_Reverb_Decay_HFRatio] = "Reverb_Decay_HFRatio"; + P[P_Reverb_Reflections_Gain] = "Reverb_Reflections_Gain"; + P[P_Reverb_Reflections_Delay] = "Reverb_Reflections_Delay"; + P[P_Reverb_Late_Reverb_Gain] = "Reverb_Late_Reverb_Gain"; + P[P_Reverb_Late_Reverb_Delay] = "Reverb_Late_Reverb_Delay"; + P[P_Reverb_Air_Absorption_GainHF] = "Reverb_Air_Absorption_GainHF"; + P[P_Reverb_Room_Rolloff_Factor] = "Reverb_Room_Rolloff_Factor"; + P[P_Reverb_Decay_HFLimit] = "Reverb_Decay_HFLimit"; + P[P_Echo_Delay] = "Echo_Delay"; + P[P_Echo_LRDelay] = "Echo_LRDelay"; + P[P_Echo_Damping] = "Echo_Damping"; + P[P_Echo_Feedback] = "Echo_Feedback"; + P[P_Echo_Spread] = "Echo_Spread"; + P[P_Equalizer_Low_Gain] = "Equalizer_Low_Gain"; + P[P_Equalizer_Low_Cutoff] = "Equalizer_Low_Cutoff"; + P[P_Equalizer_Mid1_Gain] = "Equalizer_Mid1_Gain"; + P[P_Equalizer_Mid1_Center] = "Equalizer_Mid1_Center"; + P[P_Equalizer_Mid1_Width] = "Equalizer_Mid1_Width"; + P[P_Equalizer_Mid2_Gain] = "Equalizer_Mid2_Gain"; + P[P_Equalizer_Mid2_Center] = "Equalizer_Mid2_Center"; + P[P_Equalizer_Mid2_Width] = "Equalizer_Mid2_Width"; + P[P_Equalizer_High_Gain] = "Equalizer_High_Gain"; + P[P_Equalizer_High_Cutoff] = "Equalizer_High_Cutoff"; P[DFA_WALK] = "WALK"; P[DFA_FLIGHT] = "FLIGHT"; P[DFA_KNEEL] = "KNEEL"; diff --git a/src/script/C4StringTable.h b/src/script/C4StringTable.h index 0d18d80b3..f804515ca 100644 --- a/src/script/C4StringTable.h +++ b/src/script/C4StringTable.h @@ -393,6 +393,35 @@ enum C4PropertyName P_EditCursorCommands, P_IsPointContained, P_GetRandomPoint, + P_Type, + P_Reverb_Density, + P_Reverb_Diffusion, + P_Reverb_Gain, + P_Reverb_GainHF, + P_Reverb_Decay_Time, + P_Reverb_Decay_HFRatio, + P_Reverb_Reflections_Gain, + P_Reverb_Reflections_Delay, + P_Reverb_Late_Reverb_Gain, + P_Reverb_Late_Reverb_Delay, + P_Reverb_Air_Absorption_GainHF, + P_Reverb_Room_Rolloff_Factor, + P_Reverb_Decay_HFLimit, + P_Echo_Delay, + P_Echo_LRDelay, + P_Echo_Damping, + P_Echo_Feedback, + P_Echo_Spread, + P_Equalizer_Low_Gain, + P_Equalizer_Low_Cutoff, + P_Equalizer_Mid1_Gain, + P_Equalizer_Mid1_Center, + P_Equalizer_Mid1_Width, + P_Equalizer_Mid2_Gain, + P_Equalizer_Mid2_Center, + P_Equalizer_Mid2_Width, + P_Equalizer_High_Gain, + P_Equalizer_High_Cutoff, // Default Action Procedures DFA_WALK, DFA_FLIGHT, From b73689fc332e5d9562317c5d7aea85877174621e Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Thu, 27 Aug 2015 21:51:10 -0400 Subject: [PATCH 66/97] Make C4SoundModifier destructor virtual. It shouldn't matter because the derived classes have no on fields or custom destruction, but silences a warning. --- src/platform/C4SoundModifiers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/C4SoundModifiers.h b/src/platform/C4SoundModifiers.h index 051d7304c..d689a45db 100644 --- a/src/platform/C4SoundModifiers.h +++ b/src/platform/C4SoundModifiers.h @@ -36,7 +36,7 @@ public: }; C4SoundModifier(C4PropList *in_props); - ~C4SoundModifier(); + virtual ~C4SoundModifier(); private: // associated prop list for script interface From da4a45c8a45cbbca8db17e82fd9eb749bba879de Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Thu, 27 Aug 2015 21:57:08 -0400 Subject: [PATCH 67/97] Fix mape build. --- src/mape/cpp-handles/stub-handle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mape/cpp-handles/stub-handle.cpp b/src/mape/cpp-handles/stub-handle.cpp index 8ab569038..95f823fd2 100644 --- a/src/mape/cpp-handles/stub-handle.cpp +++ b/src/mape/cpp-handles/stub-handle.cpp @@ -55,7 +55,7 @@ class C4Draw *pDraw = NULL; bool EraseItemSafe(const char *szFilename) {return false;} void Smoke(int32_t tx, int32_t ty, int32_t level, DWORD dwClr) {} -class C4SoundInstance *StartSoundEffectAt(const char *, int32_t, int32_t, int32_t, int32_t, int32_t) { return NULL; } +class C4SoundInstance *StartSoundEffectAt(const char *, int32_t, int32_t, int32_t, int32_t, int32_t, class C4SoundModifier *) { return NULL; } C4Config::C4Config() {} C4Config::~C4Config() {} From 41fd8c38b023d532dd879ef296839d00e4da6f61 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Thu, 27 Aug 2015 22:19:09 -0400 Subject: [PATCH 68/97] Ignore mission access in editor mode. --- src/game/C4Game.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index 43eac3858..cf9621856 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -228,8 +228,9 @@ bool C4Game::OpenScenario() #ifndef USE_CONSOLE #ifndef _DEBUG if (C4S.Head.MissionAccess[0]) - if (!SIsModule(Config.General.MissionAccess, C4S.Head.MissionAccess)) - { LogFatal(LoadResStr("IDS_PRC_NOMISSIONACCESS")); return false; } + if (!Application.isEditor) + if (!SIsModule(Config.General.MissionAccess, C4S.Head.MissionAccess)) + { LogFatal(LoadResStr("IDS_PRC_NOMISSIONACCESS")); return false; } #endif #endif From 44a396497c5ef23889093354a15c2091b956819b Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Thu, 27 Aug 2015 23:28:41 -0400 Subject: [PATCH 69/97] Fix tree growth in skylands scenario (#750) and rework alt tree texture. Tree growth now implemented using an overload of the grwoth function. Also made the alternate tree skin in skylands a bit more colorful --- .../ConiferousMat.ocd/DefCore.txt | 4 + .../Scene.material | 5 +- .../ConiferousMat.ocd/coniferous2.png | Bin 0 -> 107621 bytes planet/Missions.ocf/Skylands.ocs/Objects.c | 126 +++++++++--------- .../SmallConiferous.ocd/DefCore.txt | 18 --- .../SmallConiferous.ocd/Graphics.mesh | Bin 29214 -> 0 bytes .../Skylands.ocs/SmallConiferous.ocd/Script.c | 33 ----- .../SmallConiferous.ocd/Soniferous.png | Bin 65296 -> 0 bytes .../SmallConiferous.ocd/Soniferous.skeleton | Bin 3507 -> 0 bytes .../SmallConiferous.ocd/StringTblDE.txt | 1 - .../SmallConiferous.ocd/StringTblUS.txt | 1 - .../System.ocg/Coniferous_AltMat.c | 10 ++ .../Skylands.ocs/System.ocg/SmallTrees.c | 33 +++++ planet/System.ocg/Object.c | 2 +- 14 files changed, 114 insertions(+), 119 deletions(-) create mode 100644 planet/Missions.ocf/Skylands.ocs/ConiferousMat.ocd/DefCore.txt rename planet/Missions.ocf/Skylands.ocs/{SmallConiferous.ocd => ConiferousMat.ocd}/Scene.material (83%) create mode 100644 planet/Missions.ocf/Skylands.ocs/ConiferousMat.ocd/coniferous2.png delete mode 100644 planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/DefCore.txt delete mode 100644 planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Graphics.mesh delete mode 100644 planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Script.c delete mode 100644 planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Soniferous.png delete mode 100644 planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Soniferous.skeleton delete mode 100644 planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/StringTblDE.txt delete mode 100644 planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/StringTblUS.txt create mode 100644 planet/Missions.ocf/Skylands.ocs/System.ocg/Coniferous_AltMat.c create mode 100644 planet/Missions.ocf/Skylands.ocs/System.ocg/SmallTrees.c diff --git a/planet/Missions.ocf/Skylands.ocs/ConiferousMat.ocd/DefCore.txt b/planet/Missions.ocf/Skylands.ocs/ConiferousMat.ocd/DefCore.txt new file mode 100644 index 000000000..b4b851fac --- /dev/null +++ b/planet/Missions.ocf/Skylands.ocs/ConiferousMat.ocd/DefCore.txt @@ -0,0 +1,4 @@ +[DefCore] +id=AltMat_Coniferous +Version=7,0 +Category=1 diff --git a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Scene.material b/planet/Missions.ocf/Skylands.ocs/ConiferousMat.ocd/Scene.material similarity index 83% rename from planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Scene.material rename to planet/Missions.ocf/Skylands.ocs/ConiferousMat.ocd/Scene.material index 87e674fec..07aeac177 100644 --- a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Scene.material +++ b/planet/Missions.ocf/Skylands.ocs/ConiferousMat.ocd/Scene.material @@ -1,4 +1,4 @@ -material Soniferous +material Coniferous_AltMat { receive_shadows on technique @@ -7,6 +7,7 @@ material Soniferous { cull_hardware none scene_blend alpha_blend + depth_check off ambient 1.000000 1.000000 1.000000 1.000000 diffuse 1.000000 1.000000 1.000000 1.000000 @@ -15,7 +16,7 @@ material Soniferous texture_unit { - texture Soniferous.png + texture coniferous2.png tex_address_mode wrap filtering trilinear } diff --git a/planet/Missions.ocf/Skylands.ocs/ConiferousMat.ocd/coniferous2.png b/planet/Missions.ocf/Skylands.ocs/ConiferousMat.ocd/coniferous2.png new file mode 100644 index 0000000000000000000000000000000000000000..e267bb173f0acad69fcbfbd24a74c484d9a0e447 GIT binary patch literal 107621 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

bqp3vPRyvw1k?_N3rW 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

&lnw6Ujc- z9euab(s3^v$vReJP=%lpTY+3_sAPh$mBZ4K{O$}v_~K#3v8ZAt(gdDCd$6np;_5jK zgQ}FElQnQc!xL*go?O)28K&GE6#T*_9GQ@}cT3)}BG(f*sj{>d8uGA`K(`W0Q1CO$ zt@QqC10Mfw-o5z?cb$cJ_^>CO&b6<8~>#^4(Q)zG+na2l8nrwTip%~?K;t-(u@)maX?lUA%fm_* z{!%EN=Q|lBk;quz&K27wC@f2EG^m-U`KRLfn5M1a#feh|s-yvFna|_(`SOR?mFC9wY3lu!kqkjHA zLa*Pu`M>d}`MdE+o}RqU=f3b4=B~rP3wGdRqeEKPFYzn)+})J90Q#~CI!;hJ5--B2 zC8NP(F%0hkLd~)OTi^R6q+k52{FiUq0Psznf+T>mT{zM2l2#R-2b*rBwHj+S$A;_0 zL=^~OySf5tQw%P7zd+Gln`iYD`UX6md#(f@uKeu5vZ^N!$isEPHWhn8dee!I6W8_ zw3W!4_d?-1WR=q%$YF2loPKM;(U%Q0?zElOU>YOlp@9UK%t&xJ-*xG;ka%UnLK-Y~*6aW5QysguG zNNK+KxgY+$H@~|*1ML6v|Ct}3-4TRyQI4v_&eVK53!(!s+?Q#9Dg*#za*R&cwiT7h z@pQ}yFGTwZmN)Uu2U)1yNYjZlk+u{@u>aNojUfp{iRb1J4oU+}DaM(#VIc}>1qQE> z4PzP+^@xm|$l$vFjnHI=g>=Fr&uwg9b0RUEYfFRdYyy$?SdZcI#Bx~4f)AAZ&hc;# z1ZsIAr z7^z%v+=vzXg=J7$)>@X@)Z83b>}AeX*vXeK1wLD8&7gqN7>;t$V_0bi=&WK?Lo1Z` z)^7<{VADy8onH*uadXjktjBm-b1<6XYmt2qv{;I@%=|5AZxs%BZ@8Y>Zi0#smRj)RmxaCTw2*?>II4{rCSW*P4>E_kw`l zlmXzVghQivU~K5MbBd~AT8ngcSIb;K(1PcG;Q->JlBJn2LIac1h#-cT;2Nq*q{AwC&x2Zm_wH2q0qY6$(vm4GyfBr}KJ6HYzf9>~3|NoV#dH$z9%0IgI z{vgDT2Y5TTu~jKRo_=54dfE$=gI&@hqfd*GCNs#cnAJIBg`&wyv=^bdc6JGAOJS?!J`<*h&kGPjldH(ZlcdfBPdoZmnXW9Z0UJGT)@$DNi zhh@%dgL$6;Bs)1Oqyc%nB_b)ig#_$GNmk`+;YzflxyATVAsLJZ*f;jv1VYFQliCnF z=H;tL_x~dPy*B@>-}mRg`FC1qRVD4Z#2*i&$=P3WP3ktZyLbni#M~p);RRo+$!}{8 znvz>h`IT4d{i+6ll~8QBZfA-?nv=A`yVloPDPWW{UBhe6hyKVp??g^}ZzY7CMpFO8 zo$jfDypU1TwW*Wha-*%AQ&?`nxVDm_&ZM{+k-VxK!?=b?<&<&)x0xC^-IB>bTF(Q~ zQ7u2qoc#4+Ej4&q7^|uD7clvjhQc=Cz)H@gLf~BlCxI{wE1nz z@)~!h+_k@+RPw$8Pu6&(U}Q!3BnjWVi~Hlx@qYuK`8|I8AfQKwG(jiM-|O@&VS z7#+~qMgTzJ0^@ssxj1C=g=fD6Wc20?07E0We1quOjg8`w)i(M5l(CgDQR%$n3rB=W z8#sn+f;b3S!f>h+keP~u!f+xHj{O^%EGEUATAOHCkD+LUYY?~wUJ!h#CfyA6mm3K@ zjfM44Xuh|M6=0FW*w0e*K`l(X*s1+4I+^oPA&NwmwY+{PC5biC^t*B-*B6Il6fz$3 zkPN_D$!3-!u^&$zLhjKXZ1f`bcMEWAzJo%*HHU>|FPBZ$cPH?6D(~^Ik;kpZa*du6 z%Z+POVPoD*r5UG@2}10_YvYDnX+!G7N%m$9Pz&9bk5V4(*kiHIgb3uCqiYUx@aS5L z{b@$%OVF4x5Q|0-kjE0iJ`}kG{lySAx*@lRC54lPdlTQTJ^KuQTb`_foZ5dB3O?+E>9a0BYK32dD=gndEGa%fzt|JJILs0X+j1H z{=|cFGF~6RD|@1PwG_!FNo(1lC<$ESQp%3dlgA8em>w2%0>R7Agg_^i6N?-R8!vbL zfayfChrp9l_`DP7xG__ib^Vj0((+_q24f)# zd>U0VC`D4O9l%DSX{wC0mglQnFCy}!7n8baf_6ryMI+_RQCTu}Xv>50&AYgteTEU=#bXbcM5df`9$pShHc*`*i_EA?0Nbj(9^Z(%4d!OU; zKf+&mO9X(ialY{Z+#cn`ZOw8kW^tM`^dwcqHNsXR+0e=Zw2ZWT4df*|8FT`}@pj17 zVae3da@Qh3s|Bus(2YaZ`w@rZlxtI&6igkzk{=Cnz6iEqEyDGBf#%=3~(1QDpkKnsgd0Go< zFjV3ZSi5ZDbPLu3nJDZP;_lP&p>AsFi8M8nQX=4jBlP%6rUlomA#F*W-q)@P*IGo6Wzn#nGwXTm~-RP{R;Z!6k@T8XB z!ci^#iH%4~fznFTYr&T$TQ64ZWiCKO&`%4aGCp#iTt1C$MC zBX&C#64Z&V^cZGYOW<&R>j^BmHrH(W(Rf+ub^rh%07*naRB^1zH}mb;XZVX>e&2_` zQzW)O{P*~E--l&k^%>vCwmSHpN1dmV4R}72rsVT)*#J;E8>nFei@s(n6>q*s&&E&^ zLJunOlxvWMSR*s$uCHl;USJrMqPV*d$fDjYV5c(lw6M)y9=fJeDiY-HT~=HeSysb& zx;=6Je#@bxpO3YjZIctTJRQrT-f|LI+R1|Djl7Q2p4Pz&reP;^0&KfHBB$d815!Rz^gcH#VG=cW$1cudii<<)x;%o;}vrjxY zXarH`DR_JdzHuGi7{V7092qH`V-!MX(lM$@_f@&^;E6Uou@Z8a!|o&} z@Ze4=IEBk&#cuxA4FFNh5>So@{8Ql9{g5n*VQCGozl3^u0`^Tl=l}l=0FN$c;ltO8 zP{WB1#Ga+4T}N7pa?JCGlH$h>ToWqk0~}V3H0ux?{-lD?(`>XN7M;h|Oo&1ur_*{% zaPNf?9>BX7WzoN9Nl_Tf&0JJ{d%hTaRCdP5vv*a0Yc~a`fz)9DYAcUz1yVwU9{8Rj zt)vh)MmDQ0b8ZdhZ8Du59xx8kBlNgJ{ z``~Qvt-JVxkj1KG__uzDAN;R>fDZywKg3##QXcpTwJmtaW?b|rwZQj$eJ4APQLC_RHDkWAvO zdaFtShr0i!QOr?QvSvzDRpZqYUcK<&@MqrA0bp3bfm1&%8(9DwZQ+;Sm`d0EY)k6- zb^wW;3t<$sjH)6H54YiVBz5UgZm3&=8JN_9v>Vp~6l$x2ok|Qb0tJDmxH2|e97rIF zUFKm+XR6_R3uXkIypgneQRlt*r zGHyG}-RRI|Eqzyxeg3GSb|k2#v20cF%?p}#tT?sU<&#@e3R{r4tYK8mNjtHYzRh+D zPcMj^TdYOk^H*;bw6%OLqjLT|W@e7n7?y4f>Pr@6-@=Rkm%w~)I7j;hAr;UJ_pv{> zgbsTAYu@5F|Db?zqbRImE4TDQ!|_hQfvsq}%`-A`njRD~ssd?T?dB2yPPXMVTXbpj zr6DY8Ird8{QrLqEyh28f)*;Y_g}B*1(DQj}Nwb|bT;I2B; zVycM}(9l68KU<09--VIquN;`jS5EZ8fni3@g}9d_9HlA!K!VK|cU)FsoB>D)QDZsP z^H~pSK^(f$Amc^+IVWfOILcw*VXs(aFF7&+?krJ-!Lk)!oa zUE2Rp;=n*Pn@rq)sQ$T_RFGqu=_o z{MEO70Em1^Uyo|oEHsOS;dsY6t-2Cmr;s$Zws67)fUSJa8~?@?IawP=^0_hrbtDVe zcWLuVB!OVRkd5)4V=e9sb1qISk48RKS#heZcyV9}9KSwP@cLM+txvUNksfc!3Dyrq zUTk7u!>Q=(r*4+5=cnPaleMl5^g9ALDxIRv&BK&i6Uh$V7|Utb4q*xD{A4pAl2Vk7 z0FsWi1i;hv;Z#@p3Zasec~T1Gx1T`nnsb?fPi;!?lwMgr5;C}%5`9!>1VgOT^vUHs2~hz~yhrBi`Ral+~=@G^2%z2$Fy$1%bljx1js zh!;R(q2p^70z;(XC==-@jgylKWIWa&_Eg;{WL%W=UG0b)8!q@VUtS4CBr^`hf9};G zM1IE019{wPlyknP={vrFr=)ZkR*+kP$#$Iy$et4}ePTiCIev+ba@ zc@3jdv7cK`Yd0bdr8J40sfafgV~=I z;Gxx!cGP7zAK%qPoH`tV_Fz2_0F|-M#l{m1N6|RokJ5M;$_BP3@;eFvCshsXWboU2 ziqa}#&(aSqe^hSIKEsDT{v3bvCx37F@LMkcB(u)3g4%ju8*1Co@;y%VGn*8SLnTbK%!tI-$wW56Vx&1LjilZoEVneD-WM>q*2$=(s$V{WkdhT6}U3BjE&_)2x%?W<5$Kt`;%O} z3AFTOtc8svWKtWZrJ=1QNE;(Mj+H|JmIlhoupY_jf8c^1RwT%Jp#-vn0wNmLV+qKA zly1-d5!(C!elO5WD#P`O7qJY@s!l}c`Y61nYR3ep=|n@Le9C4 zVC9c0=(xuZDq;C0zSPIvP&2AUM<8+Pv@af6ERr^_CsLOlRj{2~4ohh=Hde0Tlxu8_ z9GWmtb35*xT7r+~P;RdcWU-%H)ST>T%E~aw4HjqAVFW0ItLr^2pq=YuSPU(TA%LPC zXhP54#nNLXlUNBQOYt>?o+Uyun4=u-Oez_%y3N1Qmd!fIVN_XeO(i1;JjssoQu5BG zfiDglksR~jY6|b_!(maQn~Gr}*WdOr zb28YTmGl@-#$}hr9xGu((ZKO2B) zNCL^R#G?~wZci!(8Ju5)zOR@X`0Z^=?uJU6sF(}#|)IH)ZbrwtFa z;r6t-%NTrSJ*3}m;q|%<4@RU;haom{T^gu;VK1WKY1a?AI)#=mpU3S%N^?&zOA-+X z-Du0fkmg^x&HtXC;xS|K^KGuy6a3fy9;2^s!LRigFssqPYGm&+zZT+G0YIEel@u*>=EvMG7DA~*8)ag6Y%4!_3pBG%8h(`W9Oim{fbQ?JDHBU~h zUa08@4X;fs6US1UjRu!OxsJt1v71>+r$vysZnm$aaTYn@5rd4vVjrH_fL5rb?1fh4L15cgk@P+*`duhX{l4jsImlNO9nzU-rp1tc1+*s-2Yb8y#%m_m= z@u3Q&A&70rtA@hKc+K2~jxtN=iMZ#DiIe~y5+JV^QUc@_uIHc{OWlYb;%e9sdX5hf z!q95cY0WpTSQc7}tFf~+FQt513}wu?>jX@1q>?SQ0%!&DdF)LLm&fqMvF2=SSdK-t zXuX%fFvSn_S1bcCim)E@zHo&<6CcNW>SO$0(HiM*|EFA%BV|64`}*yxbJOqa+Gn?N z&dk6l3lSuNVmmDv6%D?#?LH`BJNIb$mXmGC1hf(;YBz*8CIT;A2?d|t01tE{tf#p( zsu5E!6Z3QeZ3jO)@flMDB>`6e`$>65rS&T~e-fG7QaM0$1LjDfD z8JkkE5-KiF;aCXoU5UwUEy&8IW|&qSjZ-F7Lra4(mdF_B~E4_nQCnTJ{yOwA%W4c2?g{V^ZF(JU-xsd@qJ?-S`fI z)ems0b&T5!PZ1^$peL8#+**5YnhfAnUry-2jmGv12*(vIUryJ)mc=}&K&uAj3G1z+ zM1BjT6sWB;RrFwUEc5nrNx{iZ!jjY9%ZxOw9%#!ZE}Q_xVg#eS=5qtf<%#9mR8Cp# z=Fyq!DU{9JxWae3fF3gH+lb_MK0g$FfXI~qp%(7@N-t(_lrtX-#D9DI+CGT^p7=GNz-EiNUY{Us>ADlH9ZMUNS2+_tgDajRaAbI(zR8*UQ*+ zU?c6x^*64ecw;D>IX=*V}3-M|WCvrgxzLr6mijwfSGK?!DngI=*h~QLD)7H@O z4L8Sv4qR?Y19!az{Ul~@k~7RDz@6>LHGu@UqJYAO!2ill!(RC@UO4|FOzRQ`dV`!x>$zLFh~y7~Fpwrt{?ZgGv= zDcI6bHv&p2j1YyC!v`$JB6B^iWh1OcvdBEw5Stjm4ZM9>{x(iww-rcQ`g1pGRvn0^ z>r0dG;&854pE?b|&~@m?u3l|Bl_DP}Rpvp@R}319wN7KegSQ>;^62p{&kE<<7)o)Fq)tfgwV-0Dg7}V1E>pABlg=9h&32b#EpX&^r zH*(|0!$N-Ec9LkbQJkm6lrnJ^=jRf|oy>|oyM@mk<}5e>&jU{QV^TR^fCU?Rj+y8w*E0a_j17z9;w!q~R^CT&douKbKjK! z@9NagUL0~}J6A+LJh~Jx$Qy1?q)s1JbL{_KA$9m#>{3+ijM$Yd$gGxBS0MnP^|q!T z`n)lyuvTojdx0#(W)m%=j>q}!W^x%<>1cz-` zV_z7{{hr(0+Jn`^BMN;Y&*G_uu5U1oaC5Q)>uu0sjAv^$r?B2?xHv$iPR;ji%K=r{ zu$4(C|EQ46;;@2orRW3_1T_-4jvTON;x>8`O7m}}1uyMOkHXlwu3@YtSSn93Dy3e> zIyYh~O~Bkyi&uP6N!E_eycEm*JGs1{g*c>a455NWEnR=zRA^783rjJCfo3U=2$bch zsIgWo;I)zl>#;VRT8L>(&A5W)cF_EbTjf`z1UUa;+Q&c0`;UD$dh_Qv+WU15IuCJ8 z$26X11H}pu=n&5fSyUbmV0fGI_;#iFV+&8S67+Z^TII%x@1r{SEY0Z;p@uJgeIx&& z1Hj3UXCuv-wlBaGXt?HRu_s&b=%Oa^EL+ZtZY6f079}-mX=Th;y3=nll9HhtL#wgW zrXlt$ONrFSs&VQ)vEo!OW>i#^c5e9jzBLa|S*k`1D|d@IA!#LoZ|DgQV5<MUSeg8CAml_ne~cFt52X66*3z!TYOrAlKTMhV5Kt z?k5sB)7P|=G%4#wPT&Stg3Jg+z63*yG($gdLXm_an-jyC4t)PvpR=8Y8xtv=a)-s= zoJv6R6vVC%a3WG@Bp}?W!~^l+wv;PtF|4&)Ea{rpCon1uWA|Om+=drjz>Nb5lc~Y|Q8vGJ_?5A>E)P&^-^OE}&lByl*yG>FikUKL zN_PAX$_shYPiXsXl%IeO!He;*bUn>UrFjPUK(xf$Y{PeSA7We$=u9qiu<}0q^v2hl zh=1S!u&#KvA93cPp48X-g`~3mSa|=dNdVTc>p0|%ORZ-V+Lc%~q(;zh9p`258Ii=E zRF*;Qn1#NaR#5;J%ax&Q{{3Q3I=M2jd}dF?F^ruf+)^XsK+laMLr;EI7`fhQ?ey-n z;0Q7!Q;VW*h&{vU<%Cr~XIxm8T0;2I9=x~Vb}6^D84jpH3*Rzm^0v zjp3*gMxSwR!;7H=r4m@~OF&vl;OP}uO?=KQ_}m`VTs(xc3qrlFYItHrgg1X{N6H@M zf<_d8Z-k2cS_%W>CL&H=t*E78yApe7%-tSBZ3Wg_8qpG*jYD^HfoPBOlKs5q^irF> zamKi|0v|?x_u^2d2!ZFg7aq;0kG?_y;1IL%9o!6;i2ODyI_A5S$Db(oSuA$3w&7{z z(O009FOED;lvAv^BSIaKcs`HN@D3E;&OL%7fpa`1;oVef9v9 zv#jn$5$8Gun>k!h700l&eR!Z7aCHRhVM$g>8Gr-ctVGa?LXJ_=i(~St;;1zABJeAz z@25`x{?R^Y?U6(cr@B5-;1l^dw+>{Cww1|=)zVVWjw?xP*Q2?`*J0@#be-yra%{M) zaryv`y=Gh>SWP5Y9b{0JH4AGAJL55FC7b{G9fyX)iEbF76#EKLnuW;F)NoWNx`B)y z8&9*=4tZlz5_s}?Xcv@vA!PU{RdaeVAoM)mw%V}L_L<~0H^-8O?@cYQ99nKnU^$oT zZ#xB_sSB2sQ#wkmn5YIg^HXmwv^pu^urM@EQ=oQP*lH-xxmQY=6M35D$nY-L&%3q{ zX;#roVh-{tAn*IuRQdp`4lgicGkzs+pZm|qPJf8seDFUEr+lh2*S))Qj1px(#jBrA$e7Sr&((IBwEu7QU8(&U-Jpous_r?!R~OV(%x)0%&KvtoM!-+kKSy~jL4)lfRT1fG)j zn_9*W$G_yJ8bJXY&MMp>B%r?YD3}`Y3^?A8SZ{^w9F3_mDb17;4}rRdVP)_f$!L&E zDR6Z#70iU=QtTJJfAadk^_BfY#Tsp`pteo0Qk!=2MApHbiHP{+5)1XzuQLcG) zSn={6oaw=-j>i+rn!~)|cG?ho@Q!uG&%YsR$cygzMotmA-N?y)5xm8QlB0tN)PakAD#S9+4OF-Cjt~)~>hg zHh5D?S!o-nQ&73wubd@Xol21KV)xjPhg}9?ZG!^dseG#CXZUBfX8ia^_!s#$+a||k zo7mk?a_~nt0|+2*Y7U(Wj&-SY(ZI#MsWh9Cm`7J50#ou!w@W(iG)V&ReT{W4xfVFg zayC-|4n4I1=a&N@B42%;chC##5k`4YDasW-1p|3C8HEZEZPJkNX9TK}~F zJ)OBv59k36Vg_fCB0-UqEy=Vj%cYbRshmVnT(QbYId-mmkxJBifrAlN; zDcg}uNlD3;NSL5RfgnN5Km%xW5vEEpMGVZqI|ap>rfg9ESH6tJh#0MyoD(ANGu7 z_XjfA%_ADGh;+kx3U$+RQi-*7940gU%%F{>pBPaS3fcT(2R8B!Tb-EKXC-ZLcD}s` zo00{*JyQ&0|GrVRm%q;9$}aebpZAVIvcZo>IX4H7@-NYxW;-M*A^}?8GIcdy*BKwv z2@krOOeZKnEldC9o4@Y~`Bo}}b`k=EmiMR^u!D@iB;kz7z_18tiKa&TgCHOBfe5sgl>?dMQMqv)zc9@eCu!dLRxhsnTza z;a6X7x!4n&<7TkpetiTF^x)y4V%GY5zJZ$wlz|7)(bAt^47B4}x91?4^Z(MLo~5YXk5+6l~|?8RYIvFa0!Vk1C=DYuj~&& zz}52F+J$6(7GTR2cAyi{T+mw7rPK!0`(#>hgr@=85gx~vwc;zzaO>Pp^V_cGq&(oO z!zW?>F8=5l#{Y4T0b_o#c3dt(`8}!Sa45AznS&&^wHz%3`G24rh%&&{%^rh1!g7ThBV(q5;P<@Q3J*ZIy0fnV=rbaI0?9_<_#2k_;KDgD^;<_KOn zm4nug}zr)e2=BTKsEIf5?jnjF_dov*;oeS4@5X0GF;{M>S zeP2_6#RR*N^J<%Oh$X#$+W-I{07*naR05M>wc(P^*fA+vI%NacbOoDAaTbV`Li-ly z8zNVOuTct=cTfaswY7qiSPL$K&YDz=*$|?xyjDs9R)Rv*mrB7c1UIlHm>5)yQX1nO zYqsK|w|qVx@MGy29>MdKc*tKHK1sgyBUJ03AUl0t`~g4pYnVI#{67vrF=~;W{p(Xf z_1hp?Svbi+Yn_~8QSr)&l^ZaJ?T$eKg|&=YO9x>Dja%rqkQl>Gzr(l`)sQl@6gwU9 z5O{cCd20sS-m{Uy6YGjj60s3GYUkNo$blXvQtEfKFbMZ6&%-@MgCf$NmLP?#C1|9f zL~esMm@|+?nxb|XrD&BQk1aQ*HMiyoyLru>MWEyc7TlzUC%52uAv5$g0Et!D+`BaF zaImPkJ+n+|dCk@`L+%8TFP&r47;2-~o5-S39&0Z2A^?Fve!mjcir-A9Mg1*J3>tY3b{?Qn)q|P)sYBG)}be!&1#r2^YFDcWykqeLUsX zTu460VMKVfC|S>9*1`<846}Mn#CmFgk~b!fzJUw9m@lu#yl~i1IK}meCkgc7SW9m| zX{Ef+4ZJ+|DCMcFJl~~-RpkZs?idjXy&Y!zw`Z0=xiQ6hcxnr7PNDTBeFJ4AH~XFW z3U9!NNk+ra(mMH@Pit6j?7dxu`MBWa5k#o~nD36^=C~#Cij6Q{ zTM~5=Erh6}%99$w2)dD?8!L*&bGwvsfBC!0u(mrivhUE3;ExU}9?a!>d1Oxj+tR2Y zSehEH%`HbW!9}i*7Q8tU5PWInezcI)%si6o_uP>Hg~J3)Y$TQbU~l%^&rx~LyNCaZ z-{6!^yWkz~`JzrZuM>7v#1Kfl!`X^dMYPofltEzy3us2*E3lI=?wx_|KzS3&TLB1+ z!IY5pCDZE|stH&Pu8^Nq9-0aWE9!XyDwF>!2iZ1}?y%fVe85{Ch&Oo3)%>j`I2k|0 zKWb-Oz4QzG+>Kx7KUnvKC<|L-nU)*ubS?+#LRj?aWrltj5p`n7oUD>|)0o;h?#^qn z2tKiyaAREa(g;rHC0QJEx0FeNQNa%{uE58f6pjlW=*Eg!t9bsX<=u&8Qj6-4M@sHE zm~?0)do6GBRLkMY%*u4r1R1f@S`eJMg^iy4%&3webi4@Wpph&Bfe3f#Am|Y($qI{5 zVpp{|3ui{S{@y{OG{XoE!ajoc5F0~^p^M|VXh{uR+>9xThJ!im&lg7l z&Ar2arx1CqK__Nd*5nbqbPDr!de7)$)W{)yeFA67hV@L*i9EOG9<`{sxSn#Z7ole@ zhZE0nCB1)Yq{n|_EPeej5M`biDsId?gLpNj+DOE?=X)b~w+Jh?!K8C(>)i`Rr_*q# zM7&2G8?NL>UBNj!v*S zDg`>ls|ckcegw_&)4$7a0uGIP`gi$OJL9EjK=JHP{rgodL}zo!7ENm@TgTO&VSiy+ zG;nn-q0lL3lZr_Ox2ABRpI{8!oz*;dEZOMk3tbkKl!==G?Qh&_w|paL(8WrCyEOKE z{%nWCdCiNb7TdIR6T`y;#ZjrqjORip9MW1;fv@CH2A0~~s-U+oha(A6WY)?2JPqa? z&dGtE)q-h!=THKX4e*Ut@;sN$x}#c{hgl8H#8T&;PGpF+B{y)nAG4k(oXl%dBNfL} z8!=uhu8nG5or>JnL+4U*@ z$A^lq9e9~M#IWw6R*K`=Gji}?uxA@;MT;U&Qc_njYnB-CqHSe5La9`IQc@vznm(daiVv5vUnEtiy` zLkc=U5rsn;Mt>@hfRvYi`$mF7JC=$-8R`3784h*`_)5W!mB;cSFgPpKEJlcCXjl|7 zO_*tz%plo;vMZ14y?o4q+qJ8J+cHr}H^FpJT5yH)I^jI1Tg~ zKWt~rp8qA@0{GWSQXhH%xYSF@l8A9x^44j=S}3O<8bFf9+@2O3F9aMyLlS9*dCYs` zT2T4{^fS$;ZUN@WxDL@SilEJW(V{QMMiv zdh6vn@uPh?_=|SAu;e-0QEa82(<+dLYH2sdt>75FL@EdsmV-ut9d5L!99Kd7WD%&h z*2}itM^f1Ab(obkH%29qg3TDZ8N_kK(X8agtU-H%+mNPk`rdNTMh2aJ#CpfE-OD+d zEr_%Pmq8+dW~U?6=w1S^pTalxA&VSuoytN`FZHZN3hfoW$P*c{8!NoWXt)@|xpd|5 zyJ#Ixt|!D^acfp`eQGINOA(~Op6G|{FZVk=BURbbAD{|B;6f_bzG|f^SdT@-A#MtOMYu|%p%J%Z3~yy$vOjmCL8eI0q3F^lLcQ0=b)I$0qk@kibD&KNf|%S zpcu&anNZy*FFV!`NpH`YL>5RXvTdqC!Kk`qT5mmZF_V_RJb)9ke z^8X;e=0hC=el)kg_~2%Kc~LvwnOJTt_w2VW*I=2RuZ+L1u;(R~iWL%@Q zjISPDhfi)OE)5hHdWxbJv62UJX=}cDAgFyeh?r;%+AH=8scg0lIGZZ8Rwz6@ z17FyP=%(=Ayk)--Q1pD*h1kfJdJgjW#0WWREqFb|VX^8$PYznDWUYHHA};QmqraGC zpuhfK5jo55aFglgIi|Z8;CLUmafWtngL7GjPjvfiuAf0~?4SngVq{`8^as!zNKmkL zHR@a2kf0Dn()Og8R6tP_?7c(aQwrh~qC`GUPaw;~VO5Z1@--7lV9@~(b`JCm>M7K9 z01^wSK9q(wB$j#s^IMQ~S7aq^?jtUFu!4DPwNoBx#(dE(_$lCLq8=ZK2Ylx2PvYB=&UOv^GfN4ii5!Cca>-tko94SG@*=Ng4wWe$UNan* zmOBf{kY&?yBWxHBV#P4kG*&Zh9HU^GIf&uA$Cld3XzjsX&;xYv?GpjVdSMONXwe1K zKx;jzl0JAn3H$g}aKTy5qFc$jH>NO5HJcsBVNfs{ErQZf8&rKGAr;N)mRVJcYfq!- zDUZ%zm>8n43D^yiUAKafX&rb6H%rJZ6s=?0dOmhBCA(XZAe)j!>$yIKY5)T*Y|8ai zF>XDxM*fD46mHKwZ;U0lt*3A)g0z83dFD0rjpEdLyi)Yzi0h?iH;>?wEbMfpU280K)4#Zz?YDk~>aYC*FK(aXvAX1E z@SJ<}V{F=%JnwQvYtEz@I!gq>_Zq4a+5n;1Rx-2-y8$|a*+{ZIR=!@ha%dNG84tF> zbxCVsNt!qu@>sxC6aKz9hDo@W+ZOUJ)TJDD6r?riIW!3@6sS}JQPhQIE@UGNln3Aw z=xoa2S6W&U2wa2`nhDsF4I4fm_4p~BpwQ%>`Zd1w{4afYj>Hj8Zr1Z_ecqluMqL~PR$KwkA4@i=+Li~>guH9GwYOlm17~}N%)p((GOaA# zIHIEgBsMGEhQ9z2NT zF={W7dKfkeYbO~#cB|syO-Pj@18x`M6VU6zgMBTE#s&A5 z)glG2j^MEk#f@nIv?_RS;bpTjgH(C0c8;3rRP z<~(<_;5&zw;aD~S(?Dj@2BsyPj^%G!IC!7hJL)r^p!3K>#Ovp2#)`Uu`+7kh%#J1^|GJF}L?!TDZ9H-?K{!=1V1+5}!2wS0U- z(~A@*l|y-<&lXPc@Ic0DO{6%jJnzjVoB1%GzR=Y~K_s-OJkEQZSHf5eqr*`v4!fs8 zx8Niw1??}y#_KSsc9|`C+(z0ee2u`?}GwR*bf=M6;q#f@pp>nHHS5&WeKj((yz4TrmS zu$jYS3NCgO9?#7=%#CL!f@2F)2alzi3tdANDehFBSH=y4($NXrg)`lpjc&yLOpvIu zmB+q5UT{)~kjfz89yg&02S+W}p~F<<;jJvVu73Y-Kl4{P6K(M2y2sT~#2`*F-cw$F zl=1FGZUV0!-Q_*o^77gix8sDrqu|rPwsS<@5!rtWEVk_Dmj~G07bN0D4tgSV6A2cj zl=fN+j!?{2hq+w9v4^^XBO~QMNN_QcUYc1AudIr&4qySsBejuh=v2t^JaPgGV;{ zJacEtP8#~=*0R;>aJHVY8Em#+8N->X;^Fm}Gr3|b_Vi=Jq!Gp7Q6sb37f&5WmGtVB zmyG>DSM$`m47I;;VEMzlo*Q$KsM<=TTz}!niXOhvyft+kl(Mzx0%@mc1=+ro!;ft% zUYv`WN$sSc?gkfJw-6M39O$*(K=B<$av^$I6c~;&Rj^*F1MA`1NlEPCVqdc8W+Xx# zwe@7Zm|jxxKo5EuymkjtH|6o&oGTkKvzg;eM=`2pC3g{=m0mc2QN4PuS_vikvlk3s zz2UgA@LV5x@o8*j7r<$l)Rt@3kwk{;h1i!T%E_qEgT->V2%du)4jWMjUbMkF%&j~W zr@>Hlh>S}6!OhuN*yv^O?>f2CjLJDx)A9wg;ITBL8>PhFQ2`U+PJfNDZ8-v-1MV(n zyy6_Yal&Pw516KwtZt&!p}zmXLm=|>R^PLHJ2{dvzo}tHW~&PhPX zI)V+DNbZZQyLznNPy$EOK$1w1*bhBE2}D_F6`ZgQqb-Ot`JLVgFz8!o^(qjcg^Xku z5LM7P;=u(z=OX?x@CP4S04PHgHA+z6TS|7sUpj?1XNu2ldfppPF~K4Db_KJ>GF0&B zW`|qThFkNN%C5Ev-#BeKmC4j3C|GWf!i{?{b@ybmY?u;k#`3*)N@4NcsWgqZ!WInTA@9wlxVZ$_5DX?QG+Neb zmjTH%6>0dHiIwH0t`UH*tKe9{pB*h2mB9wQ2Jak=fu}CybZ8mRYjGwHG~(Cp3L)r| z8=5CKwESI(FwmTbFYm}s0!a4$_?G6GL(SgU^7_a#wIV$pFCQ)kf3wB{Al}rGd=HI;{{b#>N`Gp_m zU!FGXqFK*!&gOkKvz%V1$3~iQ$vSLPQvqLb4pS~Tu1nf1$0r$HYkZub;zWQw6G_%y z9)1;+r%cd1KuL0{OZj>d!*ndYd=bk5?)2m_mZ0piP0&V|n@R^hMBoMZuy-(OVH!(m zuOgWkr~ojgJ=wsD`k=cod<=9h&tZA^Ayh8OYCpjifvSwO3ULF?HfOEl%7;1yxR~&Z z)~m~dM56!VKI^ZphR>eQIM>f9n~IZGf`bE^re-sb@k-&n<)8|qv_#Q*&(*%+q=CvQ zu8pPFzpxIeg*;LyrRW7!-=cB2)^cm^_{Nb0k}vHj#x-2-EBc8d*V3EZ4l>q+o85W& zy>Zx{Yk}*9n4BDylI2P#&%3qIMF=uWfzhK{f zQr=oG8jMSy!2%e9+kgY0WDlTf zR_MF}dTU{l5d0yPfqet>7|Jv(miZOoNcV(-46socT1RqCIqM;Qi4eYAoO8G zS)D?C0&X4{hDyN1XoED%aT}lKJ4b)~;b;^@f*N}+_26PZL7&zf)UX>g@IG@UXRnYO zV&Ot2(t;3M3#nH0W5ZTrIjZ2G5P^`R%F~NAqdMGN!6MAp!hJvA)kKIr)=}v>(-DwM zt6&9YW#-*D&%BkxksD#lt;ez<*al|ZEM&M%*&ye92fleKUt99shY5Tnhczc7%7v3v zU>l4vs}>3am-$9!X`ea57#K@k|&Oo(M%ZNpRhoNdbq` z3LS3b^;n}3x1o(hp7&NNH0<4>W>Gl~YFWwsfA-+5iN^+zZq|65f=xWn&tNwd!_)^l z@Ug9owyk(+B(L=_gDbt1^I6589$A`JsND|@#my)&!p}IW0|_j=MvF#*)~uBgVC}?9 z;QhYM=8T#1PdMgxHh1|%x!@npCp@*bMUrOpOhlqI5umgtiV~SLhtZvPBIY5;zYdu_ zfuoTCcZ(T}PePjz!^t7+-&&3Hypw=2pR9;qwuNFEva=7`6ODY|EKEo!Aw47gy0-!( z`c@9F4!t`;p-8pTI^dx`m8n7-@Bf^n2q zF>7HvQ`iP>S03MbhDJmwet669^?l3T67DRVxYlG#aSugZc-~tGdOdFB&?g$S()1!n z6c&;qBserdJ!jEK8N5((V>c>n2eyihJfasjyg7qHK@|edsg=iw6wI9^){^m65Ijva zWVu0CRxV^9(RdF>UT%cSI=rnooyrXpElDO0jJ6yXhFR^o+E>_t=OnlVA5?J0d%k!< zQ#yCggypE_9`M&oVyfzUHfJI%=0(}iG7X5^G zgD-*6()S;havfS5ghyOZ9a4gs)bCFX_5sgpyS=(~1zsA#RTU2XX zn7oHF5t)`?VB+M@qvy7Ts({&PVC7lZdt0vc@=(_`6mvP;2Ji;v9_9;qM$X>%tU~+X zTG<k>A?%PxOn=j?E0{r$= z0KQ=iXEM$8xszZL%KR*lEXF}RqjB)~n&!2sXW|4=SE0o1rPAJPXieQ(CRSr{0w5{L z?!6#A{`N#T@tc_}+{~NR2H)9OR*b!Y>$RbDLe+K3(KRtM3!{mcj;U&!Ni4ZJjx(c_Pvg>N6jY314OfL_3EqG%Ac<+B|_ z6U0m}t@nu1lIy1x?=CF6gD%_MlA@LC>YP*}7c#*SP6PG1bYWvNSf(xQ)s&KJ_x-;8 zoxjBsMakgyJ};Pv=nub69Rh$<1S7r%yc$LHo0`A3nDIB1rXNMP^&MQ6leH~bCr3Mn znoU**dohEP1Ho0iU5)!%yBYy5CKAx6i_m*({!JOs5S~;degCr8_XNLM8_IGo2i%7d zpASosDiOp#JtJ$xv|{Aa=?4%p;3z6ujro#Xl7X#d+~{hdFe?r5mM{oiEkVK6_@@_a zzwu!OfcF+co+!MglZZX|SuYte)dJcbR!}r8r}Ktc-7qanR43+6X?b}pW%3e8e0$<~ zY#=h!$Mvd2U(4ZKNBYxYqKWm&z%oxXU%h2zdB_UutqHUDkM!j#7A^PIgooPEjT95- z8P{^y`UZMN@o-O6L9WfE)Lsu0023w~@;d$VJ<%aN2rI$f%WL_OfubxWQ|B7qoV0Wj%b7f8Zat504LELR+#VN1%-IWi z2a^_l{EYnENmvrfqu{YngbFSMfhbf6&cRdb-`|b&U;ItZX~ln;Zu0R0h&t#fLghWwbPVHT$;jh?;(J!T zd%INo@pAZ2rjp4;JxVGCiDHt`RlF+ul@5o#m5)kEr59(?3M{WFO1{^0u_8Oghw$mgShWdC?AR68Pmf^WHO48QQ7{sW%-?f;d# zA9w(mH?q<8_Cmvn1c2H}rtRf&!<_mB@h2!_9b9O9kMuC_;(fiUrtl zC5L3qK&%yeh2y&;&!myDBM2~dTncUXWoOB>9OPjtz}S8%H`Y#PW!qH+qR`nvhu13^ z%g!5Uy+u1qtu@=R;Ywn8ua?&^H=gUdRL$15Y0i>V{v?!c|PD~obUqhi8$e7z!UQ+-Ge>i@iFw*Ku4%3 zcuckdqi~@;L9ZBfO~}&4LJoc%Mw&|BCtqMByP7=gy@tacM^KKybmai6Q1+XS@CaN3 z@eryRr0W6bJtI{>l1rcOlnAG`r94Kn2nV|t-g7zJ0L2m1M^GHdy=HPb{3er%;$Ev$ z!j~JIidbo1mRSG*AOJ~3K~$TZl6)u?z-~vDb;gb5Oe%+UCrC-Xc`7LW6GP8?qmt8k zNrO1tHo)aP?9E##E6dPBDreEg&@qy=I{{sGz;3P>#G2YUe(R>=cW%{u`&7zN3p~_? z&utstntEOxJI0kG(fXe0N8uzOoK}wO3wiv53L@> zrTK0u_e5;qY9NceGY`{`ShC@b(}IqHZXyauw`Laap|)a^v|J)`UbF@tUYD%zJzQLu z7HU?(-AT>mjYLRGsoXTn0QLB`CN_%w!tXwky?ZXo>_ksmteoKTKUq6qJUqjhI^m1f^Jz3s{~sUh`fyYQe*JdpDV?m2J~5QcxSoKNP2W3_}E_5}n^}IT9yf}g{ZUs$x4_CX=7JTbSEUp$o z;NwmquEgHU4LWTcS_uXbhn{ZDz$*(G?Kv;m4x|MzM)7zq3r4;0eD=ajeHhD%=g>el zg^?FvY!FsSBLuxqqnLLl3l1y!+(aYd@=9njHjLQrF5uA?)_N(qg&VcJVBMZ!n97qC z`E%G`cpe&P9Psji<7;=}$IePXD;<2K2k({e-qce$Ig}?g{NuZhb18gzO>_a@Dq3PE zILy2eC`_vT@trKebrM6|+&efv=Z#(S<$ z9dQevT~|DN~`rgBCp9Hj6iSB<$7N3!JnMS?!sva z@6O?q8=~g?##lZ+K9F|fedqx>fVcmY7y9Q|%q-8$-e%rgV=M3R^t9Yudy@sN zlfzb7#X$k@%p8*z?#^3Iiy*b71K{T1yGJrQ>}$AoDw+E2IsDaKc(kv$QwlHON>>Ye ztyK&oLB?|V)5 z*R~Sb=$i%~Mje9VsD!;RPW<>#0?lS3C379EsJ}~frSq9oa3?eQnfLoPz0I5Ff0RY$ zc+eNT6DNGFt$8epXyb?!4c&q8_3K7>^>H|G%1KqVJRCk`ZWlghRqzGyVJ5Eyz{AKv z%(mt3)`mYH#Vo`@C3xA3>msxWxxB|i2`b|eyCjTZxnG%(oOU_EWUI0)BEIgv)fVZWQv=ImPPCNNKf?YHe=a^UuXgTHWSTSWXX-+)K_tKZ;My3vj zr7Uke)`8Vo^oSc@a`-KW7Mnt`P4R2 zmIuO#Li%nTRF&mqR+9t@ac!ZK7;aDGs`p~}^cMWcImPq)(#w}t0`OZ?__ITJbl~~e zhT^%?Ac57&^E{u*joyo86Y^{d17xajyO1eK6s8%EY$Uk0=D3jOebmU`eq$y&f};xN zPScH~)@hx%D8Wi!u^<0H_m@h~vSm}QHe=43hO2`FV-*9w_fZu@}a9 z^-2wha6o+^@?as^mP4Lj0KX6*uo{U%k*%e@$S#2D1{`7#=*6>D0Jv8(Iq-!nAf`wDuTzGo1WU<^hoEK5a_x5M3Mey)Omozfe9xmpFOe+kE#yVmH z-<>#mT6*V>g3LP(5WsCa7ddf|Y`&Jj=La&c`Helv>URpym7XToiaQ0&YEKM&e4wcs z;Q*XVh1|1Wc*eD*A1NNpHLp!AO^`A_X{A!AtuXg`Uesecf!Z6T!h$=k;Dw0>WqG70 z@>gZh4p?#%k|d%VRdizsSW#d{?q)HsmJRbD9@)VM0*o?EshpYbz!?FG~f5a*e_PFlPPvnPi;M^(R7o9wso8o zjeweg6HzoFn;HQ+PXkRj34RYw$(Z)Rt|KzCAhneS&x2a_Dl|WE05HV?eIky%<(-M; zt+?U;Oe$jUN!PdeucL^+H0hv?K{X>8h1sxT>y`o>%}N$bFWskeLFMDl3VFX*vWJ!c zL^xCjj=$~%vdw)5&pFBd)lul@OZgdG$o@@eN$zV!+PMTNVu;sac2{;#nh{hdL8s6J zP!kab%Z8ys7)gb2k1L>8mBr;sb`^Sqdpiyfe)5Y%-+6}S0}B8~L99G4Pa~e_w^RW{ zNfSfTTCwz=!G)nE(T2!_a-Pk8Lh2Q>ro}tRw5OxR=%et^CeoiSCo-*r!Zr*n)lG+vA~hE7<8`;FsP&AnZQ z%6qJXK?yJ3fW?L=5@#vQ3dt5nMUYw#Qs)k7w*W5n6iEWJ(sM48s^ZBZT;5Q;Z~~KB zOhX$dVjagV99ihk9cOTK6GNWB*+Imts<|_>6i!+Mbcd!bWVRhZ)I~6C?Z={BFskKx z^}@aY$Q0y47arXWrUmcgZFrXLw&F`P?4bDGTU zd{5j;U_po0Ah=PxGN=VRc(j3oDcp$!=yOF7AVGqVTZD1qP+oiAhAN_7sTG-?Jfr!hQ*}qGdCfhVI1ha8I+FKxz!f zl_1zXBO7>~FdAC4(#NY%GEXZxe4TKp<{?Y0X96g7gZ$NTBU6IgRoF0WWa*|2WSZNB z1ct7M!v$19eK^suomx^O?T!O(RS=g#6)wXrLeI!ya#}KZ9!r+p=m`7J;Cb`dbFnAw z&`GiKEjTLR_x3znDI|U+b?zdCZWT}ODE>@YM!~zWpM#siPwmF+WSRoS)WIM&bmEAe zJfWME9Ly^cqdA&aWRW3Omf8uZSbBIMhVPvU0Gb6-)>bB!z_gL_+Il#hzJDX#@g45$ zT;*#X)^)=7`VTXRdi?a(=jq!SKXKUdpsR`61>P-CE`WhJNY|vSS8t<9L2nMD zBPrWU9i+zZBOW;1- zL))5X_Z`nqU>zx|t%IGR;wzh)-@a{8y5)PPmXkX86(|{j9XA5;8?9d}oNyG66w8#vp6 zvQ|7hcib)Dm1AiECk@;xJVOsxb0JZ^U3$JZv2+d8ZNqbiC5xpz*?1u~WRV09l#pgF z_u$5SH6}eMU_KM2;>O7;@VOvOw$V-CeQH!Z@id+CQP!I|pGNT|H0Pt7Pw9jxI>)-6 z(p?;bHYlBno}P|Y8h*<|9`{$HK&OOU>}@FZRUqPob#D{ggjFPWcNDMwuk;Fi_bvA< zK$ltrORoSzz|ls6kjZ4EXagHj8<_}n<}fZ~`;agN(A@waj#pTOJqcsUM1qG|%8`f3 zKywO*d$P)$cBC?h6Iq6elMj{<6g3`h*9PwuYmw)Cu%&urql0&jfAL<$b_!>5LqCZ) zo>zD$XnhOZnOCSF%hlB|97vC=wUA)8Gl`~$wc_~`Piuv*ohW!T5Q&}}drn@jsZp#) zR{B>B=Ym2`E8>iP)}pTFnyZ=Rq=B0itQ$eR*An4=wm}~HB=mj@FE{nMO#0hiBqPtp zJE~f7&_oQYmh)Z7goK;ms0!ko$qJ`wg9Q1~K6c&6^Y1D_rH>0i+sj7AP#Z(I)Q@>( zub~d5_1&3d|JF;!UCZE|2|T$WJ@_aHmE4%Qd-Uo!$ef$NjX0y>t!d4mW9Vp)vyQRz z+?+PlK8Sr<3E;Jp73wpwR3xpJ!+&ie2c~ae5eo})+(~RqATjS>pl0(5ojZo6 zU2ueF0?dG8Rq}BrBqqc3c1YcVs1XkUrJ@y`cS*e^WK=ZhCQMAquo51)_&Q{F?^cz; zlKOA5fcD?_`K6mM$a-!&Un%&YQNbIAv==!i~0(*&cE zK`@dzk&$AO2U)RFlGF00YLB6~0jCEt5m`!|g-yth^w;=L{_g+8Kl;^QX7PapfIFr9 z#b;v2BZH;<7K~;E-#w8Ge!d6u#?p%o2PNDnB%8*OVpPde%2p!c61Nu8EB(+mygL!p zJymdZ==s`hnQy1TT~G)&>43{y1O1^HqwiFOu7m%gu=Y9@sEBMn%kA zNvdOdDkUtu(dJ`EavVeu#r+lNch&vqD|57J)PF{lD`s2-9{dG6J1Vf|?ZaTqVQ zC-V6!Owb0~AwUVSDANfKEM^~^PGI!*+z=_pc4B#KXt-61RrqO8|K07vPh4JOe_D_k z%|mN3k#0Dx;fy;QT& zm4AQdu8?lFvT(6unE;fH(2!3;|Ct%75|oz5kCgBh#xucBb`z;=BBMEz7`}B}acwS3 zJ)Ha(}h@# zr%_Pl4L5Ty7Dblt%sl5~`1nBaWLNWhbD8_^MsV5&8Kyw=ScG=tt+}}1-mPWQP=sFh z*%Qlp3}+I>#{y*$g@n$E9Q5z>@>b)t(cj91SlWPDp^gh2`auyiQlsil=vA zBTrd06*m_0J1*u@2~m1N10yS56C9}FZP;~Q`bGCn8jMKHNK%tb7 zcwFF4cqf$x(VyoBbSv1@Liuh2IM@W^(P9BEh4MDErz-}dNn zyEcfGw2hSh#X_)vWgv?at_CH$52gZmde|^bCF7>SX!A^-vbU&sWh&X~o9`W>iAWB|6 z_}JiU0o3xaRMLr7{j@Ri`!WsI8xrlPtOTWj2Hla0XBK=1a59R_649vdrQ!{+s9`VY z0vv@A=^)5^GTNz`IdBY9+x3=amDjUi;f zCT!2h1IUJe!59KOqp<;f&=>o|Shk_T00xW!#xs^=L$n}~BZ`zLi4?oZ-b&5x>RPgL z&&XI_yzSoW59dT>Q-EQM-INn3R99D4W<+G%bItY>Y4qOTWaU27>@pAH0nXLTq5;Na#DT$M=x|OH7}{hV)45D1>JsB+ zwtxJgO1m(Vn|d|RuiE-nWwu5SKTdA&b}m%hcK$Aa(TFgpo-11~mp_-sdRUcZ*ezi= zm7BTMyntdZ@0~am;!(X6vl73Q$JQ=1N6@RwPpg>$k&H9hP!4@N7rwz`!_XRzmT?S|+VOBH zH?Rr71OX)?9bWIqf!pe+q6%sKVQjC2wo>Id8}Jw0vuNcTcS0D2hQ8XV zJYmsDq$q%(Bpwo(OtSV?XnYU~F~`IgeE&erLD2Ca zlq5cE0o9?f`kINp(bJ2OVmVPhfS1G{XN4dXWZET6rGwkRmb2Q##@m0 zC7Nt;4vlt6!HVObi=uECL9LsCs(`^&88Mazvd(Si;td#7YFXY$1X|X4Y;-a+hA;o- zKjq8c6I0M9Gkz`!xG~oK^}q=AcII@BHL@!n$1sWwUpRKmEWDuMAe}Je>YArki>z@f zb966;OWgqP;ga5Bqg4J)X@wuKMaXI6xw8zYoV5HtkTl!Wz-D4NZauSB=H*c+H|SPm zIJ2IGQ<<@vk=9Ot#ZnC}uc*K4$s;K~StMbq-ixEsRByzaiOdL-Mu<~*!9E^UtNpcD+{8xZ*Rx9(-J%7<{>fD{HW|F1SNg$PHgEWTm*Z1O0Vaza;kJ_x7PWP_9B>NkpN5lJwvs zPpD_4(#4&D>ICXXnqsU4ELKILbK+z?TvslJB@II^ee6g1qp$yK4&L_>U?Y*o(2XIF z6O667n!{CHb-j8nE3pp`L-NS*u_654F?{7zOe(e`ORodNt_V8rXvIA(VXGr7zG)*} z0jt~1OAGuj+Llza=;8ogTgccjRDHp#3vutU%Ff$gfmN;LP*Z@SRgj67o7*9uv$WDS zuiE}sW)kT&h-8+(SHRN)DJsW-kbq{P{JpgTj4f1Tl810#w-K=xjA0arjMPKxESDp= zGKNP+7-SB(dn7`n+KEl|7&*wdhp^cZ2cSZ?3X>%qEaY{H0$3V}1Yb|(=0^P%Q`HvS zSxBcbsomrB_To&VzSd&xh%))}8&lCcbS4$k3hpfpqtLOd;M$`CCN^Nw zdcJn{-gxNO{wB{Adu)5h8jevA@sr+h)y{bWNRknqbb}}!DexB&SV=Pr9?NZ4Vj%OK zl-w0{*A^F={1wm_^~4M$c$d(oor7IKwj&)vpuBunDcip6qzWiEy!x%Zp^0 zXyw}CW$v%7fMI)cxy`1v+;%H-kD`$`_y;=D0ergt8fgJd)fo?FIs1B!%BpuI7aXqe`Y(>T)eBHs$icmR zS<{Ds$%&GY0$~BBUATG;&Q9Rq0o=a>lZAqbD{xtP0yKgVJiV?y5p(D+p-@kQ@=$Ss zL}|}z9-8T@JMCOpnYS%eCAZ>)zx|oN#mm3*&pCQu3qa9ITl%&UAH2=3RH#IE-u=k) zOfEb5SEulec}O>O>~x^t4X6Xj&P!vNw+~Bs(@$$zcl6X#;B+a7dZ@siM=Rf40w@3g zAOJ~3K~!NQ9Ds#`Kd10oSt|;zKD$YcwwIJnl zP4+pfr4VfCNYgrK1NhU4AmHz`Vvc#Z1XIc!zLl-=20aEDhe9B2g#dI|!3lDUOk1@X zcMX?S5VSRdTRSj6g*ylG+!Oser!#qNuXO|ZF+>hoIU+04Nd@Pnw3Ur|_|>XB%)Pu( z0G{ZE4#5c24dcbCZypjNFJ0-|FEH02lQL zk}+XCAXw?+|01H_OfPQzcV`H$R)0bCF22B0$z2Ihh^K$#px%deU%qL)2EC;u2Msde zZ)CZ61R4XEcI7=wC}8f{p&Z(!8j4U}Y%7Qat9UDd`1FDRG^~Ve>H5k{%v3d~!Xcxq zMQf!4SfwBt19gjy69%)%`|k}9Ewo*Y4E)ee&i=e038h8fuf(G3YF{Lz_tY-DYlQh{ z5YkO!;fbNV;kI&Nke%uPfIxr0&A-(V&HMgRK$W7ERafog_L+M~Ed1$QUeK*XD8J{e z;1H2I{&WK21q=h&YvD#WWY&nl+iS$vDkbQslFlH|!~f1wp5KdoIRHT@AmAHQnAH-> zaa2l&5ry!nHF>V7ky|p4#@Y86Emb$azsp4BES_@=PEF_w{r5_;$`E6Y}|cHJ2hw;l#{kC#^Ycg~;{YeEj;~ zXYq+&ZxD9a#fmhMeAo$2#s<#0wafiF_T+3&1BENu`R{_-k(c1 zQOvd5NM)q(N?Z1UY$)QPto?>-P%L$8pkqs*EJinzwRx0l+_~xl>QahKF_*|QV<5>0 zlZ<$M`~9Z{N0o!J4M-kap-QV-G;-jc9zriqsa?fx1;fa4+{hDrdnO~#jlSH>&cJTZ z;Jo9DrF0gjrPyx)+|mS_%0gfF-Y2S3>x42k>?UIPF-k)IY}QgZ=>~?0$X7EXAY3n! zby?#duT+Tz+o2Px5lLt`s2v_5&-9a!!diw(zg=BBvr@iJClO|1X)k!BPQkz^763BU zLQ_{#q~buZhzBKP^N8m!1@yZiJ3~)dw@jwe5>74L7(>*EGtb^aI02`Xrw%-KXYzO& z)iNx+ypconb*cr=$OAZTH7>1j92b_e))5A9Et8_ziQwK0`mv={x2M+1>$PIbWk_L} zR5ei;^V|TQ>^VNX)8(zx1%E!3u4(ih-g0041zvga=XvwNKgX_qME%ov(ojYL<> z!FZ$$z=^yzYnwvl&HIAJ_lJVUpC8GsJfF&YG)|!GYOH);OhBB`y?+mE0_hd;kEja) z5HsZzm`KxwbQMi=vEev6g|3y=;$kYY;O;>1hdANNrK@}h_`UbF0Hg+@#IvC*l$9$? z;RLWcv+#T;r0+w9#`1*|Y1zf~S6ciRHsnPvmT+hsn&QQsbFsaCdZ@mAnIz(Z0Bqd| zE_FpRIk#{<6*XevJV%R`muB!oV>nb=>{%dha1+3!bX-aeRSWyN4Vdb|%|n^r&jWEN z>S!$V*Cv)Lx#X~wRti_w$PeQi=W@ui1g>@yDsMTcEGg2llvY%NnSrZ`%+Z&o2j%N_dnkZAPLnjpq@>BykrfOGR>j+cmO7f=C zpqExeDD$IQh(7^rcVh;&;r>+q?M_!kK&>49!%80WWkss*7V`Y>&nh;vmPrNAjo@-W zXFgl-vf>Qwd$gkX#((!6ZEJJ<`y3oJ9{_;ZX6ZPa^hnm>ykg=~(b{;j-jPtywt*xS@bCOs zR)#?+fU!MQwV{WgubyzBtp7rzDnacQ@bG*NuO{F-YDB6VqOf<-#jFyEkN4&9XSqa| z#R(tujvx5!FY@L0(sCvxCSAm69;QfN+FIIb-{wLB|y|NPof&GsPXLpv#pWyR}D0UNIl1$($U zfR_ttwsQ3**hpnp>;erqRqUjvyLjtmH-Alm%tF(97FId|8^Bw$<}t6Jm&gbZD)X|F zCZzM4MwylOma?uLrXfS%{<&ppr6^cW)2{5j%llH!x%- z!?;pfVOy$$Zhhh46Z}P|A9Inev-0wb@(Z(#P>ZNj{)N}g4UN!n`@q^zgh#8~!SM!c zU6q4-{77c_+6nPzF_W&(mG3ep&E+8bREm#Tlg^@;3A4}Wp^g)^Ig7w`zSAPks{u(+ z34rKy9B6fXNHc=6;F*(sHh~B4TLHMzfd@`d=qQr?@$2(|7l&RzkJd7u6)Q^lBPVcxn4@ zBU^%DByak@6CS?TLmtO!%&BzDOR==)lSXv>T?N&;aY)}-_9`g`rH4^0 zl*OfoER0!HR)RYazuT#IW#b+7gwh-4-^u-7&Na@v(iz>0 zZI>$reeW14tZ7fyZ9WhjCyM3vKYb)~`QAJ7HB2a9@10h$1}k0xbRfMZot5{xT3opY?yA3iFOma4 z)i~^7DAoJn()!d8bk$SNIdv@t{_vn?H zVhQuIA&Vj=MMS3Y-#A%g*6Pduk!|50OiH=2k6QTHmZU1bJrlHU;bj{T1k%a}7Pdn% znCOIXq|C}rbU`%P?LgK_(P$b=Cxl*zA9s@AyaE#%Odx8{mmbad{X<~}Zf9aW)_Ulh zmaSC&dmMWPDI!jIA3mP@C9ar^f8V$Kw5!Q!iGVSVu1WB&#@kYjL3GbwpI+?sSE)OJ zxo`kp@%~r0{$umdTJ!_OF;wR=t9vgb95<7KFfh{22Wk~J-Vlc0{2bo;rs({OIi$I8 z|8ek+atFdpR^Y96ovzh{-woYRD9x8Zz{LKVb}wpD>ia?jGFI?|KsN#BQ|M?XQWa7N zK&ZiSg71%T@25v#WLrzA5!Yo4*9LuFT$^E$Kc}(Gy06Vj95HdwP-)W4NDIX2LaO0j zA>i6dJ(uh6_ZC9B`SfMOom0m*P85hS0$j}tvAJ4>i+Urid80b}aVB)zqIEnBg*j)C zTXSw5Q%%h2$FlQJlvq(Y7$=6(IypqZn{!zaZg+%i^L#D^C0j^wNKnA6g`Kn&;|awb z3MUN4z)9PG+`vOCe1w&S)!r07|K^fUTus^Pw~U6e5A6pw&;HU&;+Na{`oJ?gW_FQ)*5 z^Yupyj%)dvhYRTzKC%Y4*Q8@;+m^kuVvxzmG)UyNf3F{xe}>CZk1N$NKj~V2+(g{6 zC7FtNDp%u7h7U9F4)1CLTL|*+O1w#AB^c!wW}mB@KFrm&iwjOby;M(uM$AO2Guihy z=b9uOiKKUJO<&UqY;4JUy{!ZXI#SPu#Z(S>l8exhGKQUno99$YAHmDfq3B;zK#01*eU-Mh5xjh&x4#N-jFHy%YF9T3YP5M$3s;~MtCUvf zt3c_$9b=faj;e(`g=bT3xx)%%eEW%KdH>$%~e za-22VGV5+V4&jxlXtCF_3y%S-p`_=nr0|ADI*S$eU>HSgMDVa~Nh&FLi7`~IbnqGu0u-&6LCHkTQsvwsZQf=0>`KNw)|BaqIC;i9Jyd zACDj&5MchoiZ8ox*IBUun@S_RBBk*jt3Urj6nbec2Y53Qu}+f8L5*Tzvf71!cS%=9 zr$wrYKQCC9oy$#+x&?Q3#2vUSH07s|&k39qjnP0Zu}pm#Sb#r~LKLmZ2+__|UFf9{ z6f0lG8cvU4dsj9FQNm7D^4b637x=UPIbCnn#|}2ZX@HsrO*uiI9=t(M*co zzxAx#^pW25-+D(1&u&k?*H$J9!P>zq$6jK)oOm5x?#kz!Xf$@Nd5tgh4EGzySI<2U zs#03aP?C$|P%x8v0o}N!&^2Y{V0W$0*G?w1P6|*S!CR*@wo-Ylc?_3(xfF2S;{55U z(vaW7M}11%zs*%($JIOt4Sz6wl{Zel!b^kaxPsxcQO+|!)J*WU#QPQ-^>Fb3myC(R z9OE4Uj_@(|r{jQk7o?y-i&g|ID-r0la{=A#LUx}v5ia9ymICvu)fH+knQne1ZGPl!M`Q2Li`Gk6~@oEmT@;S)VoWx5ZN>@om zDh+R2==AX20awc6yUA<$e<%QX1Y3z?zX`ZgL~Jiwx;d;Fd1LJ6@U5vJ%9|YlPS#VI z>ua5bZw=HxE|qoD;9YZd>*S4IYx{h#6i}AB%o*4!_T*@IPkS^+4CcOS;A&kd&Dp3H=tQ6YySZ2#cdBmy8n2l92kcH3RoABXr zDu>xhtJ~3^k=TCejqeNY7UE2ly9;xY_ap-PEtaDf`JKRUQrGm_f}7q^Uj7-5ar_j9 z55@x`-?Cip(N@Rer3tk8E>XHo4tQ6R*%I^EBvWbOR+)jTm7!7Gr9BpCqUeb~1 zGh0eXYvTn7baT1+qrR{L;|*aaxlO}L`n35#0EL*-ZvHYpvp2JW;R--zIx8^X2DzZqn9H+Gaklle0eOd=^o(mxOU=CkA z2q>K)4?W}5z2{rzwO{5NAN@7nIQu%Cc*G}$&vQO_j=xqN^K4*vt3Jh7#~e3PuHx8^ z2IQT~q{)~#9>}fVK;-HRZNO?hXbYkHnvVS3Y%MZiw^V>vZ)+nC>1-vfZ{f?KS80@8L2CD7jyp~;g6u^~U2*x~C#SId;-q$wB z%fGc=+TFrhoP&AQGHWXiW)p z`#@J`+Zp`um6R(TDJJ_1n6~&;y3Uo3wESE7${@sZSc@akhH4x}k+jS!H{vh=-%1qn zWF|U*X)Uqgc_hT3aSG3^86uUZ9u$I~Oe<+=S2y=cZCKU>1Y5kYOlo>6z*-3gs|_s+H)4@>)GJf-8fJ-JV*%b>umXRR=PPEVpvU;C&*We(iHC zAN>}mr+>uncAvnSgn88CmjlDkFW%zs6nFW&iAd5dM)@vl$p(FsklIpy1xAEJ?{@WF zW%PL`1u^bO0ca)?Z|+0k{s*Dlvcnp-M{wl{xN=3hq}dtFC-SS)6+rN%RyH$UeFyDa z=)Efo?=XjSLk^_XtVi>%cybSH4m9@bu~0#I2AW1}CrTx@;EvzrV;IO|U3R5_m{7Wt zrj{1F~Y2c-d=Xwq`7vFy_tg3uENo-7L)rwRKDng25*EJCASJ4q7as;04; zjGV`$jmHJmW=f6r_Pw1o@Je6$lna*Wy z#{=RpqiW}r^(kjz#yB1^j7RurfDaOacKR;MEZxKV5GwW83qn0m8t>JKVJC#Nfldzn zz5s;FIZRH~`6-uH{j2ACs4HpF+lkV9HCQA_RIO*^d;8VTJJiD;$p~>v=l{`$tN|+> z>wKl%ixt#A-I0!kRT%1u=@`mo={-!(q+40#C_2XnZOcvIkKel-I7*q<1&3vT3m`*K zka3c*odw)gaLJ>Q*-B0Q^kuoRMzM4dy+mf!VHR?@6j92LZK~N}VECg0$2U*lZ>+%! zTM!&-o9cyB6f7OKb*$$x1uZ9~B?)0Ygh86{&Y~g=1dVT;(1S(b;uywqNYAw)N|Fl^ z&rz+OejSJ-LlRgrBiV*wAjG089eBBtn>SFx&sHjkf1*5vn;kfC7dB;aAO@PN4Mw7e zxPuUv)@ott-Q1R0eg6~&Yudg#xI2@=mt}CJm1JhCKxi7sF2CcY>gVd!m#OtwrAf(= zb~;%g1^KMD7wL9(`PuFheAHy@gc+X&*ChM6?-^Ut1!L^-irSG1>R!?cV3PPm;YtPhdKaWUxA?~F z@u7GC?nKhYuiSixsQ{ywyJGH9HDX`27K&e76R1fA0yef*K-!gYstsf-5h~@mQn#7Z z!=iEETC64ne{e13^=Zqpu)I8hKR%DRoeK%*Mjx(>I&jt!r_uY`0RVj9AClXWf44s7 zbGBrt0NR(!JzfUBynMhby<2?3Wc(M&m|;912sCSUCHpn%4M;4v{_L&*rLIv%-AIbV zbuaU}YlY=km$D&PwdHXRYa8Oz_@xJ6Pn0QG%G_^q*&vuq@PKTnHuYS14g`_q(HwkgBjgW`EVD*hh`-_%DgEDg~B%myWTfLB_g{!&c&8e7VdM8_sZ=OpV{Zv07R_EUv z9r(ud;?S8u4*$qVULRhH!&Uk3A@;8zo=q{yx^ouQ-JLc}*6IH2diuJe-N{V;Bl9aw}~g z+mhD~Mvo?3%0iyr9KieQK@o&G&j%6zwvh~m|Dm07&z5|vE!aE$ZHg!VGd^icehzrv zl@#q9YfC!5mGxIN(AAl4O3oKz=;@R}XF8%Od0`v&?`n#$k(R%lt1!qzo^HMkdd zBGX*xwF6Bvns32QsRw@v2ajYF$a2<<;cx$gU*q@x@#lE;Jr#iG*K-~e1z9NUum=TX zM->}AX@g4(dlpU$NbrnOc=Ht6j`#%RO8LDzlQ-8m6@yUJx@s$z9rK+t<+oRI@HR6; zZ_Dx82|SnyXmwUuUOQXz>e-SzbNK!oHhU>=9#o_uJX+ev-fEi>Jlm5S`k|)hM!Mf! zIw)I5FOgu+ZX}t5$CYKSZoqjgx9lU`4#aAUmPH{Q6SB9c2?JS)UFk%emJQGJ;Ezt^ z=TtknnTMggK`w`K3TG|6S;^ygWMT9Op1TTbTM#EHt}VzS$&yPElGDwhun8xsomh`y zHw(G8XZcbfBg4YU2+|n1o=D4&k(=hssz3-C52EOTOmbGq{oPo2av+7d4&bSNO0uZ9 zH2d6cHrx`z}HEwqW14d}h|JnbFPuPOL?^}Mj zEhyV5v$kMEnSb6S5RV9&r4W3UOQ?^e7=$SVLs2|FyDp5tFcwqRG?&BN89=yHkIGFU z+PwA<_N@klEaYoN1G(|hDDR{%0UzNd0TxZ?0wjE_bC`&cOPons(AE|_d;qU4pqhzX z*qz8h54-X?CWhn&a3D-Yr<#R$EZ@UuGI3MNHsI_;HUga<*ed)@-XP6qsm9?Ta< z($atHR1Pps%r){5Y8Nn73*#h|8>gt{;FryXAgC8#XasUy#T2d3O1E>VicgILmaW{h zmDlz?fKRM<>8tEDi{PZFNJ8-?tgPIupBll(hXI>;L>$Vv@SxI8MEBumjTDsBz-AWl z^e`a}1F=3=YwzPqR%C}Y?A3A;K3ZDtoYy?6WULs+@aD7;JRp!@keeO(9=CG%!~kw) zFjMo<%@CeUVIz{)FZBY{l>sbj%cYHw?LN#FaCr=u^FYW>IjnVnvK}A+03ZNKL_t*K zFs^r?b00<~U@er#Hu3OuE;j7>D#BdHsI64Gt3ZW9c_4(9?M!~A16>PFDk%h?+8*)A z>zC+6A){CXM!n>MWcA`maD{g!mg7nJy}$tO*^*!HT;*TR-=tn0{-^&-J`x!IUJ&sk zK|~Z7LX$8Cx~>*DDeloYutqcW+@bs)4I#Y>`3?B^O=+789aH^Qoqokeof|d9wgf@Kq2&Sj9?U_yCVGIYcn2)%#3(0b* zU55)G*%msnQ~S8p*LO-=Ue(~h3l>l;psBeHeD**7CDz_k2k_2x#+y?(t^>Bao}Et0 zx6do?o{OnO9!s0Qk-&cCiLC7U>j(xzAq(xz#Q39ClFMji09s0mzc-U^;k1;Z&|;(o zi&VDSz|Bzh=+jnqr?+xV^j*pg=#jSfskNA`G@@u)_A8+bca7Yh{ZMY+y;?{}Yq2`M z;#pcp8X6L3S?cF@l8|8_9l(_g7L{Zi1R9^+_zM!$_l@QMUCo8q6YI?XS|tGFMkI%@ zP@>I=lbd#2K~cinN3z#*q0H@145h1jZQ?~-l*u7%8!&qT^DN*}AdfTf@Kgt$$|LU8 zEwQdKofm$(X@$&W)yJV9!CCa!Nh#>YK(0Zm3H0NTa#_=hBdXN0w~*KEBO@v7x5hcg zvx3PI8uz_PrF!F6n7;eZPkfG#xSGG)I{pn?VrJ>_GX5$)Lp<1h@R^^bRi z?;k8LJP1q&ek>B{Z`;ZUYy#;lx+Az7=*~ZuUuI2Z#G!OB`Ig@9uj&>-329dK1Wwg} zCX)AtwHihWZIm#0{p-A^3LSm@R8Zn^v(6{u+(*yQ5}3{E=)kjdP@#tu?{P2`*>x!qF0Wym@qVyi-wYv znXg!nWFD`SuKdb0U=V5KSQ65U;QrFGmcVW%#p-LSnJ+waOh5y~fyW{yCf6G&0?%E6 zAP8ya5uS>#J&>Y#dnCLF>msK2Ja|Xw#pGjH)|}`ncCzA$H)2CK)3)Dx5o86CT3I)` znyuB4#0ZVJ0j>}FymGoEPHNUd+3U9I;yj9l4L4P;Y1zV^`xCy`A6Ne-FSwSUw-Y|& z9rs<$T^wI@H4nUHFUDz^PNP7M5@zeE)!pAdi(n$!;Xw1<2^t-IPu+3MDU~Zlv9J zD!G<8BN+pT+@Y@f?7oc=-c}?2gJd7~Lt~wni1&sPqshSa7?TK(`UQ3IgDd@MJ3FU59 zinwGWH+*E#hNJBBZnhR(Vw0_!J@(`XKM(i&wtrLXY0Ow`Hn{&%Bh5P3fcMI4}MZ2)H zA}qR+dA2iodG8itKvG*-9Uir?9ffSA;+A~Uz>}#Ii-ncLxYxq9GuYaOQJP}{cu-jm z4yD^UT!?km#70zya(K66LmaeNpD^mchT2fI-mx_{*j?{iESmTzbqG9udcdW zE$4E8qC{Hz`3bx;Rf3yt1Z<%>0uG{e$@R-O)q8Oye1B)bpI;>X-0Z-!E48GD!9eh! z@usW=4<2b~s0M}lLrD+05a`Q3jJtwnerUnQ}3IJOU6#Y$O@G z??oOQnMCIJagy_qLBX8@US5Q>jb$`~JV{u$;HMQm1AEJWLj3~=UC7diB$V6r-b`-Y zaRyoFDO-nA3#_#?q#FhN$${l^53Ubo|37b~6R1P!IzHYFd3n}SBRE1&U3m7?|F5=| zd20v>hyz0s$^pNn+U!Gh0vg4Sm7^Tjuxvct*f4GEV`9#osg+x?mohI!{A9I@*yu#e z>X!9bipgtpH7V)BBoxrjn}8aj*0v7TBC#@`C=WkUbCMgwm=~{h=_dgXP7A*FX2pXU ztfkVb-=D+5NlRA4jWi@OmN!c{YHLahosQrnXQk&_8t~LOV|Kixis7wVzHc`c5mBn{ zwY7?+c7Vi(WX5tWmrLlu0zO=~_%NqvXN+`n@YY1V7gCv_ODF&Rz5F=%znI?qkN9J~ zQGa{yH~7}-@3PDIu)~KtSNZT0BW^y3xRzLQa-z)~^W2ai>k1}SF62gD5oY30=KYg> zIsDz86o=VD_VSNTRk=4)NiIs|^>QJ(QVw~vp`o|$3gLT3o&1L<13H>AUGrTiWx@|aCEw#11yYa6ecY^SX$yhwi>M$G0n7wD_uBPR8$RI z?+Cf+Sn-2f{eXuH&m&D68fn1Bw2`lSHSzdN#*KxAj)OzssyY$HYU6!7iCIr$_7*j- z9acOn;MN-4FXZ;lkvCXqAaItM6F`$dK)LM*cA|hf@?;_G5Rv5}Wi8JskKsx`<6%(J z6c>b|OOeos=dqRi2`@$BXbEqe%)~vZfy4F!$i3Zz#KXNxeIBdt`2@h*{}aD|{j+@i zoqxvs-T(jOD}*x*xszT0h-WP>m9O=G)F70xX z%E(s~aCBd`Ggh5}+L=m>z1V|?nP5B7jvUzJvXG1Fxz7EG;6S(gBJ^q7i%meeqpk8Z5l?w#{3WaXYY4MBoGd+_fLc>-SHNkKz)mk@ zvl}vuLI$bP_S-P(L_Do%YA3w#1^AN%%w0n#hPRjS`c$l|%T~xSSG!{9@rQ>MdqvHi zg{M%K-bO53flGQwcRHcW#*Ki4nSqT?$hB@LynZkH^xbaAlY^92jYu$k2#|z5EoVO08LwaV*&`p&+>EL6% zfZMrf{!0f-L}^w>FbiM-><$7*;qJ1eC@l*oY{YvDI9xUymGWARRc-jhK%O@ac6wbA zaFv3aL=L`h+~))1lr2>$Zm04qS1N5}b*u7M@bMQ9Kfs56g%@u>!3)WlD?bYT-4-7w z_^bm_go_Q%w;CuC%FinBG78knp3Aj$Z(1n^-|R?w(qm8l6?-q#KoK>L>8wNlX%+Tx zp*`3{%x!vW^8Kum(!xkcKi#g}_DvVyW8Zu7k`4oR=5wHV$C{KA1ujShjnf+nWiIhx?}CcgrgV32L~bJaZUux>KQ>G^ZPrc@bX(PH)RwE%6&C8v|Kpaig#hidJ^*1 zypfH9CKH9g@v`EulFu8)vM(;JT7Q`ULIFQ#DsFm4Sz5b!Kv^p<1OEwNuk;4 z$#XBQ73(zx`%*9Dqad;LqlDNhpB>>WjG_+PamJS>1=RBI?oOp+cykGN<`Ltl75l8e z!jFwl6UPIh%Rj^OuHn2N%2U>!iD28P#8)HaqELlMiF6o60h43# z9&B4N3bnOZk4Ixc_8Y54qbHDzgW9kjk(BtpIi%>&Mdu!8g`1PjpMqY+etZJRubP5$e|r1kklb-W7xXX z@<)%N5R2BttamCBCu8ec7E;%i zDiF{wR)*!#($Z>Y_RXUO-b|oLpqxu5a6|2?Osv322#dPnjfH?86Q|jJEnG`NQs;=f zhSoZA4W-B;xY{?2JMQrfeS00IOXdHE0bhUANE*t@m?Mw)SZa82A zqy^~tzL04;p=1iKRC0q@cIj6VcxfsCWn(>&8iVvhSPS6Ph;(?b^(0CW4mAmO+!yv* zqmD1#MmYY?!30VEeZFVt7)wgPQEN#$5p4h;7$;aCaJ+07B+`-WW+`bL@lIQ^@Rm+T z=yGLKhUb_+s%ZpdPjZ!GDW`2$DHF*J;$`IvH}fKNti}^)-SQPO= zWB7^x$ z_AcgvgwNHK<7!V>XS>6QPhU^i%0=^keKTRuGn`a#XKJvEfWCnn-GHqmVi<*-dB+{q zV~-PfIIn2E{C?+fLMJt(v8aApC-bsZmfmI}UjIY26dy*=i$iJ;Nff@vU#KA{Ma78bT+AsZEq0)VlGa(dWG0|v1nA|MaNwP^wvLNmW=ruzU61WIwd(jrJbJAOiy{#)O>z6;iWjC=#TJe23dz? zV0bgl`PLU^6w5PkH9m;MUoh<8O;?$G`ZLYO+FB?0cufRA&Z)Sll%jA|IQRqxhDyL~ zYi;x0g<*?YchMbOgdYUz0pK*g-8d-#uDwVvM*S=@)eofUMUiq#={i!)O0=qZ@b2+r zaACxat*dPPr8|IQD|25G%QxQ6;K8XB01Paxn6L87ErPNT*D{#{0L_G-_*)L?D zzLmkOnNT}9D5&2Z-idL77ssJD3OT%qfrHYruf%w->cmBB3DqFvomPDDJCUq%PFfh( z@;rMvJlhvOK-mb`xYL1N5O5HC1|j_MRBrzr2g4-bCZ7GuW4tE}AqWE!9Azu3I_Kb- z4QUn6j^OpVr}i>~Z^p3G3B=JhG@RC!CV;Z`l)!7#l7)5bE#X@W86AH2;fzClGk2nu zJlV4EMVh?Z5e>xKGbxfUO_$s)mZX|$J94mJ7LO_182I9`;cDs_XAq^)g-YeG;Nxqb znwqvMxl@(=qpx>4 zcT4_}_k1jfF?&6^5J#GIZ9cQhMAT@ls3!m%@51`V-q1i+V zLZ`*pme2GCeDoju8u$P4=l;L{z@lC(bkbfdu~qvsO{G!ywKxme=s@Nencz*EK2~2FuAc^RN0Sjm8 z;uu8%QRwLyDM)3lWFS4Dbt_83ej{L8fEqM<5xy*)1bZIUveG(erASn&vp0eKKpv^5 z-?Rbm11_ar{P5LDsIUBkgHlIjRbVkn*44&0-BEpyZECNH=9g@vw7?kbz zqyl+qD%-85mK!;Y7*PS^zs%v6C4-SY{D&`v{MeHtUfhsFaOYfF`ekJq z_j8_GlQ+(0D&0XETHcw~a$_cPyJjA)^u#9Y&P0B_d<4td@$5L}le;mFfZB-{{-pI> zP7Tj=L!Rv>45O60jpv}0!v=6=m{L3GHnLFO{MUv#yFIws6&#{=Qk-_wl5DPzDMrSC z4b6PFUKn#Lq&SO&2D_1Yc5Jz_%^OFqG)#&GvcfT-7xArCFr!i?{~JmT6gp=qUyc(`Ztnd#y@*j?(lwC=U2R7c zNTS>=r3F}RL$B4i8CmEzn}x6$6zax*VUWlS#u|x-QgAG(xu*-mHcaQm_ap)6m_sJ# zC!OUC@VkD8-+?D7~s_v#Kt zC+rnD7hB7G5%_ZNZuWZ*;JSC?RETpH=PBkvkF9u>-0$G280X!TkE^7I*Gh2srk0!E z-1g6`8T@5)=nbI1B>&ctO#VG5Nm?Ou0smX@_{urf%`qm&xn|wx8a1L;;}saS#6ftv z4?7L{sLWZimY@6ZzvA?tsRcN*Af-!X4YS(NjWlROFNFJ-B361WcGEd)Z4tTbbs}aK z&TbYww>c2@MZ){--NpzMSnalmJ1rh2C98e5@``?B zcx)LKlY|%cGoIR&naZ6Vu%5Oo{ncIup`*=L=E%gGW)+edKms$9%kd4VjU+@-B+G0XY zVJd3hr&WQkHJ)ww0iW-{yZiDpXur`gD5d&nbs&uCnVLo5;&-nHFihwqAzR}q&umO@ z*+w60LnjVdKSmS$?it+z0Squr3YG+fIH zw&o68%^R8A?)S6>%~x63%eS?BL#^KA3RG4SO5Bvdo|R-VjNsizdd#LXzPgbUAYz)w zThNPqwzHfYvzj9j?B}4BM?cVPqy~qy1NRLyuTR1AWLMGi4N(W~T!z1KZyp~@8CyeY;PP(9xDr9nPN2CqHw*$8<%ZDL1b%>- zSM22mRT;J$!OAlYmq9zJPQpg|3?;XIUP=-;6-mXA*Fs`h(hak7@6SI0jGiEimiXjt zGU0#X+1sWY#%SPUpZMSTKcXeV6F(1rhxe(NpRhSwX3qa<=X})}{Co?B@8G!Z5}~N- z6t5Z++8lI;%J^uW&aayd&yk-q~t0K_8=l}$f(2pn0hQQ_`QmXq9 ztx96>+j97eZAgy2dHxY6d+TbfDKVZ!c^YLc-c8Oz7|UUI?oCaymzHdI*+)ql`$#>MYf{h<((<7O(Y>Kwd7E5PBX@{jMY%e?1d0s z-<`4)M;uE6&fTbZbXBI~y%_F0jyGzzv(j6(Uv#zoF5ss*h&p|bX(MQ z#dZPjSc>R{Az$8_vfT1T=E@q%tf1|O1d+y9GO_RY@V35e1iC)#InnbQXc&3$=%NUR z=!VAYoUH$7dxF_FET zTchKpwzNd0*O-~iU|aD$dy3Jw-ajt?RqlIs%->y02)h}tKJpm;*(WHR<*>>5F;`PK z%dgf`K7RRMQv&Y9f6F0%z+q2e>Ip9tBa&*&DbL4GdSGi>^@yNR8#b;+&l-y^-zRVP zm^FNZZWt4KN^aw-Y$}2V?N{43fkv+JE6}Zmo1z7e(7zvo0nXNVw_J}E*c#tid^Bvbtv36YK6sMdb6Eiw6bQa(E=r%*vV|&@A;5l1P(gvf68TaJmC0`ym@s znX1H|R2#LEQaQ68_YXs!+bcEMudwIsofY8b|G<+}8?*t%$lRXf<$P zPYKKMPzc>nGi)a;Ofs&I<$W1v4HL94vw~6zR<;lT03ZNKL_t(HLa^V5Pcb4Ywi)D0 zJgGun+9;!im|Qdk{ek!b zc!99|P%?Yaf;9AOdCU38nw**gbd}>g9~Z7*RSkNMcQwWJYrLc_#K9oEWgOy_IYCwO z-lW5S^`VdQ$?s+$=vxD6RdVObBF~O?8I^BZLme5kIJVH?<*i-TdI|n4ZY&tj*LFEj?c0w!BRK_rwmn_5q9Sv6-#$iV*X0?=TH?7CtF${TOzvK%e z$Embnzn0|FYgAd%S~U5(fwUwO3v02VyWHc&@r1Z+%s+u+y^xdrnBTpU@}tWkg(oZZdo`HD+>7H=l%NBhR(n{%JlK=YpEg3}9KKDRz4 zt)v%!cBkOICkIre!Bd(`Y0b1KL|iq5z_Y|H86Z{$Y9sTCpiu};bhAN7WiDZy0Gm#9 zVg}^=-VMWAIHe=_7*0geyN+`h?Ke)&mE2h0kI&>Kz5)C%zz9*K=dNGoL09tu0bwDY z-dA&N=j;6Y(GzbT{^6sX$v1g_IAqOJ{ISXSV)`0)ckW`OV`69N)e~GfVp6BP=J_nB zklthulV_w=$!{&J@Ug)Xe?5x%DPWkTI8)<=vB-4QjYzJkM8j{MHadVM&SrSgDZ&4@ z7jBjMm8}J_jFlu{bNqTAH{ZqB3aeW9CPS$h<0?EihsgxvduUUkJrC!}X28oc)NDfH zDVD$6ZGgH_z`r>^MN@CJop7Yn;`tqM2wHAOOpWICxvaL1wB@BQ zs+x<_f`tg~U2AjH7cq}txLQwgmXS(p%TEb&TyDY~6!%m3r!>p>fyD!OY zA%uP_WTE8~`2mFmV-1yYsHRej!;pO={D!cBOV2IrxF2%^=Pmh z53DA9A3rYw8#jOSYQkcj(y1m~t|vF4RRXg06sKLyDO+;c)x0o#7nkET>Yzue6Y6@x zR=LNn=d&3Oc}B-MsN@dit>`cq2azBk!$bt$cb znPE+avobOha#9Jd#@d=1Ft)_j8Llxn^{m0y24hlElQFX;S(6}~t8o`f?B+Gnoeg%T z6Gqx+Ugngu33Xl52mYI1`G2_oyJ`VyBR%vWG_q>*VRP;gE5~o2+XXAo&{<`eR5CQ% z&1)9h3B7d6TH|JWWeVEOIla*4a1x*hc;`S<6b9=B{I%l&Jyo(lE4h)ui(|OA18*C~ zJhC#t??x~)Z0%1te{I5cE)2jyAavg6ua8;mXjZ!kZ%n6Lm_ia3q_vk2nY4dx3?08hcOrVBBK8$0yNYpPIn(ud-P*g4S9kf!2%a4Y zcH-1R!n=IYtCNZ=ik0Mrr&tW4;#ONOS>~FPt%P<5xE9UAVJ)lBffh{zzlP;b3;t~A((lz{^G%+NR+zb(>*MF& zWH8+QKQK@s?{tjX>iq6(SU8J#+%$}_G8AzyNq z>8sE46NirS=xhRULN!<->J35rxZO>>Di`4oYeb)5o?@J(a5BQwIv^y64M3b&Zc0pq?`m*6n}?gC$O)aGsCyM${h6e1)n@l(htTMmU>5f5=g5 z>3>%VAZs#~?+K5-wvd&Ml~``8<6X^iJL09y?3ViPPHuSkux77rbC8wnPAXB#v2e7b zX$208<0uhxh|=(A?dg^3rI+r5QZX6BMA|AQI6q zEe%(1Ol87q8#h-g`|;g*#TzNN9C`~YH)UzW1K?0BQ~rDU@M@}=R0iJ{{expMJh?A^ z0-IvEORQxOS{s?ruSAk8-rn^%lmvWnqhu+RzP3}T>e(zVG757 zS`(=jX*FYBmRvlT@wN3a=MO}XjY07L2B-WSD4Yjj&2CL&Tys{6%@1 zRpHaOE9AWWBP6Y({H)38lzaSd)tKwA{VKc1-_H_or!8e;tYWrJ#%~oPo(p>Xg3Vc~ zGd7&%(|N`xUw)eL>M`CEgiNMmKHll^SKB@AZTE<7`+i=L3x8m=i7VzM5VJIe!!QJJBkqOom$YNvt9A zLzMHF18J7h+uz3Zhb#vnKl_Ux=H=h`2>ahQ0p!h%ksDzfCCy4GHQ-mUF*B@m2ue>a(%;a{s4ZwC>VA-0Q}x-yL27AW7y(zI~94;pRXnIwdMw{ z?ax?Jimq0S(~`}Zym)8&37hkb!%2i6f>xTDEx4A+>MK*S%kD)o@aspK?%W6s7%A&x zB@=et5Me3@yP2p8t%h>@tqo*q-cmvg%1gQJoofgijpkr#WDt5ib5y=!tCH{Qd6Hm) ztmN1*LOCCUWtuu}%wcg_bKfu~3E{czlzt$;+s0(hpnDqcAm>CWfAt4MbrCMjCs9511K4-F#VZcta*||~38Y?c~`Sme>!JfCsW5uf|&u2a8@rCDpiSsxAKHnscRyYjI zJfADTzpYa~Q%^VwEZLl*PWeoh^7zGeQnCQ19)TzM+PxJp0t=% z2h`4xTfxPz$jp;bI%j3rW>Tf#HTr(Wh|ROB+0TqP;c8JNeq?RH)q^Qlr-n%lgEkDJ zh%*ZXua6A}rRe#uCW4^bFQs(8DWEyfGQE$L*okG05$C9o!`9Yt-vDAiK)H&qHdg08 z5|1lc&c#$(hck^UZ35hwJ4qY}n{RzCFs?{jE?m#pn8E`C@S=#NR>XVR=Z~%xw{ZBO zCtil@`zba|P_?M`tVD1jHIyDCUd`3a5cn=!B&#teZn&vaoC=wHJ_mkBW(1xhQ6U2q%1@|uOzte&Ssq#Y z`}}7&9_K4(eua;#7RRx?v%5er8#8Z2Ya;EVgOI(3EL9dchr0tF1wQrdw*XCVoR-km zH60BPEJzZ)HWLC49z41%hiI52?92;1XGlxK?lh&SWx#gPgNrGQY{8Qwk!fCPYc@(n zfaA`dVq+#mqLm0vcSC#>Jsi`j;$SXvS{*G$9;JmWGjt*;aX061dZ0PlirJaYxuXN$ z92>?3Op8L?i&UB$Nn_JhH}K=_wBp%)8OYty)pT1S8jEezfAR|A1@Yqx zlx9{MdVbAQQ#jhRO4`>Td2Wn2;xtC0(+a-1 zCs5(z{+q49nMmdW<63_AyfFs3sT25v@Lc&*EVPF2!bM9s&u3EZ@!BgN!2q7C@w|{{ zOwOmVy#Aq&qIWkrRh1m6Nyo>wl5w8#JJT^QL@{N%&EN49y}c2U3O=y%KCVrk z;hX(;^A**i8^$aZA*vp8#Tm{7A^qhwyzYRVc8~2S=0p_p@P|IiAOFe+DZk|w;NCtA zTXNVBsz$;0Hl@>HEQ-NDa$=FA3j>ZXw7Fy0<;?PcyA~oMHvI879JuKd3~r za3y*(9?lbEl6S3kScoDPqkwi4a-<#62^3p}eBDIBsl?HXV3bvajSk$bGR&qK`Fwth zw=jrct(%}dEq?Z{=DF=DJuR62+QGST##$_N=2QKU%8CkcsC{ZD`~T%$%!!^)sHAsq zhXFyTZ`rmxr1HAAD{&oFO+1WLLE}d8D78`*sGD|YKbTMM`P@)G>pHmwGj_l^Tkz-m{a!k3$Q}b*5ujL;9bDZ!8 zcpTL&daWZ=F6UJ&J3+)qX|84|f4INR)7D}aS6M#u0KFrpxZ3J)1-P%wIsR=cfL9J= zik>$8^y!}F;>3^}=}lLfDg1@)F$+l~F1)ijWuV!bO5fj)g+o6G#rkWh3y-dd>(1F- z7z8sOT+*Cb?Q(8Za=HyCIzDL)aiCEy<_j0cVL+D-r3~o@E@K zwHQPpMQM0=WdZF^cz!!0R8uZb<)scicwnV*&(*?B=ropD>ofU%YYVwA6~Z`|Ql5r0 zkXFLnJJr{m+i&8Lz=;^XJb@#{44kHNn$f&wtOQ=XkxSB?8POUzCG_3Fq#KQcDAX(w^77u8Ju5f$R@EpZSvb;bQyarKN?Bc|MZs!2Bnf>g zV>#MS@N~}gNr}#KW|go!HE{n>Favnv1KDZx9M-cY9!9>OubX&Scvt*`dHSzB&gj$! z`Iw1u7yiYY=7*bq$Yl_@@=b+a{^VIcH+Y0cq9v{u6MoI_bJA$S$iM9maOpK>x7>v3Vz)m@LA`v;5k0f?XxsoVSD2Z{-vo|(LN6^trFEWFGMjH zt>q_y1fg9UIad_Ke44E5bv6VGGXm41+u)(XtX+pNUoVv9=_N zXd<(OVFC{xUStp|KKI5BPi)G~+wl!Ydhp|ir1$Q{AxD#tr6gvwD|(PwLrA%|3l7b+ zG-ReEjzWBz{j`H?la$?};N+mozOEQgGj7aehdpW(dzYd{n-4kI7bfz8tHv<%{6ucn z(n{hgt;`K_EB*Z0X$Utez8M?FbJ(dpjx0E?Rd9U*y5%UTnO0I=j%&e=4?`*SN0kf~ zJq-^IyBuz7UfLdW=|BdP7srMufp;x6_Fb)zK|5sFj@cXE77tGI>H#oWzXj`CgYT!kOIA6fL~8|#q;?u zRZOf)!7;d+^>WO)&JuqsNI1yX`Iv)$AD(8(%=rap_~|g_L)zz`o0?zp6kgKdLRE4x zPUu_?zrCE3f2so~dazxToM_9-`REEq2$o612d8!fWKgNWyL3UUK?Ey|5rS^==s z&G2YrGACSUp&H%5v{4vV8s2?$5#Lj!mF3G9H&|*VJinPSZY0H5+wkzpA~&Wb``MJ8 ztl)SYVzu0$q_8xEnU@;> zfnEqbBoS=SD^9c>;{twk87`-e{Sq$aLcpl1n}|EjdS?+>GX~E6O3;E*wqWT;R>G*V?Obz#~B06Q?5Rzc%e@DF_YtW&X6R>n4|DrNmPvR z0%&;(>nS!(#*JV=ZfmaDl80_x|25^J);Hv`_j!{%zKO?jN!I#P(ZRlz)PD{cxKP z9PV%;uVwIcqz(VYk%V4Q(bsTg24{NGC%-rbi=lMzj%CeVt3wXvCG*m;(2nSaK51X{9>o=={^?hb4w_ayvSBbO|0@(!^S-gRGL)YV;H-8U?EBL=My8gR~_9WpNr(^4p@ zWiw#9yr1#&z%#aHS0|WwjjR3p_}us`ZvkLD z{||Wr_&rZ?*40vO_OYRhzvE&x6>`k$zG3^XAMQwO}zhGR!_5CTOy$MNeu+bK- zWiZY&V%?zl99%kphfhV^y%@52kWo~I!`&9fY5GA#;uowJa9;?@_qlj5WwQ|H;gtxs zr$YT*Y3!S`8rCOr>sw@Kmlkrkm6ny)z?afKZI(kPV&On+&ZV9C`Up<7;eoy+jW6xM z+uLwQ2Oe6`1aS|;K7mtY))0Ddew;IRu;Rl?te6|i#;jsypdXi9n}`arkE|Wv5)c1P zRO6)yJbXIh?v;=$2N^|ec*k-J4C9F($>?E2DfWkzV%p%#$R zD3=N>uZ6+6HJ5EbM~TzYz?Uj5t>sEM5esT?Glg35!{@trmL4NWj$!-`JG#Tw+i(cw z(qjakPe+Axl+P5Oyje}w$KTJdw@=VN|4+Go-#=wH81U&}@YdvV^Lh5?`P#i7=G-f{ zq5IB0!MAg7Ecp&n;eKx6TJG`aqGQk!FwABd@G}bqcXTvWZFuhbF4uDDrLWCoO}G@k zNg`=$4NA(>n;@Z%@3S$LHCiteV9k%7T;$y5F5|{F{7hGzf4;F(@L(U-l7wCmvJh!r zy>Y2t9zFx{=tf?x)#o0a^6=crgS2FPH2ZEEp zgIFoha!cQ|QI$VH}VGlSat44XB1Z3OI9J6R2mG8qv6 z@cGV9`vkgs4;>YQj(H1$BENA*Cl^y=$Re3pXI_=!q*DS`7-0;ocy|FiC z=*u8XX(;QO3o|+Vr@C<0Qo?v%vYE-y?aUydu!g<7U{b(-QE<51!nd$JFG+1pfaZ>F zLRwC_dQfnB5V54Yj7`aYUf?$eJa;h3#1g6(h%SFeiLgoDtS7SywjJEpHiR0sGwF>( zCx?7p#D~ahsIB7c$VxmM9P@JS9VVPi+WeaIRK_wY#X4-Ibz3}|gnDM7iAUMQBQLo7PzztdBri$pnuSmk2QfE_8M|4

{wg zYB8&7tgD2%+kk}fTJ#ciBd+Q>Y4f6HJ!w6uqK+jsVbfBq#?tbPO3^q_jkE9%pYLj| zSOh($ox8Z!y7#Sc*Rl)KevCA2y}KD@SdPTAroLM zY^OQ4nHFE0$&DEzxBGIxg>oX#Wes%0h(TCT)&j~I7xHz5moDOxkH2BaYIxsqIK9x~ z#~*Kna(=wo>}`lpGY0EyAg`%p`mZXR{XXQFDohtDy|pwmGYf^myeQ zY30xkT1wIHgy5i3V(Q-V0}{WYGU7@!t7W}*;NVnpTRhBd@kmS7+699E?i_aM#UYD< z;@n=z(Thkw&@bCPnt|`1Hg=137uBW0~azFyO2m3Vr7}v zC6lt`Sij54p$-Gz=b$V}YscJ51+v%@a?#f8KZ!?hTRi6C1NYF80W0m0Rx9G_xFDbB zECle-YQm*S$?2swgE-`&VZ>H$F%Dv1vy_BH8mu!MZinp5Dh8p#IVYNhZHdRj18KwF z5|55l1_iQx=>*VG#{R!!_fLL!zQ5z+$`L#1YwZ4MAG0}I#rC(x9el4I|0dvMR2%k6 z59K*h%h5z$Dy5{Qcxfcx`^aL%wco*K000A4Nkld}Ryv>s>A$NN-%>;bB>B!D?HxQwVt}P#zfAp69%JU@(Y4 zNI!(7R>W)j1?Q(8UElGxZW9lETRaRLS!v?2GeN02ukMVc0;=Gdjj6<}r6>s5H;(1l zksFU$RdM~GWM)MF;L^cd)PI}dqw-)jm!xw&mx1R}EXq!ksoeOb6P>~nZE01OlZd|{ zdH~-KkNyAovF}|1NDW+=`&b9V(9!W>5R{zgNUy&>Gi=u$H_CvH_UMH-MJNR_`uR(n zI4gqZrIFQ~Rq)ybp5Dn=pMiCbd-~E!9BFIXal{}FSxqv0;Hm9`tXc;PvG(bNqDHIs zM4CEu(Ayoe(h8ZUhH+6cuMIEm6x0fiwdBy&l_ZUcl^yqLg9W%Tll7WK<^gFSE6=^T zh+g=}#Qf`9viZ1BM_3#~ZRlti)Kg9*a4ZqB%_bgK=@8=RL=~nfnRNg!?2K{Sa^h+$ z9&%0z=xBXfu+bP$zH_08N2iHLtBHpPPi+-s^*R7?;L{Fdmas9Ef#zNXpS?QeU2A>H z%Ca@9nU|L9Q~6mI8rX1v;1#A7Ec?~csegF* ze~=&jUoZ0yuFTx=Ljkn4V;Bkabg2b*E_K+;N=yxt+9S7$<kvD%F|yPb_jb#|V8IOCHI_%{o;}Ygp0|6~vP*^9{Vu9!dv_n{Ix7eQ7B))hDIO`~! zz;fG4Zs=R_&_36vQ)<)1V*)oa$3o~RjbW{m@V1p6nGRSViwaWM4ECl)#ZKXv6cx_F z(QZg?40+v{N+3RgodA}i5bX@Fj~jR7CUMb>p|i%@5!J+_RK&h>U(Weq3-AN_{C|Z0 V5wI9mRN(*s002ovPDHLkV1n0}2vq<8 literal 0 HcmV?d00001 diff --git a/planet/Missions.ocf/Skylands.ocs/Objects.c b/planet/Missions.ocf/Skylands.ocs/Objects.c index 0c13a5cfb..6576a422d 100644 --- a/planet/Missions.ocf/Skylands.ocs/Objects.c +++ b/planet/Missions.ocf/Skylands.ocs/Objects.c @@ -6,70 +6,70 @@ func InitializeObjects() CreateObject(Rule_BuyAtFlagpole, 50, 50); - CreateObjectAbove(Tree_SmallConiferous, 962, 839); - CreateObjectAbove(Tree_SmallConiferous, 774, 951); + CreateObjectAbove(Tree_Coniferous, 962, 839); + CreateObjectAbove(Tree_Coniferous2, 774, 951); - CreateObjectAbove(Tree_SmallConiferous, 46, 441); - var Tree_SmallConiferous0015 = CreateObjectAbove(Tree_SmallConiferous, 320, 312); - Tree_SmallConiferous0015->SetR(-30); - Tree_SmallConiferous0015->SetPosition(320, 293); - var Tree_SmallConiferous0019 = CreateObjectAbove(Tree_SmallConiferous, 422, 887); - Tree_SmallConiferous0019->SetClrModulation(0xffb0b080); - var Tree_SmallConiferous0023 = CreateObjectAbove(Tree_SmallConiferous, 373, 920); - Tree_SmallConiferous0023->SetClrModulation(0xff808080); - var Tree_SmallConiferous0027 = CreateObjectAbove(Tree_SmallConiferous, 72, 744); - Tree_SmallConiferous0027->SetClrModulation(0xff808080); - CreateObjectAbove(Tree_SmallConiferous, 974, 327); - CreateObjectAbove(Tree_SmallConiferous, 1003, 326); - CreateObjectAbove(Tree_SmallConiferous, 550, 107); - CreateObjectAbove(Tree_SmallConiferous, 632, 128); - var Tree_SmallConiferous0047 = CreateObjectAbove(Tree_SmallConiferous, 129, 409); - Tree_SmallConiferous0047->SetR(-5); - Tree_SmallConiferous0047->SetClrModulation(0xffd49d68); - Tree_SmallConiferous0047->SetPosition(129, 387); - CreateObjectAbove(Tree_SmallConiferous, 78, 440); - var Tree_SmallConiferous0055 = CreateObjectAbove(Tree_SmallConiferous, 182, 408); - Tree_SmallConiferous0055->SetR(-2); - Tree_SmallConiferous0055->SetClrModulation(0xffca999c); - Tree_SmallConiferous0055->SetPosition(182, 386); - var Tree_SmallConiferous0059 = CreateObjectAbove(Tree_SmallConiferous, 200, 408); - Tree_SmallConiferous0059->SetR(8); - Tree_SmallConiferous0059->SetClrModulation(0xfff7e5ee); - Tree_SmallConiferous0059->SetPosition(200, 386); - CreateObjectAbove(Tree_SmallConiferous, 23, 452); - var Tree_SmallConiferous0067 = CreateObjectAbove(Tree_SmallConiferous, 110, 410); - Tree_SmallConiferous0067->SetR(1); - Tree_SmallConiferous0067->SetClrModulation(0xffe9e2b0); - Tree_SmallConiferous0067->SetPosition(110, 388); - var Tree_SmallConiferous0071 = CreateObjectAbove(Tree_SmallConiferous, 167, 408); - Tree_SmallConiferous0071->SetR(-4); - Tree_SmallConiferous0071->SetClrModulation(0xffedfa82); - Tree_SmallConiferous0071->SetPosition(167, 386); - var Tree_SmallConiferous0075 = CreateObjectAbove(Tree_SmallConiferous, 93, 430); - Tree_SmallConiferous0075->SetR(-10); - Tree_SmallConiferous0075->SetClrModulation(0xffedf4c6); - Tree_SmallConiferous0075->SetPosition(93, 408); - var Tree_SmallConiferous0079 = CreateObjectAbove(Tree_SmallConiferous, 36, 446); - Tree_SmallConiferous0079->SetR(-2); - Tree_SmallConiferous0079->SetClrModulation(0xffca90cd); - Tree_SmallConiferous0079->SetPosition(36, 424); - var Tree_SmallConiferous0083 = CreateObjectAbove(Tree_SmallConiferous, 151, 406); - Tree_SmallConiferous0083->SetR(-3); - Tree_SmallConiferous0083->SetClrModulation(0xffd8d7e0); - Tree_SmallConiferous0083->SetPosition(151, 384); - var Tree_SmallConiferous0087 = CreateObjectAbove(Tree_SmallConiferous, 159, 407); - Tree_SmallConiferous0087->SetClrModulation(0xffd1e168); - var Tree_SmallConiferous0091 = CreateObjectAbove(Tree_SmallConiferous, 60, 440); - Tree_SmallConiferous0091->SetR(-10); - Tree_SmallConiferous0091->SetClrModulation(0xffd8c49d); - Tree_SmallConiferous0091->SetPosition(60, 418); - var Tree_SmallConiferous0095 = CreateObjectAbove(Tree_SmallConiferous, 355, 313); - Tree_SmallConiferous0095->SetR(10); - Tree_SmallConiferous0095->SetPosition(355, 291); - CreateObjectAbove(Tree_SmallConiferous, 132, 726); - var Tree_SmallConiferous0103 = CreateObjectAbove(Tree_SmallConiferous, 487, 805); - Tree_SmallConiferous0103->SetR(-30); - Tree_SmallConiferous0103->SetPosition(487, 786); + CreateObjectAbove(Tree_Coniferous, 46, 441); + var Tree_Coniferous0015 = CreateObjectAbove(Tree_Coniferous2, 320, 312); + Tree_Coniferous0015->SetR(-30); + Tree_Coniferous0015->SetPosition(320, 293); + var Tree_Coniferous0019 = CreateObjectAbove(Tree_Coniferous, 422, 887); + Tree_Coniferous0019->SetClrModulation(0xffb0b080); + var Tree_Coniferous0023 = CreateObjectAbove(Tree_Coniferous2, 373, 920); + Tree_Coniferous0023->SetClrModulation(0xff808080); + var Tree_Coniferous0027 = CreateObjectAbove(Tree_Coniferous, 72, 744); + Tree_Coniferous0027->SetClrModulation(0xff808080); + CreateObjectAbove(Tree_Coniferous, 974, 327); + CreateObjectAbove(Tree_Coniferous2, 1003, 326); + CreateObjectAbove(Tree_Coniferous2, 550, 107); + CreateObjectAbove(Tree_Coniferous, 632, 128); + var Tree_Coniferous0047 = CreateObjectAbove(Tree_Coniferous2, 129, 409); + Tree_Coniferous0047->SetR(-5); + Tree_Coniferous0047->SetClrModulation(0xffd49d68); + Tree_Coniferous0047->SetPosition(129, 387); + CreateObjectAbove(Tree_Coniferous, 78, 440); + var Tree_Coniferous0055 = CreateObjectAbove(Tree_Coniferous, 182, 408); + Tree_Coniferous0055->SetR(-2); + Tree_Coniferous0055->SetClrModulation(0xffca999c); + Tree_Coniferous0055->SetPosition(182, 386); + var Tree_Coniferous0059 = CreateObjectAbove(Tree_Coniferous2, 200, 408); + Tree_Coniferous0059->SetR(8); + Tree_Coniferous0059->SetClrModulation(0xfff7e5ee); + Tree_Coniferous0059->SetPosition(200, 386); + CreateObjectAbove(Tree_Coniferous, 23, 452); + var Tree_Coniferous0067 = CreateObjectAbove(Tree_Coniferous, 110, 410); + Tree_Coniferous0067->SetR(1); + Tree_Coniferous0067->SetClrModulation(0xffe9e2b0); + Tree_Coniferous0067->SetPosition(110, 388); + var Tree_Coniferous0071 = CreateObjectAbove(Tree_Coniferous2, 167, 408); + Tree_Coniferous0071->SetR(-4); + Tree_Coniferous0071->SetClrModulation(0xffedfa82); + Tree_Coniferous0071->SetPosition(167, 386); + var Tree_Coniferous0075 = CreateObjectAbove(Tree_Coniferous2, 93, 430); + Tree_Coniferous0075->SetR(-10); + Tree_Coniferous0075->SetClrModulation(0xffedf4c6); + Tree_Coniferous0075->SetPosition(93, 408); + var Tree_Coniferous0079 = CreateObjectAbove(Tree_Coniferous, 36, 446); + Tree_Coniferous0079->SetR(-2); + Tree_Coniferous0079->SetClrModulation(0xffca90cd); + Tree_Coniferous0079->SetPosition(36, 424); + var Tree_Coniferous0083 = CreateObjectAbove(Tree_Coniferous2, 151, 406); + Tree_Coniferous0083->SetR(-3); + Tree_Coniferous0083->SetClrModulation(0xffd8d7e0); + Tree_Coniferous0083->SetPosition(151, 384); + var Tree_Coniferous0087 = CreateObjectAbove(Tree_Coniferous, 159, 407); + Tree_Coniferous0087->SetClrModulation(0xffd1e168); + var Tree_Coniferous0091 = CreateObjectAbove(Tree_Coniferous2, 60, 440); + Tree_Coniferous0091->SetR(-10); + Tree_Coniferous0091->SetClrModulation(0xffd8c49d); + Tree_Coniferous0091->SetPosition(60, 418); + var Tree_Coniferous0095 = CreateObjectAbove(Tree_Coniferous, 355, 313); + Tree_Coniferous0095->SetR(10); + Tree_Coniferous0095->SetPosition(355, 291); + CreateObjectAbove(Tree_Coniferous, 132, 726); + var Tree_Coniferous0103 = CreateObjectAbove(Tree_Coniferous2, 487, 805); + Tree_Coniferous0103->SetR(-30); + Tree_Coniferous0103->SetPosition(487, 786); var Chest0107 = CreateObjectAbove(Chest, 164, 903); Chest0107->SetClrModulation(0xd0ffffff); diff --git a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/DefCore.txt b/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/DefCore.txt deleted file mode 100644 index a12da273c..000000000 --- a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/DefCore.txt +++ /dev/null @@ -1,18 +0,0 @@ -[DefCore] -id=Tree_SmallConiferous -Version=6,0 -Category=C4D_StaticBack -Width=30 -Height=55 -Offset=-15,-27 -Vertices=9 -VertexX=0,0,0,0,0,0,0,0,0 -VertexY=22,15,10,5,0,-5,-10,-15,-22 -VertexCNAT=8,16,16,16,16,16,16,16,4 -VertexFriction=50,50,25,25,25,25,50,50,50 -Components=Wood=8 -Mass=80 -StretchGrowth=1 -Oversize=1 -Float=1 -Rotate=1 \ No newline at end of file diff --git a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Graphics.mesh b/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Graphics.mesh deleted file mode 100644 index 065bed3e276921bd82314a87070f835197f9535d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29214 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 diff --git a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Script.c b/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Script.c deleted file mode 100644 index f3ce88de1..000000000 --- a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Script.c +++ /dev/null @@ -1,33 +0,0 @@ -/*-- Small Coniferous Tree --*/ - -#include Library_Plant -#include Library_Tree - -private func SeedChance() { return 500; } -private func SeedArea() { return 400; } -private func SeedAmount() { return 12; } - -func Construction() -{ - StartGrowth(5); - inherited(...); -} - -private func Initialize() -{ - SetProperty("MeshTransformation", Trans_Mul(Trans_Scale(500,500,500), Trans_Rotate(RandomX(0,359),0,1,0))); -} - -public func ChopDown() -{ - // Remove the bottom vertex - SetVertex(0, VTX_Y, 0, 1); - RemoveVertex(0); - - _inherited(...); -} - -local Name = "$Name$"; -local Touchable = 0; -local BlastIncinerate = 1; -local ContactIncinerate = 3; \ No newline at end of file diff --git a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Soniferous.png b/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/Soniferous.png deleted file mode 100644 index 27bbd6449d6ec3c46cd418db5ae32d80eeaaf35c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65296 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 diff --git a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/StringTblDE.txt b/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/StringTblDE.txt deleted file mode 100644 index cda3851e7..000000000 --- a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/StringTblDE.txt +++ /dev/null @@ -1 +0,0 @@ -Name=Nadelbaum \ No newline at end of file diff --git a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/StringTblUS.txt b/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/StringTblUS.txt deleted file mode 100644 index e2ec949ce..000000000 --- a/planet/Missions.ocf/Skylands.ocs/SmallConiferous.ocd/StringTblUS.txt +++ /dev/null @@ -1 +0,0 @@ -Name=Cone tree \ No newline at end of file diff --git a/planet/Missions.ocf/Skylands.ocs/System.ocg/Coniferous_AltMat.c b/planet/Missions.ocf/Skylands.ocs/System.ocg/Coniferous_AltMat.c new file mode 100644 index 000000000..64531eecb --- /dev/null +++ b/planet/Missions.ocf/Skylands.ocs/System.ocg/Coniferous_AltMat.c @@ -0,0 +1,10 @@ +/* Coniferous alternate material */ +// High up in the skies, coniferous trees look a little different + +#appendto Tree_Coniferous + +func Construction(...) +{ + SetMeshMaterial("Coniferous_AltMat"); + return _inherited(...); +} diff --git a/planet/Missions.ocf/Skylands.ocs/System.ocg/SmallTrees.c b/planet/Missions.ocf/Skylands.ocs/System.ocg/SmallTrees.c new file mode 100644 index 000000000..8e224ec93 --- /dev/null +++ b/planet/Missions.ocf/Skylands.ocs/System.ocg/SmallTrees.c @@ -0,0 +1,33 @@ +/* Small Trees */ +// Trees stay small (50% growth) but still yield a lot of wood. + +#appendto Library_Tree + +// Initially placed trees are smaller +func Initialize(...) +{ + SetCon(GetCon() / 2); + return _inherited(...); +} + +// Stop growth at 50% +func FxIntGrowthTimer(object obj, effect, ...) +{ + if (obj->OnFire() || obj->GetCon() >= 50) return FX_Execute_Kill; + return inherited(obj, effect, ...); +} + +// Yield 1-2 extra wood +func Split2Components(...) +{ + CreateObject(Wood); + if (GetCon() > 25) CreateObject(Wood); + return inherited(...); +} + +func GetComponent(comp_id) +{ + var result = inherited(comp_id, ...); + if (comp_id == Wood) result += 1 + (GetCon() > 25); + return result; +} diff --git a/planet/System.ocg/Object.c b/planet/System.ocg/Object.c index 2463cd21d..64d175f07 100644 --- a/planet/System.ocg/Object.c +++ b/planet/System.ocg/Object.c @@ -169,7 +169,7 @@ global func GetMaxBreath() global func StartGrowth(int value /* the value the object grows approx. every second, in tenths of percent */) { var effect; - effect = AddEffect("IntGrowth", this, 1, 35, nil, nil, value); + effect = AddEffect("IntGrowth", this, 1, 35, this, nil, value); effect.Time = Random(35); return effect; } From a9cc9df8a029740734bac033c8677afc327a4307 Mon Sep 17 00:00:00 2001 From: David Dormagen Date: Fri, 28 Aug 2015 13:26:53 +0200 Subject: [PATCH 70/97] chippies: minor fixes - exchanged missing function for FindLocation - creature owner only if NO_OWNER before - added area-parameter to Chippie_Egg::Place) - creature control: don't break when object is removed after creation --- .../Objects.ocd/Animals.ocd/Chippie.ocd/Egg.ocd/Script.c | 9 ++++++--- planet/Objects.ocd/Animals.ocd/Chippie.ocd/Script.c | 3 ++- .../Objects.ocd/Animals.ocd/CreatureControl.ocd/Script.c | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Egg.ocd/Script.c b/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Egg.ocd/Script.c index f71832a9e..e8b95f265 100644 --- a/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Egg.ocd/Script.c +++ b/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Egg.ocd/Script.c @@ -12,15 +12,18 @@ local transform; local age; -public func Place(int amount) +public func Place(int amount, proplist area) { + var location = nil; + if (area) location = Loc_InArea(area->GetBoundingRectangle()); + var owner = GetCreaturePlayer(); while(amount > 0) { var p = nil; - if(Random(2)) p = GetInEarthPosition(nil, Material("Tunnel")); + if(Random(2)) p = FindLocation(Loc_Tunnel(), location); if(p == nil) - p = GetInEarthPosition(); + p = FindLocation(Loc_Solid(), location); if(p == nil) { --amount; diff --git a/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Script.c b/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Script.c index 055b19edf..c0a5b2379 100644 --- a/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Script.c +++ b/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Script.c @@ -15,7 +15,8 @@ public func Construction() { AddEffect("Activity", this, 1, 10, this); SetAction("Walk"); - SetCreatureControlled(); + if (GetOwner() == NO_OWNER) + SetCreatureControlled(); energy_sucked = 0; return true; } diff --git a/planet/Objects.ocd/Animals.ocd/CreatureControl.ocd/Script.c b/planet/Objects.ocd/Animals.ocd/CreatureControl.ocd/Script.c index c42892dc6..4bf33369b 100644 --- a/planet/Objects.ocd/Animals.ocd/CreatureControl.ocd/Script.c +++ b/planet/Objects.ocd/Animals.ocd/CreatureControl.ocd/Script.c @@ -56,6 +56,8 @@ public func InitializeScriptPlayer(plr, team) { for(var obj in CreatureControl_yet_to_set) { + if (!obj) continue; + // Overwritten by the scripter? if (obj->GetOwner() != NO_OWNER) continue; obj->SetOwner(CreatureControl_animal_player); From 333bb1e77129204517358ab457ae52a69bfcb2ec Mon Sep 17 00:00:00 2001 From: WinExploder Date: Tue, 25 Aug 2015 12:27:52 +0200 Subject: [PATCH 71/97] Loom: Added Model with animations --- .../Structures.ocd/Loom.ocd/Graphics.mesh | Bin 308725 -> 193338 bytes .../Structures.ocd/Loom.ocd/Loom.material | 24 ++++++++++++++++++ .../Structures.ocd/Loom.ocd/Loom.skeleton | Bin 0 -> 23254 bytes 3 files changed, 24 insertions(+) create mode 100644 planet/Objects.ocd/Structures.ocd/Loom.ocd/Loom.material create mode 100644 planet/Objects.ocd/Structures.ocd/Loom.ocd/Loom.skeleton diff --git a/planet/Objects.ocd/Structures.ocd/Loom.ocd/Graphics.mesh b/planet/Objects.ocd/Structures.ocd/Loom.ocd/Graphics.mesh index 5ab59435cce6c2dc2618bb7136c460de7d5885db..afebdc6ca54b11176ce4b4011321011720dd0f32 100644 GIT binary patch literal 193338 zcmb51bzBuq)W<=^M#aKLj7L#Xv4gv_BPtdub}KeEc2PE%*ouYSiXGgYUAq+<8#^A% z2Rq(5dzpLBUg7h;FMr_U_ZiQe^E+o|cJJMtamdx#ug{47t@{iQ3>XwRzR&RPqrECt z^Xi(_q4EWvbPkRVEgxl1=a7`u!NI}5A^(-jKNtV)-~j&%er$iw;E>(=cSrtzGokkzbxR8tCht6tM|EKaxHTc?Ln11^}5GQnUC(*bhjx75 z173~$W6w`UR-n*6=el>a#;C;#w0|2rk^u)lo$Yv|kL5JP zCD9%@vSZ~=%YC)ltIKPyi{N^I_JZU5Vmnw*?oV8bpA75I z+sCEE#WsHT)CzMytF?Tr>nS*{TWkmW5BjFmn>W@UbDS^8Q%XI1<9IR0dV;^s z!5sS!c}l6bIIKVBV?Q;bN`?*E?Zzuo#v@dF7zy%hMy1V*44jW`5;W42*2}g~yJOdW zT%B_CSif~zf*n8fqA|U)V6pZ-+?}3?zhQEk5kh*TJLrAnsvq6>YoV6D%RFzv7dY(q zmfb4Q)wLFAMYZ%Nx7djQzx1`dpD_4vzWDPSvmq)N|rm?E~+Z`_8~u@E`kwIrd+0h^yM7vb1yV z_1fXK^Sm*~{&U|6!~p*92=b+0<}cCx!5rs>$3!3ohzrMy`Hn_SXwO?4M8AalZw7y` z{@foc$N3T*;%!~Tmp)Ehr@gi4ptlE(^#qN%KPK=8*9qoN8hg=Ffr~|4jK^z&c(MMF zL&35C;5%ps{$qax2Y+zBFvt1}4tB7f;5%ps{$u^Y7svtliT%eM$BXTJEKos9ZG3%y zP*zKAe0^QwtED!+KEyZC?8g_3$K9pMYpIQ|-L=bTsf{m>q()k5c9+;|TkYIgS_GfqAc66?bjl z_Yc`qgt>y1zMJzb=IQR&je+?_eJ5^R=jY+&J1`#-_afTAeBS21>+2WzkNv?M`;W&L%%98r+_dIB z|6ad@|J-*1F@XOte_m;xQTGRPm~Ta1cue{_0&(GZF^BnoLVwJ0 zz93hi5yT7Y#fE>2>DLdKV?9A*$T9c>^SP)K%whg7_anWCi}83(5HHpraws_VAAA8# z!GG)zaL57piSvay)*su!dU9?8?ZAJmKllPU06($+nB#b{o#GiXYrQv4)mHc%(Z`p` zxj31B-k05V&Psu=N`+?_vQ(@5%yK=+@0khQ|AHOho_74SOJOoF*FE-N_AdI(C6tV$ z!KOiUsJVLg2-5dbHm$++eFpxq%rr8*cR}rHlPv~bx}+;PGro}8Fl@7dJ682!QD?Jh z5Ay7X`##n$Ag8H{BRg8OZU%Pk>s`k7?K1G49+}zCA%)a3n>HKxjF`r3b@zhWfXFQd zj@!=;i;Vj)c|_dzq)>+a!5sUKIkt~E_J1vn^!C>@)A!3E1nYx2))R9aFXro>HP+r7 z$xL4?c+K-`xkraP0N|bCiqpDx;r`vo(>HadlkQyqiPn z1#RQ_rEWx0L*`r5onYO9+;f^1Uv9|iI9a&R0dufZhkTXuynA4<197?aelIsT@<5LZ zwBZ^t`*;P1xP+ge8)(M0)AbZ_VQ%j~_|9V>z*{^oNZW-z()|$}=NQi1y`G>Y#9*&KT|#g78bD?w9F=+nlvRSyHC4w~uS^aOTWjEpau!yVfwJ;Cc@yp3z6z;1 zxEPsq^02b~Tpo3u`&^bG{YnF`7rTkH+MEzF*4C;TzaJbA8rk z)iwj)T;16;FZUQW@a}f%>sTUg%ewZ&^+Oisu_U8u;-@5bd`FCdZ!XeWPH?YBLMum6 zr(+?kYGQlSzzeLQ<9&M8FQiyeAKz7^7>)bAxoFTj3oC&%q{+{JnnDebNUh zB}XiwciIkO!^Z8C>T5-mGvoc_K~5&(P<*X{r=?q3I#*ws(R@0tjU1LS9P;8ld{Zsf zv#}T1U&Gnl+I_B^Zds&(*IvGZy{Rxmp8jPf=q9z?RF<{aRf=33y@5R&?<+59Gs(c6 zPvloO|0*H7|2q|QBR@>vl znEI?o4mN-Ia(d@af40HvobsZ8gS4}Jef4hM8*J#17&_3`i`B1Qn$^y-L1OWK>Yxlg z+0icB4BTCwuGSqfS9+Uyy}{1=7V)g&?1F01oEzy_53{l=wgtQW;f1t*Llsl!u^wu} zHJj*QM|bZd`MR-hD}PHjhtxG)&ymcc?!_8-SoB@CX45sctLAQlov(#w$rmQJCRNN) z^oJ>!__}W~I}iV2{`4|TKL07R++lPC_(P&Qc9sT2>{p7&)8&j`8p=0o%s23|4h!Td zq4&v)XUh$C4y?ILLLa)SSD$X65#vrti#(gNi&4)cpJI*VCyy?%hQ(uO&xC5EabO8n zD`t(9$V8^#u zBQ^bnX7c(olRzJK*YBm2(>WXK|2NH71VDRgU4^Q`+hThSCq~2YQ*rm z)+2VK+3#p6Hsw}5hQ}}FI4*1l&oeJ$Mw?s5dXS0P2*LAML_j8U*TJ4-bYX8|$S>kp ze{2V@7o3~QesCe{HGhKF7jEBFta=WzEw&9Yj0?o^IKp=D{G7K$k0bfNWMiA#w_|v| z&F7fIoTryF+g!V?p>8q9b&l=e^?ILUhdOQv*~yOMZ3$lAUpP3L3+Kr}cAsxU@VtaM zp2x5qygvRL6KpE$?7~*JZN>0r@fZ(uukU8vx)*<7)xD_bzv z&oI6)$Lk=k6H|>vMOoySMhss+@VYXUJDZ=ajrU`CUd0^G!`KeK?i%}HmAP7ZR}!<% zkKpx)*T1>yhN5I{L?eR7Ddu>6!FKR<8rQ+xVoW(Uy0ygc`h_`O$9Z0k^f_ITjLcG( z;Q0!3e7(o@H+OGPk&SO#m*I5{bG%;j@ouhHrWBbG=tJ;4hB?0e;q_zcFx!&^IeHte zmkJ#VGPQc=K_=go2%hIL$Lj*NgReIddW4(Z{9M?olC2n?hcU<3lU!$$@0d~~%)^J^ zbrW-ZJ;v+G)VNU{!Pnt@9;g#AyAm7XUx(rA6U;rkO(a_QQTamkr*!U? z<4Q;(CHZD%Vjp@MxPeMPp< zJS+1rcn!Rne*wA6oCk8#7We5R&q1t7*R4|YSzo34Wj8r^Vn&)_`@aVM^;-oweqtUv zZuSfMYh5U7O`S{^-91cM9+Z-k+kKHM54mmN{60RckaH1Qbmw{gIe>%1jL9-MtlaCen~M4+!XNIZiu|;4$S=gTz!H}t;)VPo9jx5>K`9mKOoaYCFDlB5 zm4iPhk3{4b{6TrQa;^hIbwWh_K)k4~tQ_){%~pq!s87fj)a`jo-C8-+!;u9CWS@%9 z^t{KE_a~l<@-W~ZGd_`B-~MOdY1LI)b=WI-6Y11%i##ggB^?`ZT$<(5fH{6kM`oD| z$w#xq$-WPs(!P_c5zi$B*_=_D^rd47`OLv*a*cJL47}ZuUF3MVtMcNBUkr8@c{Y)Y zB;Att_IOCI-5p3eImap;zg3sg-RvYUy82b#_xv_Z*CdoIr{3l-?nBLEm-UeyS#J7Y z-WLYm)UAzNHrSDdJxVgzfiW_ncNzN6_tUx#qt1Gh9?vQ;9v6FEtQ7s|a~Awj__Z); z^sqSNezMj5y=m(mHx1leb6WM@w+QuXeZyb}{LgwXJKaC%s@`w%f8kP{vx}7(T%W@i z3sLuX7jzx6WlKlC(_hLbu8-T=Ds<1ZI|dH^-*G5K`!{}Mu)}p$ksT)NEc0xlqJEj^ zm)lXnP9V2)FJYjS^M2K$yx+Z+eyw&o^ZX(mB%y;J&sPlBp_N4kE6;edlZx`fL|(uj zlt(7=2>z6_<;BV;F6*PBJX-BQyiiw-EOo_1T|vIO*y>ObbqM)7ZL2FQhj=g8>d@`Bg!?{I zd{Hv1UnAXru`Yn0NFVFGggKtaupL-0#QK=oJmB%6;ZuILIMz@1 zU(5rT<9P$y!RrXG2Q#V@>-fSP>I7eJi2F5s{Q&KY`8%_X4cZ#!Rm`~^!#phPz_<|C zT~PnUOXnc5tc^Y%@%kn1$0P6fy73$}x=(@y6KGqq`7j!hmYF}!|Zj@Ny-e-Zh` z;~jIjUJ~m**WV=S3a@LJ z7#EOtG>%MS9N~4Dj|(fu>p0{~*umFJd>$}~`2=5|U>@-1kvwmq18psP>gx#9Jug|( z``imPHU3{v8LeogS#m48_QTVaqW?E;`7ZNsJ2vjd?YB(&BkQiDeD?|VQ{&+OKZCbZ z|5W_hxa}-$X~!Y1)Y^kTskMiGZQS-fCXN?>UupEy*j~4z$7SPx_iOoo#(ph1f!|hc z(?`FTvf4?7i@b0@;W}IYv9{Osv3h&MmL@spx00Ty;aBn zznTm*f0xty}G=2wQv!fB z?7uAAm*#YwZ{Xl(nYj5h`%cUAV$Yaq}@+e%f97FyCNy??Ydy z+}Y)6w#Ry==UR~8dUTo6b)6SU%f7wNP@9kg;IoDtq>G@%#tB=iS9 zUpr10Uw#64k!s~zCSB6{kuRMbkzf9sq`*!yxu;wyyqK{iy-@ou%A{vq}4txf6{87mY-?qgXa@GKY$%P|A_en zxXAv{N6x+e`dCEA_=P}Prcg$j*#~iO0n1lVb{^Mxy-AKJ( zJWt~F2=h4Ck#x?bS%&s_y~FlPRCSS4vyazP+&xZ=R zl9tY3Ct!ag+NW+E9+=9`RBvEk=N_3avG-qkYX5$nPQPrM zNZQmcs@&438Ti6pL$yieGaC5eYTcCOmq(~_hKBUz(J{oqvAikAq!4A${7q8(e?!zF z3tG{qt4EP)F%hQ1F0+(74&F*s_p&Nk(TcA8(t^~Sy;AzK=$8_EzpFHJW@UBo?al@c zdTOO-YJoel=(_z%hG&Tmnx6erjJW5Wp~bmnq3YhQEXU{H%HhPCI`4dKmR39DH^Ch2 z{CGN7Q%5<_QCn&+%xzU+~pM?9V zUk{8~HCbCxaNIApkNw9S+M~RHpL$-fKRhp1j@x59ugz2CYOUvMv0t<5dJ2EQ&zI{~Yrfr` z|Khk#M0;!p_Y1sd(OKHm?vappt3O~r|Bz+cmH9J89`$;&?^o0h&X>LaV!U7uc5s~t zKTmL8{#YCB<%#r$xIkx7Z`ckVkC;Pyp+DwceEg=SC)OdQy$Nb`_bz97UGB-+tvM0G zADx5$OFK;0Mt}I5W8HXMdV8=hbV$)zuV>(5p26H+2QglNPjA;qi#a(>+gW*3CX&L!C!y%g@d*sE4njIUQ%z|4Fqsf)VvC{4?%8bUf6lh;w@sd_e znoQT9ZowA2=P;M`&Bwrg;Fc9^#^Qdu{bh|WNR{#xW@*{U@YIKN&pMerYCe&+4csRA z`)!f5!~n2EkR4*R!!OQ!&kkkDUwY|vLWA8%q^S{mUbhyTNDMflJCA=;zr>b8IqhDII+7 z6?XW^KkCpQmg~Tv!nH}S821FvrakJ0acf zGl+qn$R8&Bi9FX`{k}Y>{Oj9ndL&N|Hq_;iDUp6s8Z;`emhRvumw7&&`sXXp+V$Ba zwQ?@cIG4+D{*Q$d!MPn7*&)JC);@>X^`)cb`8OxifcuA(_g-J6#Ys)|&qvopPLihv zPSX7>LbH4ZN__>)$h->frSMR73^ z7x=&yN6HEfj0(%8$jS&7!U;aWXxXZR*Ian251hsdIhS?z#g1a!D$Yp;m*paZhc zgniKAqRk&B`~m-O7Q8`DU0u%Y+wM1czYZM-FO*$eE$cGxm+*cW=uo=SY`NH!2;nE; zeloB>ut!xnV$%YM7wk(sUcEk-6b+L1ESPP%KjqJ<@_2#E(KZe`=p1xIc0f1X4#Zp1 z)-S}X_X~B1{MYYo!1uJ`@?UqIjg8*RZcpAt9j8uGUcU%pGhA9J{QLd=4Q^g%k^jW% zI{#O2B5U%&OXsIO=Cflhj#>EevF!JoS!qi3`5PXH)|w`?<45>#mas zTfCBp7wgH}n|C?gS5BVn!$6I%8nmFc=Z@Gj}=abxuPMC6OdC5gCjJwU(0j?DWV z$L;jA*pY;tbtCG_C@x9Fh4b}1YN%54S3x#8!iUX&6{&jceMpLKjizlQ%CU>4f0c@V z@-bZh;J=9X)b~;9y!)F-gSTgBuLfRhN8nARY(Rbz>E@*RO*tvmIDUyvzt5B^FY@vE zq!tM&{F&t|oJ_{|OrXt^wkrVz_bO^^ce1v7FLgyrFM0IuYqZfxH+H0PGi63EN}x_A z?i*_wd-;l94=tXRV&Rv4bl!2pC6d?ouFe;`UsA5N9Y8kE9<1J2^G42lL!~1pm>3Bv zLW(S#D;1p=rr!E?LiP+gLl?UGvB)U1^mhMysWb^tAIwRRAAGw+r|ze0L%z#W&fxUq zQo)vLj)6a9zZPd`-{dNcoOLHnP1_{(N_BZ(m5g*=z!B=<56}w9E2JkIMvw=8e7y(u*-q|m%t!AeDzrLXC?%F2NyfNrH2rSiCZEfhozCQ+ zSr_`2nQSf7n)LlvN7{Y<1Oq!cEOr!Ohxe?$MCjm70%W8c5xSk=`Yb3iK|UXLQ`e`y*D~{#e61ia^4(Ue z5wFRBmM?ZoE^mpk;a>}Rz!qMq`u?F0fkBmbH3AM!Gq+izyEuORy@8@K=1 zVqX#VAuq^(Cj3vU4xw(5K1}EXb-0)7GsL0~6Z)i8xB5ErD=(chXP>Umk5{4Ouy!R5 z_u~T^y?`FmK#xn};?Wx=o)qZjKm2_;&*e*x%CP zvAp)_A>F=fKn~K$qm;zw6FL6|C)(`VZkSKVtS`P~zZMY(^9zZ(iEF!*M-chjyXl-!=11W%AA<4?nxm8iP*I$_ewN=T0NZ z&JPJDuwT^am+YPIf^MJ8E=hWu_Dd56II3AHWTm@Lndmz6xvgp$w}tYLT9=G1I=uBO838g_anuKR^K;+EmO>sn07qJzql>z2%JZ@#1gYe)7ALbouQkx_wfxq|(i=BIAA%*{K*^ z8h#7>BzvsLG%|8}zP87go9lI!FPUr}T35 zFa~)ax~vj)rVk-5Qim2c?aA4Wf&R#jBJ6-Zs9z@fh5RBrOxOYaQNN1lx3{~SjC3GE z2duS9xTYuX0uGHvM{kB553c(v;`wcT=w7+2uoX6XjOYeR_UnAldKlrvwHakhmRo zajz@={`w-=QKD zu}T5^D;8#=`Rem$gSh>NT&OX>9e zLJwwnC|w%dmt?wjh&WdHBzG*3u3j0h&8DL(pGn7W_0s3t2(OIPbDe{MgPp9S(o&H?6POS0 zZYW6Gto&x+Fu#rMSBCDW@}I%Z@2iK%NN<0-Zf7C|9fB9sBTb!3>+9@++imE9dY0?G z>316tGPH!wUv_LtD`tDH&+~%A{1&*f5p{HXVXy=G^!=|PbvpV?k85zv+N4vj3cCM3 zQ8j7qb8qMrm!?YB>gCChfi-pi3wl(ina;d5aL{MLRhf>j{MulrS)uN-u)}qbgdN_m z+>iI0!P2iJ`i1!f*|Bn%e?-674&)K(V;1_ryo%zra_|S`MG|?*Gcia;d6YyRVg5vU zv2ySS<(BUra zcd|FTzG@$FSa0Q$;NTCkLxi0yzXz(QUncr(n5mPB{A9vU@CU`kL|o7w>A-{zFb{aW zyDgU;^;@t1pHG6>_p<3F@PF&Chw>zsU%LPI%)?l#@V%yc-2aU>EOUr*;SGU+e(#^a_=^o%E;d%%hT8-2SEX0D`nS{p$wCB$*OXa^U zRd5|hlQE(IOTTO&q9vmcb`8BuK!tn$CWm7E088h?hMZxoJ)e^aR>eg zJGc&czx;l|(l5+oV*GMH8Tjd)yi@^yM4f{_A}&1dL3^PCXIOUwTa(+(&zGG?M#$4sGc9~b0Qi*!mT$DXZp zRonh{qz#8pGw@#T3#;*A1?gFz1qKdwqAC3top|19B@h8Z@yaTDp$Lm zSKZaGT=A=8sVvgT7@U-qvfv0vq3wDG*?+Q;~onMt!9(vs~ zVf&arY0*udmeGTLto@yaCacQ&Uo8mR|3n$vy{??Mz(2Hj=^r$#!6{|&D_`AUi| zYcKim+lusM6Nh^J!Vf5MvWK29)-d^3;|jF!pC1(SDjB-SbCQbFvd{mcOE+9p zhE}RgiXG3%nm9}H&P>H<-%Ov=7VjnDCRv`SGnl? zlJr@(pLD3lK}9NAl=Ui8jbQ&L`)f*zs4}eCmNEuAe=dfS9omn$?_p{j_7iig&$Vy; z$=$#SO8ca(3hwuEav*sZG+JrozsaD(Pv85Fvof6 zF{UEf7=BBsLkco%r_bz)sEF>f$@l3e3_Roc7u zPYS$bo?K+;ry2yug*lF^>(KHf-tiPn1j-N2z9n!cwTIW>TpQGTEwkLY{hl(d*T$VBMe&p9Tghrw@14>r?2K7KgezL3@&R!8;YGhvM-jxHlpM$?B`F3R2>rM0vb>ezBCmCG3re1HtKIX7L?T~?o=sUE}Hheb# z``Jc29-;R8ox*;+Yfc^gi^KlC?(v8JvIG0a=9;`+=dc$h>@^AYaeK_MeavCM+2{Xm z)%(R9_OpFZW{cqZ{-5^#^Y%85;>8^HzwK6ZoAA@x9^1$JaN_ou<9IR0{$mdNm!_sa z?01@){;*$bYWllp#P%_V{YX>OAND&X0BPhIgh5Hqp&nf!8!6J{C<2uJ2*9qpht}w^r6!W-O z3-ohIIyt!3>wK-Ue!n`tXl?S()yq1c-#$ydG0Amw9`LZD&hzl|K^EF^umik{ot?@t z7xeQ@QtUA38|)lEG*9O#{puY01&-`kIoLt{TJ69&CUE{pjxTQbd=mmZADm-i$G;4# zsh?x=yva9OY3f|~9M<8((NP3AoL6Gc$KS55pJS53;qxQCJ#gsPp5yabpe^JUe&h38 z;O~OtxG={$VD5Kfpx!T>&tl>5JB$Gr=dECl&#$p?%QFG^JQ~b#-hqpEU~rw__V^r} z6t2hn_qj6`9sbUXh2#3Mw_`k~#^V3qdAD$U9u4*rpR|l=T8FPG| zP72rc!RG{F4*H8a#~jxu=4ZPM*6Y^39)LrA+H-s^54MBr95~EX@Fza^CxtWk6OSYK zJJcZjF8ZoJ^KJh|miv3^^?5hXAQJ6(O4^|2W~=+GmN$HxY~W!o4kR`HrFJ`#njPQ| z?(C9(HY=;!d7f!BD>Qhv0(RyljFq*-Faw8vQ{&)gYIbnHnHGnVouTdHI)w+Au%Gr^ z*vB0Ei8=0d*VGWQGwfKL*MRS8m)qK3JSf0Hd+?b3W#>WF{91_tduWfyVEz1;A5kIf z?4RD=&9fBJr0l!t#Hsn{nb;eq@7+V#@c<9g$~B)=?=7)(oE^`b-9h`bU@z@vXD3gE zAL_-0d-Q(6ckZhR{Kx)aj{S$2pgqJ@xZNlIJ?w7k&Ev%!`wzZ@7U2Kn=>@b*A!a=; z%p3X?)y(~w9v8&KV>3fsI9|-BcPp$dtG!FtllQCJ2Y;~snB#o$xb*fAuSb;vTH#8u zG&|2D=2%bOF9EH=pE-GdsfV33I)Uqq`Qh&Aw1iEHh)dT8;>G&&c&!}!4_bn+;6L^U zIQRs9;(TF_^~ZLwo}eZ83jSmLd3!VX1b$-wF~{*@J8$@R^(J12oyTS{TyH#`o1a1+ zJ0T8p=-D0bWY7(BSo?3+ekDWQc0uidS7?%#mgnQEdxaHx{X;GOq3gXps~4ah`1s1` z=4#>mo&@ew`le5kyYcar!HyT`@=1pA6<}v)LRe1f&d1lGd3W^j3$+*%HaHH)H6w

w=1XS{0@I+JEj!#X&M9`<299jw4>t7qgUpuf9D*bDrQCf2lErI z^PTUb#7p&|=C*a(VwR^p@|;SVY;EEjaz&FCEPOdHae951m+9I|v_a&w=q{4MD|P$< zfIcX5r70^5l4wA@;iCkMQ=MCnWxn5brL{U5hYWtBJ1-K_64%NM%oQbeX`4lJc4|An z%JEVQY-k@?=zpg9mQ3)qI6dz!4A-^qO0K!xT>31dpx^c#df>&>>F9?qWU~F@m{{r9 zdZ(r3+(M~PrOV#1P6X3p0jb`z0iDrjX0gBd1`LppB(Og=$foJ0G(1N7ExS7T$GGvN z!Pt49)QOpkV734R!xuJVzUUejv#j{pX%?U(s#twjA&z3rF&!VTTt zUTDGy94hKWHqKEER+tK?$eXD2wpLl8ay-B2JTWNRjy*#yOB3_ILBCIP=l46XD`7)i z>DR|GsSEJ@M6COb%Y@7@(#5oC3O`>X~Q zsZpxAgnQ|XO<+Q{tROv5FqTKw)x*iFk`pqgVt4Og+bKO$_$QyRfDOq=sAmwx|Qe=J?W~`86~;0 z6LNvcXine+yzw(UxvjCe*w^ASkv7BxOf76*?|vex{DPdL(l}(-@{Iy(IH?_n_%qQd zoMRt4=SS7I9i=cFm~A(qgVawCguyBkyv1ZK>+$ty#=fP!LnoDIr*cm}_HZ~_DA1#F zfhxbVnbMOt5Q96!G$1Xt4$31)fJ@qbj%$~SPSpuNO z*Mf_mvwh%}v+}ysMpZ`e0V?M!hpwsp2Aee1x|B%IoicCD=~s?4ZR0n!icXKM>P?0F z&PLu4HEkUOwON(HoQ15jdE;v-?5h`5HUSHz!ffy*qGNoc(cjw$pYt*rAW*0M?qxwl0DQ6=(756d7ciW<$3)=v>(V5cq!er@iAx!oW|J5xZ>Bkj zT3ot1h_&n{aMTXyHePSPe;epeGCFPLk!@jc=w43j+7xttYCzLl|)-J?Iu<`^l oZpLCH=Lg)8U;l{1kph-YuQO@9#K8X@B!0L+_h;Y%SXfy92mc)6Y5)KL literal 0 HcmV?d00001 diff --git a/planet/Sound.ocg/authors.txt b/planet/Sound.ocg/authors.txt index d4a576e92..c58e4ebd3 100644 --- a/planet/Sound.ocg/authors.txt +++ b/planet/Sound.ocg/authors.txt @@ -7,7 +7,7 @@ Author Work(s) Ringwaul - MonsterGrowl*, MonsterDie, Snuff*, WipfAroof, WipfWhine Clonkonaut - Confirm*, FDie Checkmaty - ProjectileHitLiving* -ala - Zap1-4, GlassBreak, Rockfall1-2, Waterdrop1-2 +ala - Zap1-4, GlassBreak, Rockfall1-2, Waterdrop1-2, OrganicHit1-2 dobroide - BirdsLoop (http://www.freesound.org/people/dobroide/sounds/54746/) Benboncan - Blast*/BlastMetal (http://www.freesound.org/people/Benboncan/sounds/73005/) Stickinthemud - Clonk (http://www.freesound.org/people/Stickinthemud/sounds/27526/) From 6ad847110119b5bd3947c2cda9f5b5e473fb745a Mon Sep 17 00:00:00 2001 From: Clonkonaut Date: Fri, 28 Aug 2015 16:30:44 +0200 Subject: [PATCH 74/97] Nicer hit effect for zaphive. --- planet/Objects.ocd/Animals.ocd/Zaphive.ocd/Script.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/planet/Objects.ocd/Animals.ocd/Zaphive.ocd/Script.c b/planet/Objects.ocd/Animals.ocd/Zaphive.ocd/Script.c index 677e215f1..ec6711c84 100644 --- a/planet/Objects.ocd/Animals.ocd/Zaphive.ocd/Script.c +++ b/planet/Objects.ocd/Animals.ocd/Zaphive.ocd/Script.c @@ -69,6 +69,8 @@ private func Hit2() // Could be instantly dead if (zap) zap->SetEnraged(); + Sound("OrganicHit?"); + CreateParticle("WoodChip", 0,0, PV_Random(-2,2), -4, PV_Random(36 * 3, 36 * 10), Particles_Straw(), 5); RemoveObject(); } From bc2259d1971927e35512f85d183079533783e985 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Fri, 28 Aug 2015 20:11:21 -0400 Subject: [PATCH 75/97] MSVC/Apple CMake: Search for alext.h separately and make OpenAL extensions optional if only al.h is found. --- cmake/FindAudio.cmake | 17 ++++++++++++++++- config.h.cmake | 3 +++ src/platform/C4SoundIncludes.h | 15 +++++---------- src/platform/C4SoundInstance.cpp | 2 +- src/platform/C4SoundModifiers.cpp | 26 ++++++++++++++------------ 5 files changed, 39 insertions(+), 24 deletions(-) diff --git a/cmake/FindAudio.cmake b/cmake/FindAudio.cmake index 7dba9fcc0..140a509bd 100644 --- a/cmake/FindAudio.cmake +++ b/cmake/FindAudio.cmake @@ -14,6 +14,7 @@ # This module chooses an audio provider for use in OpenClonk. macro(__FINDAUDIO_FINDOPENAL) + set(HAVE_ALEXT FALSE) find_package(PkgConfig QUIET) if(PKG_CONFIG_FOUND AND NOT(APPLE)) pkg_check_modules(OpenAL "openal>=1.13") @@ -23,6 +24,8 @@ macro(__FINDAUDIO_FINDOPENAL) # of directories that pkg_check_modules returned, and if not, add it to # the include path. if (OpenAL_FOUND) + # OpenAL pkg-config data always includes alext.h + set(HAVE_ALEXT TRUE) find_path(__findaudio_al_h NAMES al.h PATHS ${OpenAL_INCLUDE_DIRS}) if (NOT __findaudio_al_h) find_path(__findaudio_al_h NAMES al.h PATHS ${OpenAL_INCLUDE_DIRS} PATH_SUFFIXES OpenAL AL) @@ -37,7 +40,16 @@ macro(__FINDAUDIO_FINDOPENAL) pkg_check_modules(OggVorbis "vorbisfile>=1.3.2" "vorbis>=1.3.2" "ogg>=1.2.2") else() if(MSVC OR APPLE) - find_path(OpenAL_INCLUDE_DIRS al.h PATH_SUFFIXES include/AL include/OpenAL include OpenAL) + # We need OpenAL preferrably with alext.h. + find_path(OpenALExt_INCLUDE_DIRS alext.h PATH_SUFFIXES include/AL include/OpenAL include OpenAL) + if(OpenALExt_INCLUDE_DIRS) + set(HAVE_ALEXT TRUE) + set(OpenAL_INCLUDE_DIRS ${OpenALExt_INCLUDE_DIRS}) + else() + set(HAVE_ALEXT FALSE) + # Maybe only al.h can be found without alext.h? + find_path(OpenAL_INCLUDE_DIRS al.h PATH_SUFFIXES include/AL include/OpenAL include OpenAL) + endif() find_path(Vorbis_INCLUDE_DIRS vorbis/codec.h vorbis/vorbisfile.h PATH_SUFFIXES include) find_library(Ogg_LIBRARY NAMES libogg_static libogg ogg) find_library(Vorbis_LIBRARY NAMES libvorbis_static libvorbis vorbis) @@ -92,6 +104,9 @@ else() if(OpenAL_FOUND AND Alut_FOUND AND OggVorbis_FOUND) # Prefer OpenAL set(Audio_TK "OpenAL") + if (NOT HAVE_ALEXT) + message(STATUS "Warning: Found OpenAL but no extensions (alext.h). Sound modifiers will be disabled.") + endif() elseif(SDLMixer_FOUND) set(Audio_TK "SDL_Mixer") elseif(FMOD_FOUND) diff --git a/config.h.cmake b/config.h.cmake index b415756fe..ce3cf50c7 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -194,3 +194,6 @@ #define AUDIO_TK_FMOD 2 #define AUDIO_TK_SDL_MIXER 3 #define AUDIO_TK AUDIO_TK_${Audio_TK_UPPER} + +/* Include OpenAL extensions (alext.h) for sound modifiers */ +#cmakedefine HAVE_ALEXT 1 diff --git a/src/platform/C4SoundIncludes.h b/src/platform/C4SoundIncludes.h index 940649615..ca563c1f6 100644 --- a/src/platform/C4SoundIncludes.h +++ b/src/platform/C4SoundIncludes.h @@ -29,16 +29,11 @@ typedef struct Mix_Chunk* C4SoundHandle; # include #elif AUDIO_TK == AUDIO_TK_OPENAL -# ifdef __APPLE__ -# include -# include -# include -# include -# else -# include -# include -# include -# endif +# include +# include +# ifdef HAVE_ALEXT +# include +# endif typedef ALuint C4SoundHandle; # ifdef _WIN32 // This is an ugly hack to make FreeALUT not dllimport everything. diff --git a/src/platform/C4SoundInstance.cpp b/src/platform/C4SoundInstance.cpp index f53a60ef2..fbb6b6e55 100644 --- a/src/platform/C4SoundInstance.cpp +++ b/src/platform/C4SoundInstance.cpp @@ -471,7 +471,7 @@ void C4SoundInstance::SetModifier(C4SoundModifier *new_modifier, bool is_global) } else { -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) alSource3i(iChannel, AL_AUXILIARY_SEND_FILTER, AL_EFFECTSLOT_NULL, 0, AL_FILTER_NULL); #endif } diff --git a/src/platform/C4SoundModifiers.cpp b/src/platform/C4SoundModifiers.cpp index ca66f7464..5ed131561 100644 --- a/src/platform/C4SoundModifiers.cpp +++ b/src/platform/C4SoundModifiers.cpp @@ -25,7 +25,7 @@ #include #include -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) static LPALGENEFFECTS alGenEffects; static LPALDELETEEFFECTS alDeleteEffects; static LPALISEFFECT alIsEffect; @@ -51,13 +51,13 @@ static LPALGETAUXILIARYEFFECTSLOTFV alGetAuxiliaryEffectSlotfv; #endif C4SoundModifier::C4SoundModifier(C4PropList *in_props) : instance_count(0) -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) , effect(0u), slot(0u) #endif { props.SetPropList(in_props); Application.SoundSystem.Modifiers.Add(this); -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) Application.MusicSystem.SelectContext(); alGenEffects(1, &effect); alGenAuxiliaryEffectSlots(1, &slot); @@ -66,7 +66,7 @@ C4SoundModifier::C4SoundModifier(C4PropList *in_props) : instance_count(0) C4SoundModifier::~C4SoundModifier() { -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) // failsafe effect removal if (alIsEffect(effect)) alDeleteEffects(1, &effect); @@ -78,7 +78,7 @@ C4SoundModifier::~C4SoundModifier() void C4SoundModifier::Update() { -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) // update AL effect slot if (slot) { @@ -92,7 +92,9 @@ void C4SoundModifier::Update() void C4SoundModifier::ApplyTo(ALuint source) { // apply slot to source if valid +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) if (slot) alSource3i(source, AL_AUXILIARY_SEND_FILTER, slot, 0, AL_FILTER_NULL); +#endif } float C4SoundModifier::GetFloatProp(C4PropertyName key, float ratio, float default_value) @@ -112,14 +114,14 @@ bool C4SoundModifier::GetBoolProp(C4PropertyName key, bool default_value) C4SoundModifierReverb::C4SoundModifierReverb(C4PropList *in_props) : C4SoundModifier(in_props) { -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) alEffecti(effect, AL_EFFECT_TYPE, AL_EFFECT_REVERB); #endif } void C4SoundModifierReverb::Update() { -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) // use the cave preset as default for the reverb modifier Application.MusicSystem.SelectContext(); alEffectf(effect, AL_REVERB_DENSITY, GetFloatProp(P_Reverb_Density, 1000, 1.0f)); @@ -142,14 +144,14 @@ void C4SoundModifierReverb::Update() C4SoundModifierEcho::C4SoundModifierEcho(C4PropList *in_props) : C4SoundModifier(in_props) { -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) alEffecti(effect, AL_EFFECT_TYPE, AL_EFFECT_ECHO); #endif } void C4SoundModifierEcho::Update() { -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) // use default OpenAL echo preset Application.MusicSystem.SelectContext(); alEffectf(effect, AL_ECHO_DELAY, GetFloatProp(P_Echo_Delay, 1000, 0.1f)); @@ -164,14 +166,14 @@ void C4SoundModifierEcho::Update() C4SoundModifierEqualizer::C4SoundModifierEqualizer(C4PropList *in_props) : C4SoundModifier(in_props) { -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) alEffecti(effect, AL_EFFECT_TYPE, AL_EFFECT_EQUALIZER); #endif } void C4SoundModifierEqualizer::Update() { -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) // use default OpenAL equalizer preset Application.MusicSystem.SelectContext(); alEffectf(effect, AL_EQUALIZER_LOW_GAIN, GetFloatProp(P_Equalizer_Low_Gain, 1000, 1.0f)); @@ -197,7 +199,7 @@ C4SoundModifierList::C4SoundModifierList() void C4SoundModifierList::Init() { is_initialized = false; -#if AUDIO_TK == AUDIO_TK_OPENAL +#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) #define LOAD_ALPROC(x) ((void *&)(x) = alGetProcAddress(#x)) Application.MusicSystem.SelectContext(); if (!alcIsExtensionPresent(Application.MusicSystem.GetDevice(), "ALC_EXT_EFX")) From ca3ae81658ee5956c3677a9cf7c480e24594acd0 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sat, 29 Aug 2015 07:26:36 -0400 Subject: [PATCH 76/97] Play OpenAL sounds in front instead of rear for 5.1 surround setups [Win]. --- src/platform/C4SoundInstance.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/C4SoundInstance.cpp b/src/platform/C4SoundInstance.cpp index fbb6b6e55..7f89ca404 100644 --- a/src/platform/C4SoundInstance.cpp +++ b/src/platform/C4SoundInstance.cpp @@ -403,7 +403,7 @@ void C4SoundInstance::Execute() Mix_Volume(iChannel, (iVol * MIX_MAX_VOLUME) / (100 * 256)); Mix_SetPanning(iChannel, Clamp((100 - iPan) * 256 / 100, 0, 255), Clamp((100 + iPan) * 256 / 100, 0, 255)); #elif AUDIO_TK == AUDIO_TK_OPENAL - alSource3f(iChannel, AL_POSITION, Clamp(float(iPan)/100.0f, -1.0f, +1.0f), 0, 0.7f); + alSource3f(iChannel, AL_POSITION, Clamp(float(iPan)/100.0f, -1.0f, +1.0f), 0, -0.7f); alSourcef(iChannel, AL_GAIN, float(iVol) / (100.0f*256.0f)); if (pitch_dirty) { From 535fc79c0f3611a6dd2884880ffa832ee74a31ca Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sat, 29 Aug 2015 08:33:00 -0400 Subject: [PATCH 77/97] Silence a few compiler warnings. --- cmake/FindAudio.cmake | 2 +- src/gui/C4Gui.cpp | 2 +- src/gui/C4GuiDialogs.cpp | 2 -- src/gui/C4MessageInput.cpp | 2 +- src/gui/C4PlayerInfoListBox.cpp | 4 +--- src/gui/C4StartupNetDlg.cpp | 6 ++++-- src/gui/C4StartupOptionsDlg.cpp | 1 - src/gui/C4StartupScenSelDlg.cpp | 3 +-- src/landscape/fow/C4FoWLightSection.cpp | 8 ++++---- src/lib/StdMeshLoaderXml.cpp | 2 +- src/platform/C4CrashHandlerWin32.cpp | 9 +++++++-- src/platform/PlatformAbstraction.h | 2 ++ 12 files changed, 23 insertions(+), 20 deletions(-) diff --git a/cmake/FindAudio.cmake b/cmake/FindAudio.cmake index 140a509bd..b63dfb5d0 100644 --- a/cmake/FindAudio.cmake +++ b/cmake/FindAudio.cmake @@ -40,7 +40,7 @@ macro(__FINDAUDIO_FINDOPENAL) pkg_check_modules(OggVorbis "vorbisfile>=1.3.2" "vorbis>=1.3.2" "ogg>=1.2.2") else() if(MSVC OR APPLE) - # We need OpenAL preferrably with alext.h. + # We need OpenAL preferably with alext.h. find_path(OpenALExt_INCLUDE_DIRS alext.h PATH_SUFFIXES include/AL include/OpenAL include OpenAL) if(OpenALExt_INCLUDE_DIRS) set(HAVE_ALEXT TRUE) diff --git a/src/gui/C4Gui.cpp b/src/gui/C4Gui.cpp index e43240415..a2572deda 100644 --- a/src/gui/C4Gui.cpp +++ b/src/gui/C4Gui.cpp @@ -702,7 +702,7 @@ namespace C4GUI // get dialog with matching handle Dialog *pDlg; for (Element *pEl = pLast; pEl; pEl = pEl->GetPrev()) - if (pDlg = pEl->GetDlg()) + if ((pDlg = pEl->GetDlg())) if (pDlg->pWindow && pDlg->pWindow->hWindow == hWindow) return pDlg; return NULL; diff --git a/src/gui/C4GuiDialogs.cpp b/src/gui/C4GuiDialogs.cpp index 33e42b555..675f1d70d 100644 --- a/src/gui/C4GuiDialogs.cpp +++ b/src/gui/C4GuiDialogs.cpp @@ -814,8 +814,6 @@ namespace C4GUI void FullscreenDialog::DrawBackground(C4TargetFacet &cgo, C4Facet &rFromFct) { // draw across fullscreen bounds - zoom 1px border to prevent flashing borders by blit offsets - Screen *pScr = GetScreen(); - C4Rect &rcScreenBounds = pScr ? pScr->GetBounds() : GetBounds(); rFromFct.DrawFullScreen(cgo); } diff --git a/src/gui/C4MessageInput.cpp b/src/gui/C4MessageInput.cpp index f10b1ca52..5df95fbdb 100644 --- a/src/gui/C4MessageInput.cpp +++ b/src/gui/C4MessageInput.cpp @@ -779,7 +779,7 @@ bool C4MessageInput::ProcessCommand(const char *szCommand) // try writing main file (usually {SCENARIO}/TODO.txt); if access is not possible, e.g. because scenario is packed, write to alternate file const char *todo_filenames[] = { ::Config.Developer.TodoFilename, ::Config.Developer.AltTodoFilename }; bool success = false; - for (int i = 0; i < std::extent::value; ++i) + for (int i = 0; i < static_cast(std::extent::value); ++i) { StdCopyStrBuf todo_filename(todo_filenames[i]); int replacements = todo_filename.Replace("{SCENARIO}", Game.ScenarioFile.GetFullName().getData()); diff --git a/src/gui/C4PlayerInfoListBox.cpp b/src/gui/C4PlayerInfoListBox.cpp index f1e543721..4cca990ec 100644 --- a/src/gui/C4PlayerInfoListBox.cpp +++ b/src/gui/C4PlayerInfoListBox.cpp @@ -1365,6 +1365,7 @@ void C4PlayerInfoListBox::UpdateSavegamePlayers(ListItem **ppCurrInList) new PlayerListItem(this, -1, iInfoID, true, *ppCurrInList); } // 2do: none-label + (void) fAnyPlayers; } } @@ -1375,14 +1376,11 @@ void C4PlayerInfoListBox::UpdateReplayPlayers(ListItem **ppCurrInList) if (!PlrListItemUpdate(ListItem::ID::PLI_REPLAY, 0, ppCurrInList)) new ReplayPlayersListItem(this, *ppCurrInList); // players - bool fAnyPlayers = false; C4PlayerInfo *pInfo; int32_t iInfoID=0; while ((pInfo = Game.PlayerInfos.GetNextPlayerInfoByID(iInfoID))) { if (pInfo->IsInvisible()) continue; iInfoID = pInfo->GetID(); - // players are in the list - fAnyPlayers = true; // show them if (!PlrListItemUpdate(ListItem::ID::PLI_PLAYER, iInfoID, ppCurrInList)) new PlayerListItem(this, -1, iInfoID, false, *ppCurrInList); diff --git a/src/gui/C4StartupNetDlg.cpp b/src/gui/C4StartupNetDlg.cpp index a869a7df1..3064aa615 100644 --- a/src/gui/C4StartupNetDlg.cpp +++ b/src/gui/C4StartupNetDlg.cpp @@ -184,7 +184,7 @@ bool C4StartupNetListEntry::Execute() { fError = false; sError.Clear(); - ((C4Facet &) pIcon->GetFacet()) = (const C4Facet &) C4Startup::Get()->Graphics.fctNetGetRef; + pIcon->SetFacet(C4Startup::Get()->Graphics.fctNetGetRef); pIcon->SetAnimated(true, 1); pIcon->SetBounds(rctIconLarge); sInfoText[1].Copy(LoadResStr("IDS_NET_INFOQUERY")); @@ -820,7 +820,9 @@ void C4StartupNetDlg::OnBtnInternet(C4GUI::Control *btn) void C4StartupNetDlg::OnBtnRecord(C4GUI::Control *btn) { // toggle league signup flag - bool fCheck = Config.General.DefRec = Game.Record = !Game.Record; + bool fCheck = !Game.Record; + Game.Record = fCheck; + Config.General.DefRec = fCheck; btnRecord->SetIcon(fCheck ? C4GUI::Ico_Ex_RecordOn : C4GUI::Ico_Ex_RecordOff); } diff --git a/src/gui/C4StartupOptionsDlg.cpp b/src/gui/C4StartupOptionsDlg.cpp index 6b1040d8d..460d2cb63 100644 --- a/src/gui/C4StartupOptionsDlg.cpp +++ b/src/gui/C4StartupOptionsDlg.cpp @@ -375,7 +375,6 @@ void C4StartupOptionsDlg::ControlConfigListBox::SetUserKey(class C4PlayerControl C4StartupOptionsDlg::ControlConfigArea::ControlConfigArea(const C4Rect &rcArea, int32_t iHMargin, int32_t iVMargin, bool fGamepad, C4StartupOptionsDlg *pOptionsDlg) : C4GUI::Window(), fGamepad(fGamepad), pGamepadOpener(NULL), pOptionsDlg(pOptionsDlg), pGUICtrl(NULL) { - CStdFont *pUseFont = &(C4Startup::Get()->Graphics.BookFont); CStdFont *pUseFontSmall = &(C4Startup::Get()->Graphics.BookSmallFont); SetBounds(rcArea); C4GUI::ComponentAligner caArea(rcArea, iHMargin, iVMargin, true); diff --git a/src/gui/C4StartupScenSelDlg.cpp b/src/gui/C4StartupScenSelDlg.cpp index 7c2fd4fd8..121a4f2ff 100644 --- a/src/gui/C4StartupScenSelDlg.cpp +++ b/src/gui/C4StartupScenSelDlg.cpp @@ -682,7 +682,7 @@ bool C4ScenarioListLoader::Scenario::LoadCustomPre(C4Group &rGrp) const C4ScenarioParameterDefs *deflist = deflists[def_list_idx]; if (!deflist) continue; const C4ScenarioParameterDef *def; size_t idx=0; - while (def = deflist->GetParameterDefByIndex(idx++)) + while ((def = deflist->GetParameterDefByIndex(idx++))) { if (def->IsAchievement()) { @@ -1402,7 +1402,6 @@ C4StartupScenSelDlg::C4StartupScenSelDlg(bool fNetwork) : C4StartupDlg(LoadResSt int iButtonHeight = C4GUI_ButtonHgt; int iBookPageWidth; int iExtraHPadding = rcBounds.Wdt >= 700 ? rcBounds.Wdt/50 : 0; - int iExtraVPadding = rcBounds.Hgt >= 540 ? rcBounds.Hgt/20 : 0; ::GraphicsResource.CaptionFont.GetTextExtent("<< BACK", iButtonWidth, iCaptionFontHgt, true); iButtonWidth *= 3; C4GUI::ComponentAligner caMain(GetClientRect(), 0,0, true); diff --git a/src/landscape/fow/C4FoWLightSection.cpp b/src/landscape/fow/C4FoWLightSection.cpp index b50777e1b..853626779 100644 --- a/src/landscape/fow/C4FoWLightSection.cpp +++ b/src/landscape/fow/C4FoWLightSection.cpp @@ -661,7 +661,7 @@ std::list C4FoWLightSection::CalculateTriangles(C4FoWRegion * #ifdef FAN_STEP_DEBUG LogSilentF("Descend, b=%.010f, cross=%.010f/%.010f", b, crossX, crossY); #endif - assert(f); + assert(f); (void) f; if (b <= threshold) { if (nextIt == --result.end()) @@ -702,14 +702,14 @@ std::list C4FoWLightSection::CalculateTriangles(C4FoWRegion * } // We should only reach this place with a descend collision - assert(descendCollision); + assert(descendCollision); (void) descendCollision; // Should never be parallel -- otherwise we wouldn't be here // in the first place. bool f = find_cross(lightLX, lightLY, tri.fanRX, tri.fanRY, lightRX, lightRY, nextTri.fanLX, nextTri.fanLY, &crossX, &crossY); - assert(f); + assert(f); (void) f; #ifdef FAN_STEP_DEBUG LogSilentF("Collision, cross=%.02f/%.02f", crossX, crossY); #endif @@ -722,7 +722,7 @@ std::list C4FoWLightSection::CalculateTriangles(C4FoWRegion * continue; // This should always follow an elimination, but better check - assert(beamCount > result.size()); + assert(beamCount > static_cast(result.size())); C4FoWBeamTriangle newTriangle; newTriangle.fanLX = crossX; diff --git a/src/lib/StdMeshLoaderXml.cpp b/src/lib/StdMeshLoaderXml.cpp index 9a3565281..2b00c6753 100644 --- a/src/lib/StdMeshLoaderXml.cpp +++ b/src/lib/StdMeshLoaderXml.cpp @@ -230,7 +230,7 @@ void StdMeshLoader::StdMeshXML::LoadBoneAssignments(StdMesh& mesh, std::vector(StdMeshVertex::MaxBoneWeightCount)), vertexboneassignment_elem); } for (size_t weight_index = 0; weight_index < StdMeshVertex::MaxBoneWeightCount; ++weight_index) { diff --git a/src/platform/C4CrashHandlerWin32.cpp b/src/platform/C4CrashHandlerWin32.cpp index b6e5fd8ab..3a68b74af 100644 --- a/src/platform/C4CrashHandlerWin32.cpp +++ b/src/platform/C4CrashHandlerWin32.cpp @@ -164,11 +164,15 @@ namespace { } #ifdef __CRT_WIDE # define ASSERTION_INFO_FORMAT "%ls" +# define ASSERTION_INFO_TYPE wchar_t * #else # define ASSERTION_INFO_FORMAT "%s" +# define ASSERTION_INFO_TYPE char * #endif LOG_DYNAMIC_TEXT("Additional information for the exception:\n Assertion that failed: " ASSERTION_INFO_FORMAT "\n File: " ASSERTION_INFO_FORMAT "\n Line: %d\n", - exc->ExceptionRecord->ExceptionInformation[0], exc->ExceptionRecord->ExceptionInformation[1], exc->ExceptionRecord->ExceptionInformation[2]); + reinterpret_cast(exc->ExceptionRecord->ExceptionInformation[0]), + reinterpret_cast(exc->ExceptionRecord->ExceptionInformation[1]), + exc->ExceptionRecord->ExceptionInformation[2]); break; } @@ -267,7 +271,8 @@ namespace { if (SymInitialize(process, 0, true)) { LOG_STATIC_TEXT("\nStack trace:\n"); - STACKFRAME64 frame = {0}; + STACKFRAME64 frame; + memset(&frame, 0, sizeof(STACKFRAME64)); DWORD image_type; CONTEXT context = *exc->ContextRecord; // Setup frame info diff --git a/src/platform/PlatformAbstraction.h b/src/platform/PlatformAbstraction.h index e0eb5db6f..fc9f48b3e 100644 --- a/src/platform/PlatformAbstraction.h +++ b/src/platform/PlatformAbstraction.h @@ -67,6 +67,8 @@ #pragma warning(disable: 4521) // multiple copy constructors specified // Get non-standard constants (M_PI etc.) # define _USE_MATH_DEFINES +// Use IPv4 functions (inet_ntoa) since we don't support IPv6 yet. +#define _WINSOCK_DEPRECATED_NO_WARNINGS #endif From 7813d873382b6411dfbe1aae73bef8c2bf1843a1 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sat, 29 Aug 2015 13:20:51 -0400 Subject: [PATCH 78/97] Fix prop list leak on game end when a sound with a modifier is currently playing. --- src/game/C4Game.cpp | 3 ++- src/platform/C4SoundModifiers.h | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index cf9621856..341a6abe9 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -600,6 +600,8 @@ void C4Game::Clear() GameText.Clear(); RecordDumpFile.Clear(); RecordStream.Clear(); + SetGlobalSoundModifier(NULL); // must be called before script engine clear + Application.SoundSystem.Modifiers.Clear(); // free some prop list pointers PathFinder.Clear(); TransferZones.Clear(); @@ -623,7 +625,6 @@ void C4Game::Clear() PlayerControlDefaultAssignmentSets.Clear(); PlayerControlDefs.Clear(); ::MeshMaterialManager.Clear(); - SetGlobalSoundModifier(NULL); Application.SoundSystem.Init(); // clear it up and re-init it for startup menu use // global fullscreen class is not cleared, because it holds the carrier window diff --git a/src/platform/C4SoundModifiers.h b/src/platform/C4SoundModifiers.h index d689a45db..2c4524f3a 100644 --- a/src/platform/C4SoundModifiers.h +++ b/src/platform/C4SoundModifiers.h @@ -63,7 +63,9 @@ public: virtual void Update(); // effect is deleted when marked for release and no instances are running - void Release() { if (!instance_count) delete this; else released = true; } + void Release() { + if (!instance_count) delete this; else { released = true; props.Set0(); } + } void AddRef() { ++instance_count; } void DelRef() { if (!--instance_count && released) delete this; } int32_t GetRefCount() const { return instance_count; } From 3886f76bf3fff579c984bb3b5dc86801d631d376 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sat, 29 Aug 2015 13:22:55 -0400 Subject: [PATCH 79/97] Do not hang when a C4Value with prop list pointer is not cleared at game end. Just cause an assertion in debug mode instead. --- src/script/C4PropList.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/script/C4PropList.cpp b/src/script/C4PropList.cpp index 56f16e302..cff728e5f 100644 --- a/src/script/C4PropList.cpp +++ b/src/script/C4PropList.cpp @@ -213,6 +213,7 @@ void C4PropListScript::ClearScriptPropLists() C4PropListScript *const* p_next, *const* p; while ((p_next = PropLists.First())) { + size_t prev_size = PropLists.GetSize(); while ((p = p_next)) { p_next = PropLists.Next(p); @@ -223,6 +224,16 @@ void C4PropListScript::ClearScriptPropLists() (*p)->Clear(); } } + if (PropLists.GetSize() >= prev_size) + { + // Looks like there's a rogue C4Value pointer somewhere. + // Could just delete the prop list and let ref counting do the job + // However, it might be better to keep the dead pointer to find the leak in debug mode +#ifdef _DEBUG + assert(0); +#endif + break; + } } } From 05a78138a37001e5f7626dfc869ed45547afc0b8 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sat, 29 Aug 2015 14:11:00 -0400 Subject: [PATCH 80/97] Add sound and music ambience object. Also tagged the existing music as "day". Only enabled in the first three missions for now. --- .../Ambience.ocd/DefCore.txt | 5 - .../Ambience.ocd/Graphics.png | Bin 14324 -> 0 bytes .../Ambience.ocd/Script.c | 297 ------ .../CrystalCommActive.ogg | Bin 66911 -> 0 bytes .../CrystalCommBoost.ogg | Bin 13305 -> 0 bytes .../CrystalCommCharge.ogg | Bin 49079 -> 0 bytes .../CrystalCommToneA.ogg | Bin 4481 -> 0 bytes .../CrystalCommToneB.ogg | Bin 5767 -> 0 bytes .../CrystalCommWumm.ogg | Bin 11301 -> 0 bytes .../CrystalCommunicator.ocd/DefCore.txt | 15 - .../CrystalCommunicator.ocd/Graphics.5.png | Bin 138965 -> 0 bytes .../GraphicsSite0.5.png | Bin 40005 -> 0 bytes .../GraphicsSite1.5.png | Bin 66022 -> 0 bytes .../GraphicsSite2.5.png | Bin 109007 -> 0 bytes .../GraphicsTopFace.5.png | Bin 114578 -> 0 bytes .../CrystalCommunicator.ocd/Script.c | 357 ------- .../CrystalCommunicator.ocd/StringTblDE.txt | 2 - .../CrystalCommunicator.ocd/StringTblUS.txt | 2 - .../Ambience_DeepSeaMining.ocs/DescDE.rtf | Bin 1247 -> 0 bytes .../Ambience_DeepSeaMining.ocs/DescUS.rtf | Bin 1107 -> 0 bytes .../GoalCrystalCommunicator.ocd/DefCore.txt | 5 - .../GoalCrystalCommunicator.ocd/Graphics.png | Bin 27448 -> 0 bytes .../GoalCrystalCommunicator.ocd/Script.c | 61 -- .../StringTblDE.txt | 5 - .../StringTblUS.txt | 5 - .../Ambience_DeepSeaMining.ocs/Map.c | 275 ------ .../Ambience_DeepSeaMining.ocs/Scenario.txt | 57 -- .../Ambience_DeepSeaMining.ocs/Script.c | 300 ------ .../SectIntro.ocg/Map.bmp | Bin 4646 -> 0 bytes .../SectIntro.ocg/Scenario.txt | 5 - .../StringTblDE.txt | 1 - .../StringTblUS.txt | 1 - .../System.ocg/DlgTuesday.c | 48 - .../System.ocg/Gems_NoSell.c | 2 - .../System.ocg/SeqIntro.c | 271 ------ .../System.ocg/SeqOutro.c | 106 --- .../System.ocg/StringTblDE.txt | 48 - .../System.ocg/StringTblUS.txt | 47 - .../Ambience_DeepSeaMining.ocs/Title.txt | 2 - planet/Missions.ocf/Crash.ocs/Objects.c | 2 + .../Missions.ocf/DeepSeaMining.ocs/Script.c | 1 + planet/Missions.ocf/Raid.ocs/Objects.c | 2 + .../Missions.ocf/TreasureHunt.ocs/Objects.c | 897 ++++++++---------- .../System.ocg/StringTblDE.txt | 2 +- planet/Music.ocg/IslandDreams.ogg | Bin 4351779 -> 4353364 bytes planet/Music.ocg/Motorway.ogg | Bin 3649802 -> 3651360 bytes planet/Music.ocg/TheSkylands.ogg | Bin 4220750 -> 4222227 bytes .../Environment.ocd/Ambience.ocd/DefCore.txt | 3 +- .../Environment.ocd/Ambience.ocd/Script.c | 397 +++++++- .../Ambience.ocd/StringTblDE.txt | 0 .../Ambience.ocd/StringTblUS.txt | 0 51 files changed, 789 insertions(+), 2432 deletions(-) delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/DefCore.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/Graphics.png delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/Script.c delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommActive.ogg delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommBoost.ogg delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommCharge.ogg delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommToneA.ogg delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommToneB.ogg delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommWumm.ogg delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/DefCore.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/Graphics.5.png delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/GraphicsSite0.5.png delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/GraphicsSite1.5.png delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/GraphicsSite2.5.png delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/GraphicsTopFace.5.png delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/Script.c delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/StringTblDE.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/StringTblUS.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/DescDE.rtf delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/DescUS.rtf delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/DefCore.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/Graphics.png delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/Script.c delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/StringTblDE.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/StringTblUS.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Map.c delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Scenario.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Script.c delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/SectIntro.ocg/Map.bmp delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/SectIntro.ocg/Scenario.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/StringTblDE.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/StringTblUS.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/DlgTuesday.c delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/Gems_NoSell.c delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/SeqIntro.c delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/SeqOutro.c delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/StringTblDE.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/StringTblUS.txt delete mode 100644 planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Title.txt rename planet/{Experimental.ocf/Ambience_DeepSeaMining.ocs => Objects.ocd/Environment.ocd}/Ambience.ocd/StringTblDE.txt (100%) rename planet/{Experimental.ocf/Ambience_DeepSeaMining.ocs => Objects.ocd/Environment.ocd}/Ambience.ocd/StringTblUS.txt (100%) diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/DefCore.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/DefCore.txt deleted file mode 100644 index b6a82edc8..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/DefCore.txt +++ /dev/null @@ -1,5 +0,0 @@ -[DefCore] -id=Ambience -Version=6,0 -Category=C4D_StaticBack | C4D_Rule -Picture=0,0,128,128 diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/Graphics.png b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/Graphics.png deleted file mode 100644 index eb56c3723b77d4c5644e4b9cabf6fc8f6bb770a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14324 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 W(@InitializeEnvironments(); - // Periodic execution of ambience events - last_environment = []; - AddTimer(this.Execute, 10); - return true; -} - -func InitializeEnvironments() -{ - // Register all standard environments - environments = []; - // Underwater: Clonk is swimming in water - var underwater = this.env_underwater = new Environment {}; - underwater->SetMusic("underwater"); - underwater.CheckPlayer = this.EnvCheck_Underwater; - AddEnvironment(underwater, 1400); - // City: Clonk is surrounded by buildings - var city = this.env_city = new Environment {}; - city->SetMusic("city"); - city.CheckPlayer = this.EnvCheck_City; - AddEnvironment(city, 1200); - // Lava: Lava material is nearby - var lava = this.env_lava = new Environment {}; - lava->SetMusic("lava"); - lava.CheckPlayer = this.EnvCheck_Lava; - lava.mat_mask = CreateArray(); // material mask for lava materials. +1 cuz sky. - lava.mat_mask[Material("Lava")+1] = true; // loop over materials and check incindiary instead? Whoever introduces the next lava type can do that... - lava.mat_mask[Material("DuroLava")+1] = true; - lava.min_change_delay = 3; // Easy to miss lava on search. - AddEnvironment(lava, 1000); - // Underground: Clonk in front of tunnel - var underground = this.env_underground = new Environment {}; - underground->SetMusic("underground"); - underground.CheckPlayer = this.EnvCheck_Underground; - AddEnvironment(underground, 800); - // Mountains: Overground and lots of rock around - var mountains = this.env_mountains = new Environment {}; - mountains->SetMusic("mountains"); - mountains.CheckPlayer = this.EnvCheck_Mountains; - mountains.mat_mask = CreateArray(); // material mask for mountain materials. +1 cuz sky. - mountains.mat_mask[Material("Rock")+1] = true; - mountains.mat_mask[Material("Granite")+1] = true; - mountains.mat_mask[Material("Ore")+1] = true; - mountains.mat_mask[Material("Gold")+1] = true; - mountains.min_change_delay = 3; // Pretty unstable condition - AddEnvironment(mountains, 600); - // Snow: It's snowing around the clonk - var snow = this.env_snow = new Environment {}; - snow->SetMusic("snow"); - snow.CheckPlayer = this.EnvCheck_Snow; - snow.min_change_delay = 6; // Persist a while after snowing stopped - snow.mat = Material("Snow"); - AddEnvironment(snow, 400); - // Night: Sunlight blocked by planet - var night = this.env_night = new Environment {}; - night->SetMusic("night"); - night.CheckPlayer = this.EnvCheck_Night; - AddEnvironment(night, 200); - // Overground: Default environment - var overground = this.env_overground = new Environment {}; - overground->SetMusic("overground"); - overground.CheckPlayer = this.EnvCheck_Overground; - overground->AddSound("Ding", 100); - AddEnvironment(overground, 0); - return true; -} - -private func Execute() -{ - // Per-player execution every third timer (~.8 seconds) - var i=GetPlayerCount(C4PT_User); - exec_counter += !(i%3); - while (i--) if (!(++exec_counter % 3)) ExecutePlayer(GetPlayerByIndex(i, C4PT_User)); - return true; -} - -private func ExecutePlayer(int plr) -{ - var cursor = GetCursor(plr); - // Determine environment the player is currently in - var environment = nil; - if (cursor) - { - var last_env = last_environment[plr]; - var x = cursor->GetX(), y = cursor->GetY(); - for (test_environment in environments) - { - if (environment = test_environment->CheckPlayer(cursor, x, y, test_environment == last_env)) - { - // We've found a matchign environment. - // Was it a change? Then check delays first - if (test_environment != last_env) - { - if (last_env && last_env.no_change_delay) - { - // Environment should change but a delay is specified. Keep last environment for now. - --last_env.no_change_delay; - environment = last_env; - break; - } - // New environment and change delay has passed. - environment.no_change_delay = environment.min_initial_change_delay; - Log("%s environment: %s", GetPlayerName(plr), environment.music); - } - else - { - // Was no change: Reset change delays - environment.no_change_delay = Max(environment.no_change_delay, environment.min_change_delay); - } - break; - } - } - } - last_environment[plr] = environment; - if (!environment) return true; - // Music by environment - this->SetPlayList(environment.music, plr, true, 3000); - // Sounds and actions by environment - for (var action in environment.actions) - if (Random(1000) < action.chance) - cursor->Call(action.fn, action.par[0], action.par[1], action.par[2], action.par[3], action.par[4]); - return true; -} - -func InitializePlayer(int plr) -{ - // Newly joining players should have set playlist immediately (so they don't start playing a random song just to switch it immediately) - ExecutePlayer(plr); - return true; -} - -func RemovePlayer(int plr) -{ - // Ensure newly joining players don't check on another player's environment - last_environment[plr] = nil; - return true; -} - -protected func Activate(int byplr) -{ - MessageWindow(this.Description, byplr); - return true; -} - -/* Environment functions */ - -func AddEnvironment(proplist new_env, priority) -{ - if (GetType(priority)) new_env.Priority = priority; - this.environments[GetLength(environments)] = new_env; - SortArrayByProperty(this.environments, "Priority", true); - return true; -} - -private func Env_AddSound(string snd_name, chance) -{ - return Env_AddAction(Global.Sound, snd_name, chance ?? 50); -} - -private func Env_AddAction(afn, par0, par1, par2, par3, par4) -{ - return this.actions[GetLength(this.actions)] = { fn=afn, par=[par0, par1, par2, par3, par4] }; -} - -private func Env_SetMusic(string playlist) -{ - this.music = playlist; - return true; -} - -/* Default environment checks */ - -private func EnvCheck_Underwater(object cursor, int x, int y, bool is_current) -{ - // Clonk should be swimming - if (cursor->GetProcedure() != "SWIM") return nil; - // For initial change, clonk should also be diving: Check for breath below 80% - // Use > instead of >= to ensure 0-breath-clonks can also get the environment - if (!is_current && cursor->GetBreath() > cursor.MaxBreath*4/5) return nil; - return this; -} - -private func EnvCheck_City(object cursor, int x, int y, bool is_current) -{ - // There must be buildings around the clonk - var building_count = cursor->ObjectCount(cursor->Find_AtRect(-180,-100,360,200), Find_Func("IsStructure")); - // 3 buildings to start the environment. Just 1 building to sustain it. - if (building_count < 3-2*is_current) return nil; - return this; -} - -private func EnvCheck_Lava(object cursor, int x, int y, bool is_current) -{ - // Check for lava pixels. First check if the last lava pixel we found is still in place. - var search_range; - if (is_current) - { - if (this.mat_mask[GetMaterial(this.last_x, this.last_y)+1]) - if (Distance(this.last_x, this.last_y, x, y) < 140) - return this; - search_range = 140; - } - else - { - search_range = 70; - } - // Now search for lava in search range - var ang = Random(360); - for (; search_range >= 0; search_range -= 10) - { - ang += 200; - var x2 = x + Sin(ang, search_range); - var y2 = y + Cos(ang, search_range); - if (this.mat_mask[GetMaterial(x2, y2)+1]) - { - // Lava found! - this.last_x = x2; - this.last_y = y2; - return this; - } - } - // No lava found - return nil; -} - -private func EnvCheck_Underground(object cursor, int x, int y, bool is_current) -{ - // Check for underground: No sky at cursor or above - if (GetMaterial(x,y)<0) return nil; - if (GetMaterial(x,y-30)<0) return nil; - if (GetMaterial(x-10,y-20)<0) return nil; - if (GetMaterial(x+10,y-20)<0) return nil; - return this; -} - -private func EnvCheck_Mountains(object cursor, int x, int y, bool is_current) -{ - // Check for mountains: Rock materials below - var num_rock; - for (var y2=0; y2<=45; y2+=15) - for (var x2=-75; x2<=75; x2+=15) - num_rock += this.mat_mask[GetMaterial(x+x2,y+y2)+1]; - // need 15pts on first check; 5 to sustain - if (num_rock < 15-is_current*10) return nil; - return this; -} - -private func EnvCheck_Snow(object cursor, int x, int y, bool is_current) -{ - // Must be snowing from above - if (GetPXSCount(this.mat, x-300, y-200, 600, 300) < 20 - is_current*15) return nil; - return this; -} - -private func EnvCheck_Night(object cursor, int x, int y, bool is_current) -{ - // Night time. - var time = FindObject(Find_ID(Environment_Time)); - if (!time || !time->IsNight()) return nil; - return this; -} - -private func EnvCheck_Overground(object cursor, int x, int y, bool is_current) -{ - // This is the fallback environment - return this; -} - -/*-- Proplist --*/ - -local Name = "$Name$"; -local Description = "$Description$"; -local Environment; diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommActive.ogg b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommActive.ogg deleted file mode 100644 index cdfa22316c753e8b2b42b8108286e07e3b7bdf40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66911 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 IGiRgxA0F*dT>t<8 diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommCharge.ogg b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommCharge.ogg deleted file mode 100644 index 3a1e0960bc162bd811ea99b3c123e19fe737230c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49079 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 O$~_YRLcsoekpB;`P8F2^ diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommToneA.ogg b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommToneA.ogg deleted file mode 100644 index d59ff84ce08c141e8da9c4a4e359deb6d2be4d26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4481 zcmai24OCOtvffdI1OrBhG-%X-ARHvtAgIy$3MfhrAQA`)lvV?X{3;2c_7$5-pg<83 z0uMv*@spql1O)|!yR5$n2ndK0pxUCMpyI9f*1uZcYTukhTW{Z6y?gC!_Sv)d%$}KV z=FA~DK0XvpLvP#oa?^x$sI!~2fRwpQBuo$!OQiLUZ@26r87F5+!Nkem8*!4LBZuh)cVu)NvVC9GubL)1_DcX`#a>&`NSa1 zbI4`D@HJD^<#0?PvUEFMeZbPAi-VPL_9xS+vuep6J&6iBD&%^2~M8L|V77Iy0O|HsUN z$XrNwsCOt`kbcOzw3^d}DHj|p+JLLGH}maXROttdnzIm+(u^p6HyEL8Lb0->z^&W$ zRIf*mJ25m~?pr-|@-l55l>;bt_W~3jY@IkNZsPhUsag$@OH?vGj;Tx$1x{tf7WnnXr)4smR{sOEEe4UF4+EI}bCj9(D?7aS9rAzxI=7 z@H5ZrwtgX=L7{V^ug}T2VHX#=BKn3`+zmn8P-fg{TU^wctcbR^0b>fAvEhvOB8LbO zM{d!$e~H;2kyGtjbZ=GBB3_A8M9JcPikzJV$0`brO;a8Jw*MYE8%0jgA#(ggPVYs|1rBo^L{p1<&@+>cYp;Vr)BQep-vJ0+ zD5eG&^GFDvJ;e7K;nJu(T%KD2!`9dLed2xg1Cqm1 zhniYVcT2pcsj<7|L_<^Z6i}OvYg*hj8ux~l#y1-GskY;q4sCbK$;zgNskWyxFS}25 z?AA0jHMBe-s2$oVecDvVvM=hfp8AHz9qNvb)TxfN-nJBGo#yekZatSycDFp8>iF<< zhC_%T<9k{3_!iJ3<+D9Uqh95-q^vowebWsL27l)E?_##Yu~Vt@U`_vQ$;aDQ6{+Io za8r%8QqwTilDgz_V4Kzs#sRL8Wva0&I{7Y}j^t*ElShCRs&7<_?qeP@0>L zl}_V7W+}rs<__XbxQ;2?j3+wCZo27NVMV+yMX3$G6O#?{EoxMo@uV7=fuGb|e^dB( zmeLMSV9N$06V>{gk%hBkXdaWw*ghUbb($amtI2AmwJ)wx(gSdIcrO6CZqUbHt+WZ{ zsat`SN@*8>bK2-psT>0nPAF}nc$l6Zn!?u07wK8R>M9}JDC0qe3|Jk>F2QkaSqZ;a zQA)7NF2Z?OTL~Trx5Dw}9DZan$DrURd%>-MRSBNV)<;GKwr0>GXBuy%Z4FOK)apUF zvx*UbH@Dg)rE(_b;t5(pxLRiyRRqFAlf3E;i3A}kWvxLj#&p{?Am@M6I`N%2+3V%a$VNg& z0K6f@huU9+L)MW@N8S=jTs4tGh_Lm^!KC~`eK-%*N5!f+Q-E( zoq$Q> zw?xQoH&jF?Lt@1T4p&3YoQC!hITPnv)W|kqdX}t&58^;2wTKF~(}fcRS>zKIKqJ{J zlLoNTN3O%Qx~)k~4l0AN(Q6n$+&Upo!hw)GS+nxG*Sgp0P$HBrGsv zAt#qEEZ|Hk){!w?1=Kk845IXamn>0#6aoPr^+4cGGKoPUF8ZS|`C~@;f0R%|oi#fg z-qw1?JhG`O-(X{Wj7ff5q*s_8->cdGsNVl-7L}w0$h|)x@AH-x=r@ab;TuFmQEop50Dm%Xu_ql`32mK&2j$rI>wNUqoRlMlO8IBg(1OJF*xUP zqbwYEJ$ztL)YzKY3*V3|GFnD+SpJnaiO%Q(K~ggeRiC^t!1=_??7oeMCDpQ1DjrOj zj%d;@>fyYtR2y5(SGB^`XzM52x-2Brg9lH4GxMRxg&EPeGgwlVnM0nAL@$MoB@cUm7SRbIJo=4>Pr1DS04R53Hoji1D3KZ6m7Mtl+zVm{ct^lK|8N4Efc?p%Au z;<+BnuFO~eW(a-0;NFFiuMyAR>RHsv6|?$J+#1pE*asg>(9=jCrQUryF=JxTy71bs zhZ%|=CT{olST#Idv-sZBiZ8yed_9GdbBDGpvKF^yKOFfV{r$O$bE&-M=Biz(#d76h zHLu-Ex#q^%T+Z`TL+BTB(a(;LIyUxq&bhnM>%0BE&nj2$sux$EKu9@@xT@rF&%y_x zo5Y{ncO^T8x}a?;_1KA>Y0#RVzR^X0)(R1`@8#+bNyv_}^kR6&z{A(KY5UhNT=!<+ z#p|jybsg5xzdg1>d(~9ae+Sx&k3PECwkB)euSuU4{znRR>c!~m&mWTLO+U7thqjCI zH3_c&`oxw09t$Yld?aoBTYu!8rOL>??Cg02rRR=5y>j$Rpd9|^i?S*td9?TD?BG3# zo+N4R-}g+fNqQn#c;=Ty^U$5W1?O*;m05VAFLHGkDjp4 L`Nn^~{^S1zUPmF% diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommToneB.ogg b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/CrystalCommToneB.ogg deleted file mode 100644 index 26fe35a39c266411dcfcc92fa7f394a9b8ba4c92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5767 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 diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/DefCore.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/DefCore.txt deleted file mode 100644 index befb6df74..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/DefCore.txt +++ /dev/null @@ -1,15 +0,0 @@ -[DefCore] -id=CrystalCommunicator -Version=6,0 -Category=C4D_Structure -Width=90 -Height=70 -Offset=-45,-35 -Vertices=2 -VertexX=-40,40 -VertexY=34,34 -VertexFriction=100,100 -Mass=300 -Components=Ruby=6;Amethyst=6;Metal=6; -Rotate=0 -Construction=1 diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/Graphics.5.png b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/Graphics.5.png deleted file mode 100644 index 3b4517853b2319318e448b1040f83e0a2e125b9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138965 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 z 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 m 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 diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/GraphicsSite1.5.png b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/GraphicsSite1.5.png deleted file mode 100644 index dd184a19afc3b6546cb57051ae9b9640d7b49828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66022 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

TB${1RWof9V%|`RV5)p2`RzT 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�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 R^pOAn002ovPDHLkV1mQctE>P3 diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/GraphicsTopFace.5.png b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/GraphicsTopFace.5.png deleted file mode 100644 index 78256f4e385572e68a3f414e94b274fabb14197e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114578 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 component_obj->~Hit(); - // Construction site graphics by provided metal - var metal_completion = site->ContentsCount(Metal) * 3 / Max(GetComponent(Metal, nil, nil, this), 1); - site->SetGraphics(["Site0", "Site1", "Site2", nil][metal_completion], CrystalCommunicator, 1, GFXOV_MODE_Base); - site->SetGraphics(nil, nil, 2); - // Add graphics of contained gems - UpdateGemOverlays(site, [1, 3, 7, 12][metal_completion]); - return true; -} - -public func DoConstructionEffects(object site) -{ - // Grab all gems from site - GrabContents(site); - var metal; - while (metal = FindContents(Metal)) metal->RemoveObject(); - // Site is done immediately - SetCon(100); - // Create TopFace overlay - top_face = CreateObjectAbove(GetID(),0,35,GetOwner()); - top_face.Plane = this.Plane + 10; - top_face->SetGraphics("TopFace"); - top_face->SetAction("Attach", this); - top_face.base_face = this; - // Transfer gem overlays - this.gem_overlays = site.gem_overlays; - UpdateGemOverlays(this, 13, true); - // Construction done. Remove site. - site->RemoveObject(site); - // Start finals effect - return true; -} - - -/* Gem overlays */ - -static const CrystalCommunicator_GemsX = [ 15,440,336,221,121,298,220, 50, 14,333,129, 77], - CrystalCommunicator_GemsY = [255, 75,100, 84, 44,107, 15,130,107,153,149,106], - CrystalCommunicator_GemsZ = [ 5, 3, 4, 0, 4, 0, 5, 2, 3, 1, 1, 4], - CrystalCommunicator_GemCount = 12; - -private func UpdateGemOverlays(object obj, int max_overlays, bool refresh_existing) -{ - // Add overlays for any gems that have not yet been added - var gem_overlay_index = 3; - if (!obj.gem_overlays) obj.gem_overlays = []; - var n_overlays = GetLength(obj.gem_overlays); - var i; - // Remove overlays of gems that have left - for (i=0; iContained() != obj) - { - obj->SetGraphics(nil, nil, gem_overlay_index+i); - if (obj.top_face) obj.top_face->SetGraphics(nil, nil, gem_overlay_index+i); - obj.gem_overlays[i] = nil; - } - // Add new overlays - for (var gem in FindObjects(Find_Container(obj), Find_Func("GetGemColor"))) - { - // Already displayed? - i = GetIndexOf(obj.gem_overlays, gem); - if (i>=0) - { - if (!refresh_existing) continue; - } - else - { - // Find a spot for this gem - i = GetIndexOf(obj.gem_overlays, nil); - if (i<0) i=n_overlays; - // No free space? - if (i == max_overlays) if (refresh_existing) continue; else break; - } - // Add overlay - var gem_gfx = gem.graphics_index; - if (gem_gfx) gem_gfx = Format("%d", gem_gfx+1); else gem_gfx = nil; - var x = CrystalCommunicator_GemsX[i]; - var y = CrystalCommunicator_GemsY[i]; - var z = CrystalCommunicator_GemsZ[i]; - var size = z*100+500; - var off_y; - if (obj == this) off_y = 35000; else off_y = 70000; - var gem_target; - if (obj.top_face && z>=3) gem_target = obj.top_face; else gem_target = obj; - gem_target->SetGraphics(gem_gfx, gem->GetID(), gem_overlay_index+i, GFXOV_MODE_Base); - gem_target->SetObjDrawTransform(size,0,x*200-45000, 0,size,y*200-off_y, gem_overlay_index+i); - if (z<3) gem_target->SetClrModulation(0xffb0b0b0, gem_overlay_index+i); - // Remember in list - obj.gem_overlays[i] = gem; - n_overlays = GetLength(obj.gem_overlays); - } - // Make sure a glitter effect is there - if (!GetEffect("IntGemGlitter", obj)) AddEffect("IntGemGlitter", obj, 1, 12, nil, CrystalCommunicator); - return true; -} - -private func FxIntGemGlitterTimer(target) -{ - // Glitter at random gem position - if (Random(2)) - { - var i = Random(12), gem; - if (gem = target.gem_overlays[i]) - { - var x = CrystalCommunicator_GemsX[i]/5 - 45; - var y = CrystalCommunicator_GemsY[i]/5 - 35; - if (target->GetID() == ConstructionSite) y -= 35; - var size = CrystalCommunicator_GemsZ[i]*4 + 10; - var sparkle_fx = GetEffect("Sparkle", gem); - sparkle_fx.Size = PV_KeyFrames(1, 0, 0, 500, size, 1000, 0); // modifying value directly in gem, assuming gem won't leave this structure any more - if (sparkle_fx && sparkle_fx.particles) - target->CreateParticle("MagicRing", x, y, 0, 0, size, sparkle_fx.particles, 1); - } - } -} - - - -/* End sequence */ - -local ruby_particle, amethyst_particle, beam_particles, gem_particles; -local flash_particle, small_flash_particle, large_flash_particle; -local time; -local send_code, next_send_time, send_code_pos; - -public func StartCommunication() -{ - // forward to main object - if (base_face) return base_face->StartCommunication(); - // Init particles - // Gem particles - beam_particles = CreateArray(CrystalCommunicator_GemCount); - gem_particles = CreateArray(CrystalCommunicator_GemCount); - ruby_particle = new Particles_MagicRing() { R = 0xff, G = 0x00, B = 0x30 }; - amethyst_particle = new Particles_MagicRing() { R = 0xa0, G = 0x00, B = 0xff }; - for (var i=0; iGetID() == Ruby) base = ruby_particle; else base = amethyst_particle; - } - else - { - if (i%2) base = ruby_particle; else base = amethyst_particle; - } - gem_particles[i] = base; - var x = CrystalCommunicator_GemsX[i]/5 - 45; - beam_particles[i] = CreateCirclingParticle(base, 100, 20, Abs(x), x>0); - } - // Central flash particles - flash_particle = { - Size = PV_KeyFrames(0, 0, 0, 500, 60, 1000, 0), - R = PV_KeyFrames(0, 750, 255, 1000, 0), - G = PV_KeyFrames(0, 300, 255, 1000, 0), - B = PV_KeyFrames(0, 300, 255, 500, 0), - Rotation = PV_Random(0, 360), - Alpha = PV_KeyFrames(0, 0, 255, 750, 100, 1000, 0), - BlitMode = GFX_BLIT_Additive, - Attach = ATTACH_Front | ATTACH_MoveRelative, - }; - large_flash_particle = { - Size = PV_KeyFrames(0, 0, 0, 500, 200, 1000, 0), - R = PV_KeyFrames(0, 750, 255, 1000, 0), - G = PV_KeyFrames(0, 300, 255, 1000, 0), - B = PV_KeyFrames(0, 300, 255, 500, 0), - Rotation = PV_Random(0, 360), - Alpha = PV_KeyFrames(0, 0, 255, 750, 100, 1000, 0), - BlitMode = GFX_BLIT_Additive, - Attach = ATTACH_Front | ATTACH_MoveRelative, - }; - // Gem flash particle - small_flash_particle = { - Size = PV_KeyFrames(0, 0, 0, 500, 20, 1000, 0), - R = PV_KeyFrames(0, 750, 255, 1000, 0), - G = PV_KeyFrames(0, 300, 255, 1000, 0), - B = PV_KeyFrames(0, 300, 255, 500, 0), - Rotation = PV_Random(0, 360), - Alpha = PV_KeyFrames(0, 0, 255, 750, 100, 1000, 0), - BlitMode = GFX_BLIT_Additive, - Attach = ATTACH_Front | ATTACH_MoveRelative, - }; - // Run effects - Sound("CrystalCommCharge"); - time = 0; - AddTimer(this.PreActivity, 5); -} - -private func PreActivity() -{ - // Warmup effects - var i,x,y,z; - for (i=0; i=3) gem_target = top_face; else gem_target = this; - if (time < 20 || !Random(3)) - { - if (!(time % 5)) gem_target->CreateParticle("StarFlash", x,y, 0,0, 60+Random(10), small_flash_particle, 1); - } - else - gem_target->CreateParticle("StarFlash", x, y, -x, -y, 10, small_flash_particle, 10); - } - if (time == 20) Sound("CrystalCommBoost"); - if (time > 50) - { - RemoveTimer(this.PreActivity); - time = 0; - CreateParticle("StarFlash", PV_Random(-12, +12), PV_Random(-12, +12), PV_Random(-10, +10),PV_Random(-10, +10), PV_Random(20, 100), large_flash_particle, 10); - Sound("CrystalCommWumm"); - SetAction("Active"); - AddTimer(this.Activity, 1); - } - ++time; -} - -public func StopCommunication() -{ - // forward to main object - if (base_face) return base_face->StopCommunication(); - // Stop activities - RemoveTimer(this.PreActivity); - RemoveTimer(this.Activity); - SetAction("Idle"); - time = 0; - return true; -} - -private func Activity() -{ - // Send codes - if (send_code) - { - if (next_send_time == time) - { - var send_char = GetChar(send_code, send_code_pos++); - if (!send_char) - { - // All sent. - send_code = nil; - } - else - { - // Next char to send - if (send_char == GetChar(".")) - { - Sound("CrystalCommToneA"); - next_send_time = time + 13; - } - else - { - Sound("CrystalCommToneB"); - next_send_time = time + 27; - } - } - } - if (next_send_time - time > 10) - { - // During tone: Effects - CreateParticle("StarFlash", PV_Random(-3, +3), 0, 0,-30, 500, flash_particle, 1); - } - } - // Effects - // Circulate through gems - var i = time % CrystalCommunicator_GemCount; - var x = CrystalCommunicator_GemsX[i]/5 - 45, y = CrystalCommunicator_GemsY[i]/5 - 35, z = CrystalCommunicator_GemsZ[i]; - var gem_target; - if (top_face && z>=3) gem_target = top_face; else gem_target = this; - // Create ring moving upwards - if (Abs(x) > 5) CreateParticle("MagicRing", x, y, 0, -Min(time/20,10), 2000, beam_particles[i], 1); - // Create flash at gem - gem_target->CreateParticle("StarFlash", x, y, 0, 0, 20+Random(10), gem_particles[i], 1); - // Create central flash - if (!(time % 5)) CreateParticle("StarFlash", PV_Random(-6, +6), PV_Random(-6, +6), 0,0, 20+Random(10), flash_particle, 1); - ++time; -} - -private func CreateCirclingParticle(proplist prototype, int frames_per_cycle, int num_cycles, int rad, bool start_backmove) -{ - var a = (rad * 10000000) / (2429 * frames_per_cycle * frames_per_cycle); - var ang0 = (!!start_backmove) * 180; - var particle = { - Prototype = prototype, - Size = PV_Sin(PV_Linear( ang0, 360*num_cycles),5,8), - ForceX = PV_Sin(PV_Linear( ang0+90, ang0+90+360*num_cycles), a, 0), - ForceY = 0, - Attach = ATTACH_Front | ATTACH_MoveRelative, - }; - return particle; - -} - -public func SendCode(string code) -{ - send_code = code; - next_send_time = time; - send_code_pos = 0; - return true; -} - - -/* Definition data */ - -public func Definition(proplist def) -{ -} - -local ActMap = { - Attach = { - Prototype = Action, - Name = "Attach", - Procedure = DFA_ATTACH, - Directions = 1, - FacetBase = 1, - Length = 1, - Delay = 0, - NextAction = "Hold" - }, - Active = { - Prototype = Action, - Name = "Active", - Procedure = DFA_NONE, - Directions = 1, - FacetBase = 1, - Delay = 0, - Length = 1, - NextAction = "Active", - Sound = "CrystalCommActive", - }, - }; - -local Collectible = false; -local Name = "$Name$"; -local Description = "$Description$"; -local Touchable = 0; -local Plane = 280; diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/StringTblDE.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/StringTblDE.txt deleted file mode 100644 index 1183ba56d..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/StringTblDE.txt +++ /dev/null @@ -1,2 +0,0 @@ -Name=Kristallkommunikator -Description=Gerät zur Langstreckenkommunikation \ No newline at end of file diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/StringTblUS.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/StringTblUS.txt deleted file mode 100644 index 1f8601a08..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/CrystalCommunicator.ocd/StringTblUS.txt +++ /dev/null @@ -1,2 +0,0 @@ -Name=Crystal communicator -Description=Device for long range communication. \ No newline at end of file diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/DescDE.rtf b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/DescDE.rtf deleted file mode 100644 index 9133dc5fa6f7d6d702be5c00e76f08838c674eae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1247 zcmb7EU2EJh5bSdx|6$((B{BBhB@fM0L((RsX`u}b6us!Il}}if4@u6!h5q->`aY7h zrBFC@@@jWAJ2Uo^irH35hvdekUN+U_bfOGfTRthcRDCrFLX?tOS*R* zC;H4Q`YI>qKao~#)BZgCd3f-o>fZMe4e4A(Hl=DJb12o^4_uy)8E;j?fuqiSq`PD@ z8<**{m{r9Dztak7>e2D4b-~QkP*-ZHqfwz>Ia6nk2UP=w*P*G(=~T5GgTr3U#~IQ@ zaI;O!oePZIa+^DwsyT+l0BJIlriTZwI|&7;I@=y?FR18d5h<}Vqz6lko>A7MI}UUc z5_@u?b2;PDfUYlV2HDhb%25Zyrl6}Kvec|y!*tzS8-~!3OZix$blZ2`5L~OX>qBZd zsw19dvK+H(Xg?{f2TGZ}$3;UhG<0>V2)!ljw!i%L1BoL!5X=4GXPo8kBhuc37v(u4P%>iM-C{bACCPVBogTzN%%X* z$KKN8)ZH7}4Ihdpi1z1@l@3eNCav_(VQ)bNpLgh&X3 zam46)MenwvWtl7?ZgzR>?alS9Y(i|_uUqRC4gByEU?7Mopi`v4J3z4Bkv)Nlj8lMv zQ87X43697MF9}_hj|PS_uJ1SWzvqyUmpNuoHXR_<$%+>26T82|hXfK5LP+fcf|HgkYF2zfJaQ`Bk z%$A#Y zS7EV$Ic3EaEa?{x*=-s4FhQHYxUUdLF! diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/DefCore.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/DefCore.txt deleted file mode 100644 index 14d019cb5..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/DefCore.txt +++ /dev/null @@ -1,5 +0,0 @@ -[DefCore] -id=Goal_BuildCrystalCommunicator -Version=6,0 -Category=C4D_StaticBack|C4D_Goal -Picture=0,0,128,128 diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/Graphics.png b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/Graphics.png deleted file mode 100644 index 9878526382a2f32b08add3e44d64ce46f7f73c16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27448 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®7m9lpY7jdD}{G=>g3f*!QGh!N6j zfN!;cmQt`8)BjMnfx4%ljiHe1=l(qf@~=@n){y`}0M@Q01z{M7Hcf-HCT?8_1^3>j zr|}HlMQ`S(AcD}eGxKKR!i5_HffBmPFiBqW-W&JpOriP!<^pn!AU4;dO}*-=Z>gtU zzdzK|>zU#zZ(>^?LbqKztiB1$GX0gz>V+_GG62#nVzUiHSE!CF&fK`>Aw1r@% z%XB05Fj7d8_vZ#aLCA81LI4Wr zSIXSt7agw)1s?YuB9zqUaHyF-&7k94kWkK9Uka^c-dphh{d$`p<9Ioq&ch$${nZu$ zXuFaegkd0-hSDTW)U-ti!T*25Bao1I1WPG+;wch04&>P7G-FQ`#r7{p!QY8ua11w> z^XbUvkk?-Me&YA@VK)wApK_m5mtqLHi$jX-CV01PgWtc4nqYieHb|9i+!`HX>y>ni zI1k|Jl+t-E#m1e#o6KR?csV;Lj$~#LqbvY6RP~UIkuC}enJ|K)kVupvt$@HJpgLGH z2G#$^%1B_5t^x_6+4GcDz z8GKFKKllU;c$5;_tAHN_!N35&b{>4#BUtc1xHGUi8?fj5=TOts-D`=AAF=^J0Fg2o1iLo~1VFhRR0SY! zl|_zRT#*W|8jxrhn*m7-b_U^DTn=h2kJ94e<`!pT`zs2po0XVZ{sY@2|3pEBGB8p> zx0ve#16T~$;AH;$?>94$&-foQcm<^Xftn)V`CrhcmA_2?phwv;!jFcBodFCx3>wsc zfHeYHn4!nUKm_3G5kUc=7@48R$s%`K8DTjd+OB}E68iTSvJ)9}Qrfp~-+uzD0jit< zL_zN?py|H9ph{vFPvN=18g&B0wYcl z)D!`>HpPKG56<6z{xSiJSSeuRLJ=4dA}lN{oUANt%&^=Js>lC=4&#TN2LK)D0k`*H z5eeOz4m(>A-1=vP730u@qCgGUe~^g(1Jy`9BoB*gA!L$T(`U-`BtqEyX7FJbY0x$&j zDinYTMHCcmz@mW*7^%|01i=H0AQs4wKO-BkDq#gi7O?pMY>a@%9ateNb)b76K%=7I zJrUrXj|d*b;ZjV{z9FQ>1eXHP#WIj00aDA9TqD2!jS$)}hO64j^zVPb>gXZ8!U7n$L43!B{Z&Mb2lW)?+OHdZkfW+q->EDQW& z{Lc^UWpDx`QU=t|1V*3$3ux^*uq*&34Pjsmb1{Mk2tXwa6STyD-2V%{MIAJ$1zH3H zIvy9YyyOJE{0b02giZ*dmpg_MI0?lVprayOoDG;VIDvgy4h~L6R#sLnVB5o)iIK?+ zC@l#rDP;fu`3pKk0kp1-2blYr!CgPlF|j{?G5!1V_a7?@?x^j0Rjkb z8(=g6P!~*TPEum$;NSwCuFA~9>;w#XJzxk60bBpvU%z~j{qghL_rJe?6qj|ZUqXtx zlq3Lv02)mIg9J3>c}4@P1Bu4TJ9|mhOGyF%2q2<*0i$5}0)POb#(e>!U hide it. - if (GetEffect("GoalMessage", this)) - { - CustomMessage("", nil, plr, nil, nil, nil, nil, nil, MSG_HCenter); - RemoveEffect("GoalMessage", this); - return; - } - // Otherwise open a new message. - AddEffect("GoalMessage", this, 100, 0, this); - var message; - if (IsFulfilled()) - { - message = "@$MsgGoalFulfilled$"; - } - else - { - message = "@$MsgGoalUnfulfilled$"; - } - CustomMessage(message, nil, plr, 0, 16 + 64, 0xffffff, GUI_MenuDeco, this, MSG_HCenter); - return; -} - -protected func FxGoalMessageStart() {} - -//public func GetShortDescription(int plr) { return ""; } - -/*-- Proplist --*/ - -local Name = "$Name$"; diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/StringTblDE.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/StringTblDE.txt deleted file mode 100644 index 832b2173d..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/StringTblDE.txt +++ /dev/null @@ -1,5 +0,0 @@ -Name=Kristallkommunikator bauen - -#Goal window -MsgGoalFulfilled=Glückwunsch; der Kristallkommunikator steht. -MsgGoalUnfulfilled=Bringe das nötige Baumaterial zur Baustelle des Kristallkommunikator! diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/StringTblUS.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/StringTblUS.txt deleted file mode 100644 index dc7cbcba7..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/GoalCrystalCommunicator.ocd/StringTblUS.txt +++ /dev/null @@ -1,5 +0,0 @@ -Name=Build crystal communicator - -#Goal window -MsgGoalFulfilled=Congratulations, the crystal communicator is done. -MsgGoalUnfulfilled=Find the missing components and bring them to the crystal communicator construction site! diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Map.c b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Map.c deleted file mode 100644 index a5714fe08..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Map.c +++ /dev/null @@ -1,275 +0,0 @@ -/** - Blue lake - Dynamic map with a big lake containing islands of material - Plus lava basins with gems at the bottom - Parts adapted from Gem Grabbers by Maikel - - @authors Sven2 -*/ - -#include Library_Map - -// zoomed coordinates for scenario script -static main_island_x, main_island_y; -static goal_platform_x, goal_platform_y; - -// set after intro to force map creation -static g_intro_done; - -// Called be the engine: draw the complete map here. -public func InitializeMap(proplist map) -{ - if (!g_intro_done && !SCEN_TEST) return true; - Resize(300,400); - this.sea_y = 50; - this.ground_y = 350; - this.map_zoom = 7; - main_island_x = this.Wdt/2 * this.map_zoom; - main_island_y = this.sea_y * this.map_zoom; - - Draw("Water", nil, [0,this.sea_y,this.Wdt,this.Hgt]); - DrawMainIsland(80); - DrawGround(); - - // Regular resource islands - DrawSecondaryIslands(3, 15, [["Ore", 50], ["Coal", 40]], true); - DrawSecondaryIslands(10, 6, [["Firestone", 70]], false); - DrawSecondaryIslands(3, 8, [["Gold", 40]], true); - - // Amethyst islands - var i=0, imod=Random(2); - while (i<3 || GetPixelCount("Amethyst")<15) - { - DrawSecondaryIsland(8, [["Amethyst", 70]], true, [0, this.Wdt-70][(i+imod)%2], 70, this.sea_y+50); - ++i; - } - - FixLiquidBorders("Earth"); - - // Ensure that left and right side are always open because they're used for water refill - Draw("Sky", nil, [0,0,1,this.sea_y]); - Draw("Sky", nil, [this.Wdt-1,0,1,this.sea_y]); - Draw("Water", nil, [0,this.sea_y,1,70]); - Draw("Water", nil, [this.Wdt-1,this.sea_y,1,70]); - - // Top level of water has sky background - Draw("^Water", Duplicate("Water"), [0,this.sea_y,this.Wdt,11]); - - // Return true to tell the engine a map has been successfully created. - return true; -} - -// Draws the main island with all basic resources -private func DrawMainIsland(int size) -{ - // Shape of the main island. Shape taken from Gem Grabbers. - var island_algo = {Algo = MAPALGO_Polygon}; - var x = this.Wdt / 2; - var y = this.sea_y; - island_algo.X = [x-size/3, x-size/2, x-size/3, x-size/6, x+size/6, x+size/3, x+size/2, x+size/3]; - island_algo.Y = [y-size/6, y, y+size/3, y+size/6, y+size/6, y+size/3, y, y-size/6]; - - // Draw the earth patch of the island. - island_algo = {Algo = MAPALGO_Turbulence, Iterations = 4, Op = island_algo}; - var island = CreateLayer(); - island->Draw("Earth", island_algo); - - // Draw goal platform shape - while (island->GetPixel(x,y)) ++x; // Find right side of island at sea level - var platform_algo = {Algo = MAPALGO_Polygon}; - platform_algo.X = [x-5,x+14,x+14,x+7,x ,x-5]; - platform_algo.Y = [y ,y ,y+ 1,y+2,y+4,y ]; - island->Draw("Earth", platform_algo); - - // Preserve drawn island shape for border algorithms - var island_shape = island->Duplicate(); - - // Overlay a set of materials inside the island. - DrawIslandMat("Earth-earth_dry", island, 4, 30, true); - DrawIslandMat("Earth-earth_midSoil", island, 3, 30, true); - DrawIslandMat("Tunnel", island, 3, 10, true); - //DrawIslandMat("Water", island, 4, 8); - //DrawIslandMat("Gold", island, 3, 6); - DrawIslandMat("Ore", island, 6, 18, true); - DrawIslandMat("Coal", island, 6, 18, true); - DrawIslandMat("Firestone", island, 6, 12, true); - - // Draw a top border out of sand and top soil. - var sand_border = {Algo = MAPALGO_And, Op = [{Algo = MAPALGO_Border, Op = island_shape, Top = [-1,2]}, {Algo = MAPALGO_RndChecker, Ratio = 50, Wdt = 4, Hgt = 3}]}; - var topsoil_border = {Algo = MAPALGO_And, Op = [{Algo = MAPALGO_Border, Op = island_shape, Top = [-1,3]}, {Algo = MAPALGO_RndChecker, Ratio = 40, Wdt = 4, Hgt = 2}]}; - island->Draw("Sand", sand_border); - island->Draw("Earth-earth_topSoil", topsoil_border); - - // Draw a bottom border out of granite and rock. - var granite_border = {Algo = MAPALGO_Border, Op = island_shape, Bottom = [-4,3]}; - island->Draw("Granite", granite_border); - var rock_border = {Algo = MAPALGO_RndChecker, Ratio = 20, Wdt = 2, Hgt = 2}; - island->Draw("Rock", {Algo = MAPALGO_And, Op = [granite_border, rock_border]}); - island->Draw("Rock-rock_cracked", {Algo = MAPALGO_And, Op = [granite_border, rock_border]}); - - // Draw goal platform - island->Draw("Sky", nil, [x,y-10,14,10]); - island->Draw("Brick", nil, [x,y,14,2]); - goal_platform_x = (x+7)*this.map_zoom; - goal_platform_y = y *this.map_zoom; - - // Draw island onto main map - Blit(island); - - return true; -} - -// Draws multiple underwater resource islands -private func DrawSecondaryIslands(int n, ...) -{ - for (var i=0; iDraw("Earth", island_algo); - var island_shape = island->Duplicate(); - - DrawIslandMat("Earth-earth_dry", island, 4, 30); - DrawIslandMat("Earth-earth_midSoil", island, 3, 30); - - // Overlay a set of materials inside the island. - for (var mat in materials) - { - DrawIslandMat(mat[0], island, 3, mat[1], has_border); - } - - // Draw a border out of granite and rock. - if (has_border) - { - var island_shape = island->Duplicate(); - var granite_border = {Algo = MAPALGO_Border, Op = island_shape, Top = [-2,2]}; - island->Draw("Granite", granite_border); - var rock_border = {Algo = MAPALGO_RndChecker, Ratio = 20, Wdt = 2, Hgt = 2}; - island->Draw("Rock", {Algo = MAPALGO_And, Op = [granite_border, rock_border]}); - island->Draw("Rock-rock_cracked", {Algo = MAPALGO_And, Op = [granite_border, rock_border]}); - } - - // Draw island onto main map - Blit(island); - - return true; -} - -private func DrawGround() -{ - // Bottom of the sea - var ground_algo = { Algo = MAPALGO_Rect, X=-100, Y=this.ground_y, Wdt=this.Wdt+200, Hgt=this.Hgt-this.ground_y+1000 }; - ground_algo = {Algo = MAPALGO_Turbulence, Iterations = 4, Amplitude = [10,100], Scale = 20, Op = ground_algo }; - var ground2_algo = { Algo = MAPALGO_Rect, X=-100, Y=this.Hgt-10, Wdt=this.Wdt+200, Hgt=this.Hgt-this.ground_y+1000 }; - ground2_algo = {Algo = MAPALGO_Turbulence, Iterations = 2, Amplitude = 10, Scale = 30, Op = ground2_algo }; - var ground = CreateLayer(); - // Ensure lots of earth - while (true) - { - ground->Draw("Earth", ground_algo); - ground->Draw("Granite", ground2_algo); - if (ground->GetPixelCount("Earth") > 10000) break; - } - ground->Draw("DuroLava", {Algo=MAPALGO_Turbulence, Amplitude=10, Scale=20, Iterations=3, Op={Algo=MAPALGO_And, Op=[ground->Duplicate("Granite"), {Algo = MAPALGO_RndChecker, Ratio=50, Wdt=30, Hgt=2}]}}); - // Granite/Rock top border - ground->Draw("Granite", {Algo = MAPALGO_Turbulence, Amplitude = 5, Iterations = 1, Op = {Algo = MAPALGO_Border, Op = ground->Duplicate(), Top= [-2,2]}}); - ground->Draw("Rock", {Algo=MAPALGO_And, Op=[ground->Duplicate("Granite"), {Algo = MAPALGO_RndChecker, Ratio = 40, Wdt = 2, Hgt = 2}]}); - // Alterations in earth material - DrawIslandMat("Earth-earth_dry", ground, 12, 60, false); - DrawIslandMat("Earth-earth_midSoil", ground, 8, 60, false); - // Gem spots - var gem_spots = CreateLayer(); - var earth_mats = CreateMatTexMask("Earth"); - var i=0; - while (i<3 || gem_spots->GetPixelCount("Ruby") < 15) - { - var gem_mat = "Ruby"; - // Find an earth spot - var pos = {X=Random(this.Wdt), Y=this.Hgt/2+Random(this.Hgt/2)}; - ground->FindPosition(pos, "Earth"); - // Find center of this earth area - var x=pos.X, y=pos.Y; - var x0=x-1, x1=x+1, y0=y-1, y1=y+1; - while (earth_mats[ground->GetPixel(x,y0)]) --y0; - while (earth_mats[ground->GetPixel(x,y1)]) ++y1; - y=Min((y0+y1)/2, this.Hgt-6); - while (earth_mats[ground->GetPixel(x0,y)]) --x0; - while (earth_mats[ground->GetPixel(x1,y)]) ++x1; - x=(x0+x1)/2; - var size = 9; - // Lava basin here - var lava_algo = {Algo = MAPALGO_Ellipsis, X=x, Y=y, Wdt=size, Hgt=size}; - lava_algo = {Algo = MAPALGO_Turbulence, Amplitude = 5, Iterations = 5, Op = lava_algo}; - gem_spots->Draw("DuroLava", lava_algo); - // Gems at bottom center - y += 2; - size = 3; - var gem_algo = {Algo = MAPALGO_Ellipsis, X=x, Y=y, Wdt=size, Hgt=size}; - gem_algo = {Algo = MAPALGO_Turbulence, Amplitude = 3, Iterations = 1, Op = gem_algo}; - gem_spots->Draw(gem_mat, gem_algo); - // Draw to map - ground->Blit(gem_spots); - ++i; - } - // Lava basins surrounded by granite - ground->Draw("Rock", {Algo=MAPALGO_And, Op=[{Algo=MAPALGO_Not, Op=gem_spots}, {Algo = MAPALGO_Turbulence, Amplitude = 5, Iterations = 5, Op = {Algo = MAPALGO_Border, Op = gem_spots, Wdt=-4}}]}); - ground->Draw("Granite", {Algo = MAPALGO_Border, Op = gem_spots, Wdt=-1}); - // Lots of rocks - DrawIslandMat("Rock-rock_cracked", ground, 2, 20, false); - DrawIslandMat("Rock", ground, 2, 20, false); - // And some lava - DrawIslandMat("DuroLava", ground, 2, 20, false); - // Other materials (rare) - DrawIslandMat("Ore", ground, 12, 8, false); - DrawIslandMat("Coal", ground, 12, 8, false); - DrawIslandMat("Gold", ground, 12, 8, false); - DrawIslandMat("Firestone", ground, 12, 8, false); - Blit(ground); - return true; -} - -// Draws some material inside an island. -private func DrawIslandMat(string mat, proplist onto_mask, int speck_size, int ratio, has_border) -{ - if (!speck_size) - speck_size = 3; - if (!ratio) - ratio = 20; - // Use random checker algorithm to draw patches of the material. - var rnd_checker = {Algo = MAPALGO_RndChecker, Ratio = ratio, Wdt = speck_size, Hgt = speck_size}; - rnd_checker = {Algo = MAPALGO_Turbulence, Iterations = 4, Op = rnd_checker}; - var algo; - if (has_border) - { - var mask_border = {Algo = MAPALGO_Border, Op = onto_mask, Wdt = 3}; - algo = {Algo = MAPALGO_And, Op = [{Algo = MAPALGO_Xor, Op = [onto_mask->Duplicate("Earth"), mask_border]}, rnd_checker]}; - } - else - { - algo = {Algo = MAPALGO_And, Op = [onto_mask->Duplicate("Earth"), rnd_checker]}; - } - onto_mask->Draw(mat, algo); - - return true; -} diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Scenario.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Scenario.txt deleted file mode 100644 index 160de96b1..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Scenario.txt +++ /dev/null @@ -1,57 +0,0 @@ -[Head] -Title=DeepSeaMining -Icon=31 -Version=6,0 -Difficulty=30 -MissionAccess=S2Crash - -[Definitions] -Definition1=Objects.ocd - -[Game] -Rules=Rule_TeamAccount=1;Rule_BuyAtFlagpole=1;Rule_BaseRespawn=1; -Goals=Goal_BuildCrystalCommunicator=1; -ValueOverloads=Ruby=10;Amethyst=10 - -[Player1] -Wealth=25 -Crew=Clonk=2 -Knowledge=Flagpole=1;Foundry=1;WindGenerator=1;SteamEngine=1;Compensator=1;Sawmill=1;ChemicalLab=1;Elevator=1;Pump=1;ToolsWorkshop=1;Basement=1;WallKit=1;GoldBar=1;Loam=1;Metal=1;Axe=1;Barrel=1;Bucket=1;Dynamite=1;Hammer=1;JarOfWinds=1;Pickaxe=1;Pipe=1;Shovel=1;TeleGlove=1;DynamiteBox=1;Lorry=1; -BaseMaterial=Clonk=25;Bread=25; -BaseProduction=Clonk=25;Bread=25; - -[Player2] -Wealth=25 -Crew=Clonk=2 -Knowledge=Flagpole=1;Foundry=1;WindGenerator=1;SteamEngine=1;Compensator=1;Sawmill=1;ChemicalLab=1;Elevator=1;Pump=1;ToolsWorkshop=1;Basement=1;WallKit=1;GoldBar=1;Loam=1;Metal=1;Axe=1;Barrel=1;Bucket=1;Dynamite=1;Hammer=1;JarOfWinds=1;Pickaxe=1;Pipe=1;Shovel=1;TeleGlove=1;DynamiteBox=1;Lorry=1; -BaseMaterial=Clonk=25;Bread=25; -BaseProduction=Clonk=25;Bread=25; - -[Player3] -Wealth=25 -Crew=Clonk=2 -Knowledge=Flagpole=1;Foundry=1;WindGenerator=1;SteamEngine=1;Compensator=1;Sawmill=1;ChemicalLab=1;Elevator=1;Pump=1;ToolsWorkshop=1;Basement=1;WallKit=1;GoldBar=1;Loam=1;Metal=1;Axe=1;Barrel=1;Bucket=1;Dynamite=1;Hammer=1;JarOfWinds=1;Pickaxe=1;Pipe=1;Shovel=1;TeleGlove=1;DynamiteBox=1;Lorry=1; -BaseMaterial=Clonk=25;Bread=25; -BaseProduction=Clonk=25;Bread=25; - -[Player4] -Wealth=25 -Crew=Clonk=2 -Knowledge=Flagpole=1;Foundry=1;WindGenerator=1;SteamEngine=1;Compensator=1;Sawmill=1;ChemicalLab=1;Elevator=1;Pump=1;ToolsWorkshop=1;Basement=1;WallKit=1;GoldBar=1;Loam=1;Metal=1;Axe=1;Barrel=1;Bucket=1;Dynamite=1;Hammer=1;JarOfWinds=1;Pickaxe=1;Pipe=1;Shovel=1;TeleGlove=1;DynamiteBox=1;Lorry=1; -BaseMaterial=Clonk=25;Bread=25; -BaseProduction=Clonk=25;Bread=25; - -[Landscape] -Sky=Clouds2 -TopOpen=1 -BottomOpen=0 -AutoScanSideOpen=1 -MapWidth=300 -MapHeight=400 -MapZoom=7 - -[Weather] -Climate=0 -StartSeason=0 -YearSpeed=0 -Wind=0,100,-100,100 diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Script.c b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Script.c deleted file mode 100644 index 51d74c028..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Script.c +++ /dev/null @@ -1,300 +0,0 @@ -/** - Deep Sea Mining - Mine gems buried deeply below the ocean. - - @authors Sven2 -*/ - -// set in Map.c -static main_island_x, main_island_y; -static goal_platform_x, goal_platform_y; - -static const SCEN_TEST = true; - -static g_is_initialized, g_is_in_intro, g_intro_done, npc_tuesday, g_tuesday_pos; - -protected func PostIntroInitialize() -{ - // Construction site on goal platform - var goal_site = CreateObjectAbove(ConstructionSite, goal_platform_x+10, goal_platform_y+3); - goal_site->Set(CrystalCommunicator); - goal_site->MakeUncancellable(); - if (SCEN_TEST) - { - for (var i=0; i<6; ++i) - { - goal_site->CreateObjectAbove(Metal,-20); - goal_site->CreateObjectAbove(Ruby,0); - goal_site->CreateObjectAbove(Amethyst,20); - } - goal_site->CreateContents(Metal,6); - goal_site->CreateContents(Ruby,6); - goal_site->CreateContents(Amethyst,5); - } - - // Initialize different parts of the scenario. - InitEnvironment(); - InitVegetation(); - InitAnimals(); - InitMainIsland(); - - // NPC - g_tuesday_pos = FindMainIslandPosition(0, 100, true); - npc_tuesday = CreateObjectAbove(Clonk, g_tuesday_pos[0]+20, g_tuesday_pos[1]-10); - npc_tuesday->SetDir(DIR_Left); - npc_tuesday->SetColor(0x804000); - npc_tuesday->SetName("$Tuesday$"); - - return true; -} - -func DoInit(int first_player) -{ - if (!SCEN_TEST) - StartSequence("Intro", 0, GetCrew(first_player)); - else - { - PostIntroInitialize(); - g_intro_done = true; - } - return true; -} - -protected func InitializePlayer(int plr) -{ - // intro has its own initialization - if (g_is_in_intro) return true; - - // Harsh zoom range - SetPlayerZoomByViewRange(plr, 500, 350, PLRZOOM_LimitMax); - SetPlayerZoomByViewRange(plr, 500, 350, PLRZOOM_Direct); - SetPlayerViewLock(plr, true); - - // Intro - if (!g_is_initialized) g_is_initialized = DoInit(plr); - if (!g_intro_done) return true; - - // Position and materials - var i, crew; - for (i = 0; crew = GetCrew(plr, i); ++i) - { - var pos = FindMainIslandPosition(); - crew->SetPosition(pos[0], pos[1] - 11); - crew->CreateContents(Shovel); - if (SCEN_TEST) - { - var cs = FindObject(Find_ID(ConstructionSite)); - crew->SetPosition(cs->GetX(), cs->GetY()-20); - } - } - - // Claim ownership of unowned structures - for (var structure in FindObjects(Find_Or(Find_Category(C4D_Structure), Find_Func("IsFlagpole")), Find_Owner(NO_OWNER))) - structure->SetOwner(plr); - - return; -} - -// Initializes environment and disasters. -private func InitEnvironment() -{ - // Water refill from sides - var initial_water_level = 0; - while (GetMaterial(0,initial_water_level) != Material("Water")) ++initial_water_level; - ScheduleCall(nil, this.EnsureWaterLevel, 20, 999999999, initial_water_level); - - // Set a certain parallax. - SetSkyParallax(0, 20, 20); - - // Ambience sounds - CreateObjectAbove(Ambience); - - // No disasters for now - //Meteor->SetChance(5); Cloud->SetLightning(16); - - return; -} - -// Ensures that the sea doesn't disappear -func EnsureWaterLevel(int level, bool no_recursion) -{ - var water_mat = Material("Water"); - if (GetMaterial(0,level) != water_mat) CastPXS("Water", 100, 20, 0,level, 90, 10); - if (GetMaterial(LandscapeWidth()-1,level) != water_mat) CastPXS("Water", 100, 20, LandscapeWidth()-1,level, 270, 10); - // Extra insertion at a lower level so it's not easy to block off - if (!no_recursion && !Random(3)) EnsureWaterLevel(level + 50 + Random(450), true); - return true; -} - -private func InitVegetation() -{ - // Grass on starting island. - PlaceGrass(85); - - // Place some cocont trees all around the main island - for (var i = 0; i < 10 + Random(8); i++) - PlaceVegetation(Tree_Coconut, 0, 0, LandscapeWidth(), LandscapeHeight(), 1000 * (61 + Random(40))); - - // Create an effect to make sure there will always grow some new trees. - ScheduleCall(nil, this.EnsureTrees, 100, 999999999); - - // Some objects in the earth. - PlaceObjects(Rock, 10 + Random(10),"Earth"); - PlaceObjects(Firestone, 35 + Random(5), "Earth"); - PlaceObjects(Loam, 25 + Random(5), "Earth"); - - // Underwater vegetation - Seaweed->Place(20); - Coral->Place(30); - - return; -} - -// Ensures that there will always grow some trees on the main island. -func EnsureTrees() -{ - var wdt = LandscapeWidth(); - var hgt = LandscapeHeight(); - // Place a tree if there are less than eight trees, with increasing likelihood for lower amounts of trees. - var nr_trees = ObjectCount(Find_Func("IsTree"), Find_Func("IsStanding")); - if (Random(9) >= nr_trees) - if (!Random(20)) - PlaceVegetation(Tree_Coconut, main_island_x - 300, main_island_y - 200, 600, 400, 3); - return true; -} - -private func InitAnimals() -{ - // Place fish in upper ocean area (there tend to be small basins below, where lots of fish could get stuck) - var fish_area = GetFishArea(); - Fish->Place(50, fish_area); - Piranha->Place(25, fish_area); - ScheduleCall(nil, this.EnsureAnimals, 237, 999999999); - return true; -} - -private func GetFishArea() { return Shape->Rectangle(50, main_island_y, LandscapeWidth() - 100, LandscapeHeight()/2 - main_island_y); } - -private func EnsureAnimals() -{ - if (ObjectCount(Find_ID(Fish), Find_Not(Find_Action("Dead"))) < 50) DoFishSpawn(Fish); - if (ObjectCount(Find_ID(Piranha), Find_Not(Find_Action("Dead"))) < 25) DoFishSpawn(Piranha); - return true; -} - -private func DoFishSpawn(fish_type) -{ - // Try placement away from Clonks. If a Clonk was nearby, just remove it immediately. - var fish = fish_type->Place(1, GetFishArea()); - if (fish) - if (fish->FindObject(fish->Find_Distance(300), Find_ID(Clonk), Find_OCF(OCF_Alive))) - fish->RemoveObject(); - return fish; -} - -// Initializes the main island according to the material specification. -private func InitMainIsland() -{ - var amount = 3; - var pos; - - // Always start with a lorry filled with: hammer(x2), axe(x2), wood(x6) and metal(x4). - var lorry_pos = FindMainIslandPosition(0, 80); - var lorry = CreateObjectAbove(Lorry, lorry_pos[0], lorry_pos[1] - 8); - lorry->CreateContents(Hammer, 2); - lorry->CreateContents(Axe, 2); - lorry->CreateContents(Wood, 6); - lorry->CreateContents(Metal, 4); - - // If more material is specified, create a small settlement: flag(x2) and windmill. - // Also fill lorry a bit more with: pickaxe(x1), dynamite(x4), wood(x4), metal(x2). - if (amount >= 2) - { - pos = FindMainIslandPosition(-120, 20); - CreateObjectAbove(Flagpole, pos[0]-7, pos[1]); - var rfp = CreateObjectAbove(Flagpole, pos[0]+7, pos[1]); - rfp->SetNeutral(true); - pos = FindMainIslandPosition(120, 20); - CreateObjectAbove(Flagpole, pos[0], pos[1]); - pos = FindMainIslandPosition(nil, nil, true); - CreateObjectAbove(WindGenerator, pos[0], pos[1]); - lorry->CreateContents(Wood, 4); - lorry->CreateContents(Metal, 2); - lorry->CreateContents(Pickaxe, 1); - lorry->CreateContents(Dynamite, 4); - } - - // If still more material is specified, create a larger settlement: sawmill, chemical lab, tools workshop. - // Also fill lorry a bit more with: Barrel (x1), Bucket(x1), Loam(x4), DynamiteBox(x2). - if (amount >= 3) - { - pos = FindMainIslandPosition(nil, nil, true); - CreateObjectAbove(Sawmill, pos[0], pos[1]); - pos = FindMainIslandPosition(nil, nil, true); - CreateObjectAbove(ChemicalLab, pos[0], pos[1]); - pos = FindMainIslandPosition(nil, nil, true); - CreateObjectAbove(ToolsWorkshop, pos[0], pos[1]); - - lorry->CreateContents(Barrel, 1); - lorry->CreateContents(Bucket, 1); - lorry->CreateContents(Loam, 4); - lorry->CreateContents(DynamiteBox, 1); - lorry->CreateContents(WallKit, 4); - //lorry->CreateContents(Boompack, 1); - } - - return; -} - -// Tries to find a position on the main island. -private func FindMainIslandPosition(int xpos, int sep, bool no_struct) -{ - if (xpos == nil) - xpos = 0; - if (sep == nil) - sep = 250; - - for (var i = 0; i < 100; i++) - { - var x = main_island_x + xpos + Random(sep*2+1)-sep; - var y = main_island_y / 2 - 220; - - while (!GBackSolid(x, y) && y < LandscapeHeight()*3/4) - y++; - - if (GetMaterial(x,y) == Material("Brick")) continue; // not on goal platform - - if (!no_struct || !FindObject(Find_Or(Find_Category(C4D_Structure), Find_Func("IsFlagpole"), Find_ID(WindGenerator)), Find_Distance(60, x, y))) - break; - } - - return [x, y]; -} - - -/* Outro */ - -// Goal fulfilled -public func OnGoalsFulfilled() -{ - SetNextMission("Missions.ocf/TreasureHunt.ocs"); - GainScenarioAchievement("Done"); - GainMissionAccess("S2Sea"); - StartSequence("Outro", 0); - // Return true to force goal rule to not call GameOver() yet - return true; -} - - -// Intro helper - -global func Particles_Smoke(...) -{ - var p = inherited(...); - if (g_intro_sky_moving) - { - p.ForceX = -300; - p.DampingX = 800; - } - return p; -} diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/SectIntro.ocg/Map.bmp b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/SectIntro.ocg/Map.bmp deleted file mode 100644 index 2c28be1e6900d5acd0fbe49c02bb1c233741c226..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4646 zcmeH`KWi016vdB@j2RtS7+F|-poL&U^hF`0k;seBA~x}fjfF-06N`Y5h=Gt8k`PhB zCLj?@yCBAIpx9dp`2sd}f)H6FkbzWV&lA?fhJKa0Z{PU@J9r9gAro`J#SF{Of#qG@xHuvMuKVJ)_CNSV%<5)$7`&_5F3fIf5d9`Eu4ma&W)az<2^UOL?2ep6w)|j1IWoS@Rnt+`MCw% zd;CP!T3vhnLDSRIdieH>mfw8_8$0y8EZh+<-W3Zj@Y|d7%;EHL>k+-jc&VR1zN>P~ zR}^Zuht%#LkSUx@eOA#2bHi7X9|=op#81&nQSHd)zHTt*D36m9bLdhO6}*LZsAI`9 z4lXzgVvd-lPsjW*t138WIr=PfW(S+2s4+<#ha4wQT~p8D!O~yk;4G(L4!>hwZ|T5# zW=!DEsp;Tib{?3tj{kxBp1K}g0<%S==PbriL<#;U@Eynh4*sXa1K1QT9hfv?@P7vX zJ^4NS5BQ%Fo5BBt`2+kt{O{oZB>tbl{~rFo#D9;@>-gWpe@Fi*_yo=l{%7Q^;D2CV zN4*69Jz8Yc3C!L?__f6at>C{SZxa7!@c$Y9ui$?Ip97QPP0DwM-Wl^-?ovRnPxv3; z+kUkMCo_ZF#s7F?J(zC)kVe}B=wsR2h-V-Ft2`X7s3G_B^tTB*Yo11dMuA3wMuA3wMuA3wMuA3wMuA3w JMuGoLf#04SEvoSetColor(0xa04000); - this.pilot = CreateObjectAbove(Clonk, 100, 100, NO_OWNER); - this.pilot->MakeInvincible(); - this.pilot->MakeNonFlammable(); - this.pilot->SetSkin(2); - this.pilot->Enter(this.plane); - this.pilot->SetAction("Walk"); - - this.pilot->SetName("Pyrit"); - this.pilot->SetColor(0xff0000); - this.pilot->SetDir(DIR_Left); - this.pilot->SetObjectLayer(this.pilot); - - this.plane.FxIntPlaneTimer = this.Intro_PlaneTimer; - RemoveEffect("IntPlane", this.plane); - AddEffect("IntPlane",this.plane,1,1,this.plane); - this.plane->FaceRight(); - this.plane->StartInstantFlight(90, 0); - g_intro_sky_moving = true; - - - SetViewTarget(this.plane); - - return ScheduleNext(100, 1); -} - -func Intro_PlaneTimer(...) -{ - // Plane flight overload: Just move sky and have plane do turbulent movement during initial part of intro - var rv = Call(Plane.FxIntPlaneTimer, ...); - if (g_intro_sky_moving) - { - if (!Random(4)) this.rdir = BoundBy((80+Random(21)-GetR())/5,-1,1); - SetXDir(); SetYDir(GetR()*2-GetY()+Random(5),10); - } - return rv; -} - -func Intro_JoinPlayer(int plr) -{ - if (g_intro_done) return false; // too late for join - just join on island - for(var index = 0, crew; crew = GetCrew(plr, index); ++index) crew->Enter(this); - return true; -} - -func Intro_1() -{ - MessageBoxAll("$Intro1$", GetHero(), true); // y clouds? - return ScheduleNext(200); -} - -func Intro_2() -{ - MessageBoxAll("$Intro2$", this.pilot, true); // cuz u told me - return ScheduleNext(300); -} - -func Intro_3() -{ - MessageBoxAll("$Intro3$", GetHero(), true); // 2 turbulent - return ScheduleNext(200); -} - -func Intro_4() -{ - MessageBoxAll("$Intro4$", this.pilot, true); // cuz condensation - return ScheduleNext(380); -} - -func Intro_5() -{ - MessageBoxAll("$Intro5$", GetHero(), true); // go lower now - return ScheduleNext(300); -} - -func Intro_6() -{ - MessageBoxAll("$Intro6$", this.pilot, true); // fuk u - return ScheduleNext(450); -} - -func Intro_7() -{ - MessageBoxAll("$Intro7$", this.pilot, true); // u fly - return ScheduleNext(200); -} - -func Intro_8() -{ - MessageBoxAll("$Intro8$", GetHero(), true); // ... - return ScheduleNext(100); -} - -func Intro_9() -{ - MessageBoxAll("$Intro9$", GetHero(), true); // ok - return ScheduleNext(150); -} - -func Intro_10() -{ - g_intro_sky_moving = false; - this.plane.rdir = 0; - this.plane->StartInstantFlight(this.plane->GetR(), 15); - MessageBoxAll("$Intro10$", GetHero(), true); // aaaah - for (var i=0,plr; iExit(); - crew->SetPosition(this.plane->GetX()+10, this.plane->GetY()); - crew->SetAction("Tumble"); - if (!index) SetPlrView(plr, crew); - } - } - SetViewTarget(); - return ScheduleNext(200, 11); -} - -func Intro_11() -{ - g_intro_done = true; - LoadScenarioSection("main"); - SetWind(0); - SetSkyParallax(0, 20, 20, 0, 0); - GameCall("PostIntroInitialize"); - for (var i=0,plr; iSetPosition(g_tuesday_pos[0],-100); - crew->SetXDir(-10); crew->SetYDir(-30); - if (!index) SetPlrView(plr, crew); - } - } - return ScheduleNext(200, 20); -} - -func Intro_20() -{ - MessageBoxAll("$Intro20$", GetHero(), true); // ouch - for (var i=0,plr; iSetCommand("MoveTo", nil, g_tuesday_pos[0]-15+Random(20), g_tuesday_pos[1]); - } - } - return ScheduleNext(300); -} - -func Intro_21() -{ - Dialogue->SetSpeakerDirs(npc_tuesday, GetHero()); - MessageBoxAll("$Intro21$", npc_tuesday, true); // hi friend - return ScheduleNext(300); -} - -func Intro_22() -{ - MessageBoxAll("$Intro22$", GetHero(), true); // where is plane? - return ScheduleNext(300); -} - -func Intro_23() -{ - MessageBoxAll("$Intro23$", npc_tuesday, true); // 2 cloudy 4 plane - return ScheduleNext(350); -} - -func Intro_24() -{ - MessageBoxAll("$Intro24$", GetHero(), true); // but i need plane - return ScheduleNext(250); -} - -func Intro_25() -{ - MessageBoxAll("$Intro25$", npc_tuesday, true); // u stay here - return ScheduleNext(300); -} - -func Intro_26() -{ - MessageBoxAll("$Intro26$", GetHero(), true); // make fire? - return ScheduleNext(300); -} - -func Intro_27() -{ - MessageBoxAll("$Intro27$", npc_tuesday, true); // fire sux - return ScheduleNext(400); -} - -func Intro_28() -{ - MessageBoxAll("$Intro28$", npc_tuesday, true); // use communicator - return ScheduleNext(300); -} - -func Intro_29() -{ - MessageBoxAll("$Intro29$", GetHero(), true); // ok. where? - return ScheduleNext(250); -} - -func Intro_30() -{ - MessageBoxAll("$Intro30$", npc_tuesday, true); // not built yet - return ScheduleNext(450); -} - -func Intro_31() -{ - MessageBoxAll("$Intro31$", npc_tuesday, true); // go east and finish it with metal+gems - return ScheduleNext(400); -} - -func Intro_32() -{ - MessageBoxAll("$Intro32$", GetHero(), true); // where gems? - return ScheduleNext(250); -} - -func Intro_33() -{ - MessageBoxAll("$Intro33$", npc_tuesday, true); // fish say gems in sea - return ScheduleNext(400); -} - -func Intro_34() -{ - MessageBoxAll("$Intro34$", GetHero(), true); // fish talk? - return ScheduleNext(150); -} - -func Intro_35() -{ - MessageBoxAll("$Intro35$", npc_tuesday, true); // coconut talk! - return ScheduleNext(200); -} - -func Intro_36() -{ - MessageBoxAll("$Intro36$", GetHero(), true); // ok... - return ScheduleNext(150); -} - -func Intro_37() -{ - npc_tuesday->SetDialogue("Tuesday", true); - return Stop(); -} diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/SeqOutro.c b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/SeqOutro.c deleted file mode 100644 index 30bfb448b..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/SeqOutro.c +++ /dev/null @@ -1,106 +0,0 @@ -#appendto Sequence - -func Outro_Start() -{ - this.communicator = FindObject(Find_Func("IsCrystalCommunicator")); - if (!this.communicator) return false; // what? - this.hero = this.communicator->FindObject(Find_ID(Clonk), Find_OCF(OCF_Alive), this.communicator->Sort_Distance()); - SetViewTarget(this.communicator); - // Outro - ScheduleCall(nil, this.Outro_Fade2Darkness, 15, 32, {}); - Dialogue->MessageBoxAll("$Outro1$", this.hero, true); // ok turn it on - return ScheduleNext(100); -} - -func Outro_1() -{ - this.communicator->StartCommunication(); // 250 frames - return ScheduleNext(650); -} - -func Outro_2() -{ - Dialogue->MessageBoxAll("$Outro2$", this.hero, true); // let's see if it works - return ScheduleNext(50); -} - -func Outro_3() -{ - this.communicator->SendCode("...---..."); // 159 frames - return ScheduleNext(200); -} - -func Outro_4() -{ - this.communicator->StopCommunication(); - MessageBoxAll("$Outro3$", this.hero, true); // i wonder if anyone has heard us - this.plane = CreateObjectAbove(Plane, 100, main_island_y-100); - this.plane->SetContactDensity(85); // only collision with brick for proper landing - this.pilot = CreateObjectAbove(Clonk, 100, 100); - this.pilot->MakeInvincible(); - this.pilot->SetSkin(2); - this.pilot->Enter(this.plane); - this.pilot->SetAction("Walk"); - this.pilot->SetName("Pyrit"); - this.pilot->SetColor(0xff0000); - this.pilot->SetDir(DIR_Right); - this.plane->FaceRight(); - this.plane->StartInstantFlight(90, 15); - return ScheduleNext(5); -} - -func Outro_5() -{ - // Wait for plane to arrive - if (this.plane->GetX() < this.communicator->GetX() - 200) return ScheduleSame(5); - // Plane in range! Ensure players see it. - SetPlayerZoomByViewRange(NO_OWNER, 500, 350, PLRZOOM_Direct | PLRZOOM_LimitMax); - MessageBoxAll("$Outro4$", this.pilot, true); // hey, our friends! - return ScheduleNext(100); -} - -func Outro_6() -{ - MessageBoxAll("$Outro5$", this.hero, true); // we're saved! - this.plane->StartInstantFlight(245, 15); - this.plane->SetContactDensity(C4M_Solid); - return ScheduleNext(60); -} - -func Outro_7() -{ - this.plane->StartInstantFlight(280, 5); - return ScheduleNext(15); -} - -func Outro_8() -{ - this.plane->CancelFlight(); - return ScheduleNext(40); -} - -func Outro_9() -{ - this.pilot->Exit(); - MessageBoxAll("$Outro6$", this.pilot, true); // hop on everyone! - return ScheduleNext(100); -} - -func Outro_10() -{ - this.plane->FaceRight(); - return ScheduleNext(100); -} - -func Outro_11() -{ - Sound("Fanfare"); - return GameOver(); -} - -func Outro_Fade2Darkness(proplist v) -{ - v.t += 8; - var fade_val = Max(0xff-v.t); - SetSkyAdjust(RGB(fade_val,fade_val,fade_val)); -} diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/StringTblDE.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/StringTblDE.txt deleted file mode 100644 index 3afb27cdc..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/StringTblDE.txt +++ /dev/null @@ -1,48 +0,0 @@ -Intro1=Pyrit, warum müssen wir in den Wolken fliegen? -Intro2=Du sagtest, wir sollen höher fliegen, nachdem wir fast im Vulkan gelandet waren. -Intro3=Es ist schrecklich turbulent hier. -Intro4=Das liegt daran, dass die Kondensation des Wassers in den Wolken Wärme freisetzt, die die Luft weiter aufsteigen lässt. -Intro5=Danke für den Vortrag. Können wir nun bitte tiefer fliegen? -Intro6=Erst ist es zu turbulent wenn ich tief fliege. Nun ist es zu turbulent wenn ich hoch fliege. -Intro7=Warum steuerst du das Flugzeug nicht einfach selber? -Intro8=... -Intro9=Okay. Wir tauschen Plätze! -Intro10=Aaaah - -Intro20=Autsch. -Intro21=Oh. Ein Freund ist vom Himmel gefallen. Hallo Freund! Mein Name ist Dienstag. -Intro22=Verdammt. Hast du unser Flugzeug gesehen? Ich bin versehentlich raus gefallen. -Intro23=Der Himmel ist hier stets bewölkt. Wir sehen kein Flugzeug und kein Flugzeug sieht uns. -Intro24=Ugh. Aber Pyrit muss uns irgendwie finden. -Intro25=Was auf der Insel strandet bleibt auf der Insel. Genau wie ich. -Intro26=Könnten wir nicht ein Feuer machen oder so? -Intro27=Feuer? Das wird nicht helfen. Kokosnussholz brennt schlecht und das Feuer würde durch die Wolken eh keiner sehen. -Intro28=Aber...wir könnten meinen Kristallkommunikator benutzen! -Intro29=Klingt gut. Wo steht der? -Intro30=Ich bin glücklich auf meiner Insel. Warum sollte ich ein Kommunikationsgerät bauen? Ich habe die Pläne fertig, aber mich nie bemüht es auch zu bauen. -Intro31=Die Baustelle und die Pläne befinden sich am Östlichen Ende dieser Insel. Du brauchst nur etwas Metall und ein paar Edelsteine. -Intro32=Metall klingt einfach. Aber wo finde ich Edelsteine? -Intro33=Die Fische sprechen manchmal über glitzernde Edelsteine tief unten im Meer. Vielleicht kannst du die abbauen? -Intro34=Fische sprechen mit dir? -Intro35=Wenn du nur zuhörst, sprechen sogar die Kokosnüsse! -Intro36=Okay...ich schaue mal nach der Baustelle. - -Tuesday1=Hallo, Freund. Wie kann ich dir helfen? -TuesdayQCommunicator=Wie benutze ich den Kommunikator? -TuesdayACommunicator=Bringe einfach das nötige Material zur Baustelle. Es wird automatisch funktionieren, wenn du es fertig stellst. -TuesdayQGems=Wo finde ich Edelsteine? -TuesdayAGems=Tauche ins Meer hinein. Die größten Schätze lagern tief unten und sind schwer erreichbar. -TuesdayQFish=Kannst du die Fische weg schicken? -TuesdayAFish=Ich bin nur ein Zuhörer. Ich belaste die freien Geschöpfe dieser Welt nicht mit unnötigen Verboten. -TuesdayQWater=Das wasser ist zu Tief. Wie komme ich an die Edelsteine? -TuesdayAWater=Du könntest probieren, Wandbausätze{{WallKit}} in der Werkzeughütte{{ToolsWorkshop}} zu bauen. Wandbausätze können benutzt werden, um stabile Wände auch unter Wasser zu errichten. Diese schützen dich vor den Fischen und schaffen Raum zum Atmen. -TuesdayAWater2=Mit Wandbausätzen und einer Pumpe solltest du die Edelsteine erreichen können. -TuesdayQBye=Tschüss. - -Outro1=Die Maschine ist fertig. Ob sie wohl funktioniert? -Outro2=Das sieht gut aus. Ich sende ein Notsignal... -Outro3=Hoffentlich hat uns jemand gehört. -Outro4=Hey, sind das nicht unsere gestrandeten Freunde? -Outro5=Hurra, wir sind gerettet! -Outro6=Alles einsteigen! Wir fliegen zum Goldenen Berg. - diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/StringTblUS.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/StringTblUS.txt deleted file mode 100644 index 83c2b432a..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/System.ocg/StringTblUS.txt +++ /dev/null @@ -1,47 +0,0 @@ -Intro1=Pyrit, why do we have to fly in the clouds? -Intro2=You told me to fly higher after we almost crashed into the volcano. -Intro3=It's horribly turbulent in here. -Intro4=That's because water condensation in the cloud frees up energy which heats up the air. -Intro5=Thanks for the lecture. Now can we please fly lower again? -Intro6=First it's too turbulent when i fly low over the volcano and now it's too turbulent when i fly up high in the clouds. -Intro7=Why don't you just steer the plane yourself? -Intro8=... -Intro9=Alright. Let's swap places. -Intro10=Aaaah - -Intro20=Ouch. -Intro21=Oh, a friend has fallen from the sky. Hello friend! My name is Tuesday. -Intro22=Damn. Have you seen our airplane? I accidentally dropped out of it. -Intro23=The sky is always cloudy here. We won't see any planes and planes won't see us. -Intro24=Ugh. But i need Pyrit to find me somehow. -Intro25=What lands on the island stays on the island. Just like me. -Intro26=Isn't there any way we could make a fire or something? -Intro27=Fire? That will do no good. Coconut wood doesn't burn well and it won't be seen through the clouds. -Intro28=But...we could use my crystal communicator! -Intro29=Sounds good. Where is it? -Intro30=I'm happy on this island. Why should i build a communication device? I've made plans but I haven't bothered to finish building it. -Intro31=The site and plans how to finish it are at the eastern end of this island. It just needs some metal and some gems. -Intro32=Metal sounds easy enough? Where can I find the gems? -Intro33=The fish sometimes talk about gem reserves deep below the ocean ground. Maybe you can mine those? -Intro34=Fish talk to you? -Intro35=If you listen carefully, even coconuts talk! -Intro36=Okay...i'll see if i can finish this construction. - -Tuesday1=Hello, friend. How can I help you? -TuesdayQCommunicator=How do I use the communicator? -TuesdayACommunicator=Just bring the necessery materials to the construction site. It should work automatically when completed. -TuesdayQGems=Where can I find gems? -TuesdayAGems=Try to dive underground. -TuesdayQFish=Can you tell the fish to go away? -TuesdayAFish=I'm a listener. I do not force restraints onto the free creatures of this world. -TuesdayQWater=The water is too deep. How can I reach the gems? -TuesdayAWater=You could try and build wall kits{{WallKit}} in the tools workshop{{ToolsWorkshop}}. Wall kits can be used to construct stable walls under water protect you from fish and give some room to breath. -TuesdayAWater2=Using wall kits and a pump, you might be able to solve your problems. -TuesdayQBye=Bye - -Outro1=The machine is done! I wonder whether it works. -Outro2=Looks good. Let's send a rescue signal... -Outro3=I wonder if anyone has heard us. -Outro4=Hey, isn't that our stranded friends? -Outro5=Hooray, we're saved! -Outro6=Hop on everyone, we're heading for the Golden Mountain! diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Title.txt b/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Title.txt deleted file mode 100644 index 84a978b8c..000000000 --- a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Title.txt +++ /dev/null @@ -1,2 +0,0 @@ -DE:AmbienceTest: Tiefseemine -US:AmbienceTest: Deep sea mining \ No newline at end of file diff --git a/planet/Missions.ocf/Crash.ocs/Objects.c b/planet/Missions.ocf/Crash.ocs/Objects.c index f86b96aa8..0920ab8cc 100644 --- a/planet/Missions.ocf/Crash.ocs/Objects.c +++ b/planet/Missions.ocf/Crash.ocs/Objects.c @@ -2,6 +2,8 @@ func InitializeObjects() { + CreateObject(Ambience); + CreateObject(Grass, 555, 550); CreateObjectAbove(Grass, 533, 550); CreateObjectAbove(Grass, 1306, 706); diff --git a/planet/Missions.ocf/DeepSeaMining.ocs/Script.c b/planet/Missions.ocf/DeepSeaMining.ocs/Script.c index 2c1c9064b..f7d9b61ee 100644 --- a/planet/Missions.ocf/DeepSeaMining.ocs/Script.c +++ b/planet/Missions.ocf/DeepSeaMining.ocs/Script.c @@ -33,6 +33,7 @@ protected func PostIntroInitialize() } // Initialize different parts of the scenario. + CreateObject(Ambience); InitEnvironment(); InitVegetation(); InitAnimals(); diff --git a/planet/Missions.ocf/Raid.ocs/Objects.c b/planet/Missions.ocf/Raid.ocs/Objects.c index 230821e5f..0e24fa7be 100644 --- a/planet/Missions.ocf/Raid.ocs/Objects.c +++ b/planet/Missions.ocf/Raid.ocs/Objects.c @@ -4,6 +4,8 @@ static g_chemical, g_cabin, g_sawmill, g_workshop, g_windmill, g_flagpole, npc_n func InitializeObjects() { + CreateObject(Ambience); + var Rule_BaseRespawn001 = CreateObject(Rule_BaseRespawn); Rule_BaseRespawn001->SetInventoryTransfer(true); Rule_BaseRespawn001->SetFreeCrew(true); diff --git a/planet/Missions.ocf/TreasureHunt.ocs/Objects.c b/planet/Missions.ocf/TreasureHunt.ocs/Objects.c index 73c2f29dd..5d8e88811 100644 --- a/planet/Missions.ocf/TreasureHunt.ocs/Objects.c +++ b/planet/Missions.ocf/TreasureHunt.ocs/Objects.c @@ -1,13 +1,9 @@ /* Automatically created objects file */ -static npc_dagobert, npc_tarzan, g_golden_shovel, g_flagpole; +static g_flagpole, npc_dagobert, npc_tarzan, g_golden_shovel; func InitializeObjects() { - var Rule_BaseRespawn001 = CreateObject(Rule_BaseRespawn, 0, 0); - Rule_BaseRespawn001->SetInventoryTransfer(true); - Rule_BaseRespawn001->SetFreeCrew(true); - CreateObjectAbove(Grass, 1627, 396); CreateObjectAbove(Grass, 1636, 385); CreateObjectAbove(Grass, 1786, 469); @@ -15,35 +11,39 @@ func InitializeObjects() CreateObjectAbove(Grass, 1564, 493); CreateObjectAbove(Grass, 1537, 525); CreateObjectAbove(Grass, 1585, 486); - CreateObjectAbove(Grass, 1739, 430); + CreateObject(Grass, 1739, 429); - var Column0010 = CreateObjectAbove(Column, 779, 591); - Column0010->SetClrModulation(0xffffd0d0); - Column0010->SetMeshMaterial("AncientColumn", 0); - Column0010.Plane = 50; + var Chest001 = CreateObjectAbove(Chest, 1002, 313); + Chest001.Plane = 50; - var Chest0009 = CreateObjectAbove(Chest, 1002, 313); - Chest0009.Plane = 50; + var Column001 = CreateObjectAbove(Column, 779, 591); + Column001->SetClrModulation(0xffffd0d0); + Column001->SetMeshMaterial("AncientColumn", 0); + Column001.Plane = 50; - CreateObject(Rule_TeamAccount, 0, 0); + var Rule_BaseRespawn001 = CreateObject(Rule_BaseRespawn); + Rule_BaseRespawn001->SetInventoryTransfer(true); + Rule_BaseRespawn001->SetFreeCrew(true); - CreateObject(Rule_NoPowerNeed, 0, 0); + CreateObject(Rule_TeamAccount); - var LargeCaveMushroom0013 = CreateObjectAbove(LargeCaveMushroom, 1308, 1038); - LargeCaveMushroom0013->SetClrModulation(0xffe4effc); - var LargeCaveMushroom0017 = CreateObjectAbove(LargeCaveMushroom, 1345, 1028); - LargeCaveMushroom0017->SetClrModulation(0xffe1e3ee); - LargeCaveMushroom0017->SetMeshMaterial("FlyAmanitaMushroom", 0); - var LargeCaveMushroom0021 = CreateObjectAbove(LargeCaveMushroom, 1399, 1025); - LargeCaveMushroom0021->SetClrModulation(0xfff3e3e7); - LargeCaveMushroom0021->SetMeshMaterial("FlyAmanitaMushroom", 0); - var LargeCaveMushroom0025 = CreateObjectAbove(LargeCaveMushroom, 1464, 999); - LargeCaveMushroom0025->SetClrModulation(0xffe0e6dd); - var LargeCaveMushroom0029 = CreateObjectAbove(LargeCaveMushroom, 1450, 1012); - LargeCaveMushroom0029->SetClrModulation(0xffe4eae2); - var LargeCaveMushroom0033 = CreateObjectAbove(LargeCaveMushroom, 1523, 993); - LargeCaveMushroom0033->SetClrModulation(0xffe2deee); - LargeCaveMushroom0033->SetMeshMaterial("FlyAmanitaMushroom", 0); + CreateObject(Rule_NoPowerNeed); + + var LargeCaveMushroom001 = CreateObjectAbove(LargeCaveMushroom, 1308, 1038); + LargeCaveMushroom001->SetClrModulation(0xffe4effc); + var LargeCaveMushroom002 = CreateObjectAbove(LargeCaveMushroom, 1345, 1028); + LargeCaveMushroom002->SetClrModulation(0xffe1e3ee); + LargeCaveMushroom002->SetMeshMaterial("FlyAmanitaMushroom", 0); + var LargeCaveMushroom003 = CreateObjectAbove(LargeCaveMushroom, 1399, 1025); + LargeCaveMushroom003->SetClrModulation(0xfff3e3e7); + LargeCaveMushroom003->SetMeshMaterial("FlyAmanitaMushroom", 0); + var LargeCaveMushroom004 = CreateObjectAbove(LargeCaveMushroom, 1464, 999); + LargeCaveMushroom004->SetClrModulation(0xffe0e6dd); + var LargeCaveMushroom005 = CreateObjectAbove(LargeCaveMushroom, 1450, 1012); + LargeCaveMushroom005->SetClrModulation(0xffe4eae2); + var LargeCaveMushroom006 = CreateObjectAbove(LargeCaveMushroom, 1523, 993); + LargeCaveMushroom006->SetClrModulation(0xffe2deee); + LargeCaveMushroom006->SetMeshMaterial("FlyAmanitaMushroom", 0); CreateObjectAbove(Trunk, 1000, 313); CreateObjectAbove(Trunk, 1006, 313); @@ -53,12 +53,10 @@ func InitializeObjects() CreateObjectAbove(EnvPack_Guidepost, 81, 743); CreateObjectAbove(EnvPack_BridgeRustic, 591, 356); - CreateObjectAbove(EnvPack_Bag, 506, 968); CreateObjectAbove(EnvPack_Lantern, 356, 458); - - CreateObjectAbove(EnvPack_TreeTrunks, 601, 408); + CreateObject(EnvPack_TreeTrunks, 601, 408); CreateObjectAbove(EnvPack_Rail, 564, 354); CreateObjectAbove(EnvPack_Rail, 616, 356); @@ -73,24 +71,18 @@ func InitializeObjects() CreateObjectAbove(Fern, 1645, 384); CreateObjectAbove(Fern, 1525, 535); - var Branch0066 = CreateObjectAbove(Branch, 1320, 326); - Branch0066->SetR(148); - Branch0066->SetPosition(1320, 329); - var Branch0067 = CreateObjectAbove(Branch, 1327, 298); - Branch0067->SetR(165); - Branch0067->SetPosition(1327, 291); - var Branch0068 = CreateObjectAbove(Branch, 1424, 257); - Branch0068->SetR(108); - Branch0068->SetPosition(1424, 260); - var Branch0069 = CreateObjectAbove(Branch, 1430, 248); - Branch0069->SetR(39); - Branch0069->SetPosition(1430, 240); - var Branch0070 = CreateObjectAbove(Branch, 1413, 262); - Branch0070->SetR(128); - Branch0070->SetPosition(1413, 265); - var Branch0071 = CreateObjectAbove(Branch, 1396, 263); - Branch0071->SetR(-131); - Branch0071->SetPosition(1396, 266); + var Branch001 = CreateObject(Branch, 1320, 329); + Branch001->SetR(148); + var Branch002 = CreateObject(Branch, 1327, 291); + Branch002->SetR(165); + var Branch003 = CreateObject(Branch, 1424, 260); + Branch003->SetR(108); + var Branch004 = CreateObject(Branch, 1430, 240); + Branch004->SetR(39); + var Branch005 = CreateObject(Branch, 1413, 265); + Branch005->SetR(128); + var Branch006 = CreateObject(Branch, 1396, 266); + Branch006->SetR(-131); CreateObjectAbove(SproutBerryBush, 1823, 493); @@ -102,532 +94,455 @@ func InitializeObjects() CreateObjectAbove(Tree_Coniferous, 1864, 464); CreateObjectAbove(Tree_Coniferous, 2788, 680); - var Lichen0093 = CreateObjectAbove(Lichen, 2694, 706); - Lichen0093->SetAction("Grown"); + var Lichen001 = CreateObjectAbove(Lichen, 2694, 706); + Lichen001->SetAction("Grown"); CreateObjectAbove(BigRock, 1301, 500); CreateObjectAbove(BigRock, 1207, 282); - CreateObjectAbove(BigRock, 1291, 263); + CreateObject(BigRock, 1291, 260); + var Amethyst001 = CreateObjectAbove(Amethyst, 803, 583); + Amethyst001.Plane = 190; - var Amethyst0099 = CreateObjectAbove(Amethyst, 803, 583); - Amethyst0099.Plane = 190; + var Chest002 = CreateObjectAbove(Chest, 515, 967); + Chest002.tool_spawn = TeleGlove; + var Chest003 = CreateObjectAbove(Chest, 227, 760); + Chest003.tool_spawn = Pickaxe; + var Chest004 = CreateObjectAbove(Chest, 624, 943); + Chest004.tool_spawn = GrappleBow; + var Chest005 = CreateObjectAbove(Chest, 603, 942); + Chest005.tool_spawn = GrappleBow; + var Chest021 = CreateObjectAbove(Chest, 472, 455); + var Chest010 = CreateObjectAbove(Chest, 546, 383); + var Chest006 = CreateObjectAbove(Chest, 840, 47); + Chest006.tool_spawn = WindBag; + var Chest013 = CreateObjectAbove(Chest, 853, 1574); + var Chest012 = CreateObjectAbove(Chest, 1428, 1542); + var Chest011 = CreateObjectAbove(Chest, 1765, 1191); + var Chest007 = CreateObjectAbove(Chest, 1878, 719); + Chest007.tool_spawn = Axe; + var Chest014 = CreateObjectAbove(Chest, 1943, 714); + var Chest015 = CreateObjectAbove(Chest, 2103, 1119); + var Chest016 = CreateObjectAbove(Chest, 397, 583); + var Chest008 = CreateObjectAbove(Chest, 871, 583); + Chest008->SetMeshMaterial("GoldenChest", 0); + var Chest018 = CreateObjectAbove(Chest, 12, 39); + var Chest017 = CreateObjectAbove(Chest, 2786, 55); + var Chest009 = CreateObjectAbove(Chest, 1830, 486); + Chest009.tool_spawn = Hammer; + var Chest019 = CreateObjectAbove(Chest, 730, 135); + var Chest020 = CreateObjectAbove(Chest, 1626, 1591); - var Chest0101 = CreateObjectAbove(Chest, 515, 967); - Chest0101.tool_spawn = TeleGlove; - var Chest0102 = CreateObjectAbove(Chest, 227, 760); - Chest0102.tool_spawn = Pickaxe; - var Chest0103 = CreateObjectAbove(Chest, 624, 943); - Chest0103.tool_spawn = GrappleBow; - var Chest0104 = CreateObjectAbove(Chest, 603, 942); - Chest0104.tool_spawn = GrappleBow; - var Chest0105 = CreateObjectAbove(Chest, 472, 455); - var Chest0106 = CreateObjectAbove(Chest, 546, 383); - var Chest0107 = CreateObjectAbove(Chest, 840, 47); - Chest0107.tool_spawn = WindBag; - var Chest0108 = CreateObjectAbove(Chest, 853, 1574); - var Chest0109 = CreateObjectAbove(Chest, 1428, 1542); - var Chest0110 = CreateObjectAbove(Chest, 1765, 1191); - var Chest0111 = CreateObjectAbove(Chest, 1878, 719); - Chest0111.tool_spawn = Axe; - var Chest0112 = CreateObjectAbove(Chest, 1943, 714); - var Chest0113 = CreateObjectAbove(Chest, 2103, 1119); - var Chest0114 = CreateObjectAbove(Chest, 397, 583); - var Chest0115 = CreateObjectAbove(Chest, 871, 583); - Chest0115->SetMeshMaterial("GoldenChest", 0); - var Chest0116 = CreateObjectAbove(Chest, 12, 39); - var Chest0117 = CreateObjectAbove(Chest, 2786, 55); - var Chest0118 = CreateObjectAbove(Chest, 1830, 486); - Chest0118.tool_spawn = Hammer; - var Chest0119 = CreateObjectAbove(Chest, 730, 135); - var Chest0120 = CreateObjectAbove(Chest, 1626, 1591); + var StoneDoor001 = CreateObject(StoneDoor, 940, 1132); + StoneDoor001->SetComDir(COMD_Down); + StoneDoor001->MakeInvincible(); + var StoneDoor002 = CreateObject(StoneDoor, 1084, 1132); + StoneDoor002->SetComDir(COMD_Down); + StoneDoor002->MakeInvincible(); + var StoneDoor003 = CreateObject(StoneDoor, 564, 436); + StoneDoor003->SetComDir(COMD_Down); + StoneDoor003->MakeInvincible(); + var StoneDoor004 = CreateObject(StoneDoor, 843, 716); + StoneDoor004->SetComDir(COMD_Down); + StoneDoor004->MakeInvincible(); + var StoneDoor005 = CreateObject(StoneDoor, 1058, 700); + StoneDoor005->SetComDir(COMD_Down); + StoneDoor005->MakeInvincible(); + var StoneDoor006 = CreateObject(StoneDoor, 1092, 1028); + StoneDoor006->SetComDir(COMD_Down); + StoneDoor006->MakeInvincible(); + var StoneDoor007 = CreateObject(StoneDoor, 1892, 932); + StoneDoor007->SetComDir(COMD_Down); + StoneDoor007->MakeInvincible(); + var StoneDoor008 = CreateObject(StoneDoor, 813, 716); + StoneDoor008->SetComDir(COMD_Down); + StoneDoor008->MakeInvincible(); + var StoneDoor009 = CreateObject(StoneDoor, 781, 716); + StoneDoor009->SetComDir(COMD_Down); + StoneDoor009->SetClrModulation(0xffa0a0a0); + var StoneDoor010 = CreateObject(StoneDoor, 692, 748); + StoneDoor010->SetComDir(COMD_Down); + StoneDoor010->MakeInvincible(); + var StoneDoor011 = CreateObject(StoneDoor, 684, 332); + StoneDoor011->SetComDir(COMD_Down); + StoneDoor011->MakeInvincible(); - var StoneDoor0121 = CreateObjectAbove(StoneDoor, 940, 1151); - StoneDoor0121->SetComDir(COMD_Down); - StoneDoor0121->MakeInvincible(); - var StoneDoor0123 = CreateObjectAbove(StoneDoor, 1084, 1151); - StoneDoor0123->SetComDir(COMD_Down); - StoneDoor0123->MakeInvincible(); - var StoneDoor0125 = CreateObjectAbove(StoneDoor, 564, 455); - StoneDoor0125->SetComDir(COMD_Down); - StoneDoor0125->MakeInvincible(); - var StoneDoor0127 = CreateObjectAbove(StoneDoor, 843, 735); - StoneDoor0127->SetComDir(COMD_Down); - StoneDoor0127->MakeInvincible(); - var StoneDoor0129 = CreateObjectAbove(StoneDoor, 1058, 719); - StoneDoor0129->SetComDir(COMD_Down); - StoneDoor0129->MakeInvincible(); - var StoneDoor0131 = CreateObjectAbove(StoneDoor, 1092, 1047); - StoneDoor0131->SetComDir(COMD_Down); - StoneDoor0131->MakeInvincible(); - var StoneDoor0133 = CreateObjectAbove(StoneDoor, 1892, 951); - StoneDoor0133->SetComDir(COMD_Down); - StoneDoor0133->MakeInvincible(); - var StoneDoor0135 = CreateObjectAbove(StoneDoor, 813, 735); - StoneDoor0135->SetComDir(COMD_Down); - StoneDoor0135->MakeInvincible(); - var StoneDoor0137 = CreateObjectAbove(StoneDoor, 781, 735); - StoneDoor0137->SetComDir(COMD_Down); - StoneDoor0137->SetClrModulation(0xffa0a0a0); - var StoneDoor0138 = CreateObjectAbove(StoneDoor, 692, 767); - StoneDoor0138->SetComDir(COMD_Down); - StoneDoor0138->MakeInvincible(); - var StoneDoor0140 = CreateObjectAbove(StoneDoor, 684, 351); - StoneDoor0140->SetComDir(COMD_Down); - StoneDoor0140->MakeInvincible(); - - var SpinWheel0142 = CreateObjectAbove(SpinWheel, 589, 457); - SpinWheel0142->SetMeshMaterial("SpinWheelGearRed", 0); - SpinWheel0142->SetStoneDoor(StoneDoor0121); - var SpinWheel0143 = CreateObjectAbove(SpinWheel, 611, 456); - SpinWheel0143->SetMeshMaterial("SpinWheelGearBlue", 0); - SpinWheel0143->SetStoneDoor(StoneDoor0123); - var SpinWheel0144 = CreateObjectAbove(SpinWheel, 619, 410); - SpinWheel0144->SetMeshMaterial("SpinWheelBaseAlt", 1); - SpinWheel0144->SetStoneDoor(StoneDoor0125); - var SpinWheel0145 = CreateObjectAbove(SpinWheel, 1223, 1553); - SpinWheel0145->SetStoneDoor(StoneDoor0129); - var SpinWheel0146 = CreateObjectAbove(SpinWheel, 1117, 1048); - SpinWheel0146->SetStoneDoor(StoneDoor0131); - var SpinWheel0147 = CreateObjectAbove(SpinWheel, 2761, 690); - SpinWheel0147->SetMeshMaterial("SpinWheelBaseAlt", 1); - SpinWheel0147->SetStoneDoor(StoneDoor0135); - var SpinWheel0148 = CreateObjectAbove(SpinWheel, 1850, 1463); - SpinWheel0148->SetMeshMaterial("SpinWheelGearRed", 0); - SpinWheel0148->SetMeshMaterial("SpinWheelBaseAlt", 1); - SpinWheel0148->SetStoneDoor(StoneDoor0127); - var SpinWheel0149 = CreateObjectAbove(SpinWheel, 2793, 1521); - SpinWheel0149->SetMeshMaterial("SpinWheelGearRed", 0); - SpinWheel0149->SetMeshMaterial("SpinWheelBaseAlt", 1); - SpinWheel0149->SetStoneDoor(StoneDoor0133); - var SpinWheel0150 = CreateObjectAbove(SpinWheel, 830, 735); - SpinWheel0150->SetStoneDoor(StoneDoor0138); - var SpinWheel0151 = CreateObjectAbove(SpinWheel, 703, 352); - SpinWheel0151->SetMeshMaterial("SpinWheelBaseAlt", 1); - SpinWheel0151->SetStoneDoor(StoneDoor0140); + var SpinWheel001 = CreateObjectAbove(SpinWheel, 589, 457); + SpinWheel001->SetMeshMaterial("SpinWheelGearRed", 0); + SpinWheel001->SetStoneDoor(StoneDoor001); + var SpinWheel002 = CreateObjectAbove(SpinWheel, 611, 456); + SpinWheel002->SetMeshMaterial("SpinWheelGearBlue", 0); + SpinWheel002->SetStoneDoor(StoneDoor002); + var SpinWheel003 = CreateObjectAbove(SpinWheel, 619, 410); + SpinWheel003->SetMeshMaterial("SpinWheelBaseAlt", 1); + SpinWheel003->SetStoneDoor(StoneDoor003); + var SpinWheel004 = CreateObjectAbove(SpinWheel, 1223, 1553); + SpinWheel004->SetStoneDoor(StoneDoor005); + var SpinWheel005 = CreateObjectAbove(SpinWheel, 1117, 1048); + SpinWheel005->SetStoneDoor(StoneDoor006); + var SpinWheel006 = CreateObjectAbove(SpinWheel, 2761, 690); + SpinWheel006->SetMeshMaterial("SpinWheelBaseAlt", 1); + SpinWheel006->SetStoneDoor(StoneDoor008); + var SpinWheel007 = CreateObjectAbove(SpinWheel, 1850, 1463); + SpinWheel007->SetMeshMaterial("SpinWheelGearRed", 0); + SpinWheel007->SetMeshMaterial("SpinWheelBaseAlt", 1); + SpinWheel007->SetStoneDoor(StoneDoor004); + var SpinWheel008 = CreateObjectAbove(SpinWheel, 2793, 1521); + SpinWheel008->SetMeshMaterial("SpinWheelGearRed", 0); + SpinWheel008->SetMeshMaterial("SpinWheelBaseAlt", 1); + SpinWheel008->SetStoneDoor(StoneDoor007); + var SpinWheel009 = CreateObjectAbove(SpinWheel, 830, 735); + SpinWheel009->SetStoneDoor(StoneDoor010); + var SpinWheel010 = CreateObjectAbove(SpinWheel, 703, 352); + SpinWheel010->SetMeshMaterial("SpinWheelBaseAlt", 1); + SpinWheel010->SetStoneDoor(StoneDoor011); CreateObjectAbove(Pump, 1027, 1152); CreateObjectAbove(Sawmill, 1259, 1047); - var ToolsWorkshop0156 = CreateObjectAbove(ToolsWorkshop, 1169, 903); + var ToolsWorkshop001 = CreateObjectAbove(ToolsWorkshop, 1169, 903); - var Column0158 = CreateObjectAbove(Column, 779, 488); - Column0158->SetR(180); - Column0158->SetClrModulation(0xffffd0d0); - Column0158->SetMeshMaterial("AncientColumn", 0); - Column0158->SetPosition(779, 488); - var Column0159 = CreateObjectAbove(Column, 1419, 217); - Column0159->SetMeshMaterial("AncientColumn", 0); - CreateObjectAbove(Column, 1386, 616); + var Column002 = CreateObject(Column, 779, 488); + Column002->SetR(180); + Column002->SetClrModulation(0xffffd0d0); + Column002->SetMeshMaterial("AncientColumn", 0); + var Column003 = CreateObject(Column, 1419, 217); + Column003->SetMeshMaterial("AncientColumn", 0); + CreateObject(Column, 1386, 616); CreateObjectAbove(Ruin_Windmill, 1678, 375); CreateObjectAbove(Ruin_WoodenCabin, 1199, 1046); - var Idol0163 = CreateObjectAbove(Idol, 1045, 721); - Idol0163->SetMeshMaterial("IdolGrayColor", 0); + var Idol001 = CreateObjectAbove(Idol, 1045, 721); + Idol001->SetMeshMaterial("IdolGrayColor", 0); g_flagpole = CreateObjectAbove(Flagpole, 210, 1185); - g_flagpole->SetNeutral(true); g_flagpole.StaticSaveVar = "g_flagpole"; + g_flagpole->SetNeutral(true); - var LotsOfCoins0164 = CreateObjectAbove(LotsOfCoins, 805, 592); - LotsOfCoins0164.Plane = 200; + var LotsOfCoins001 = CreateObject(LotsOfCoins, 805, 583); + LotsOfCoins001.Plane = 200; - var Idol0230 = CreateObjectAbove(Idol, 824, 583); - Idol0230->SetR(-4); - Idol0230.Plane = 220; - Idol0230->SetPosition(824, 568); + var Idol002 = CreateObject(Idol, 824, 568); + Idol002->SetR(-4); + Idol002.Plane = 220; - var Lorry0231 = CreateObjectAbove(Lorry, 200, 1183); - var Lorry0233 = CreateObjectAbove(Lorry, 708, 1407); - Lorry0233->SetMeshMaterial("RuinedLorry", 0); + var Lorry002 = CreateObjectAbove(Lorry, 200, 1183); + var Lorry001 = CreateObjectAbove(Lorry, 708, 1407); + Lorry001->SetMeshMaterial("RuinedLorry", 0); - var Catapult0235 = CreateObjectAbove(Catapult, 1714, 951); - Catapult0235->SetRDir(2); + var Catapult001 = CreateObjectAbove(Catapult, 1714, 951); + Catapult001->SetRDir(-7); CreateObjectAbove(StrawMan, 1924, 439); CreateObjectAbove(StrawMan, 2642, 705); - - var Clonk0238 = CreateObjectAbove(Clonk, 316, 430); - Clonk0238->SetColor(0xff); - S2AI->AddAI(Clonk0238); - S2AI->SetHome(Clonk0238, 315, 422, DIR_Left); - S2AI->SetGuardRange(Clonk0238, 296, 322, 350, 140); - S2AI->SetEncounterCB(Clonk0238, "EncounterCastle"); - Clonk0238->SetDir(DIR_Left); - var Clonk0245 = CreateObjectAbove(Clonk, 501, 455); - Clonk0245->SetDir(DIR_Right); - Clonk0245->SetColor(0xff); - S2AI->AddAI(Clonk0245); - S2AI->SetHome(Clonk0245, 502, 445, DIR_Right); - S2AI->SetGuardRange(Clonk0245, 460, 300, 200, 160); - S2AI->SetMaxAggroDistance(Clonk0245, 60); - var Clonk0252 = CreateObjectAbove(Clonk, 534, 454); - Clonk0252->SetDir(DIR_Right); - Clonk0252->SetColor(0xff); - S2AI->AddAI(Clonk0252); - S2AI->SetHome(Clonk0252, 534, 446, DIR_Right); - S2AI->SetGuardRange(Clonk0252, 460, 300, 200, 160); - S2AI->SetMaxAggroDistance(Clonk0252, 60); - var Clonk0259 = CreateObjectAbove(Clonk, 671, 638); - Clonk0259->SetDir(DIR_Right); - Clonk0259->SetCon(150); - Clonk0259->SetColor(0xffffa000); - S2AI->AddAI(Clonk0259); - S2AI->SetHome(Clonk0259, 671, 629, DIR_Right); - S2AI->SetGuardRange(Clonk0259, 580, 480, 320, 175); - S2AI->SetEncounterCB(Clonk0259, "EncounterFinal"); - npc_dagobert = CreateObjectAbove(Clonk, 369, 1143); + var Clonk001 = CreateObjectAbove(Clonk, 316, 431); + S2AI->AddAI(Clonk001); + S2AI->SetHome(Clonk001, 315, 422, DIR_Left); + S2AI->SetGuardRange(Clonk001, 296, 322, 350, 140); + S2AI->SetEncounterCB(Clonk001, "EncounterCastle"); + Clonk001->SetDir(DIR_Left); + var Clonk002 = CreateObjectAbove(Clonk, 501, 454); + Clonk002->SetDir(DIR_Right); + S2AI->AddAI(Clonk002); + S2AI->SetHome(Clonk002, 502, 445, DIR_Right); + S2AI->SetGuardRange(Clonk002, 460, 300, 200, 160); + S2AI->SetMaxAggroDistance(Clonk002, 60); + var Clonk003 = CreateObjectAbove(Clonk, 534, 455); + Clonk003->SetDir(DIR_Right); + S2AI->AddAI(Clonk003); + S2AI->SetGuardRange(Clonk003, 460, 300, 200, 160); + S2AI->SetMaxAggroDistance(Clonk003, 60); + var Clonk004 = CreateObjectAbove(Clonk, 671, 638); + Clonk004->SetDir(DIR_Right); + Clonk004->SetCon(150); + Clonk004->SetColor(0xffffa000); + S2AI->AddAI(Clonk004); + S2AI->SetHome(Clonk004, 671, 629, DIR_Right); + S2AI->SetGuardRange(Clonk004, 580, 480, 320, 175); + S2AI->SetEncounterCB(Clonk004, "EncounterFinal"); + npc_dagobert = CreateObjectAbove(Clonk, 369, 1142); npc_dagobert->SetColor(0xffa000); npc_dagobert->SetName("Scrooge"); npc_dagobert.StaticSaveVar = "npc_dagobert"; npc_dagobert->MakeInvincible(); npc_dagobert->SetDir(DIR_Left); - var Clonk0273 = CreateObjectAbove(Clonk, 1720, 375); - Clonk0273->SetDir(DIR_Right); - Clonk0273->SetColor(0x808080); - Clonk0273->SetName("Otto"); - Clonk0273->SetSkin(2); - var Clonk0280 = CreateObjectAbove(Clonk, 1868, 950); - Clonk0280->SetColor(0xff0000); - Clonk0280->SetName("Donald"); - Clonk0280->SetDir(DIR_Left); - var Clonk0286 = CreateObjectAbove(Clonk, 676, 942); - Clonk0286->SetDir(DIR_Right); - Clonk0286->SetColor(0x802000); - Clonk0286->SetName("Jane"); - Clonk0286->SetSkin(1); - npc_tarzan = CreateObjectAbove(Clonk, 751, 875); + var Clonk005 = CreateObjectAbove(Clonk, 1720, 375); + Clonk005->SetDir(DIR_Right); + Clonk005->SetColor(0x808080); + Clonk005->SetName("Otto"); + Clonk005->SetSkin(2); + var Clonk006 = CreateObjectAbove(Clonk, 1868, 951); + Clonk006->SetColor(0xff0000); + Clonk006->SetName("Donald"); + Clonk006->SetDir(DIR_Left); + var Clonk007 = CreateObjectAbove(Clonk, 676, 943); + Clonk007->SetDir(DIR_Right); + Clonk007->SetColor(0x802000); + Clonk007->SetName("Jane"); + Clonk007->SetSkin(1); + npc_tarzan = CreateObjectAbove(Clonk, 754, 879); npc_tarzan->SetXDir(3); - npc_tarzan->SetYDir(-1); + npc_tarzan->SetYDir(27); npc_tarzan->SetColor(0x402000); npc_tarzan->SetName("Tarzan"); npc_tarzan.StaticSaveVar = "npc_tarzan"; npc_tarzan->SetDir(DIR_Left); - var Clonk0299 = CreateObjectAbove(Clonk, 498, 967); - Clonk0299->SetColor(0x20ffff); - Clonk0299->SetName("Sophie"); - Clonk0299->SetSkin(3); - Clonk0299->SetDir(DIR_Left); - var Clonk0306 = CreateObjectAbove(Clonk, 853, 735); - Clonk0306->SetDir(DIR_Right); - Clonk0306->SetColor(0x6000); - Clonk0306->SetName("Riku"); - Clonk0306->SetSkin(2); - var Clonk0313 = CreateObjectAbove(Clonk, 1098, 1150); - Clonk0313->SetDir(DIR_Right); - Clonk0313->SetColor(0x800000); - Clonk0313->SetName("Ann"); - Clonk0313->SetSkin(3); + var Clonk008 = CreateObjectAbove(Clonk, 498, 966); + Clonk008->SetColor(0x20ffff); + Clonk008->SetName("Sophie"); + Clonk008->SetSkin(3); + Clonk008->SetDir(DIR_Left); + var Clonk009 = CreateObjectAbove(Clonk, 853, 734); + Clonk009->SetDir(DIR_Right); + Clonk009->SetColor(0x6000); + Clonk009->SetName("Riku"); + Clonk009->SetSkin(2); + var Clonk010 = CreateObjectAbove(Clonk, 1098, 1151); + Clonk010->SetDir(DIR_Right); + Clonk010->SetColor(0x800000); + Clonk010->SetName("Ann"); + Clonk010->SetSkin(3); + var Pickaxe001 = Clonk010->CreateContents(Pickaxe); - npc_dagobert->SetDialogue("Dagobert",true); - Clonk0273->SetDialogue("Otto",true); + Clonk010->SetDialogue("Ann",true); + Clonk009->SetDialogue("Riku",true); - var GrappleBow0335 = npc_tarzan->CreateContents(GrappleBow); - var GrappleBow0333 = npc_tarzan->CreateContents(GrappleBow); + var TeleGlove001 = Clonk008->CreateContents(TeleGlove); + + Clonk008->SetDialogue("Sophie",true); + Clonk006->SetDialogue("Donald",true); + Clonk007->SetDialogue("Jane",true); + + var GrappleBow001 = npc_tarzan->CreateContents(GrappleBow); + var GrappleBow002 = npc_tarzan->CreateContents(GrappleBow); npc_tarzan->SetDialogue("Tarzan",false); - Clonk0286->SetDialogue("Jane",true); - Clonk0280->SetDialogue("Donald",true); - - var TeleGlove0325 = Clonk0299->CreateContents(TeleGlove); - - Clonk0299->SetDialogue("Sophie",true); - Clonk0306->SetDialogue("Riku",true); - - var Pickaxe0320 = Clonk0313->CreateContents(Pickaxe); - - Clonk0313->SetDialogue("Ann",true); + Clonk005->SetDialogue("Otto",true); + npc_dagobert->SetDialogue("Dagobert",true); CreateObjectAbove(Skull, 53, 1138); - var Bone0344 = CreateObjectAbove(Bone, 25, 1141); - Bone0344->SetR(-69); - Bone0344->SetPosition(25, 1139); - var Bone0345 = CreateObjectAbove(Bone, 48, 1135); - Bone0345->SetR(-51); - Bone0345->SetPosition(48, 1135); - var Bone0346 = CreateObjectAbove(Bone, 472, 963); - Bone0346->SetR(-52); - Bone0346->SetRDir(-7); - Bone0346->SetPosition(472, 962); - var Bone0347 = CreateObjectAbove(Bone, 488, 962); - Bone0347->SetR(-51); - Bone0347->SetPosition(488, 962); - var Bone0348 = CreateObjectAbove(Bone, 479, 962); - Bone0348->SetR(-51); - Bone0348->SetPosition(479, 962); - var Bone0349 = CreateObjectAbove(Bone, 464, 963); - Bone0349->SetR(-51); - Bone0349->SetPosition(464, 963); + var Bone001 = CreateObject(Bone, 25, 1139); + Bone001->SetR(-65); + var Bone002 = CreateObject(Bone, 48, 1135); + Bone002->SetR(-51); + var Bone003 = CreateObject(Bone, 472, 966); + Bone003->SetR(-41); + Bone003->SetRDir(11); + var Bone004 = CreateObject(Bone, 488, 964); + Bone004->SetR(-51); + Bone004->SetYDir(8); + var Bone005 = CreateObject(Bone, 479, 964); + Bone005->SetR(-51); + Bone005->SetYDir(8); + var Bone006 = CreateObject(Bone, 464, 965); + Bone006->SetR(-51); + Bone006->SetYDir(8); - Lorry0231->CreateContents(Loam); - Lorry0231->CreateContents(Loam); - Lorry0231->CreateContents(Loam); - Lorry0231->CreateContents(Loam); - CreateObjectAbove(Loam, 153, 1235); - CreateObjectAbove(Loam, 357, 1320); - CreateObjectAbove(Loam, 265, 1454); - CreateObjectAbove(Loam, 528, 1453); - CreateObjectAbove(Loam, 554, 1456); - CreateObjectAbove(Loam, 988, 1287); - CreateObjectAbove(Loam, 1030, 1275); - CreateObjectAbove(Loam, 1065, 1270); - CreateObjectAbove(Loam, 1051, 1261); - CreateObjectAbove(Loam, 1049, 1282); - CreateObjectAbove(Loam, 1081, 1269); - CreateObjectAbove(Loam, 1334, 1052); - CreateObjectAbove(Loam, 1532, 861); - CreateObjectAbove(Loam, 1619, 807); - CreateObjectAbove(Loam, 1642, 442); - CreateObjectAbove(Loam, 1694, 402); - CreateObjectAbove(Loam, 1578, 527); - CreateObjectAbove(Loam, 1746, 459); + Lorry002->CreateContents(Loam, 4); + CreateObject(Loam, 153, 1232); + CreateObject(Loam, 357, 1317); + CreateObject(Loam, 265, 1451); + CreateObject(Loam, 528, 1450); + CreateObject(Loam, 554, 1453); + CreateObject(Loam, 988, 1284); + CreateObject(Loam, 1030, 1272); + CreateObject(Loam, 1065, 1267); + CreateObject(Loam, 1051, 1258); + CreateObject(Loam, 1049, 1279); + CreateObject(Loam, 1081, 1266); + CreateObject(Loam, 1334, 1049); + CreateObject(Loam, 1532, 858); + CreateObject(Loam, 1619, 804); + CreateObject(Loam, 1642, 439); + CreateObject(Loam, 1694, 399); + CreateObject(Loam, 1578, 524); + CreateObject(Loam, 1746, 456); - var Metal0372 = CreateObjectAbove(Metal, 1922, 978); - Metal0372->SetR(20); - Metal0372->SetPosition(1922, 976); + var Metal001 = CreateObject(Metal, 1922, 976); + Metal001->SetR(20); - var Nugget0373 = CreateObjectAbove(Nugget, 812, 590); - Nugget0373->SetClrModulation(0xffffd0a0); - CreateObjectAbove(Nugget, 869, 583); - var Nugget0375 = CreateObjectAbove(Nugget, 853, 584); - Nugget0375->SetClrModulation(0xffffd0a0); - var Nugget0376 = CreateObjectAbove(Nugget, 823, 584); - Nugget0376->SetClrModulation(0xffffd0a0); + var Nugget001 = CreateObject(Nugget, 812, 589); + Nugget001->SetClrModulation(0xffffd0a0); + CreateObject(Nugget, 869, 582); + var Nugget002 = CreateObject(Nugget, 853, 583); + Nugget002->SetClrModulation(0xffffd0a0); + var Nugget003 = CreateObject(Nugget, 823, 583); + Nugget003->SetClrModulation(0xffffd0a0); - Chest0106->CreateContents(GoldBar); - Chest0110->CreateContents(GoldBar); - Chest0109->CreateContents(GoldBar); - Chest0108->CreateContents(GoldBar); - Lorry0233->CreateContents(GoldBar); - Chest0107->CreateContents(GoldBar); - Chest0112->CreateContents(GoldBar); - Chest0113->CreateContents(GoldBar); - Chest0114->CreateContents(GoldBar); - var GoldBar0386 = Chest0009->CreateContents(GoldBar); - GoldBar0386->SetR(-1); - Chest0117->CreateContents(GoldBar); - var GoldBar0388 = Chest0116->CreateContents(GoldBar); - GoldBar0388->SetR(-97); - var GoldBar0389 = Chest0119->CreateContents(GoldBar); - GoldBar0389->SetClrModulation(0xffffd0a0); - GoldBar0389->SetR(-29); - var GoldBar0390 = CreateObjectAbove(GoldBar, 880, 542); - GoldBar0390->SetR(-29); - GoldBar0390->SetClrModulation(0xffffd0a0); - GoldBar0390->SetPosition(880, 540); - ToolsWorkshop0156->CreateContents(GoldBar); - CreateObjectAbove(GoldBar, 72, 1463); - CreateObjectAbove(GoldBar, 2746, 736); - var GoldBar0394 = CreateObjectAbove(GoldBar, 2507, 1262); - GoldBar0394->SetR(-6); - GoldBar0394->SetPosition(2507, 1262); - Chest0120->CreateContents(GoldBar); - var GoldBar0396 = CreateObjectAbove(GoldBar, 972, 1280); - GoldBar0396->SetR(55); - GoldBar0396->SetPosition(972, 1277); + Chest010->CreateContents(GoldBar); + Chest011->CreateContents(GoldBar); + Chest012->CreateContents(GoldBar); + Chest013->CreateContents(GoldBar); + Lorry001->CreateContents(GoldBar); + Chest006->CreateContents(GoldBar); + Chest014->CreateContents(GoldBar); + Chest015->CreateContents(GoldBar); + Chest016->CreateContents(GoldBar); + Chest001->CreateContents(GoldBar); + Chest017->CreateContents(GoldBar); + Chest018->CreateContents(GoldBar); + var GoldBar001 = Chest019->CreateContents(GoldBar); + GoldBar001->SetClrModulation(0xffffd0a0); + var GoldBar002 = CreateObject(GoldBar, 880, 540); + GoldBar002->SetR(-29); + GoldBar002->SetClrModulation(0xffffd0a0); + ToolsWorkshop001->CreateContents(GoldBar); + CreateObject(GoldBar, 72, 1463); + CreateObject(GoldBar, 2746, 736); + CreateObject(GoldBar, 2507, 1262); + Chest020->CreateContents(GoldBar); + var GoldBar003 = CreateObject(GoldBar, 972, 1277); + GoldBar003->SetR(55); - CreateObjectAbove(Ruby, 864, 585); - CreateObjectAbove(Ruby, 806, 587); + CreateObject(Ruby, 864, 581); + CreateObject(Ruby, 806, 583); CreateObjectAbove(Ruby, 849, 582); - CreateObjectAbove(Ruby, 856, 588); + CreateObject(Ruby, 856, 584); - var Amethyst0405 = CreateObjectAbove(Amethyst, 793, 588); - Amethyst0405->SetR(22); - Amethyst0405->SetPosition(793, 584); - CreateObjectAbove(Amethyst, 885, 561); - CreateObjectAbove(Amethyst, 828, 585); + var Amethyst002 = CreateObject(Amethyst, 793, 584); + Amethyst002->SetR(22); + CreateObject(Amethyst, 885, 557); + CreateObject(Amethyst, 828, 581); - Lorry0231->CreateContents(Dynamite); - Lorry0231->CreateContents(Dynamite); - Chest0107->CreateContents(Dynamite); - Chest0107->CreateContents(Dynamite); - Chest0107->CreateContents(Dynamite); + Lorry002->CreateContents(Dynamite, 2); + Chest006->CreateContents(Dynamite, 3); CreateObjectAbove(Dynamite, 1046, 722); - Chest0104->CreateContents(Dynamite); - Chest0103->CreateContents(Dynamite); - Chest0104->CreateContents(Dynamite); - Chest0103->CreateContents(Dynamite); - Chest0101->CreateContents(Dynamite); - Chest0109->CreateContents(Dynamite); - Chest0109->CreateContents(Dynamite); - Chest0109->CreateContents(Dynamite); - Chest0112->CreateContents(Dynamite); - Chest0112->CreateContents(Dynamite); - Chest0112->CreateContents(Dynamite); + Chest005->CreateContents(Dynamite, 2); + Chest004->CreateContents(Dynamite, 2); + Chest002->CreateContents(Dynamite); + Chest012->CreateContents(Dynamite, 3); + Chest014->CreateContents(Dynamite, 3); - var Bow0434 = Clonk0238->CreateContents(Bow); + var Bow001 = Clonk001->CreateContents(Bow); - var Arrow0435 = Bow0434->CreateContents(Arrow); - Arrow0435->SetR(90); - var Arrow0436 = Clonk0238->CreateContents(Arrow); - Arrow0436->SetR(90); - var Arrow0437 = CreateObjectAbove(Arrow, 313, 431); - Arrow0437->SetR(90); - Arrow0437->SetPosition(313, 431); - var Arrow0438 = CreateObjectAbove(Arrow, 313, 431); - Arrow0438->SetR(90); - Arrow0438->SetPosition(313, 431); - var Arrow0439 = CreateObjectAbove(Arrow, 313, 431); - Arrow0439->SetR(90); - Arrow0439->SetPosition(313, 431); - var Arrow0440 = CreateObjectAbove(Arrow, 313, 431); - Arrow0440->SetR(90); - Arrow0440->SetPosition(313, 431); - var Arrow0441 = CreateObjectAbove(Arrow, 313, 431); - Arrow0441->SetR(90); - Arrow0441->SetPosition(313, 431); - var Arrow0442 = CreateObjectAbove(Arrow, 313, 431); - Arrow0442->SetR(90); - Arrow0442->SetPosition(313, 431); - var Arrow0443 = CreateObjectAbove(Arrow, 313, 431); - Arrow0443->SetR(90); - Arrow0443->SetPosition(313, 431); - var Arrow0444 = CreateObjectAbove(Arrow, 313, 431); - Arrow0444->SetR(90); - Arrow0444->SetPosition(313, 431); - var Arrow0445 = CreateObjectAbove(Arrow, 313, 431); - Arrow0445->SetR(90); - Arrow0445->SetPosition(313, 431); + Bow001->CreateContents(Arrow); + Clonk001->CreateContents(Arrow); + var Arrow003 = CreateObject(Arrow, 313, 431); + Arrow003->SetR(90); + var Arrow004 = CreateObject(Arrow, 313, 431); + Arrow004->SetR(90); + var Arrow005 = CreateObject(Arrow, 313, 431); + Arrow005->SetR(90); + var Arrow006 = CreateObject(Arrow, 313, 431); + Arrow006->SetR(90); + var Arrow007 = CreateObject(Arrow, 313, 431); + Arrow007->SetR(90); + var Arrow008 = CreateObject(Arrow, 313, 431); + Arrow008->SetR(90); + var Arrow009 = CreateObject(Arrow, 313, 431); + Arrow009->SetR(90); + var Arrow010 = CreateObject(Arrow, 313, 431); + Arrow010->SetR(90); + var Arrow011 = CreateObject(Arrow, 313, 431); + Arrow011->SetR(90); - Chest0105->CreateContents(Bread); - Chest0105->CreateContents(Bread); - Lorry0233->CreateContents(Bread); - Lorry0233->CreateContents(Bread); - Lorry0233->CreateContents(Bread); + Chest021->CreateContents(Bread, 2); + Lorry001->CreateContents(Bread, 3); - Chest0105->CreateContents(DynamiteBox); - Chest0105->CreateContents(DynamiteBox); - Chest0116->CreateContents(DynamiteBox); - Chest0116->CreateContents(DynamiteBox); - Chest0117->CreateContents(DynamiteBox); - Chest0117->CreateContents(DynamiteBox); - Chest0120->CreateContents(DynamiteBox); - Chest0113->CreateContents(DynamiteBox); - Chest0119->CreateContents(DynamiteBox); + Chest021->CreateContents(DynamiteBox, 2); + Chest018->CreateContents(DynamiteBox, 2); + Chest017->CreateContents(DynamiteBox, 2); + Chest020->CreateContents(DynamiteBox); + Chest015->CreateContents(DynamiteBox); + Chest019->CreateContents(DynamiteBox); - Clonk0252->CreateContents(Sword); - Clonk0245->CreateContents(Sword); - Chest0107->CreateContents(Sword); - Clonk0259->CreateContents(Sword); - Clonk0259->CreateContents(Sword); + Clonk003->CreateContents(Sword); + Clonk002->CreateContents(Sword); + Chest006->CreateContents(Sword); + Clonk004->CreateContents(Sword, 2); + Lorry001->CreateContents(Sword); - var Seaweed0465 = CreateObjectAbove(Seaweed, 2494, 1263); - Seaweed0465->SetPhase(41); - var Seaweed0468 = CreateObjectAbove(Seaweed, 2508, 1263); - Seaweed0468->SetPhase(33); - var Seaweed0471 = CreateObjectAbove(Seaweed, 2520, 1263); - Seaweed0471->SetPhase(10); - var Seaweed0474 = CreateObjectAbove(Seaweed, 2508, 1263); - Seaweed0474->SetPhase(10); - var Seaweed0477 = CreateObjectAbove(Seaweed, 2503, 1263); - Seaweed0477->SetPhase(36); - var Seaweed0480 = CreateObjectAbove(Seaweed, 2526, 1262); - Seaweed0480->SetPhase(36); - var Seaweed0483 = CreateObjectAbove(Seaweed, 2516, 1263); - Seaweed0483->SetPhase(36); - var Seaweed0486 = CreateObjectAbove(Seaweed, 2499, 1263); - Seaweed0486->SetPhase(36); - var Seaweed0489 = CreateObjectAbove(Seaweed, 2663, 1278); - Seaweed0489->SetPhase(39); - var Seaweed0492 = CreateObjectAbove(Seaweed, 2769, 1272); - Seaweed0492->SetPhase(39); - var Seaweed0495 = CreateObjectAbove(Seaweed, 2751, 1279); - Seaweed0495->SetPhase(39); - var Seaweed0498 = CreateObjectAbove(Seaweed, 2762, 1271); - Seaweed0498->SetPhase(39); - var Seaweed0501 = CreateObjectAbove(Seaweed, 2775, 1279); - Seaweed0501->SetPhase(39); - var Seaweed0504 = CreateObjectAbove(Seaweed, 2762, 1271); - Seaweed0504->SetPhase(39); - var Seaweed0507 = CreateObjectAbove(Seaweed, 2659, 1279); - Seaweed0507->SetPhase(39); - var Seaweed0510 = CreateObjectAbove(Seaweed, 2416, 1245); - Seaweed0510->SetPhase(77); - var Seaweed0513 = CreateObjectAbove(Seaweed, 2395, 1239); - Seaweed0513->SetPhase(77); - var Seaweed0516 = CreateObjectAbove(Seaweed, 2396, 1239); - Seaweed0516->SetPhase(77); - var Seaweed0519 = CreateObjectAbove(Seaweed, 2332, 1145); - Seaweed0519->SetPhase(77); - var Seaweed0522 = CreateObjectAbove(Seaweed, 2407, 1246); - Seaweed0522->SetPhase(77); + CreateObjectAbove(Seaweed, 2494, 1263); + CreateObjectAbove(Seaweed, 2508, 1263); + CreateObjectAbove(Seaweed, 2520, 1263); + CreateObjectAbove(Seaweed, 2508, 1263); + CreateObjectAbove(Seaweed, 2503, 1263); + CreateObjectAbove(Seaweed, 2526, 1262); + CreateObjectAbove(Seaweed, 2516, 1263); + CreateObjectAbove(Seaweed, 2499, 1263); + CreateObjectAbove(Seaweed, 2663, 1278); + CreateObjectAbove(Seaweed, 2769, 1272); + CreateObjectAbove(Seaweed, 2751, 1279); + CreateObjectAbove(Seaweed, 2762, 1271); + CreateObjectAbove(Seaweed, 2775, 1279); + CreateObjectAbove(Seaweed, 2762, 1271); + CreateObjectAbove(Seaweed, 2659, 1279); + CreateObjectAbove(Seaweed, 2416, 1245); + CreateObjectAbove(Seaweed, 2395, 1239); + CreateObjectAbove(Seaweed, 2396, 1239); + CreateObjectAbove(Seaweed, 2332, 1145); + CreateObjectAbove(Seaweed, 2407, 1246); - CreateObjectAbove(Mushroom, 1580, 760); - CreateObjectAbove(Mushroom, 1613, 776); - CreateObjectAbove(Mushroom, 1525, 848); - CreateObjectAbove(Mushroom, 1612, 863); + CreateObjectAbove(Mushroom, 1580, 759); + CreateObjectAbove(Mushroom, 1613, 775); + CreateObjectAbove(Mushroom, 1525, 846); + CreateObjectAbove(Mushroom, 1612, 862); CreateObjectAbove(Mushroom, 1321, 895); - CreateObjectAbove(Mushroom, 1315, 896); - CreateObjectAbove(Mushroom, 1343, 904); - CreateObjectAbove(Mushroom, 1347, 903); + CreateObjectAbove(Mushroom, 1315, 894); + CreateObjectAbove(Mushroom, 1343, 903); + CreateObjectAbove(Mushroom, 1347, 901); CreateObjectAbove(Balloon, 491, 383); - var Barrel0558 = CreateObjectAbove(Barrel, 623, 456); - Barrel0558->SetColor(0xff000000); + var Barrel001 = CreateObjectAbove(Barrel, 623, 456); + Barrel001->SetColor(0xff000000); CreateObjectAbove(Sproutberry, 1823, 488); CreateObjectAbove(Sproutberry, 1823, 488); CreateObjectAbove(Sproutberry, 1823, 488); - var Boompack0563 = CreateObjectAbove(Boompack, 543, 383); - Boompack0563->SetColor(0xff); - var Boompack0564 = CreateObjectAbove(Boompack, 548, 384); - Boompack0564->SetColor(0xff); - var Boompack0565 = CreateObjectAbove(Boompack, 1948, 713); - Boompack0565->SetColor(0xff); - var Boompack0566 = CreateObjectAbove(Boompack, 1944, 487); - Boompack0566->SetR(135); - Boompack0566->SetColor(0xff); - Boompack0566->SetPosition(1944, 483); + CreateObjectAbove(Boompack, 543, 383); + CreateObjectAbove(Boompack, 548, 384); + CreateObjectAbove(Boompack, 1948, 713); + var Boompack001 = CreateObject(Boompack, 1944, 483); + Boompack001->SetR(135); g_golden_shovel = CreateObjectAbove(Shovel, 1841, 1011); g_golden_shovel->SetMeshMaterial("GoldenShovel", 0); g_golden_shovel.StaticSaveVar = "g_golden_shovel"; - CreateObjectAbove(Pipe, 1838, 1016); + CreateObject(Pipe, 1838, 1013); - var LotsOfCoins0567 = CreateObjectAbove(LotsOfCoins, 838, 592); - LotsOfCoins0567.Plane = 500; + var LotsOfCoins002 = CreateObject(LotsOfCoins, 838, 583); + LotsOfCoins002.Plane = 500; - var GemOfPower0575 = CreateObjectAbove(GemOfPower, 825, 572); - GemOfPower0575->SetCategory(C4D_StaticBack); + var GemOfPower001 = CreateObjectAbove(GemOfPower, 825, 572); + GemOfPower001->SetCategory(C4D_StaticBack); CreateObjectAbove(Firestone, 564, 1136); CreateObjectAbove(Firestone, 552, 1136); CreateObjectAbove(Firestone, 562, 1136); CreateObjectAbove(Firestone, 571, 1136); CreateObjectAbove(Firestone, 567, 1136); - CreateObjectAbove(Firestone, 558, 1136); - CreateObjectAbove(Firestone, 546, 1136); + CreateObject(Firestone, 558, 1135); + CreateObject(Firestone, 546, 1135); CreateObjectAbove(Firestone, 560, 1136); - CreateObjectAbove(Firestone, 546, 1136); - CreateObjectAbove(Firestone, 546, 1136); - CreateObjectAbove(Firestone, 555, 1136); + CreateObject(Firestone, 546, 1135); + CreateObject(Firestone, 546, 1135); + CreateObject(Firestone, 555, 1135); CreateObjectAbove(Firestone, 562, 1136); - CreateObjectAbove(Firestone, 550, 1136); + CreateObject(Firestone, 550, 1135); CreateObjectAbove(Firestone, 552, 1136); - CreateObjectAbove(Firestone, 342, 1225); - CreateObjectAbove(Firestone, 166, 1261); - CreateObjectAbove(Firestone, 234, 1424); + CreateObject(Firestone, 342, 1224); + CreateObject(Firestone, 166, 1260); + CreateObject(Firestone, 234, 1423); CreateObjectAbove(Firestone, 315, 431); - CreateObjectAbove(Firestone, 1359, 1061); - CreateObjectAbove(Firestone, 1348, 1042); - CreateObjectAbove(Firestone, 1384, 1055); - CreateObjectAbove(Firestone, 1417, 1107); - CreateObjectAbove(Firestone, 1432, 1113); - CreateObjectAbove(Firestone, 1436, 1104); - CreateObjectAbove(Firestone, 1340, 920); - CreateObjectAbove(Firestone, 1476, 876); - CreateObjectAbove(Firestone, 1549, 866); - CreateObjectAbove(Firestone, 1607, 792); - CreateObjectAbove(Firestone, 2053, 852); - CreateObjectAbove(Firestone, 2161, 943); - CreateObjectAbove(Firestone, 2073, 862); - CreateObjectAbove(Firestone, 2064, 852); - + CreateObject(Firestone, 1359, 1060); + CreateObject(Firestone, 1348, 1041); + CreateObject(Firestone, 1384, 1054); + CreateObject(Firestone, 1417, 1106); + CreateObject(Firestone, 1432, 1112); + CreateObject(Firestone, 1436, 1103); + CreateObject(Firestone, 1340, 919); + CreateObject(Firestone, 1476, 875); + CreateObject(Firestone, 1549, 865); + CreateObject(Firestone, 1607, 791); + CreateObject(Firestone, 2053, 851); + CreateObject(Firestone, 2161, 942); + CreateObject(Firestone, 2073, 861); + CreateObject(Firestone, 2064, 851); return true; } diff --git a/planet/Missions.ocf/TreasureHunt.ocs/System.ocg/StringTblDE.txt b/planet/Missions.ocf/TreasureHunt.ocs/System.ocg/StringTblDE.txt index 03e0304eb..6a9d3329d 100644 --- a/planet/Missions.ocf/TreasureHunt.ocs/System.ocg/StringTblDE.txt +++ b/planet/Missions.ocf/TreasureHunt.ocs/System.ocg/StringTblDE.txt @@ -2,7 +2,7 @@ PlaneNoOil=Das Flugzeug braucht noch Treibstoff. Ich muss irgendwo Intro1=Autsch. Pyrit! Intro2=Wie kann der Treibstoff leer sein? Du sagtest doch, ein Fass Öl bringt uns locker an unser Ziel und zurück! -Intro3=Dachte ich auch. Aber da wusste ich noch nicht, dass ich drei Tage über dem Ozean kreisen und auf einer einsamen Insel suchen müsste. +Intro3=Dachte ich auch. Aber da wusste ich noch nicht, dass ich drei Tage über dem Ozean kreisen und nach einer einsamen Insel suchen müsste. Intro4=Das ist alles deine Schuld. Ich sags ja nur. Intro5=Was können wir nun tun? Intro6=Ich schlage vor du suchst neues Öl und ich repariere derweil das Flugzeug. diff --git a/planet/Music.ocg/IslandDreams.ogg b/planet/Music.ocg/IslandDreams.ogg index fa8327977e65b4ba6e2e6794bc93ab825fe620a9..b1761d35939d8c5e9e071a34c4d7c223dac60b0d 100644 GIT binary patch delta 61393 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
    Bdgr-gn0;`Ks81sn?Yf}v_Ywtl4m`` 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 z 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
    SdhK@9BAyl6()6js2$d89OB-!;-JjYI5@(dbYqb

    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�n(b%zY!h(4Pt} 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

    s>-GL0Y4?Xe}l^+Hewm4>b#- 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

    mI+NP|UaXn3g1 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 Lm!?(9cNzW<81ru8 delta 60090 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 ^VVnh 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

    +AkJuE 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 Kdw9CT9##NxA*Znb diff --git a/planet/Objects.ocd/Environment.ocd/Ambience.ocd/DefCore.txt b/planet/Objects.ocd/Environment.ocd/Ambience.ocd/DefCore.txt index 350feff15..f73dc401b 100644 --- a/planet/Objects.ocd/Environment.ocd/Ambience.ocd/DefCore.txt +++ b/planet/Objects.ocd/Environment.ocd/Ambience.ocd/DefCore.txt @@ -1,8 +1,7 @@ [DefCore] id=Ambience Version=6,0 -Category=C4D_StaticBack +Category=C4D_StaticBack | C4D_Environment Width=1 Height=1 Offset=-1,-1 - diff --git a/planet/Objects.ocd/Environment.ocd/Ambience.ocd/Script.c b/planet/Objects.ocd/Environment.ocd/Ambience.ocd/Script.c index d3b521aaa..d30b9e91a 100644 --- a/planet/Objects.ocd/Environment.ocd/Ambience.ocd/Script.c +++ b/planet/Objects.ocd/Environment.ocd/Ambience.ocd/Script.c @@ -1,5 +1,381 @@ /** Ambience + Controls sound and music depending on the environment the player is in + + @author Sven2 +*/ + +local exec_counter; // counter to distribute execution of players across frames +local player_environments; // array indexed by player number: array of derived environments with per-player data +local all_environments; // array of available environments for which it is checked if the player is in. sorted by priority. + +// Initialization +protected func Initialize() +{ + // Register default environments (overloadable) + this->InitializeEnvironments(); + // Initial player data + player_environments = []; + for (var i=0; iGetX(), y = cursor->GetY(); + for (var env in environments) + { + var was_active = env.is_active; + var is_active = env->CheckPlayer(cursor, x, y, was_active); + if (is_active == was_active) + { + // No change. Reset change delays. + env.change_delay = 0; + } + else + { + // Environment change. The change must persist for a while to become active. + if (++env.change_delay > env.min_change_delays[!is_active]) + { + // Waited long enough. Activate or deactivate this environment. + env.is_active = is_active; + //Log("%s environment: %s set to %v", GetPlayerName(plr), env.Name, is_active); + } + } + } + // Sound and music by active environments + var has_music = false, sound_modifier = nil; + for (var env in environments) if (env.is_active) + { + // Music! + if (env.music && !has_music) + { + this->SetPlayList(env.music, plr, true, 3000); + has_music = true; + } + // Sound effects like cave reverb etc. + if (env.sound_modifier && !sound_modifier) sound_modifier = env.sound_modifier; + // Sounds and actions by environment + for (var action in env.actions) + { + if (Random(1000) < action.chance) + { + cursor->Call(action.fn, action.par[0], action.par[1], action.par[2], action.par[3], action.par[4]); + } + } + // Does this stop all other environments? + if (env.is_exclusive) break; + } + // Apply or clear global sound modifier + SetGlobalSoundModifier(sound_modifier); + } + return true; +} + +func InitializePlayer(int plr) +{ + if (GetPlayerType(plr) == C4PT_User) + { + // Every player keeps a copy of the environment list to maintain delays + // Start with a large change delay to ensure first execution does set a proper environment + var n = GetLength(all_environments); + var envs = CreateArray(n); + for (var i=0; i < n; ++i) + envs[i] = new all_environments[i] { change_delay = 999, is_active = false }; + player_environments[plr] = envs; + // Newly joining players should have set playlist immediately (so they don't start playing a random song just to switch it immediately) + ExecutePlayer(plr); + } + return true; +} + +func RemovePlayer(int plr) +{ + // Ensure newly joining players don't check on another player's environment + player_environments[plr] = nil; + return true; +} + +protected func Activate(int byplr) +{ + MessageWindow(this.Description, byplr); + return true; +} + +/* Environment functions */ + +func AddEnvironment(proplist new_env, priority) +{ + if (GetType(priority)) new_env.Priority = priority; + this.all_environments[GetLength(all_environments)] = new_env; + SortArrayByProperty(this.all_environments, "Priority", true); + return true; +} + +private func Env_AddSound(chance, string snd_name) +{ + return Env_AddAction(chance ?? 50, Global.Sound, snd_name); +} + +private func Env_AddAction(achance, afn, par0, par1, par2, par3, par4) +{ + // Make sure to not write into prototype proplist. + if (this.actions == this.Prototype.actions) this.actions = []; + return this.actions[GetLength(this.actions)] = { chance=achance, fn=afn, par=[par0, par1, par2, par3, par4] }; +} + +/* Default environment checks */ + +private func EnvCheck_Underwater(object cursor, int x, int y, bool is_current) +{ + // Clonk should be swimming + if (cursor->GetProcedure() != "SWIM") return false; + // For initial change, clonk should also be diving: Check for breath below 95% + // Use > instead of >= to ensure 0-breath-clonks can also get the environment + if (!is_current && cursor->GetBreath() > cursor.MaxBreath*95/100) return false; + return true; +} + +private func EnvCheck_City(object cursor, int x, int y, bool is_current) +{ + // There must be buildings around the clonk + var building_count = cursor->ObjectCount(cursor->Find_AtRect(-180,-100,360,200), Find_Func("IsStructure")); + // 3 buildings to start the environment. Just 1 building to sustain it. + if (building_count < 3-2*is_current) return false; + return true; +} + +private func EnvCheck_Lava(object cursor, int x, int y, bool is_current) +{ + // Check for lava pixels. First check if the last lava pixel we found is still in place. + var search_range; + if (is_current) + { + if (this.mat_mask[GetMaterial(this.last_x, this.last_y)+1]) + if (Distance(this.last_x, this.last_y, x, y) < 140) + return true; + search_range = 140; + } + else + { + search_range = 70; + } + // Now search for lava in search range + var ang = Random(360); + for (; search_range >= 0; search_range -= 10) + { + ang += 200; + var x2 = x + Sin(ang, search_range); + var y2 = y + Cos(ang, search_range); + if (this.mat_mask[GetMaterial(x2, y2)+1]) + { + // Lava found! + this.last_x = x2; + this.last_y = y2; + return true; + } + } + // No lava found + return false; +} + +private func EnvCheck_Underground(object cursor, int x, int y, bool is_current) +{ + // Check for underground: No sky at cursor or above + if (GetMaterial(x,y)<0) return false; + if (GetMaterial(x,y-30)<0) return false; + if (GetMaterial(x-10,y-20)<0) return false; + if (GetMaterial(x+10,y-20)<0) return false; + return true; +} + +private func EnvCheck_Mountains(object cursor, int x, int y, bool is_current) +{ + // Check for mountains: Rock materials below + var num_rock; + for (var y2=0; y2<=45; y2+=15) + for (var x2=-75; x2<=75; x2+=15) + num_rock += this.mat_mask[GetMaterial(x+x2,y+y2)+1]; + // need 15pts on first check; 5 to sustain + if (num_rock < 15-is_current*10) return false; + return true; +} + +private func EnvCheck_Snow(object cursor, int x, int y, bool is_current) +{ + // Must be snowing from above + if (GetPXSCount(this.mat, x-300, y-200, 600, 300) < 20 - is_current*15) return false; + return true; +} + +private func EnvCheck_Night(object cursor, int x, int y, bool is_current) +{ + // Night time. + var time = FindObject(Find_ID(Environment_Time)); + if (!time || !time->IsNight()) return false; + return true; +} + +private func EnvCheck_Day(object cursor, int x, int y, bool is_current) +{ + // This is the fallback environment + return true; +} + +/*-- Proplist --*/ + +local SoundModifier, CaveModifier, UnderwaterModifier; + +func ReleaseSoundModifier() { return ChangeSoundModifier(this, true); } +func UpdateSoundModifier() { return ChangeSoundModifier(this, false); } // OpenAL-Soft implementation does not work for all modifiers + +public func Definition(def) +{ + // Base environment + def.Environment = { + actions = [], + min_change_delays = [1, 1], + AddSound = def.Env_AddSound, + AddAction = def.Env_AddAction, + }; + // Base sound modifier + SoundModifier = { + Release = Ambience.ReleaseSoundModifier, + Update = Ambience.UpdateSoundModifier, + }; + // Modifiers for different ambiences + CaveModifier = new SoundModifier { + Type = C4SMT_Reverb, + Reverb_Late_Reverb_Gain = 300, + Reverb_Late_Reverb_Delay = 10, + Reverb_Decay_HFRatio = 800, + }; + UnderwaterModifier = nil; // not supported yet + return true; +} + +local Environment; + +local Name = "$Name$"; +local Description = "$Description$"; + + + + +/** + Ambience Objects Cares about the placement of purely visual objects and handles sound ambience The placement uses categories and thus is forward-compatible. */ @@ -41,7 +417,6 @@ static const Environment_Attributes = }; - // provides a simple interface for creation of environment objects and decoration with standard values // the objects are placed on a best-effort-basis. That means f.e. objects that rely on water will not be placed when there is no water in the landscape. global func CreateEnvironmentObjects( @@ -106,23 +481,3 @@ CreateEnvironmentObjects("Temperate", Rectangle(LandscapeWidth()/2, 0, Landscape p_id->Place(amount_percentage, area); } } - -/* Sound ambience */ - -local SoundModifier, CaveModifier; - -func ReleaseSoundModifier() { return ChangeSoundModifier(this, true); } -func UpdateSoundModifier() { return ChangeSoundModifier(this, false); } // do not use - -func Definition() -{ - // Base sound modifier - SoundModifier = { - Release = Ambience.ReleaseSoundModifier, - Update = Ambience.UpdateSoundModifier, - }; - // Modifiers for different ambiences - CaveModifier = new SoundModifier { - Type = C4SMT_Reverb, - }; -} diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/StringTblDE.txt b/planet/Objects.ocd/Environment.ocd/Ambience.ocd/StringTblDE.txt similarity index 100% rename from planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/StringTblDE.txt rename to planet/Objects.ocd/Environment.ocd/Ambience.ocd/StringTblDE.txt diff --git a/planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/StringTblUS.txt b/planet/Objects.ocd/Environment.ocd/Ambience.ocd/StringTblUS.txt similarity index 100% rename from planet/Experimental.ocf/Ambience_DeepSeaMining.ocs/Ambience.ocd/StringTblUS.txt rename to planet/Objects.ocd/Environment.ocd/Ambience.ocd/StringTblUS.txt From 2a9b4810874b1aa8f867b185c851fc63ac0dc36b Mon Sep 17 00:00:00 2001 From: Julius Michaelis Date: Sun, 30 Aug 2015 22:19:36 +0900 Subject: [PATCH 81/97] Add a new variant of vehicle that can be passed from below but be walked on from above. --- planet/Material.ocg/HalfVehicle.ocm | 5 +++ planet/System.ocg/Vertices.c | 63 ++++++++++++++++++++++++++++- src/config/C4Constants.h | 5 ++- src/landscape/C4Material.cpp | 13 +++--- src/landscape/C4Material.h | 11 +++++ src/landscape/C4SolidMask.cpp | 29 ++++++++----- src/landscape/C4SolidMask.h | 6 ++- src/object/C4Movement.cpp | 6 +-- src/object/C4Object.cpp | 6 +++ src/object/C4Object.h | 3 +- src/object/C4ObjectScript.cpp | 8 ++++ src/object/C4Shape.cpp | 44 +++++++++++--------- src/object/C4Shape.h | 4 +- 13 files changed, 157 insertions(+), 46 deletions(-) create mode 100644 planet/Material.ocg/HalfVehicle.ocm diff --git a/planet/Material.ocg/HalfVehicle.ocm b/planet/Material.ocg/HalfVehicle.ocm new file mode 100644 index 000000000..4c1d88ada --- /dev/null +++ b/planet/Material.ocg/HalfVehicle.ocm @@ -0,0 +1,5 @@ +[Material] +Name=HalfVehicle +Density=100 +Friction=100 +KeepSinglePixels=1 diff --git a/planet/System.ocg/Vertices.c b/planet/System.ocg/Vertices.c index 1aa1e267d..437191660 100644 --- a/planet/System.ocg/Vertices.c +++ b/planet/System.ocg/Vertices.c @@ -30,8 +30,67 @@ global func VerticesStuck() // Returns whether the object has a vertex with the given CNAT value global func HasCNAT(int cnat) { - for(var i = -1; i < GetVertexNum(); i++) + for (var i = -1; i < GetVertexNum(); i++) if (GetVertex(i, VTX_CNAT) == cnat) return true; return false; -} \ No newline at end of file +} + +// e.g. clonk->SetVertexCNAT(2, CNAT_CollideHalfVehicle, true); makes the clonk behave correctly wrt. to HalfVehicle +global func SetVertexCNAT(int vtx, int val, bool set) +{ + if (val == nil || set == nil) + return FatalError("this function requires its second and third parameter to be non-nil"); + if (!this) + return FatalError("this function requires object context"); + if (vtx == nil) + for (var i = GetVertexNum(); i-->0;) + SetVertexCNAT(i, val, set); + else + SetVertex(vtx, VTX_CNAT, GetVertex(vtx, VTX_CNAT) & ~val | (set && val), 2); +} + +// Allow falling down throughg a HalfVehicle platform +global func HalfVehicleFadeJump() +{ + if (!this) + return FatalError("this function requires object context"); + AddEffect("IntHalfVehicleFadeJump", this, 1, 1); +} + +global func FxIntHalfVehicleFadeJumpStart(object target, proplist effect, int temp) +{ + if (temp) + return FX_OK; + if (!target) { + return FX_Start_Deny; + } + effect.collideverts = CreateArray(); + for (var i = target->GetVertexNum(); i-->0;) + if(target->GetVertex(i, VTX_CNAT) & CNAT_CollideHalfVehicle) { + PushBack(effect.collideverts, i); + target->SetVertexCNAT(i, CNAT_CollideHalfVehicle, false); + } + effect.origpos = target->GetPosition(); + return FX_OK; +} + +global func FxIntHalfVehicleFadeJumpTimer(object target, proplist effect, int time) +{ + if (DeepEqual(target->GetPosition(), effect.origpos)) + return FX_OK; + for (var i = GetLength(effect.collideverts); i-->0;) { + if (target->GetMaterial(target->GetVertex(effect.collideverts[i], VTX_X), + target->GetVertex(effect.collideverts[i], VTX_Y)) == Material("HalfVehicle")) + return FX_OK; + } + return FX_Execute_Kill; +} + +global func FxIntHalfVehicleFadeJumpStop(object target, proplist effect, int reason, bool temp) +{ + if (reason == FX_Call_RemoveClear) + return; + for (var i = GetLength(effect.collideverts); i-->0;) + target->SetVertexCNAT(effect.collideverts[i], CNAT_CollideHalfVehicle, true); +} diff --git a/src/config/C4Constants.h b/src/config/C4Constants.h index d11005e1e..27336d4b8 100644 --- a/src/config/C4Constants.h +++ b/src/config/C4Constants.h @@ -129,9 +129,10 @@ const BYTE // Directional CNAT_Center = 16, // Additional flags CNAT_MultiAttach = 32, // new attachment behaviour; see C4Shape::Attach - CNAT_NoCollision = 64; // turn off collision for this vertex + CNAT_NoCollision = 64, // turn off collision for this vertex + CNAT_CollideHalfVehicle = 128; -const BYTE CNAT_Flags = CNAT_MultiAttach | CNAT_NoCollision; // all attchment flags that can be combined with regular attachment +const BYTE CNAT_Flags = CNAT_MultiAttach | CNAT_NoCollision | CNAT_CollideHalfVehicle; // all attchment flags that can be combined with regular attachment //=============================== Keyboard Input Controls ===================================================== diff --git a/src/landscape/C4Material.cpp b/src/landscape/C4Material.cpp index 749ae7c38..4d3198885 100644 --- a/src/landscape/C4Material.cpp +++ b/src/landscape/C4Material.cpp @@ -34,9 +34,9 @@ #include // For GravAccel -int32_t MVehic=MNone,MTunnel=MNone,MWater=MNone,MEarth=MNone; +int32_t MVehic=MNone,MHalfVehic=MNone,MTunnel=MNone,MWater=MNone,MEarth=MNone; BYTE MCVehic=0; - +BYTE MCHalfVehic=0; // -------------------------------------- C4MaterialReaction @@ -677,10 +677,11 @@ bool C4MaterialMap::CrossMapMaterials(const char* szEarthMaterial) // Called aft if(!earth_entry) { LogFatal(FormatString("Earth material \"%s\" not found!", szEarthMaterial).getData()); return false; } - MVehic = Get("Vehicle"); MCVehic = Mat2PixColDefault(MVehic); - MTunnel = Get("Tunnel"); - MWater = Get("Water"); - MEarth = Get(earth_entry->GetMaterialName()); + MVehic = Get("Vehicle"); MCVehic = Mat2PixColDefault(MVehic); + MHalfVehic = Get("HalfVehicle"); MCHalfVehic = Mat2PixColDefault(MHalfVehic); + MTunnel = Get("Tunnel"); + MWater = Get("Water"); + MEarth = Get(earth_entry->GetMaterialName()); if ((MVehic==MNone) || (MTunnel==MNone)) { LogFatal(LoadResStr("IDS_PRC_NOSYSMATS")); return false; } diff --git a/src/landscape/C4Material.h b/src/landscape/C4Material.h index cbe56bcc7..70b674bb0 100644 --- a/src/landscape/C4Material.h +++ b/src/landscape/C4Material.h @@ -263,6 +263,7 @@ const int32_t MNone = -1; extern int32_t MVehic,MTunnel,MWater,MEarth; // presearched materials extern BYTE MCVehic; // precalculated material color +extern BYTE MCHalfVehic; // precalculated material color inline bool MatValid(int32_t mat) { @@ -274,6 +275,16 @@ inline bool MatVehicle(int32_t iMat) return iMat == MVehic; } +inline bool IsMCVehicle(BYTE mat) { + return mat == MCVehic; +} +inline bool IsMCHalfVehicle(BYTE mat) { + return mat == MCHalfVehic; +} +inline bool IsSomeVehicle(BYTE mat) { + return IsMCVehicle(mat) || IsMCHalfVehicle(mat); +} + inline BYTE MatTex2PixCol(int32_t tex) { return BYTE(tex); diff --git a/src/landscape/C4SolidMask.cpp b/src/landscape/C4SolidMask.cpp index 1ea8bc68b..5a0591fe5 100644 --- a/src/landscape/C4SolidMask.cpp +++ b/src/landscape/C4SolidMask.cpp @@ -96,11 +96,11 @@ void C4SolidMask::Put(bool fCauseInstability, C4TargetRect *pClipRect, bool fRes byPixel=GBackPix(iTx,iTy); // store it. If MCVehic, also store in initial put, but won't be used in restore // do not overwrite current value in re-put issued by SolidMask-remover - if (byPixel != MCVehic || RegularPut) + if (!IsSomeVehicle(byPixel) || RegularPut) pSolidMaskMatBuff[(ycnt+pClipRect->ty)*MatBuffPitch+xcnt+pClipRect->tx]=byPixel; } // and set mask - ::Landscape.SetPix2(iTx,iTy,MCVehic,::Landscape.Transparent); + ::Landscape.SetPix2(iTx,iTy,MaskMaterial,::Landscape.Transparent); } else // no SolidMask: mark buffer as unused here @@ -162,11 +162,11 @@ void C4SolidMask::Put(bool fCauseInstability, C4TargetRect *pClipRect, bool fRes byPixel=_GBackPix(iTx,iTy); // store it. If MCVehic, also store in initial put, but won't be used in restore // do not overwrite current value in re-put issued by SolidMask-remover - if (byPixel != MCVehic || RegularPut) + if (IsSomeVehicle(byPixel) || RegularPut) pSolidMaskMatBuff[i + xcnt] = byPixel; } // set mask pix - ::Landscape.SetPix2(iTx, iTy, MCVehic, ::Landscape.Transparent); + ::Landscape.SetPix2(iTx, iTy, MaskMaterial, ::Landscape.Transparent); } else if (!MaskPut) // mark pix as unused in buf @@ -229,7 +229,7 @@ int32_t C4SolidMask::DensityProvider::GetDensity(int32_t x, int32_t y) const // Using put-buffer for rotated masks // for SolidMask-pixels not put because there was another SolidMask already, this will not return solid pix=*(rSolidMaskData.pSolidMaskMatBuff+(y+rSolidMaskData.MaskPutRect.ty)*rSolidMaskData.MatBuffPitch+rSolidMaskData.MaskPutRect.tx+x); - if (pix == MCVehic) + if (IsSomeVehicle(pix)) return 0; else return C4M_Solid; @@ -259,8 +259,8 @@ void C4SolidMask::Remove(bool fBackupAttachment) // The pPix-check ensures that only pixels that hads been overwritten by this SolidMask are restored // Non-SolidMask-pixels should not happen here, because all relevant landscape change routines should // temp remove SolidMasks before - assert(_GBackPix(iTx,iTy) == MCVehic); - if (::Landscape._GetPix(iTx, iTy) == MCVehic) + assert(IsSomeVehicle(_GBackPix(iTx,iTy))); + if (IsSomeVehicle(::Landscape._GetPix(iTx, iTy))) ::Landscape._SetPix2(iTx, iTy, *pPix, ::Landscape.Transparent); // Instability ::Landscape.CheckInstabilityRange(iTx,iTy); @@ -340,10 +340,10 @@ void C4SolidMask::RemoveTemporary(C4Rect where) { BYTE *pPix = pSolidMaskMatBuff + (y - MaskPutRect.y + MaskPutRect.ty) * MatBuffPitch + x - MaskPutRect.x + MaskPutRect.tx; // only if mask was used here - if (*pPix != MCVehic) + if (*pPix != MCVehic) // { // restore - assert(GBackPix(x,y)==MCVehic); + assert(IsSomeVehicle(GBackPix(x,y))); ::Landscape.SetPix2(x, y, *pPix, ::Landscape.Transparent); } } @@ -365,7 +365,7 @@ void C4SolidMask::PutTemporary(C4Rect where) { // put assert(GBackPix(x,y)==*pPix); - ::Landscape.SetPix2(x, y, MCVehic, ::Landscape.Transparent); + ::Landscape.SetPix2(x, y, MaskMaterial, ::Landscape.Transparent); } } } @@ -387,7 +387,7 @@ void C4SolidMask::Repair(C4Rect where) // record changed landscape in MatBuff *pPix = GBackPix(x,y); // put - ::Landscape.SetPix2(x, y, MCVehic, ::Landscape.Transparent); + ::Landscape.SetPix2(x, y, MaskMaterial, ::Landscape.Transparent); } } } @@ -401,6 +401,7 @@ C4SolidMask::C4SolidMask(C4Object *pForObject) : pForObject(pForObject) MaskRemovalX=MaskRemovalY=Fix0; ppAttachingObjects=NULL; iAttachingObjectsCount=iAttachingObjectsCapacity=0; + MaskMaterial=MCVehic; // Update linked list Next = 0; Prev = Last; @@ -455,6 +456,7 @@ C4SolidMask * C4SolidMask::Last = 0; bool C4SolidMask::CheckConsistency() { + assert(IsSomeVehicle(MaskMaterial)); C4Rect SolidMaskRect(0,0,GBackWdt,GBackHgt); C4SolidMask *pSolid; for (pSolid = C4SolidMask::Last; pSolid; pSolid = pSolid->Prev) @@ -487,3 +489,8 @@ CSurface8 *C4SolidMask::LoadMaskFromFile(class C4Group &hGroup, const char *szFi return result; } +void C4SolidMask::SetHalfVehicle(bool set) +{ + MaskMaterial = set ? MCHalfVehic : MCVehic; + // TODO: Redraw +} diff --git a/src/landscape/C4SolidMask.h b/src/landscape/C4SolidMask.h index 45bd62174..0926b8517 100644 --- a/src/landscape/C4SolidMask.h +++ b/src/landscape/C4SolidMask.h @@ -35,7 +35,9 @@ protected: C4TargetRect MaskPutRect; // absolute bounding screen rect at which the mask is put - tx and ty are offsets within pSolidMask (for rects outside the landscape) - BYTE *pSolidMaskMatBuff; // material replaced by this solidmask. MCVehic if no solid mask data at this position OR another solidmask was already present during put + BYTE *pSolidMaskMatBuff; // material replaced by this solidmask. MCVehic if no solid mask data at this position OR another solidmask was already present during put (independent of MaskMaterial) + + BYTE MaskMaterial; // Either MCVehicle or MCHalfVehicle C4Object *pForObject; @@ -86,6 +88,8 @@ public: static void PutSolidMasks(); static CSurface8 *LoadMaskFromFile(class C4Group &hGroup, const char *szFilename); + + void SetHalfVehicle(bool set); }; #endif diff --git a/src/object/C4Movement.cpp b/src/object/C4Movement.cpp index 802800efa..137d79fc7 100644 --- a/src/object/C4Movement.cpp +++ b/src/object/C4Movement.cpp @@ -152,10 +152,10 @@ void C4Object::TargetBounds(C4Real &ctco, int32_t limit_low, int32_t limit_hi, i } } -int32_t C4Object::ContactCheck(int32_t iAtX, int32_t iAtY, uint32_t *border_hack_contacts) +int32_t C4Object::ContactCheck(int32_t iAtX, int32_t iAtY, uint32_t *border_hack_contacts, bool collide_halfvehic) { // Check shape contact at given position - Shape.ContactCheck(iAtX,iAtY,border_hack_contacts); + Shape.ContactCheck(iAtX,iAtY,border_hack_contacts,collide_halfvehic); // Store shape contact values in object t_contact t_contact=Shape.ContactCNAT; @@ -281,7 +281,7 @@ void C4Object::DoMovement() { // Next step int step = Sign(new_y - fix_y); - if ((iContact=ContactCheck(GetX(), GetY() + step))) + if ((iContact=ContactCheck(GetX(), GetY() + step, nullptr, ydir > 0))) { fAnyContact=true; iContacts |= t_contact; new_y = fix_y; diff --git a/src/object/C4Object.cpp b/src/object/C4Object.cpp index 4e06205a6..bf2608373 100644 --- a/src/object/C4Object.cpp +++ b/src/object/C4Object.cpp @@ -2602,6 +2602,12 @@ void C4Object::SetSolidMask(int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt, if (CheckSolidMaskRect()) UpdateSolidMask(false); } +void C4Object::SetHalfVehicleSolidMask(bool set) +{ + if (!pSolidMaskData) return; + pSolidMaskData->SetHalfVehicle(set); +} + bool C4Object::CheckSolidMaskRect() { // Ensure SolidMask rect lies within bounds of SolidMask bitmap in definition diff --git a/src/object/C4Object.h b/src/object/C4Object.h index b2b1c1138..6b601b1f5 100644 --- a/src/object/C4Object.h +++ b/src/object/C4Object.h @@ -212,6 +212,7 @@ public: void UpdateActionFace(); void SyncClearance(); void SetSolidMask(int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt, int32_t iTX, int32_t iTY); + void SetHalfVehicleSolidMask(bool set); bool CheckSolidMaskRect(); // clip bounds of SolidMask in graphics - return whether the solidmask still exists C4Object *ComposeContents(C4ID id); bool MenuCommand(const char *szCommand); @@ -269,7 +270,7 @@ public: void GetOCFForPos(int32_t ctx, int32_t cty, DWORD &ocf) const; bool CloseMenu(bool fForce); bool ActivateMenu(int32_t iMenu, int32_t iMenuSelect=0, int32_t iMenuData=0, int32_t iMenuPosition=0, C4Object *pTarget=NULL); - int32_t ContactCheck(int32_t atx, int32_t aty, uint32_t *border_hack_contacts=0); + int32_t ContactCheck(int32_t atx, int32_t aty, uint32_t *border_hack_contacts=0, bool collide_halfvehic=false); bool Contact(int32_t cnat); void TargetBounds(C4Real &ctco, int32_t limit_low, int32_t limit_hi, int32_t cnat_low, int32_t cnat_hi); enum { SAC_StartCall = 1, SAC_EndCall = 2, SAC_AbortCall = 4 }; diff --git a/src/object/C4ObjectScript.cpp b/src/object/C4ObjectScript.cpp index 5334430cb..e86ea6c64 100644 --- a/src/object/C4ObjectScript.cpp +++ b/src/object/C4ObjectScript.cpp @@ -46,6 +46,12 @@ static C4Void FnSetSolidMask(C4Object *Obj, long iX, long iY, long iWdt, long iH return C4Void(); } +static C4Void FnSetHalfVehicleSolidMask(C4Object *Obj, bool set) +{ + Obj->SetHalfVehicleSolidMask(set); + return C4Void(); +} + static C4Void FnDeathAnnounce(C4Object *Obj) { const long MaxDeathMsg=7; @@ -2498,6 +2504,7 @@ C4ScriptConstDef C4ScriptObjectConstMap[]= { "CNAT_Center" ,C4V_Int, CNAT_Center }, { "CNAT_MultiAttach" ,C4V_Int, CNAT_MultiAttach }, { "CNAT_NoCollision" ,C4V_Int, CNAT_NoCollision }, + { "CNAT_CollideHalfVehicle" ,C4V_Int, CNAT_CollideHalfVehicle }, // vertex data { "VTX_X" ,C4V_Int, VTX_X }, @@ -2711,6 +2718,7 @@ void InitObjectFunctionMap(C4AulScriptEngine *pEngine) AddFunc(pEngine, "Enter", FnEnter); AddFunc(pEngine, "DeathAnnounce", FnDeathAnnounce); AddFunc(pEngine, "SetSolidMask", FnSetSolidMask); + AddFunc(pEngine, "SetHalfVehicleSolidMask", FnSetHalfVehicleSolidMask); AddFunc(pEngine, "Exit", FnExit); AddFunc(pEngine, "Collect", FnCollect); AddFunc(pEngine, "DoNoCollectDelay", FnDoNoCollectDelay); diff --git a/src/object/C4Shape.cpp b/src/object/C4Shape.cpp index c31f2bfe1..2d46d317f 100644 --- a/src/object/C4Shape.cpp +++ b/src/object/C4Shape.cpp @@ -187,6 +187,11 @@ void C4Shape::GetVertexOutline(C4Rect &rRect) } +inline bool C4Shape::CheckTouchableMaterial(int32_t x, int32_t y, int32_t vtx_i, int32_t ydir, const C4DensityProvider &rDensityProvider) { + return rDensityProvider.GetDensity(x,y) >= ContactDensity && + ((ydir > 0 && (CNAT_CollideHalfVehicle & VtxCNAT[vtx_i])) || !IsMCHalfVehicle(GBackPix(x,y))); +} + // Adjust given position to one pixel before contact // at vertices matching CNAT request. bool C4Shape::Attach(int32_t &cx, int32_t &cy, BYTE cnat_pos) @@ -219,13 +224,13 @@ bool C4Shape::Attach(int32_t &cx, int32_t &cy, BYTE cnat_pos) { // get new vertex pos int32_t ax = testx + VtxX[i], ay = testy + VtxY[i]; - if (GBackDensity(ax, ay) >= ContactDensity) + if (CheckTouchableMaterial(ax, ay, i)) { found = false; break; } // can attach here? - if (GBackDensity(ax + xcd, ay + ycd) >= ContactDensity) + if (CheckTouchableMaterial(ax + xcd, ay + ycd, i, ycd)) { found = true; any_contact = true; @@ -348,14 +353,14 @@ bool C4Shape::CheckContact(int32_t cx, int32_t cy) for (int32_t cvtx=0; cvtx= ContactDensity) + if (CheckTouchableMaterial(cx+VtxX[cvtx],cy+VtxY[cvtx], cvtx)) return true; return false; } -bool C4Shape::ContactCheck(int32_t cx, int32_t cy, uint32_t *border_hack_contacts) +bool C4Shape::ContactCheck(int32_t cx, int32_t cy, uint32_t *border_hack_contacts, bool collide_halfvehic) { // Check all vertices at given object position. // Set ContactCNAT and ContactCount. @@ -377,25 +382,25 @@ bool C4Shape::ContactCheck(int32_t cx, int32_t cy, uint32_t *border_hack_contact int32_t y = cy+VtxY[cvtx]; VtxContactMat[cvtx]=GBackMat(x,y); - if (GBackDensity(x,y) >= ContactDensity) + if (CheckTouchableMaterial(x, y, cvtx, collide_halfvehic? 1:0)) { ContactCNAT |= VtxCNAT[cvtx]; VtxContactCNAT[cvtx]|=CNAT_Center; ContactCount++; // Vertex center contact, now check top,bottom,left,right - if (GBackDensity(x,y-1) >= ContactDensity) + if (CheckTouchableMaterial(x,y-1,cvtx)) VtxContactCNAT[cvtx]|=CNAT_Top; - if (GBackDensity(x,y+1) >= ContactDensity) + if (CheckTouchableMaterial(x,y+1,cvtx)) VtxContactCNAT[cvtx]|=CNAT_Bottom; - if (GBackDensity(x-1,y) >= ContactDensity) + if (CheckTouchableMaterial(x-1,y,cvtx)) VtxContactCNAT[cvtx]|=CNAT_Left; - if (GBackDensity(x+1,y) >= ContactDensity) + if (CheckTouchableMaterial(x+1,y,cvtx)) VtxContactCNAT[cvtx]|=CNAT_Right; } if (border_hack_contacts) { - if (x == 0 && GBackDensity(x-1, y) >= ContactDensity) *border_hack_contacts |= CNAT_Left; - else if (x == ::Landscape.Width && GBackDensity(x+1, y) >= ContactDensity) *border_hack_contacts |= CNAT_Right; + if (x == 0 && CheckTouchableMaterial(x-1, y, cvtx)) *border_hack_contacts |= CNAT_Left; + else if (x == ::Landscape.Width && CheckTouchableMaterial(x+1, y, cvtx)) *border_hack_contacts |= CNAT_Right; } } @@ -412,15 +417,15 @@ bool C4Shape::CheckScaleToWalk(int x, int y) if (VtxCNAT[i] & CNAT_Bottom) { // no ground under the feet? - if (GBackDensity(x + VtxX[i], y + VtxY[i] + 1) < ContactDensity) + if (CheckTouchableMaterial(x + VtxX[i], y + VtxY[i] + 1, i)) return false; } else { // can climb with hands? - if (GBackDensity(x + VtxX[i] - 1, y + VtxY[i]) >= ContactDensity) + if (CheckTouchableMaterial(x + VtxX[i] - 1, y + VtxY[i], i)) return false; - if (GBackDensity(x + VtxX[i] + 1, y + VtxY[i]) >= ContactDensity) + if (CheckTouchableMaterial(x + VtxX[i] + 1, y + VtxY[i], i)) return false; } } @@ -504,11 +509,11 @@ int32_t C4Shape::GetVertexContact(int32_t iVtx, DWORD dwCheckMask, int32_t tx, i // check all directions for solid mat if (~VtxCNAT[iVtx] & CNAT_NoCollision) { - if (dwCheckMask & CNAT_Center) if (rDensityProvider.GetDensity(tx, ty) >= ContactDensity) iContact |= CNAT_Center; - if (dwCheckMask & CNAT_Left) if (rDensityProvider.GetDensity(tx-1, ty) >= ContactDensity) iContact |= CNAT_Left; - if (dwCheckMask & CNAT_Right) if (rDensityProvider.GetDensity(tx+1, ty) >= ContactDensity) iContact |= CNAT_Right; - if (dwCheckMask & CNAT_Top) if (rDensityProvider.GetDensity(tx, ty-1) >= ContactDensity) iContact |= CNAT_Top; - if (dwCheckMask & CNAT_Bottom) if (rDensityProvider.GetDensity(tx, ty+1) >= ContactDensity) iContact |= CNAT_Bottom; + if (dwCheckMask & CNAT_Center) if (CheckTouchableMaterial(tx, ty , iVtx, 0, rDensityProvider)) iContact |= CNAT_Center; + if (dwCheckMask & CNAT_Left) if (CheckTouchableMaterial(tx-1, ty, iVtx, 0, rDensityProvider)) iContact |= CNAT_Left; + if (dwCheckMask & CNAT_Right) if (CheckTouchableMaterial(tx+1, ty, iVtx, 0, rDensityProvider)) iContact |= CNAT_Right; + if (dwCheckMask & CNAT_Top) if (CheckTouchableMaterial(tx, ty-1, iVtx, 0, rDensityProvider)) iContact |= CNAT_Top; + if (dwCheckMask & CNAT_Bottom) if (CheckTouchableMaterial(tx, ty+1, iVtx, 1, rDensityProvider)) iContact |= CNAT_Bottom; } // return resulting bitmask return iContact; @@ -539,6 +544,7 @@ void C4Shape::CompileFunc(StdCompiler *pComp, const C4Shape *default_shape) { "CNAT_Center", CNAT_Center }, { "CNAT_MultiAttach", CNAT_MultiAttach }, { "CNAT_NoCollision", CNAT_NoCollision }, + { "CNAT_CollideHalfVehicle", CNAT_CollideHalfVehicle }, { NULL, 0 } }; diff --git a/src/object/C4Shape.h b/src/object/C4Shape.h index 131baa907..d89a4e796 100644 --- a/src/object/C4Shape.h +++ b/src/object/C4Shape.h @@ -68,7 +68,7 @@ public: int32_t GetY() const { return y; } bool AddVertex(int32_t iX, int32_t iY); bool CheckContact(int32_t cx, int32_t cy); - bool ContactCheck(int32_t cx, int32_t cy, uint32_t *border_hack_contacts=0); + bool ContactCheck(int32_t cx, int32_t cy, uint32_t *border_hack_contacts=0, bool collide_halfvehic=false); bool Attach(int32_t &cx, int32_t &cy, BYTE cnat_pos); bool LineConnect(int32_t tx, int32_t ty, int32_t cvtx, int32_t ld, int32_t oldx, int32_t oldy); bool InsertVertex(int32_t iPos, int32_t tx, int32_t ty); @@ -80,6 +80,8 @@ public: bool CheckScaleToWalk(int x, int y); void CreateOwnOriginalCopy(C4Shape &rFrom); // create copy of all vertex members in back area of own buffers void CompileFunc(StdCompiler *pComp, const C4Shape *default_shape); +private: + bool CheckTouchableMaterial(int32_t x, int32_t y, int32_t vtx_i, int32_t y_dir = 0, const C4DensityProvider &rDensityProvider = DefaultDensityProvider); }; #endif // INC_C4Shape From 49a3dd56cd79b737dbbaf3c3bdd27a96e99ce1f0 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 30 Aug 2015 14:32:14 -0400 Subject: [PATCH 82/97] Add optional music pack download to windows installer. The download is expected to be at: http://download.openclonk.org/OpenClonkOST.ocg And overwrites the previous Music.ocg. --- tools/install/do.bmp | Bin 0 -> 120054 bytes tools/install/musicpack.nsh | 96 ++++++++++++++++++++++++++++++++++++ tools/install/oc.nsi | 17 +++++++ 3 files changed, 113 insertions(+) create mode 100644 tools/install/do.bmp create mode 100644 tools/install/musicpack.nsh diff --git a/tools/install/do.bmp b/tools/install/do.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2dc6383c91f46d1f213d8a2a8f2e804058cea4e9 GIT binary patch literal 120054 zcmeF)Wt?9{wm157-`&qM2MI(vj=Q_Ny99T4_rcvgxVyUy?tu^pZh;U_ySwLpS5>D^ zE=h9^bHYG)W@fXqd;e>ftoqfmT2-~twvFHXKmQT`Tg`t<_-|y_fB(;a6nOfN|9Hpm z3orK{>A&>Ct-Yh8qjOq)LrZ;qvj^A2sa5UMrge0*fA;AY7hitep8FlX-X>cux!g(v zhc4J};NZRk2KE~`sQ-|mLl$0iiDg$@YlF@9KJbWhF1qra_eK_%ly-E=t)s1TnjBiE zO{;BgZEv5}-qCe6wRN<1Ol$3&*4)|I+TPLD(b@e|_e1BjX|udq+S^>MuFlS;w)Uph zR;9S=8k*ZXI`b#3?VXLy(scbf%Y6R*@?S#%9Wk}IJeO5kRz2pY@qlsa*_STA${GtU zwq&3F1Lp1BXWsey^y<^McmMtn)px*v-Ua=8_v_!MARgxL*U#l)@Pdmhz2d6d?Xvgf z*WU8YcR#kYwzRdkHMO->RMZ4+8{6s{T7b<}SXxzC4`Q7&*^;?nsnv`mk(NCVOWBq zz)wMc(CRxdcoa_MdH%iyUdEe231j^t4Y2uSzCQit>kDQDLl;?W^KEy&^{xk6TN>qD zQ&X?gHK(GwsiXoZrn$NqRQE$hT2HOcm~8Fn1TB{btgpVgt+A=Ow!W#lt~qeq5m-_p zi1n1uzu*6BDA3S0t-QLvwYBxJr(axUt@Y*)VDu{(GdDrj|C$A%;It zDOKa3sy#aCZ`{q6T-ek`wKbartkc|v}u z@BdcX|7Z%77Ea+nz*SaTXM@s`VjQ3)jCrbWTT5GOnD(8a*y}lWER2RjVfJUZ3zE(+ zfp-!<^}?$=?|DG~p+o<3-g!wz%nDWsL^>NLHel!i05(^zUIQ0cXw$8COoA++1-&y~ zJwXCizWnCLGcUMu-A%S0wBRBs{~<#cS$yR+H{AEoBKV18gl^3!R-KKK^{C-S?x?&)sYOWJnIg!D##0s0>xVe}9VE zB1?HcL0;PP%W+qY>ln0Wz`L8f-8DYS*oe2f%fmd`)2u7*CbvkY)}fKA!^wO zJRbeSOjviL%|7|`(~8P)zO}S<>Gn8SWev|nM`d-LzSb_4^ziuFR`1?2l~T4{A-W2%g7XTB&3IzlqC!l3PP-%$mk6)p8N zN`pEqYbuIDrZu+2pSdR9U<+;ShHd=j*YGNax6ln`I&ynwE;LedKeo5)$EbEqU3PCa zg+42V7@?RKea;9(5bq^H$tmWBSx%kmnO zm`1UwZ)iY?`yY9VH#HlT`W;Kmh@$Y*wZcciaWQbS=n$Pxpsa)%A*IixrjBHZ)RiI+W#2Hr#H!^`4+Zb8B-NBi?s^_&PqtPE}>Kim4Bue|>W^ z$X8<=Z5;uRCSBXi-3mo8>GQeg!v+WOl~Lyyu=8`E_3uB|eDk>nVh0X7=!oN+8=-Mp zNky&7qXXBL%+bf6Q%kBYxcr9yoTrzRF1(c1*QftL)mwkltzLigou;Oy;?kgPU1L*a z9oz&Y0!oR6>Nrop-%ww3&G0);JmZ3!?s(vfufBtS7&8e_-_&7@NGxTGzon$1c61h% zhQWdlR8`~5xY@Ll@_=zq7iSzq@yXRTG^t5b8^>L!A{eiNR7<0}F;-XKs5o@@V^yt! z14ycYit?#zYL%65VXLyHzNVqcb5G^^(NC)9E+c*FA-71OMo=cBm&Qo&Ob@|S+Z&XK zB~F`$!IV|jk}1@cu|JKa=~UK+0P;x^K|K~N!OWMYDM(8-95Yn0d|iCy^$RV&Gyr6c ztAJ;W4{YE-5AI&h)4TUUN1ohJAC>|tXokvrMk2lhlIY3jUSVlU4~-CI{)m-2dFF*z?6~`Wbgf=}0lc!= z|BxYb&o>`T&eyN6{CD5?kg~F}dVGdB3*#ahLIx&5kWJBPZ;u#_%V~%qqd3?ew%0+` z)zui3&aP_+13qXutcxC(pa|>Rax5pt`13f)GoyB4&Q6#LOI|j82R$ z{V&RQKZCrEuU;l z>xhp(TWsm&albq#g#v`E5Ai_UmF#93y!zG$hAL7tHUVTvz3SSKsvgkkgflKwp8-RL z1{(W#Sm1AS&$Gx9%RKku>k{aaN}5SX$(Fi$Rwe_PuEHn!`_2y$rH3DOerm^3U*ywQI%B-dRkRo zBV~nB;2~!|^F35#&4hu5`WS^F<2uVL!!OibTZ{`463Xaxp%3E*u9B*HcLf!e*PyDQ z7lyw}Zdm9Hu$;NvUwMON`4w9z*IIpvk)~<8kcppux#s$tvJ>$K(g&_wdY`Y}8@jh{ zI_;cG0wO$9#PM>?^*5OZCd_rlbXCC#r=5B2O?R@0 zvm8`lejBsU;Pe zR+WK@j=c^zLV+Q~2Mh=iJZR9F=U+)3>4~2Bo?w7fTkL{{&_LBwbLjz$u%rCvZ*>5BHF!tEMxN8@9&|Y2xU+v}Pr91DrKm54DJWM`$eTo+u__3eAs1($8I)%NiTA(*5g?>$aML{!x`W531aT~k6h7eLn3)>C_Q zA5Yq_y$_mPR3^93w_Drm>9yfDi@rJS>uJ#{1 ztcivZ2TA9;eCEYx&JlQ@` zH<~<_rSzu8`yPGjprcM)YlBT!Tzze$Y|HI;IsVjh?|b-}aX(MW`0Org#)q=9nqhk$ zh%$4}8+MJkm9s9qTF#k6N~s8R@SwY=7FX=K|6$Z-R@A9WmVnJW5?o_snCD~4@Ps_w3xW=?0EB? z_g7zMLsV6tMVDOm>mMd?z51M;sBd%vvc4i znCf6w^M;#m#|B15pC}I6^S40t>f0j`IUGI%2Wk#|08vo&w6iXtW-x`m`0^Wx3rmB5 z(O=Vbzn)6}P487nt3$^NHMsM{zh6R!(NdsNf2AA9s10BMzx}TJ@U9TbSKfHn{8>sy z_(T^&fV34>Tl>13@2;z@#oikm>ToT10OzXuVDiAj3@a%uUt+lxWWMBbD;G~K#>&bo zYPCz;R}Q5hDc0I>Gj+&(X5i2TMvVHB&QjmpURG5{im$SE$VA9rZl%@h>S}0NHFeER zZNXm3N{V;g`#|3!DHr8uNt3_+?k6xdUr)c%_LbLM z53_>Ijkef^rr*>Yjvy@9#n{t-a8glSXUdEo*yW}R1EIgpa%btRzV3$KegBinOew66 zF5_$BCDOpA=8s2?!qO?3nx<|ESAFTR@z5{kbJZMBms@$Y$De-Qw{30HxWVfhA`@cN zaJ}n+C+F=Gc2*wp!li1etEn7{(}|LKFfB{ty6VQewKob%`hdHy3I+{bbgAVseO~;> z8xm8tqmrsO`*0P4prOkO$b5U`XWt%v{Fzw-qH`MTDWSM#w}#R9;7G2*R$s=DKH`ds$Oc2u&9qMuUsWs%y1JIo zd^pSqTy+B^+68jqA*q1{A>4cSHr8a4Z59|i`OJ%0Nrfe~&{9|$HV%0+=BEkpoSUY? za=YvP$0bO=b|f{2wH~_ko9}<3AQ^^;FQEFeufqo}XGM5_`879(Dv)G4Ts8eua!^6D zyt;AK{XpT_e4CwASOs((X`*8D7esvwrPbEiP~WM{m~m6r-FS=CgWVEjfC?MJ#3%~W zuCKWE*2;29J3XqSq@qUUfv2>pRt_6&xjo%U!}YH}nZluHg&PyhI==b-2eJv>bT{d+ z%iaeiV6>CkGLhi=oA2akRUeSP;<{VaCyT<;^4fh5IVQYbNdrg!`TF!#lT_!9`nviv z&%a!T+O^1%%e?&Bn`rXUC*Nm%Oj)3^!Dd^(|G|d~EV8&Mi5+&`U(R$tY>J>bLLjJjzdK3HfE$vI) z)XMXRAAPdy%B#mbbqafk$^;iJAk(>n?t0)cj91EcKKOWv zAbn>fil*3fs~x}l?t8q8y~CYcSXOQPH#K#B^X(X>uEy%$&%XFdp$!zi@P}|FHxQ#M zt+9^Wlq(VCN_l%~Y8nnc@ zlQvKT+pTg$gDTaY}%{qy4=RqqZ9suIB%ox0g)T-*n6Rx{#+04H4OEOdWF6 zN$@Evqf#Gjy3I~n-OUy}yRv_ysHjXEwKS$Y`t<{5LdTd|!K7Qif^|3EQf{bR>rI_JDJ#k+oq1{0 z9OR~JfGe%OjtnWiEzQ$PxYpZSH`!{taGdrn*m|cuM~?c+KcA4lZ!alRKW8EmtKpN;Wn&bG$FheS#mjGQ+Z8@PHJ!2V!NGC!{CzanHOI5 zq52y^2<4(#^&2nu6tBb1ob^VWL(LWb~-= z$~t`nQAj6_0`rNkPc9lHGDUIOH8-I~9^Lxlfk&RE)X`5dSebY>)_(l)$K_U86L}47 zrn($T%4;sZ`nFtc-=?w9pMJ$@)6mGv6y4{;^0HzA-FShDBaS<5$U=)~U}DSRFf1!A zA-^`^ldL)G9)A1 z-yZR)to#~&-qer6DZOF8i(voy`>|_pxS8>bOF*d^mWwXGR?a?r{F#^39Kj($aB?>Q z{+ACK#_)-|KP71`HXJaS}#K|Nfpo{`eD#@4Wvh!-S?2 z&50-n6WlGFctD6}|_3R^0K5u4|ijqnR1#I%v%F2rB&9)h)H?b_j=-u}|F!XX; zaClTY^q7;X!apCAS-B&8=pvZR)!>eb<0@2^4>=4EJp9PUK2Jei>iuT&t>Z`85l~ZEao(F$4^3%^h|6I4C*f|$-e{~d=)xvgd z^K8SFqLJD#=>}LR&uON;VxZ}DZ8D=Moh zs|*?G!wat%4j7oWJXK()-DAM2ZDZ@S%DVRInuxF9Cf0pdUw;z@B@?R7Yj1z>*z>PP z*QcdPzV(b>H8(eL4xk~j*K--9(w}(dCGHfZWc2DI4?g+Ft8X<2Tb#DehMNE$-g5C( zH&K16s_XVU_l*vUrpFTINlKWy+3=k!i zf(@Rr*&6YwaGpJ^PK!$JSW-<%*UK`7O@M8GCAOglSmetDo==x2!%X>eE0p2 zG_|f=G{JfFpiyKfa5!hDS@;H{KRTw*CAF`(`a1LUo`1{jhc(tmq*J79oSnE*lbJ87 z0{vN8>u$UaKBH^0BM2j%4zK|qjQEIf@vY`m)z+0&*KsS6M+O%P81+XTe`-^6_@xb* zJMMdw!b9iR3m=Uf9iPbIEAkBSyRr#{NY4kc0jE^GhRLwo2fItRO6~1({rVLpb7msIS>^ zkPltMZ@;faeAKjQ&zV)H|M%_3YWr;Tr|oS`GgzfiZl<<*M9A4RTuEv2KLcv4PZ1J;ZCV7{F?Ldk+>pqCQqP1{!n*m) z^RJ-K>yFBbvhuQuW)|n{lY<&Q%Zn#7S3tBUUJ=7H=~qGg5EkKqzwYKcS$RIkvS7n_ zDX*%+@RKE&*9{H1^qO1cBb-mSvT?X*Aam;-cJ0FjSD#G>gAR70=9WsQ5cF&JpJsvxKgzfuj5i! z*0-rmA!RZwvuk>CVL1=EWI#B0p@rSCmuqgkP3F~2mRPT+FGVHVqQ_TB*5w6jXF1Lf(T8KX!|4cMgaOn@nw_GKq{6+k@!|+5t{s51>^; z66u=yM#^E*Z6fYMWDpPS#PJhQNz*?6;wwQN4SXmqvj)Q~5%SNytcrlW=(xKc40S?t z+>sP9jT*8E@%KIWs8*rSG40q{ToLJOYHEL;FnQUPRzrbs*Z1x%Z03&p9)<;?^^Lbb zqP5bKnIs>6{289%6UD1Z#{S!!3kDb-0mTCdl&KE}fQ;h&Yj3zYvgc}J-<363IT_wOVbT=qfVi`C0U8n< z!*9PI<1H#IT5z$Ykd#N=Y7-PVQ(lN5HC> zD`m2Do_gj5;Su7XOK!T&w%r-o^-*ms+HKkA;G;t#2RrR$a4~o@f78Ewv&no2rj5mC z`#R)cXv+a(51d!jopIwPF1*Atir_s!!)R&mK0EBTZ)H{0*%w~E^a`t~xl+70fArmt z<9{AMHN_lG`*}jl&Z{jZZ$>_|$`mHYYmI}2wkE^jx87A+UI{bY6pHpqH8r$jT1i=L zQE_z>XL>|jhZjy(NM|e?r`zqa@76o*0kmEUNp}BTuaNJmn4lifP)VEBqM&ELnDN&l ztIrTWr%`9BP69~SL_d!k2P7Jc;rq%ETYiop#CeUmnfNM(xv%y= z^ccV5PLdhL`q8CC`H&a90l*m+tKdu%tVu?Y7ZFC4CY?E@KNvY0=7GwrZn6aXhv*qF zz#AM=DeCDiL@Ily(O4bak3aQnMJtYRp#s@{%=(zgx5BAKi!ZaH_hHzk$c>CEO$*J9 z?H?;yB0@V$SVfdn1Y7Xn@<3bWIhisgMpp0{VBnJv5jN<_=U?IPGR0%o27A|7a(2Szli-L@BE5sRbIkJXM7&KfD-t=0gXT79@vUkw zfiqvKBput@IcmKZpE>%gA0!qWMpotu|9*EQ3f7Rc;#JpLKZuzoa5Vuj@!ntp3oTk% zRcRuChF?|JT18K4>zG(rZAuI47(20W*xm;cE(3-x=#CWN6uMb#98n+~qNt=y{S{<* zO`2T%z$4EHy~_nf{{6xqo*xt{hZ}FbpMwIiXxq9kS^c4Ii6z5WvT-d2{@7E_O3@CX zS>@r7x^LhMue=3R-A?Il0A!?{cj>ihE|?G$l{(NQ&Z}>{s}+ndl=pDS)x$%`a$Lkp zkbnd_s3gCT-VwWpU&Y#}>AvN_K=L(_KAH*1?iH2wUw-|4hL+D`)C?R*^|A&e+`?^U z>g$;&c^pY_*)_NDl&We5MtQa1CKgTWRoCAl4Mdq_47p&ct8ZU^Jg77DCQK^4_n{{a zIqHOs8GCykaMBqUKJoNFGy!;wC)Fscim65q;c)Xqcs7I+s=UW||NC9c31y_v?`bg` z71OvOR#Hy|NnM!0cR&1;9I8*^Yt$4?Ef)QYRe3K6K|h&EvPqf9;ckS+(qE3CTK=U@CF8D<4VnbbHy1Yx$e zm4*=PiUj_7{6yS9^>kUTEii-Y1CKtde=?U-TL3^yZxGgHb^xxTo}oz!r(v1y{LS}c z1-ymEl7gnT-FYus5U6Lw8XZ`i2{=W|E!8bDB=x#MtB7oMq6Rfwxg}*)-+lk{GAphA zx3t<0O_+GAthIh~V@r8ObxC<0FVKk=lqK+YJ(pdx}Dq|wWcbB zQ_^yIbb~~F3q&!!`~C-KU3kSZEAeLZ?lpg`J`Sa#PpnvpDO6f+M@MmawHB!f_aYhX z!Ihbt>HGZW?{}}N3rJHg+#_-?&50wao=Q9<=H2L-BR}~9u2REe*4RTujlY8ng-?sR z*g9>}gsI!_vRB?9LVLpk8Z`Kto9@<@uw0U#p|H68^m8tjXLbs4N5pg1kfEYazk`lA z5j_tl*tOg3vR5c7X%yr;^4@;$BiR6CFeL^MuHZ~S zf4=h8h|q_VZIuNg2o2lwAo};zk`P7=rkd&sP7D zg02$WNW;wjhwkB!tNnZ2VFaNpF>n``p7>RlSW#62mPDY>zxe9gnWVo`2c-7v_diWK z^_(j<-Da2F_B-O1yC3VOIl+`=$G2l9+;;C13oX8k4$ahvQqoe3)z;alr~ETE67z|w zO7`=F!lzz*6Rz|ZZh*EqA5KUjq^EqwjvL2j3^AAHsr8EvB4~~~<;=SJI%p`WpbmEy z7L~5P?#8)R|2cOr6nOfjS4z_qTTxj=v-FfdsTiUr4TmffM}GRvdYf$*7#I{~!PqKm zt^2`8qjY+8*w)iF-F6qlP?gr(WJ{c;sFLc<*V@Uu2_EI8C3Y6d%2jq96VSbwvm6m! zfhb%(A=c9n2+i=vAAd3sv)T+%x#I-!8jlQ5;glv&daD2IdY^HX<=|%9?v$&S$9`rh zh64@x^|wc4TJ=<}${VD4oZ=Iu6-?n|gB#C@$X<4L$CSdd5hF&KWY@XqnR|KTEq9na zX-ZG|XBOnw%r-s9cv7KB{I#-N%kF5TKI+83CtA+B>no}%mRx@2XjBSr2S_S37Y}Z3ife8@4K_djl54NI@s{m&*)wYtPe1>9Ad(oWs;j6b+hYZ2{8<Qb@7$kGMmphA-zn00@FO|I39JXY`MeL15xsR3D;r%CB0 z%Lp0wI`D{n4nFFE$DRq_`gFr;<_2b4(tBAEH{A(@BndA}%2MdJaJAQgNB)ZbKp9?R zJpt9>8p{05q%f1#^ns`hI!{S?rJkkesv)b4Fty)ZjyR?B6qi+p+*Y7wm| zNSG~3%gVo6YIxEa=c6QOnN?9VUFi7J&i!QcSFgPOHkHY^_}kp`n!*M)MZ0P(Vrp-@ zS zuD8k7GO;j?i%HMkbo>40*44-AB`Bwhl$6(k6CpBlD`qaGTc0EiVWT^Njw~z>J^br$ zzvmSo)C>V^wty`x@-5;{`+JDBejQAbM)|O#t@)*j$7DoWuql1Gv-%e7vERXs^$e~+ zRFzPP=J0#CYHL%t>GY*%N|&I#qB2HGXXleIzU5C24br!}V!zV^T=7;aj-P0m6<5V_ z)7THjoA|An=ziuP>gu{y?fptMRK1&$IF%8KYsp!A{n@P-$$@ffjz;HY&Oj08v;--{ z|CRjxWYEd5JB^(EdC`@_GyhRx{5GOM!*lsx$!2^;ULo|-XE~^KLl#<;Pf2fzme+QJ zsJL(nqzj6uPYVqckuRLb6fGpDb?^b*5CAs8}5WcZ@Me|J3Z)tthCqE)aBWS zz*X1mbMPywh>$#EC)*c2RYPbWlKK@z&_BmrXAYBIhM=d(hbRd_hALs!x!Bd{lb^fO z_f(2xnWanV@=Tt7Jo;+f5GlKmMX_=&s)H^q>F>b5*0Xw1Q0(zMW)u zpmuaqgi94fkR%P(RvN!bPrssPU?u@fg+YiD+h3kDqt2}ertDW*a?)42hyW$&eNOX> zJ6d(Wk)a$?hS|Z@vBtU^hZ2&!QbQMBtfDMD{Ik4-K3Oxn;G#=Xa!5U$W%ACY-l$JLQ&4fK)x*LKVzP`z7cS-Ywhu;(-2YHJe{L$!LZH#P7hebF z=8okcb_-p?HE*?D(m>z}A;miQ)m>dZW}TMr8kL~*p+_F8jcubqQ7=Rd(UVlQIIpL6 z{nq!ImO`64*t6(tv?6SV7HoTi?6!r^qMS1RTl4>|>Gh)7E1kkeEKDd*$YK{pZV)-| zsu6QLUC;9Oa{t4Q&AvxtftB&?w_|K6)RZQaSqcp;(cQ9=SPSr_*9N@-_VegOR^Xm~>zqQG~YkI<$HH4(5@25^JiIAj% z0gRMqUwAE_6i^#W^K2~ESW!)_n{Bv~XDzozQ`19_Ka)TuYCR@m@GD~(u6TnVdFsWC zE4wiKu0)Wzj?0F29!JW1`SlU!U2>iH`NNJq^~mE-Kk|e#jymCtqfb1OhvB5yp6J1Q z9(;0-{SINj8wk*)&ZnGt@$;{}{r*QE3F(xlu|tcN6_JoUDjgj4#)}5RApvTZaLkY6 z%PSf<4@ZCgtspL0U3b%6KJj^0#Z?SAu>x<9!F`Un@T;V((Vt_CSfXO)nnPpA!i&B6 z_6PbMn23q27~6zlb~Q>_sl*OboF=fQ!-=92GzT!tyOIM3UBi5vUFH5tKA2VPnbFpX zUyL681=IU)^9b0AGZE6&2P9mc>9GvDG?5YJ6;9>Cg*b9U-5NNMW9s#{Kc+dG#lWc; z3)V4fh)@9%Ax|uN0I)O8!;_~qrRDY~oq7KMnQI=dOB;fzrx+WY%CDYDdH4MMD^2+G z{Dh7Ss9a%!_=68W5jdLZW7_xTJMJfZ^OSdO+SO`y)jWt9fzj>9o_uDgC}~|S9nyn= z&&|8tu)PEq&>4t>e*vy&0;-hhAlT!!dmb@Kp)#|)IIKbm?AmN0!VxnIG7T5bw-kPF z38Bho(?I_W7~?5Yn+(qru% z%2k5-i!R7QP(PwMws7?gcVFZFkQz!c090 z!TcUVY|mvR=1C}QesyjqqFUtHLls!1;1-P;hs)vdG=|0{^av-1k~Akgj^%o+Rh)UaN{xCoQ=x90y(q^Dq;3Q4oBVUB6F z*e6{qoQcH>`DTIDQw;?q5PzmcJSRUx%#twlpbN7yK+MGLb->x@*P|io;n-YfB2P@U@ZMLZsQZ7S%Vz$>2vzQ=&%U&p9T; zI!TAL?QkdG_{=%X-ZvbiGE}Gq_~RxN1x-5IE#0z#a&=Ypgb7o={OX4fM}GGDTOU08 z;_LiQ_dfLGrB~l<2Q-I;E=oS zZ5kAp5}Q;@l+dPUW4W`;iU+}%ieU6s8_$Lt2Mik1CT||Rq|aw;sFh#2BoZ6#IQh&A zGqZ&&Q?x&fAKxJCOO$Eap)@%&1yb@}#MYm_8u8&Lypg%p8V-=2Km6n?o01BPs;a5J z^S(y_mArU3nZw-FaK)!>Zg395)hvnZ<)led!`Wh`CtJ;adOAG{TE+md6Q7nl~|yPwIuWtV#3lh z^LW&%$TR%gzq|jcCpz@>UWNEGMJN{*RSsEr@!+?XoDUxI(WhUBdp`**G>ZAL6yidh z@nd8)UNC1)k3}0zSeETZwUKH-@N4p7%dAL}+A{&2L0WcYl`$>yC!|A9^y%rnR=oDs zhcT;a+KRKOMAOY#+WOq^VF z^^JF}pSF@C2(0P_p)_X2^o9%CvkTX{{+4@09YCWT;EE#MQ$7Ev_nEhckZSGNX!GsK zZe}bC@%@osgx)`0U}e7(a0v@@=gP*x4m;*FEK6d_m}M7;AlTrQw?E{GCh>VWjy&Nk zJ1m(b63r40_BU_)=Qc)qg<5P7g@2;^DK3A@72* zSKoXevqH+O-sfql+10e!l8?Hnp%pr$+i|CygT06fpt?Wx;#+V410bg$Cat*`%nC2! z&xtuR1NP1Lv|4&-%uN=ovhN|sHZ_M6)jEbBew;vi=WMy~^4JxDDPhbeT+KGW^lTx* zKamMs(IYK;{CV7DE=rq(VDbRwj&)~hbOQ_#cml1?*nQuFg%urn{Aqjcf2c!nM6wxl z#3)wJ`H2x3)Gi-#k!2u-|2g?WbxPjxiRnFMYLQ;UuacXZ2lY=U2V=vDFwo$n^WF!a z5TMH`p+z^`{!n(0WJ5rLJV&NE;z~06GErlbPyR9VbRi~!P+#Bw@Z(U_BXGK7s~vVR zt+T_f`{q&<#x?EvpXkaz)hE`x@Z@NSjgqELp1kSSJ4G;a+LxG}n7rb_$q^(tj9Ce* z_C!{MYdRhxW!i`-^EXgrR!asv>3xJo8?gCGSdAEL8S0v)S6D@~9o;urR??sUgt)S< z5CC);68$uG{1VH?=5Hu-;T1RK=)2lvU>cs;RUVMSc_IouB-+(C+)l5E%_!330y0uI z%o*Wrah^=awA=4~0HJ7Ncy-K+#|}Kd`(ojL0RmY@u_h?Cr)DL^*3Gtth&`y2f@+R9 zK$47Q{D=L52S~04M~o& z@Mh=FnV*6ZF(~$R=2yBQ6ZU`KsM(l<85SB8r8>)|H{Ts;F9Hl_#HiSCGPH=0S`pUk z4oj3RTT)nLu2F*3wdlrM?~Cv)j+}HT6)G`g4mj+1UPNiE0JVh+a@mevVk}E`X|v=x zTNKvVdoBf%Q9qfw2<1$vh!Tk%{>vVC?AhJ-J6ym&jR+UQ!{Gs|30aWDp9eCrd!kkv zG+c9oO%FQq1Y3kzj$L0XzkTlza8CUKPKk>YQFMs>VXD?QF4u3t8qMN-OF)NH(+ha1iZ-E_hM4$3; z(Hw^Db%0G3LKMbE6K;P^T!oiz2G@FbGt<0=Ar+FK>*6P$Vg3a+L?*bh%E5VRSp-g% zHL)&!Wdra97W(p=?_`rRsbNPYmepO*U+e+nt|+gtA-vs7QoK+&A9(o)$AZCw1%T1n zV6URa;EfRUzgY9To09@`yZ8^N&|M>DK1Db~0vnnq(}k^NU@(sSDy1tMM{tQ3RaI2j z`4Fg*QjvvVcr6xQa#?ZL7+ubxsxA(;qrP-k;4k)Ifr}Pl@ps(wP~HeV9L2FyQyfBv zgW37tC_~1qc>Kkh-`yPW=*A4>c<)bu$td#7e#|DMH~A;`?$14VkLP{8H-aak>)<$%RFpy|Doi zo?lV@->mbRqbZZTdN@){D`cw>a@cMrOtT`yDG*l#FvNo5+*nZT=2~9KGwqD^SU<^5kKrQgPb02#*pkfdYlo&&TBT z>ZV~&xy`xnv8n7%(&QLR(>2Km8i~^e+fB*`?*g+}Z5Q5V7i~Z6JBTrXnnWk31P2$v z#}tZLp#(4*#aS0#McI%oolIzMFu(}&4khF-dD%w~wD4q`dNnlBPJ^U&%FPOZ_qO>m zY^_lB-lE9ABoY3JMmg#TK@7C+$Qi1>H*0OMNyK!e85~+xOqQhx-ltx8bJEmU-5KhA zI3)s3$p-yxxKe}&Sj!G{O7}o8WsrFS4KQy(nOh`r0>6K|O7V#+|LK#QL-(JN}|Yu3UwRMOifulD7qeE4s)zyZ}P=Yxk_*b zcVeP4*_8;)upw?VLPuji*w}C&qYj)r$WT5#byKdqWT~++B0O7}(o_2X;rm?M?y>35 z9O#-p~95_2YM%_=~DrdY1 zzlwWeO25cF(oE+(o?UWF-~Ru4e8#W%_pBW6e#7qsT?vdme$t(I#s~HB*)O0afz3Z< zm{VqEo7Wi5`0f7<&pJX3E&AjhA&fj+HT-TU!k`#~$sP>-%0$Knn{AaT8G1#Uf<&S$ zhJGupGHgWn59Tr25U z;cXBTvim*<8l*Z}hf0^599*Sm+0+wRbccebUmd2{?3th4LE$3`9jOC6a=*;jYmg5` zGiU3Q?w6T~b^kfzL*}j$%h`JkiDMW3yM6X%%wgtdtxwQWXP(1WXFAw}l!V1fb3+`{ zIrCS4?Kemf$BV^QLNVl#LWkNADMk9FaMK9a?@Z$DJfY$?jp8N%~u#U+3iv# zIFUfIp6XLt9vgeosqAf=lliclclGqu%RYg=Re&AU7d+*Vz?>sv?GZ}_cu=JAdu=q9mG{PRzc$hRfMmHQrY zoIrZ35`;J7hiS%b;3{ivc=A~ne>m!Mosx4-=3$hgxZIUS0n7BR2cNm_)(4(>`5haG z<&+6jp=kX|l^%TZ~?^Qd4W+VAKqHB0dm$Fv7Ff2sn-F zy$?DnZT}Kmj*B^T&jtcJG%c-K{IFwAtgfykq+rPwB$G>=avQj+sj52agi}S`tC+~c z`3w39z`p6Wy9iT?la0Zc1YA=zMSEK0Xk;!;)w5Xq@uy!Dk`Zet`o>APRv{Iaqyw{T ze_bJ5l#e$yT37GVifDqe?E_`i7#3$4S6gfI?)x2Lc^%>i#Jc3F8*F$>>Iv=BKyflQ zAKqZIZG~*n9I|6sjMkCIoh(q$_AIfEtl5TUL29u|&1v@o$Du2)3O!R7Tc(!PpcN;lRmtAC9Ku3z!Ogl2A}_ni^7RknY_){u1p@~MLJDG0EokX( zA@?3~*NfG8?}Jg;Pia-;ueM{y7vFl`u}8ZsL?;u97@IB|^`)pe2sIs6HLJdU@sK!H{bnu(1MQYwxe|)G4_J+Gm_)DlN30S3JtJXhW6BR|8OWJ zj)BOs5MM1Zxrrx8fWHBi-UJdyvO4atwjtsQCKgsXM}{}dW-o=srTpT%>~&yn3nasp zJ7CLdoej4rDy_&?WN}#_s=5YLloebK7g8?Y>{@;x5<57=ez*sNQ&c}FRyzM^??c?`^{C8bm|XXh=vWSl&uEtV$; z9X#%ov#P73J|$%p*eTp*V*dH>8CP_wZd}>jQD4JVP-FT^9OG`y^*7N#EkYWKZe>-2 zoeB_EIL*-~o@)O~XK6`LRb8L?gWWPcB;RIeJGhqaA!3YHf9kS`?~2uA12C)1sn8QM z(QCRx*NAcQ0DFGD^ZrMvRr+q8Ui0(Z0*PzoHP=1rgwveYmMR?EN1S@*IZ}pN zoo2?ZB@{n9a@452Pf_;wN*2pbW7NbaqOx^*K8CNnO3gzh!hZ8SptUxR#aus~kDxLN z3c)>iFw7I>FTM7TGjuH+d-U1YRNJ{xQTZW5$w8bgw*1Rsf*bD!7qoKb3?)x6uaI@_aFN#IVxC%L9KcdH< zdQpa7el;eo9_os^xA_Tpx3)CB@z(p!XVjq~TL%q3@w9VQPtm2-5qYS6_JqtG9U;U4 z;Jy}cLA5O?^dO80rfN>pLcUUM^{lF~!G%TBO$}VGH=t9=3QsZo3 zd(AEPXYmbk0I#@})>wO=gO9YPDRWor@g1e1Vi4=dGwLE-nU8wn`IofUC(x(~>ThUk zh(EDn>yDrO$2$i89K^3Q4FTbbjM4X=^Z9pJN5WNvVCi}!vPzm9v-O#+V}HoPi#-4GTMT`4%Y};6Uf%rSmeldg2Xf`;XV(qnBke z{`v2krjl5);XubCJM5pSA;C#_7!p6hmi>A44GyrQ0OLiW64W=>k0=`8Z%_|q>6(X;!0gN81cR{i(KksOFa1=5v1VT(cI zgo#rfb-}h$dWfFBeH~W&!*^rsRcQD_4$SM{ho62)%Z_UH>`+X3a1Cfo3l#SsT3Q`hrW|3u`q zH{FhbC=owN_mJ1BWSbNRbY_kEvFBcwhSj4vswdAq_CMTlHd=K0ITr;z(+EA{_|w?S zUgmkLTkm`@;FOdBEw$jz-n!-GwS@AW_dT}o5=;5jU~z=&xUoNGdj9$ENmQ|X16OR0 z*u#9WrMhs1Gj|1x1`Qv5>bV3b0Y^5EGHurt%urujeZpzyU}*iFT*+Io;KKJk{3Q5| zn^GLSBDu1=q6p|)I;*W?+gqF4{x*c-e4~i zJ&Vg}AeLppkqrr}swyW;E?#Fq z5`SrVS6bt&2Xzq6&)rv@0+-=RVi++C7twtw#sGUyT^ZZyFSzL9k3I>6u|^|n1u^#9 z+9wxxZP)zP2criq=%8f#mWCxB9i3ov{3&PIHJmm(p)g!k4b7oB6RewTy%VmLDi->@ z!K>GN;*H|cF0!$&f__pE&yN~zxx=ntph~34=+U3zNOFj;rtet+*l)ZuLM1Dzsx|11 zcSa6eKnO>u%@y?YO}+L7KPSu1z4$7>5~J=kbEV5o6An506x1+05yUskuC$s$ zRSfWKr2;Bhp@MmSzc{@v4XEAr*UmP}*~+FSPj5v==c`nT9?AGsN_{ zZ~gh<$DiW=NR6J@i!(JwjQm96IDsWjHx7@bWbV9(9;~WH{5aty6p{rz8|Iu#-;bRn zZbp{k9XJD}gn8U_n;m!ifB!ZYT_~ehf2n6EBz^mBv*RAIJUN+u%1Ta6;jB%ot+N4; zq~^qiOSFA>$Su++YXHamG%kTZ1`0F7Li?<7@v=^yJlUq@sexgJ)YsRYaQeA$qJh56 zcaCB(IPr`NGEIW>cTO9&_W?wqGy%T|jC9(|&KMfyL0hi9>2CGOsB?6MSkzO`x>$>n zTnJ^ufu}$IJV7gH0&$LJ7sKorF>3TVmt6C~$D_QNBd!2O8XaQva0U(&!#qow+#{F+ zn60$>y4*Y3n;V5Wy!iV2A}*sh!jaM zX%kd--(B}VYEhn2@bw|vl{vTYwvu#+$w7%11)w=CYuN*)dMYE$sG!=lDT3Zf=-7YRjs)C+EgRJ*z(d{CaG5T$Lno>61ya6v!61lISeE4+fgRvRoG^J`RBi@f40#`GnL>y!ua}Ffie6C)-ECNNqa5nO*rWm|9k*dAz!;zl= zm7Mj0Pt+~C!%0cK`Gn9%3v%pA@yZ+T^Mwi`(uvx3{HbSa5o%;axvL3C+;Gc1vC(~+s?h7jr6tR* zyhc{SRWbpr?}nRiCxH!)8X8((ef=GFE>>ntz4qq2d6A|PT}I7ur=G=zjjaQtAwg>M z+a`ci)&8lX6Pb|^1av`L$(fYk^pU~WC{w1Vg+V2>YE>Y^jXu9xsQ@# zDwxSpC!StgTkS(sbylpzXsdHE2NjdQIlhc8e*%eWn~Lf_5!-AeH@k{45A*)>!Gsg1 z$|J>}=U#M;&Z?+R^HA;Wz70=hYx721Y-?kDb=Z8{VQt~RG!Ny}t)^p6`a8%0j1seg zH%nZB)=7WAz)wg=3THAxmrY;Qr?fOCVw?*WUWI}JWd%w@3R*yJnf=cIIe3jYbv>B-;YIWPK_dK-Cu)XxA zKk4VyRpC-_gzg2GU28=!deVFf;tZ_*ha7d19wY?8LrSh``iz;o@e{J`i4iIc*d_Tt-j-4Ynh{lcCUEuKbIye~1Cn-1*)2V-{Oxc|#BLRQX&M#;XffIs(bdIpWIpAeM`IpML%|K9I+n#wIN*^J$x znWO3DH{M!mg;ggP#(AljgZEC*b2nqM!*2UwaW2C!1K|FLpDrvci_^y(Fe>gh@pHp6 zIE3wM8e3j^^{pkBTd^C=St)Wb?xZPG`}1z(&c5PfW-93Az^UU9m5li>N&3L&jz-<6 zd*hwaLO#MZ5$g>_m4{+ub~11k?6UpCk47!K(&~meI_n4~ynbA9jdh=U^&NDkjXTz@ zx-R_c=1pv!*Tp)Lbp}_LU3&|780=N`X&TWnkyP>Os>X&op2qMg*+w-v_I2U{i!E7J zT3%NdPIA2%4ple|HAzL0koQ;nZOS$*q=O#`r_V&C>t}+*#F_4VqS^F8F8l)>K z%hQ&>UD~MiO6VwBQ!Y7}mCkSG*u6g&< zKO25}st@85Ni~k??wp2nc}OOSPj-Yj(-+}nsH)~3lEw@v?xEFFr<4p{aFO#bz1l>o zRdU84AA;E%8i@(STkd|?R|2>U7F{e|wk}@@KiGJS?R}!q z+=Fx{X8@gX&V`sIF6Z=(a-Pr5jz^w&ezB#O)$h9FZ}ZGc`~BdfPkFG&S}hH~BAnRL zgi77qyu>mq0xJHA1G5gyS=$$sVW!vk%Y+^?TmPM%ez`c|RX9`~|AcKm7Q0g|a4_@`(YTmy$J2&-?u|Dlx9 zpLfaiiTefiG*+5?0=2298HtmtG{@a%#MNQPo{V(b2u|2?nqdiEZDz;8!Ne9giLcAJ zsteEjl6xI^xUIBM$&5c}W{UY&*vW4D9h$iWk|Ln{PP^^Ly&!SuY3ahXXs6kw01+V| zTU&SC```#X=(6PtM3cggK&+=;cq5F9G!Qs0TIH| z@Yzo)A(w;yI5jmK-E`?Bbo8JWu>zoq>cW`Ke3&hf%@CTi4DmN~Ff?wx>p?)h{oY4W zCK{3qUSL2OI;34j%gRc9_|y2Qa3%UoAeIU!7*3LwHOP!1H2Pda)>v;7OCFgaQzuX1 zjtfxPA2|-9cbFB$E+hy$tD}R| zh?7J*I?S`1zq6r=pJ-o*k8fiY)isQ)jxpmVIEe-&&Fsil&!S%PB6jHXT#b}xOq%$U zc=b8v@7o6-dxoULh;&C5N#T?pFmTTUjv6)kyI^`P9VKPqX#|^!;9$6J9G2}3&BQFE zcG0ysE7){9?Y=Jz0BV0e+vMbjM!Z!>M#L$E=oG*Zt3UD*FuBRr$sMXq(XzLpDn0+o zJGdxK8xpuX@I4+9Ei&_R@|hRFgEaUah%#U!ht7_%W5=zw&W0RfdHM!(^Oc(Hf7l6{ zSzJ_1R{ANp7B_yMzGq!fbFG%M+ILB190HYcRUDfd<76ClgOukDE8!aLhPXLejG=a<6jk2li6=YRY>8|vWnu; ziuE?#It-$i-wBV0Xc^}zo2(C9rD+|*NA+&LGfpX02lbevK^2{w91R*`;#HH=unK5- zz_GR3{f1lb?#5Mf^4b9y{<6ca`xt%K-h5YeZR}P@3=wEtK;Qll%!E90|9;F^`%z;x z5GafaVd*DMyU5HzT$T@^fo-iaR#=pKBfuu@`4iFLaU^StbIO)jb_MQA#nHW!;@5w! z`Fg3FusSgV6=jvt78@EjG=|$MndHKKo&2tIMZy3lZlma^K2}6U}Ew%K^eRZ5?wAy7f4`eagrmcT;OVXA~Cxngtf9qZN#%^!YyL;+<)u=MqBx56!gCVNYCpJtre)l=}n7mTVNXMY8HMs2BTj4~WR8WzY4?poDVUe;LK)uO5 za^7Xb!3o_mm!Rx;jy(-{PQ$9|EUR$pL2$pE6?mL^{^d?%AvIWP5E9|O=|FI`ec;h& z#!V{Ir}EUNx-xthiF3-^npzaoRYLvU zO`T6HjujtPsa|~5jjD>snadf)nG`6T$1lC2veIlIPCdut3Mpt!sB!j1*JOo3+v6&T z^(H)foWMVf8G}D-EHw2gd$-v>3`1Ci+=@)$b*|&POxi#oh zU*ELn{zo7k)iltR)~YPLN`6u0LK7z@wEXI+HyJZ)T`}8arRTV2bjAg&GCgakf^J21op5EOW434K7>qeZ zR|o;NLZ`A)0g`0W69xR#eZ?m%FSSmpeovpwuJ(o;Tj%KI2llnL{#n{PW$@9=de_ri2% zUB3e6HWMCi=97f0>}#Ti7~@ypcq@OG$Zf~q3f4s1@HX%kGzWtk`}1Vdq_nD@e^M{p z{ooTE1;O+Ch3=Z5JMh%AFD#@{`3$tIAr09zYiMfPs5LqM;i!IDK^Zd)NExybO#u`x37;$nc zsOX*A@Y2kh2s38*Cx6zVaMe&>OKl+TGiS~$CC`6FKtdXuACLYzvlOkSp_7XbJo*&f z1NVOR#WyG>-ZSB-CDI>$?CBR>G29!UpnyfJV_6{^^|^gz2`X1S;2lb^q}7xt;&}n=OMy!>`_x6(tMUz5RCsM#B>lO zNZQ^?p~{o&$PQN&55|S{n0}pQCUekBjV0r_S=c5?PNg}}Jg-_15h;freF_0Zz}@%g za|qfc5XCsPb-ecG+o3h}?RU-ayJ*^(-Jpma_g;PDy$v_tzMDSw%%_Uj2itpny~#(JmY+gB^q**E7IcnmDk+hxtHFMIIkeCNh^r& zdH8AkjX=!B`5bij-2ZT*R-8GI_e3=Lh9Pl?(S~I+^IP$fBow=9KplOy1FP<@L8^ z&vw#(Qt(F7-i@P2o_v8SWvm^0>UmhcNKXU|U81#f%#T0uMZ*=xxR;ttb;t{-scgIL zbEsqMv8-;Be{x~$uyNp#CvX&G-e|P)*t>_TInBKEM7OL{x&J~S_LP1$zSpMAwHTS* znz?As8di#A(aA$St9?3k!|HYAh^WAqn z(NoT$N?nj#JqHFb3y1`rQ z|Z;uVK0J!{>r30&HKgq@@_wR3l8@79C~lX(?xzxOc)5K7v}r?Hhw zr=zl_`rb#Mg5K%YLFih&diUFL_X9W_dZJr5kh+RUCgHz8Z&#ljV&@@;*iD>Tw)eru z@j)@)w88@pbK>b2)YrwNLr?XGD;_e`E~#iLPkMp@$o5%&l{JuBK2!p}cepZ7z15Dp z^_0&X^qvFIi9)7y^PFH-s`a(@uD14uf;y0k?zH)~yKqN@ODZ|rL4~z!0gDfv#8*kl zXpTK*{Yq$tVc60lDi15Oe2lLrX%t;+;t*%so%RIC@WZDtT@TF9;kVw2@&Z9L&eV&VPK&8IX=zhj>(9LOM${IENe*7455REyQ_sF6&%*qsuHR`7v9%Q1 z7|4b*Ck%yz&oEIelzf-4No0vA>om*roAUny6N@vkY!f`9T`6uHsK`Vd%yH!OucWLt zZn(t`t<7CapY*s2Q?@Nfl}vom=iiKBG-WzqBk|DDzTGbS2w)iX$>)4p-awtM!R|c2 z`R2RA1rwMpMIi!W=Z&RTSoxbVk8w%xyH3N*u0@GTy|C^WCte1329)$VBn8D z{SUqfRFxp5L6wdRuDJehbI)_q8RvWUGP59)fF7XE%$g#Etgt#`vacW_VYc7RLg3hJ zA?L#i!~Oj4xAxcUN-yRV^M$Q&4F{vPA<0eZNo>U>#3feW$H+1VecmP4{MK^6`{8>- zFZg!I!O(BrnL_7Zc0CH1h2m>9WeQi+{y7U*4?gxhP~{L5(E{OQNCU^T4njrCh_=S2 zmDk#!sxl%W%`;?NVf!{OLIgJQW!K$~v!N<2H_}8ew7>J=Cx&4T<>jRE-o_4DlA5jf zdECUMS6D>?awM0SXglz-Yj4I0WraoLpa{tNt^GB-(l;7-$-AraWtE{Q@(&A-PZW#8 z8M7UYdZwWdIP93;TCQy*S6OR)n8f#x!i5MlgdKN}h4vX&APv~6p(lQ8{(oTlvoGXD zi2%0l@j}({tabN4{FF%tb;GYjua%Wpcoo40kme=7mgAX(?a?kyIO78D2rscCY1oYH zXsh#teaifq=U-uU`qidSex-$BL^1ZS9iTK}INpoI@9dn9koXBcAt`LDMzO^L< zNrz$8$x)AG`TMu#{|BbueZM%mD^Ck%LIIVgk@A)p=MArHPi<9KQDLn3gDZCxHf3}8 zai_u+ezn(uM`mGXb*f*DEM_JnX!UhA5c4o>PYy1-95k8f@N2}r#YPz{hB)mPED3^c z2O7O)w|x)hw8!$4!W=--KZ-tzwtA5nOVguaQ4ryrkJm0?aFu83v&u~xUUTDZzqOud z@bvTlK=9<}N#2HJF%4aGiEqC90nudWKT#KftLYm=|JG9eko0SBxMff#Vd=kc)vtge zT2xpB8*26AxG5GgPo3gmN2^`pm6vo`d%5J;w%C_7VrgOxJIti`I0{wA&U@^`A>;Jk zAIDA*PeKSr4s9m)BTn8YH{KRoVc?LU6+Y6~@5r{Ff^wh8rJ$$jk3WPm3RQY#Z5%eA zXP*V8=0KWHMt?zmnRdafj0jxUwr|CSvD55ty0o#XvU0U`Hp10I83?Hn;+2K?_%kmd zCq9p!7^a%wR=+9pKQJ*D@iHr}9vhW(SGs%VChO&jvJ!4R>OowI z1MAsf%YFK-zvlEY?B_f?`|RP{-}jz(t#3_V)yEU3AqRotg_pKhC$Pp1dKZj^ zw;s1fMb(7Qrx5hZkMa6j?!el>5h#lry6u!X0m9|;$+J=Z{nyHGpI-MNzYxoZXL<9 zC;(n)&huXX_@@uljaI@PL_zO#>;ab_Q~!br-)Pm+W&gwxY=%BT3xqJf{0n0cz7FeP zWI!2O8MlEtehI4IE**o*AuWb`;?y~u2@bJ<6%`gZuBfIanP>u$f&+@>BgMG&IqTPN zCG3-HF?8XvM;#UW5lxYt2Hm+JAVL`0R2v#L#`(zQIW`gCXN&U@`igp0I0E&>s$)GM zpQlq5jJ5NuOO8fJiQDDH*w?++Qz)X*sWINM*T=k1H_~1767QMET>4m*gKD99KpaNCzdCt=4fz~ZRy zl;v?v5x%m36NeLVtg*rs*4=|2eH7@Ti?Va_NQT<5X-liK&-HglSRfGJ|H~(o!zCw$ z9-~*O_)WJS{Lq*miGqrqXk(u2|17V-76Fx6+KsOojQ#LqEJ##E;HAD#3T17E0D-!hOi%w{{HGGWVm9urmJ?Kf5N4<5i$ve3Zgv=9%@ECy z2c@I`;No)RA5jB%1(N23oQjH`Pd#(ONxwuBAVm?y;G+qXz!ht)>RTq!R#fwdZe9l` z(|$Gv+jsc%hu(Q#SK})ae;&zThAa+#HGc_R=eYWM(YK89=FOVzuf=nWivQm(*~xjtQ} z@h?A_e{V|!7-jfdDW*MV9_oEu+(vK(iNO{OFmJp!l@(`H2%2r&-&8FM5<|OkTq&$3 zM0)=HOqzfSs`z7l267JT4S_dXC8ny-^nb!3HgAbny#fj;*vSA)Iqzg~o^o3MKMeIg z!Ts&|JG38N>nQl)|Eh0kfULW;z$n!Flh32OzcNguHiSN(GMh{^>@8g%d6I=-I0&xz zl3rztq1>pSTVoX)3Z**RFzzl5MHG!2Q@fP_ex`hy!-d12O`btjqPVyX zyn9VtQAmx9Q7**d^!nTH^AslL(%MbGk{TbXdgO`z+|#jl{w0@F7MK%&G&4$6hg|SM zKp-XGD=Mh?VcL7dk<_F`3n-4s5rwrW7V57?kO@1;92R&w>T#^Cmk$3pgsI`SpQks2 zPoE?n{!KU&Js~Go6I*gI+<>!VS5n-DjY%mPcCeIr0nnmXVMgpYM|AT#I2m@Ti7Wbq zu&C7Z99HQou?8FwprMMtefA|kqV*d#K}0ALyd!+YCtCak z7NiFrSXifsrM`d*<@lsu;j1O+JxsP8+zzgwAoy^}^0m+y`5&cv35J%`j_+Q#J%_3W3hdoLa38TSZi97c7}Z?!!_x|Az>$H)%9Eh4G#c2OAv1qlwqfINBTeCH^} z4x!_&Pxc|7yB_H7rJ?CSv>Hk^k}C4=ZB#Op@d{Y-<~TzE7CFeySKWH{rB6VMR5F7x zr=rk;NfamH*31{bA2^iLYU>u#44D`Tfz{4^saqC2uxjN>*3IHdLZMLYNK}OmYr9Wy zyl#2`0zq45@&#Qp=x`7e!5TCeOnd}kEu$>yTHvbt69arI4X(hUSAW{J4ZU5M;0{q- zVR`~rP)g^AAIB37u80eD(EzR>uc@=uelMNg~kKEd(2=>b&}X8xk-ixe%nTtXGyd-Z3gCdxAL$7lj7$JNWD z-*s$&E6#uS&mSYg;^X7}a=s!x9F)RWnB~C$Vhg7R26u1;UvnDo#g%+gaE5ECX@>UB zvzYSW5v%R3w{4GS;t8`UEhr+LBN5B6){>Os85B@qi@k;k z0fii3DsaW1Gmb#Z$zk%Wg$zAVWE8pN^>;qRHJp&J!!Fkm?4??6BOGG7$4wAkRJ@mn zl`^m&S3E0aPnujsLaaTaX|qk6x7CI#G%pr9MAL(*tUYp>u}{O87M3of}FxPmKW8Mu1xrBSuLHCL=!9p{#IFb|>(kQDuv*Agub2LTVo)&c)o z)O?HuL2WNmPmZIAfGc2ypn`)KzPSq)V|5f$k=1Uv0$mIuV)5qN?*TdV3|1yY4czwZ zuuGQx$BwpHD@%NJWzqz?(OnOZQaiO zA<`>;b0ab2w2gSA{m6&$8Z}|%f**FP8NStapWt}i^ng#_z==W>L^$E`pM1d(OXrE; zieN=#qSUR<4=aBeeGKM769*WBhQ3B_MRIZy$FUu8H;f4)zfeWr0ndRe=!j)%fh`t1 znTV@#gLN zuI)a-@w({&fFza5oW%sS;%ON$II@tCWQ|qjWhmKDmPVQ7oRgIdM5Eb9}qtl6D^Mf}G`s z^nm-3C8RNb6&KB#yAa2#JCy*xOT$JMLc_luZoG}x!Ay@Kt8RKPcuH+OU=uqcsU!_m z)g&Bxu!q9h8R%+3<3a4*}jV;5F# zR=}+7eS_n5(*tk}cw*M4}K6s+-;mo>E&60Hi3c2=y!}DW84X80&8OiF3umS-lXq#|T%;;PtY zluz~_B5t%~Y954}X2X_5+T)BPAYSJqU_(hO4$G>>`vJvBEIf*eQ7pPJmTd@P#HZW_&uXz~uc8^(0=j ztfUAe$d%)`GAH0`Z~O@vhjHnUxPlvb?x3NsVvq+>)x_BJyXA2Jok#F3pXgb7C~6Zk z0utxLp#ei)D=m~GoqW`r?}1Fl{g85yr9U}m#ON`K zPcV}^z+h+gg6|?&()S2NeHv)tE8*+Ck0$sO(v@~^svqGF1gUP?mcWFRtAZ_tJ>a-v z;J_6|_fc;XPj1yjv0PbIMq>l%Gq1ie))oqk;0l?*+g)KBinKH`r9A4 zkNA*!JE96&dVB16&j^rdRF>FAlcvx2xMC=gZgE_BFb@ZKB1Pjtl&O4?S)>Qv12B%$ z&hej4Cf+87T^c-^9$=(k7mVTj!kLQ=7&1JPT7_1ODcf8*E~mbn_7&M!o>&K9RxL201E$)8P`>l{Vg3$0?`n+K!v2$rSWlaj&=6fUK0 zP#myScv!^F#wtY(d-at=C$_yBJe`;p1`Y#*dDiwRaXV5~TY|~Q4vd|3?nOCy1t|6h z;Oe)x+)1AJ!MGyc=C5YA2Py<4g9>6N!5fz&{-U^=JpC)@G?%uVJaO8*2(IMXmK+3# zE(iISGE>P(Nhnd`Qj3D%5-$p5zXdI_)BW*&X3_}st627cprTq*T6ilnBNL$}^FnnP zgAY2CqGG&|l7ttGqi6(J3%+G z88Aj{djMQ1-wlw2D_5=AV8i6Piq8Z!UJTZKU3&lnOaqE|G4qtPozT83JKWgrs_TA? zE9p)!619wgB|+(=_HYULJJq-nqS)ti#+>Dlpu9CosbfYTU@Y^T)V~gyIOm0OQ+#u0>M% z{b`k?rp#qzHAi+^Wlv%MHXBX-aHEXeQ)mj$s69^R!uc?{f5h_3blJ=|z$F(q$ zj?}=_lo@lS@SJu!s{?Qeovu7j&vab6uv4fEWPQrPDTa$!;cwmCWC|! zWMyVhf6;LzQ<9@7RF08>t1Lc7xWWQaiXFljiKIV<8=3XcqfgpbwpxdlrBFFvKWFmv z{kQ@WtkImFr6m9`jmig3DR`@#2Cnc#v&i72sk52!Ij(4!W`#9;Krk4#viv-9?s#A< zXG6i$DRRRYFc3urxp)C_FL08-!?k#m`O1Q2ge%l7bh;rgjwD9Q0U9bG~w1$)2#Ua{Kn3cv!f@*Ym&SWN<>ZKEwzj zIhp5zvHpWzV8ve1PE##6(0AbT^4>shmQ1Z3N;)uw42Sv-97=ltl7o<`ggLA&D~F|^ znrT_OF5P>fv2!hplm;Uk+a3_EAfj-n-=LvN%d)rvpK3AOzzmDf_)jL0SjyZVTt$dW z-oUD?tV~pTik7=7&Wl8G#kae5{y<3(kPsKQNw`wFD8we42LC#)1`K{lxU$3ts&CCsO6?0%KvfcO!%Q+}=rCr0PiJ_Es$~-3Q z+#NAn$>2$VfmD5@Q_7wcLRQF+_z|v{8yW|u?oFe(D057fdPG|n-fG~gh(g^}RWs)- z03Lc=!$u^-?ny~zzFAaKmanR63bEL@HQ}Bv-B0+%Nvs)4V*!;7E4n(HCBNg+-f& zkbO!F(n7rj_doo^iNE?4C#W%II~A5#Vyvl82BiVQUGBSKag(&{0zk#QwVn*$G5eaR z)95psHf@4=-1E!8F<7p&GlE3U6p`cr7~m*mnau|kX7bUa&%O1Y|MoSK=z(bV7W-VnX{o81ogeN=9Y`MZ;3H3zmEnQZ3XgnMR#HL| z1fto|4oyk$S$zgt=u09>(K@ZcmDk;rmX(btR*`&gZ)|zYc6dE$7%NsoLepn`6(t1i z$ig5hK+4?E@g5@~)3j|8$G~CrLRa6qEuLU_N~<}pim^V((IW)1;8b~e8KLhFbn7kX za<+nsCHvTi)2RKzJ_Pp96{|3U{o>@4Kl^efdKFAXdAhWW{Cm6fV1;^{0Lrky2KIb{ z3DUGRl*x;vjIY002GJ$$$-r>IJt;Iw3)u;_81_J6DT7ftf}AYN4;3d=dq!jwYC!IM zFU$yxloTF)%B(~}F-Tdvek0UDe6r(;v{qP)Z<*$k0tSJg_Vgb-0+?Y%=N*BZed3M` zYmv{Ys-(Rv1Q!0s(iMYV7`bMBynU;}kGJ0a03?Qxg{H7SG-}=)6g4^H44{S7!#$01 z1;Nt1e$T$hgRpL8Y7tvSYGvoCc3%v;Gtf zf^WVfBzWcOb^Hqzk$H+28!oa~DQvC#h%%kK=zHGF>#Ij_W$~YA*I9)WY^3gS8KsXo zCo{Kb(b82{b+}RL79my5o5N02^An1iHb+s1vS=8H0`n*Q;+NNVygMUJ>mDZlpjGNr z@gv`yLUcEoic2V>j=*f4kON1^_CGSyXb-s06snUz#O0MDJNQ(4` z(eIyq!KGSU$%Cnkqu6)O#1Af+D2F(cLDrZ!6+`RdCEsCdr48JcPqyrQ7*VX{p!Lkw z09rBZ0aD;uzzD8j97R($ptd779O@H1gmlX-k_`bhDZjV~+os~I!r>Y77Pr0p+7g!f z4pkJEQJP4Vuc8}XX6=(MAx$2oOXF@Z2qObS`-;bYIPTgTZWa-pj*&{$AfxsT2nw9@ zbg=FFc$Qhh{)!Gae7AfBh%Lr0k1P)6eK94apTI4J^qw6?@r~25Gzw0ZE5QyMV|wmI zm!U^tZ$uY@h|sdQ75WTE*h$aIA3pj$cF@qAH{c9F#%X+_hVd_!b_;2bAc}f5Yu0U? zHhbQsS6tJo%{j1;&Gq)r6o3;{$u!eU3Wz^ug^G6IG(4D#mo5iXpc;^~#c&0;<4ES;0jNTjjtTduC6oI*dAeww(YNGD6@0XpcIB@unD7(v!v9j zwHp^M{(f70;#`)SUA+>#Z+4^j(5KQp^5)d^w*(2}}HHiYuJTm5&@u#CxN#klL zDq~~OiiL~irooH=T(R>bfdQ4z_}B?X@Yw8u_#Fuv8w0$o34Gye^qWDmkTaJ%waSkM};h@WH;@}su zeDjiJD+nybM#T&Pdjg+1*ut0$m>0=yXgRrBb1>MB!5(;hjH*rvazKpx) zPj!F14-o&yFUJWs%Co?71=qt zzNk|Gt>dT%d}1DToT0b?s=R{YR;^|9b{LplRJmOs^}WJ zQd~KG;lC4dWPeaZI-0pp`lSD}8t*lhO0L2YZbF zc;epFR3>`z#gwa#5Ow~ua|*B|a0tT`F@9|Ie3*{A*GEgI%{~Y8#xsc@ICLa}2_%3n zJ^_Q{>L;XL)bzwT@KSV>95j^--``26oWd-x!%eq6+Izs_rTX7IWBrY)*f3okk-2N$tx&%=&^oCDA);9VEhCmaF?JGH544A zy}Q(lDozBPgGn}yG;P`H;`Uc{?bh?pfBBSkwM-cg6_D3%AyVD|e>%ZZf{`63`-Z?R zaK=X3{BhBlK_jC*fB-^CMx&u<9>Gf*({SjT-?FTvILC2v;3w86)!C3chU%S;I>aSL zQKTCi=c6*+cO6epn+p~#*}Er=q(5xqIeCRqAW5Q` zS;Ie%sGY&d$5#(9`V2K@E5j9J65h2-IqbEO6-*_OXQ~&%5j6~U>fG(|FQ?C5yM7by zVAsIGQWQ?!A;gsW9D#oWTpeE^If~ZGi=#LbTO?NlAEv&m$f_1q%J7DK1X?OBMSaD% z^;@=YPsBrKTO|>s`Nd^ORe;Jy=C%2utSHc=y=A6St2#jD9v97`(_KdjLS>7m97LCn-8ERMGzG>qs0v zB&aw@bm;G&c|J2Eiwn77VR31eML>Zcj$nNvPlxJ!m=jDy3U4(xh>;+?09`fvbRw$U? z{VcKZzj-NeRfr~JxGE|x*_oKotmUsYAJi5>7XZUebJ8iNwm$Dd)&b;kDBgL63f9WZ z)-n*m7WBXYJs_Qjx}b(DbnQt~W@x%+jvF|N4YQ|$&xuJmy}|FF8N%g2F*^^_U)F;mRg}xC`4~bN!Yr|0ZXdNCU!G z01_&?qsv#T37{49K(q(2P@+p?cao}I8Gf)wZWcdV27Spbm+N$jdJ(EiT!wP|0j% ztF{H58T3H32P6lX-%+EZJd~4@%lhD~bA;eygRCsbvk6(Kd(u*I@eykmy^wv-g)u50 z7Y_Ut@Kw+QHF}_+gfvf?%S%g(|Fv=zSn{MBGH4n#Q@8@E`%Sn14tsedQkpH8woJ{jBLE94+MAg#}U7cfU~8bJz&bI;(Mpa+QZRV5Z`=v7qo z8}tGMCCV~f!BogW(Dmhv1rQorz*hla4zmZC%Hb8n-;536_ItbRk7OXOSkdW?$?40> zr!KMJXAbJXsu1+Rf9?UY^DvFVSKtcEr;(MMIIg+_t#(&m=VVn-s7j!R3D@AXdfo#> z-YE#VvXaHQSYAX5m1=Yl!LH&PBxl`xM<>*Jrj6vT2Dqx{XgU1XM{kFY2=iRCZWD`9 zLQ_(%Y|(k_?c_&v?fy8i%HRq)80c4r-?8=lOmGEXnQ3JU2Jh?>od-3 a)2!8*eV-X3jom7u6Kz$`yQ|*5{{H~E)v+P~ literal 0 HcmV?d00001 diff --git a/tools/install/musicpack.nsh b/tools/install/musicpack.nsh new file mode 100644 index 000000000..c93998d6a --- /dev/null +++ b/tools/install/musicpack.nsh @@ -0,0 +1,96 @@ +; Defines functions for extra music pack download: +; MusicPackChoice - shows page with checkbox to download music pack +; MusicPackDownload - downloads music pack +; MusicPackInstall - copies downloaded music pack into game folder + +!include nsDialogs.nsh +!include LogicLib.nsh + +!define MUSICPACK_URL "http://download.openclonk.org/OpenClonkOST.ocg" +; !define MUSICPACK_URL "http://www.cognium.de/misc/test.ocg" + +Var Dialog +Var Label +Var MusicCheckbox +Var MusicCheckbox_State +Var TempMusicFn + +!macro MusicPackChoice + Page custom nsMusicPage nsMusicPageDone +!macroend + +Function nsMusicPage + + nsDialogs::Create 1018 + Pop $Dialog + + ${If} $Dialog == error + Abort + ${EndIf} + + !insertmacro MUI_HEADER_TEXT "Additional music package" "Download additional music package" + + ${NSD_CreateLabel} 0 0 100% 24u "Do you want to download and install an additional music package by David Oerther?" + Pop $Label + + ${NSD_CreateCheckbox} 0 24u 100% 10u "&Download and install music (130MB)" + Pop $MusicCheckbox + + ${NSD_CreateLabel} 0 48u 100% 24u "License: Music by David Oerther © Copyright 2015. All rights reserved, note that the soundtrack does not use the creative common or similar licenses." + + ${NSD_CreateLabel} 0 72u 100% 36u "The game Open Clonk (http://www.openclonk.org/) and all derived works may use and distribute the soundtrack, as long as credit is given. Open Clonk modifications and ingame-videos don't require credits." + + ${NSD_CreateLabel} 0 108u 100% 24u "For all other usage (f.e. commercial) please contact: david.oerther@directbox.com" + + ${If} $MusicCheckbox_State == ${BST_CHECKED} + ${NSD_Check} $MusicCheckbox + ${EndIf} + + nsDialogs::Show + +FunctionEnd + +Function nsMusicPageDone + ${NSD_GetState} $MusicCheckbox $MusicCheckbox_State +FunctionEnd + +Function MusicPackDownload + + ; Skip download if user didn't tick the check box + ${If} $MusicCheckbox_State != ${BST_CHECKED} + StrCpy $TempMusicFn "none" + DetailPrint "Extra music pack installation skipped." + Goto musicdldone + ${EndIf} + + DetailPrint "Downloading extra music pack from ${MUSICPACK_URL}..." + + ; Use a nice temp file name so user knows what is being downloaded. + ; GetTempFileName $TempMusicFn + StrCpy $TempMusicFn "$TEMP\OpenClonkSoundtrack" + + ; Inetc plugin has better dialogs and progress bars, but the license is unclear + ; inetc::get /caption "Music package download" /popup "" "${MUSICPACK_URL}" "$TempMusicFn" /end + ; Download using builtin NSISdl plugin + NSISdl::download "${MUSICPACK_URL}" "$TempMusicFn" + Pop $0 + StrCmp $0 "success" musicdlok + StrCpy $TempMusicFn "none" + DetailPrint "Download error: $0" + MessageBox MB_OK|MB_ICONEXCLAMATION "Download error $0. You can also get the music pack directly from the OpenClonk website." /SD IDOK + Goto musicdldone +musicdlok: + DetailPrint "Music pack download done." +musicdldone: +FunctionEnd + +; Install music pack if it had been downloaded +Function MusicPackInstall + ; Check successful download + StrCmp $TempMusicFn "none" musicinstdone + ; Install pack using copy+delete + DetailPrint "Installing extra music pack..." + CopyFiles /SILENT "$TempMusicFn" "$INSTDIR\Music.ocg" + Delete "$TempMusicFn" +musicinstdone: +FunctionEnd diff --git a/tools/install/oc.nsi b/tools/install/oc.nsi index 0c242f348..db3515478 100644 --- a/tools/install/oc.nsi +++ b/tools/install/oc.nsi @@ -56,9 +56,16 @@ FunctionEnd !define MUI_HEADERIMAGE_RIGHT !define MUI_HEADERIMAGE_BITMAP "${SRCDIR}/tools/install\header.bmp" +; Music pack installation routines +!include musicpack.nsh + ; Installer pages ;!insertmacro MULTIUSER_PAGE_INSTALLMODE !insertmacro MUI_PAGE_DIRECTORY + +; Ask user to download music pack. +!insertmacro MusicPackChoice + !insertmacro MUI_PAGE_INSTFILES ; Uninstaller pages @@ -92,6 +99,9 @@ Section File /oname=c4group.exe "${C4GROUP}" File "*.dll" + + ; Delete any previously unpacked Music.ocg, which would block creation of the file. + RMDir /r "$INSTDIR\Music.ocg" File "*.oc?" @@ -219,6 +229,11 @@ Section ; Add a Firewall exception firewall::AddAuthorizedApplication "$INSTDIR\${PRODUCT_FILENAME}" "$(^Name)" + + ; Download and Install extra music pack + ; Do this after the other installation tasks so everything is in order if the user cancels during downloading. + Call MusicPackDownload + Call MusicPackInstall SectionEnd @@ -236,6 +251,8 @@ Section Uninstall Delete "$INSTDIR\*.dll" + ; Music may or may not be unpacked. + RMDir /r "$INSTDIR\Music.ocg" Delete "$INSTDIR\*.oc?" Delete "$INSTDIR\AUTHORS" From c588fe79c93c24a25ab1967a473f91a64e7aeb70 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 30 Aug 2015 15:12:34 -0400 Subject: [PATCH 83/97] Unpack Music.ocg in Windows installer. Currently, all music pieces are kept in memory to avoid random group access, which is a bit excessive for the larger music pack. This change will allow runtime music loads without too much delay. --- tools/install/oc.nsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/install/oc.nsi b/tools/install/oc.nsi index db3515478..84c9938b9 100644 --- a/tools/install/oc.nsi +++ b/tools/install/oc.nsi @@ -234,6 +234,10 @@ Section ; Do this after the other installation tasks so everything is in order if the user cancels during downloading. Call MusicPackDownload Call MusicPackInstall + + ; Unpack Music.ocg for faster music switching (regardless if it's the regular or the extended pack) + DetailPrint "Unpacking Music file..." + ExecShell "open" "$INSTDIR\c4group.exe" "Music.ocg -u" SW_HIDE SectionEnd From 6a016f807d7a8b47e620e95c218357c1282c5e6f Mon Sep 17 00:00:00 2001 From: Peter Wortmann Date: Wed, 10 Jun 2015 20:21:33 +0100 Subject: [PATCH 84/97] Alternate light drawing, v2 This is now a "mix" between the original and the alternate drawing strategy, hopefully combining its strength. In detail: 1. Intensity of light sources aren't added together anymore. Instead, the brightest light source decides end brightness pre-smoothing. 2. For smoothing, we update normals more quickly than brightness. This is the main change relative to the first "alternate" version. Actually quite embarassing that I didn't think of this solution before %) This is still a tad busier than what we have currently, simply due to normals changing around more quickly. On the plus side, Clonk faces shouldn't go dark anymore while walking, so that's something. --- planet/Graphics.ocg/LightShader.glsl | 12 ++++++------ src/landscape/fow/C4FoW.cpp | 2 +- src/landscape/fow/C4FoWDrawStrategy.cpp | 6 +++--- src/landscape/fow/C4FoWRegion.cpp | 12 ++++++------ 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/planet/Graphics.ocg/LightShader.glsl b/planet/Graphics.ocg/LightShader.glsl index b783fa521..985e8a527 100644 --- a/planet/Graphics.ocg/LightShader.glsl +++ b/planet/Graphics.ocg/LightShader.glsl @@ -19,7 +19,7 @@ uniform float cullMode; // 0 if backface culling is enabled, 1 if it is disabled //#define LIGHT_DEBUG_PINK // At what point of light intensity we set the "darkness" point. This -// is to compensate for the fact that the engine "smooths" the light +// is to compensate for the fact that the engine "smoothes" the light // and therefore will often never arrive at 0 light intensity. const float lightDarknessLevel = 8.0 / 256.0; @@ -31,14 +31,14 @@ slice(texture+5) vec2 lightDirCoord = lightCoord.st; vec4 lightPx = texture2D(lightTex, lightDirCoord); - float lightBright = max(0.0, lightPx.x-lightDarknessLevel); + float lightBright = max(0.0, lightPx.a-lightDarknessLevel); vec3 lightDir = extend_normal(vec2(1.0, 1.0) - lightPx.yz * 3.0); - + // Query light color texture (part of the light texture) vec2 lightColorCoord = lightCoord.st - vec2(0.0, 0.5); // subtract offset for the color texture - + vec4 lightColor = texture2D(lightTex, lightColorCoord.st); - + #ifdef LIGHT_DEBUG_COLOR lightBright = 0.5; lightDir = vec3(0.0, 0.0, 1.0); @@ -85,7 +85,7 @@ slice(finish+5) #ifdef HAVE_LIGHT float lightYDir = lightPx.b - 1.0/3.0; float lightXDir = lightPx.g - 1.0/3.0; - float lightStrength = lightPx.r; + float lightStrength = lightPx.a; color = vec4(lightStrength * vec3(1.0-1.5*(max(0.0, lightYDir) + max(0.0,lightXDir)), 1.0-1.5*(max(0.0, lightYDir) + max(0.0,-lightXDir)), diff --git a/src/landscape/fow/C4FoW.cpp b/src/landscape/fow/C4FoW.cpp index b24003286..84deb8cef 100644 --- a/src/landscape/fow/C4FoW.cpp +++ b/src/landscape/fow/C4FoW.cpp @@ -38,7 +38,7 @@ C4Shader *C4FoW::GetFramebufShader() FramebufShader.AddTexCoord("texCoord"); FramebufShader.AddFragmentSlice(-1, "uniform sampler2D tex;"); FramebufShader.AddFragmentSlice(0, - "gl_FragColor = vec4(texture2D(tex, texCoord.st).rgb, 3.0f/4.0f);"); + "gl_FragColor = texture2D(tex, texCoord.st);"); const char *szUniforms[] = { "tex", NULL }; if (!FramebufShader.Init("framebuf", szUniforms)) { FramebufShader.ClearSlices(); diff --git a/src/landscape/fow/C4FoWDrawStrategy.cpp b/src/landscape/fow/C4FoWDrawStrategy.cpp index 659cfaec1..8900a1549 100644 --- a/src/landscape/fow/C4FoWDrawStrategy.cpp +++ b/src/landscape/fow/C4FoWDrawStrategy.cpp @@ -108,12 +108,12 @@ void C4FoWDrawLightTextureStrategy::DrawVertex(float x, float y, bool shadow) { float dx = x - light->getX(); float dy = y - light->getY(); - float dist = sqrt(dx*dx + dy*dy); + float dist = sqrt(dx*dx+dy*dy); float bright = light->getBrightness(); float mult = Min(0.5f / light->getNormalSize(), 0.5f / dist); float normX = Clamp(0.5f + dx * mult, 0.0f, 1.0f) / 1.5f; float normY = Clamp(0.5f + dy * mult, 0.0f, 1.0f) / 1.5f; - glColor4f(bright, normX, normY, 0.0f); + glColor4f(0.0f, normX, normY, bright); } else { @@ -121,7 +121,7 @@ void C4FoWDrawLightTextureStrategy::DrawVertex(float x, float y, bool shadow) } break; case C4DP_Second: - glColor4f(0.0f, 0.5f / 1.5f, 0.5f / 1.5f, 0.5f); + glColor4f(0.0f, 0.5f / 1.5f, 0.5f / 1.5f, 0.0f); break; case C4DP_Color: // has a block so that alpha is scoped to this block only { diff --git a/src/landscape/fow/C4FoWRegion.cpp b/src/landscape/fow/C4FoWRegion.cpp index f11f5061c..f76ba94c4 100644 --- a/src/landscape/fow/C4FoWRegion.cpp +++ b/src/landscape/fow/C4FoWRegion.cpp @@ -154,7 +154,7 @@ void C4FoWRegion::Render(const C4TargetFacet *pOnScreen) // Clear texture contents assert(getSurface()->Hgt % 2 == 0); glScissor(0, getSurface()->Hgt / 2, getSurface()->Wdt, getSurface()->Hgt / 2); - glClearColor(0.0f, 0.5f / 1.5f, 0.5f / 1.5f, 1.0f); + glClearColor(0.0f, 0.5f / 1.5f, 0.5f / 1.5f, 0.0f); glEnable(GL_SCISSOR_TEST); glClear(GL_COLOR_BUFFER_BIT); @@ -171,9 +171,6 @@ void C4FoWRegion::Render(const C4TargetFacet *pOnScreen) // Copy over the old state if (OldRegion.Wdt > 0) { - // Set up shader. If this one doesn't work, we're really in trouble. - C4Shader *pShader = pFoW->GetFramebufShader(); - assert(pShader); // How much the borders have moved int dx0 = Region.x - OldRegion.x, @@ -204,7 +201,10 @@ void C4FoWRegion::Render(const C4TargetFacet *pOnScreen) Call.Start(); if (Call.AllocTexUnit(0, GL_TEXTURE_2D)) glBindTexture(GL_TEXTURE_2D, getBackSurface()->textures[0].texName); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBlendFunc(GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_COLOR); + float normalBlend = 1.0f / 4.0f, // Normals change quickly + brightBlend = 1.0f / 16.0f; // Intensity more slowly + glBlendColor(0.0f,normalBlend,normalBlend,brightBlend); glBegin(GL_QUADS); for (int i = 0; i < 4; i++) { @@ -213,7 +213,7 @@ void C4FoWRegion::Render(const C4TargetFacet *pOnScreen) } glEnd(); Call.Finish(); - } + } // Done! glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); From 30857e835e8ef95fe2514205b9185da1726d820e Mon Sep 17 00:00:00 2001 From: Peter Wortmann Date: Mon, 31 Aug 2015 16:34:01 +0100 Subject: [PATCH 85/97] Shader gamma implementation In comparison to the old system, this is a downgrade - instead of being able to set a full color mapping by gamma ramp, we now get just a value per colour channel. Upside is that we do not need to play around with the global gamma ramps any more, which was arguably the wrong way to do it. This commit will likely break everything that has been using gamma so far. --- planet/Arena.ocf/Ruins.ocs/Script.c | 2 +- planet/Graphics.ocg/GammaShader.glsl | 7 ++ planet/Worlds.ocf/IronPeak.ocs/Script.c | 2 +- planet/Worlds.ocf/Krakatoa.ocs/Script.c | 2 +- src/config/C4Config.cpp | 5 +- src/config/C4Config.h | 3 +- src/game/C4Game.cpp | 22 ++--- src/game/C4GraphicsSystem.cpp | 5 - src/gamescript/C4GameScript.cpp | 9 +- src/graphics/C4Draw.cpp | 126 +++++------------------- src/graphics/C4Draw.h | 44 +-------- src/graphics/C4DrawGL.cpp | 10 +- src/graphics/C4DrawGL.h | 2 + src/graphics/C4DrawMeshGL.cpp | 2 + src/graphics/C4Surface.cpp | 2 +- src/landscape/C4LandscapeRender.cpp | 3 + src/landscape/C4LandscapeRender.h | 1 + src/landscape/C4Weather.cpp | 59 ++++++----- src/lib/StdMeshMaterial.cpp | 1 + src/object/C4Def.cpp | 1 + src/platform/C4App.h | 4 +- src/platform/C4AppGTK.cpp | 52 ---------- src/platform/C4AppMac.mm | 31 ------ 23 files changed, 97 insertions(+), 298 deletions(-) create mode 100644 planet/Graphics.ocg/GammaShader.glsl diff --git a/planet/Arena.ocf/Ruins.ocs/Script.c b/planet/Arena.ocf/Ruins.ocs/Script.c index a047b8d8e..e4e4260c7 100644 --- a/planet/Arena.ocf/Ruins.ocs/Script.c +++ b/planet/Arena.ocf/Ruins.ocs/Script.c @@ -16,7 +16,7 @@ protected func Initialize() // Mood. SetSkyAdjust(RGBa(255, 255, 255, 127), RGB(255, 200, 150)); - SetGamma(RGB(40, 35, 30), RGB(140, 135, 130), RGB(255, 250, 245)); + SetGamma(109, 105, 101); // Chests with weapons. CreateObjectAbove(Chest, 230, 224, NO_OWNER)->MakeInvincible(); diff --git a/planet/Graphics.ocg/GammaShader.glsl b/planet/Graphics.ocg/GammaShader.glsl new file mode 100644 index 000000000..af81d0d7a --- /dev/null +++ b/planet/Graphics.ocg/GammaShader.glsl @@ -0,0 +1,7 @@ + +// Gamma uniforms +uniform vec3 gamma; + +slice(finish+10) { + color = vec4(pow(color.rgb, gamma), color.a); +} diff --git a/planet/Worlds.ocf/IronPeak.ocs/Script.c b/planet/Worlds.ocf/IronPeak.ocs/Script.c index 9a1f3665e..784b38bbb 100644 --- a/planet/Worlds.ocf/IronPeak.ocs/Script.c +++ b/planet/Worlds.ocf/IronPeak.ocs/Script.c @@ -113,7 +113,7 @@ private func InitEnvironment(int difficulty) // A light blue hue, to indicate the cold climate. var blue = 4; - SetGamma(RGB(0, 0, blue), RGB(128 - blue, 128 - blue, 128 + blue), RGB(255 - blue, 255 - blue, 255)); + SetGamma(100-blue,100-blue,100+blue); // Some natural disasters. Earthquake->SetChance(5 + 5 * difficulty); diff --git a/planet/Worlds.ocf/Krakatoa.ocs/Script.c b/planet/Worlds.ocf/Krakatoa.ocs/Script.c index 02b81a3a8..921fbc4ff 100644 --- a/planet/Worlds.ocf/Krakatoa.ocs/Script.c +++ b/planet/Worlds.ocf/Krakatoa.ocs/Script.c @@ -110,7 +110,7 @@ private func InitEnvironment(int difficulty) // Adjust the mood, orange sky, darker feeling in general. var dark = 10; SetSkyAdjust(RGB(150, 42, 0)); - SetGamma(RGB(0, 0, 0), RGB(128 - dark, 128 - dark, 128 - dark), RGB(255 - 2 * dark, 255 - 2 * dark, 255 - 2 * dark)); + SetGamma(100-dark,100-dark,100-dark); // Time of days and celestials. var time = CreateObject(Environment_Time); diff --git a/src/config/C4Config.cpp b/src/config/C4Config.cpp index 444383d08..5fba8c401 100644 --- a/src/config/C4Config.cpp +++ b/src/config/C4Config.cpp @@ -107,12 +107,9 @@ void C4ConfigGraphics::CompileFunc(StdCompiler *pComp) pComp->Value(mkNamingAdapt(BitDepth, "BitDepth", 32 ,false, true)); pComp->Value(mkNamingAdapt(Windowed, "Windowed", 0 ,false, true)); pComp->Value(mkNamingAdapt(PXSGfx, "PXSGfx" , 1 )); - pComp->Value(mkNamingAdapt(Gamma1, "Gamma1" , 0 )); - pComp->Value(mkNamingAdapt(Gamma2, "Gamma2" , 0x808080 )); - pComp->Value(mkNamingAdapt(Gamma3, "Gamma3" , 0xffffff )); + pComp->Value(mkNamingAdapt(Gamma, "Gamma" , 100 )); pComp->Value(mkNamingAdapt(Currency, "Currency" , 0 )); pComp->Value(mkNamingAdapt(RenderInactiveEM, "RenderInactiveEM", 1 )); - pComp->Value(mkNamingAdapt(DisableGamma, "DisableGamma", 0 ,false, true)); pComp->Value(mkNamingAdapt(Monitor, "Monitor", 0 )); // 0 = D3DADAPTER_DEFAULT pComp->Value(mkNamingAdapt(FireParticles, "FireParticles", 1 )); pComp->Value(mkNamingAdapt(MaxRefreshDelay, "MaxRefreshDelay", 30 )); diff --git a/src/config/C4Config.h b/src/config/C4Config.h index 134d66380..c8c0598d8 100644 --- a/src/config/C4Config.h +++ b/src/config/C4Config.h @@ -108,10 +108,9 @@ public: int32_t ShowCrewCNames; // show clonk names above clonks? int32_t BitDepth; // used bit depth for newgfx int32_t PXSGfx; // show PXS-graphics (instead of sole pixels) - int32_t Gamma1, Gamma2, Gamma3; // gamma ramps + int32_t Gamma; // gamma value int32_t Currency; // default wealth symbolseb int32_t RenderInactiveEM; // draw vieports even if inactive in CPEM - int32_t DisableGamma; int32_t Monitor; // monitor index to play on int32_t FireParticles; // draw extended fire particles if enabled (default on) int32_t MaxRefreshDelay; // minimum time after which graphics should be refreshed (ms) diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index 341a6abe9..5dd77def2 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -293,8 +293,6 @@ bool C4Game::PreInit() FixRandom(RandomSeed); // Timer flags GameGo=false; - // set gamma - SetDefaultGamma(); // init message input (default commands) MessageInput.Init(); Game.SetInitProgress(31.0f); @@ -480,9 +478,6 @@ bool C4Game::Init() if (!InitGameFinal()) return false; SetInitProgress(99); - // Gamma - pDraw->ApplyGamma(); - // Sound modifier from savegames if (GlobalSoundModifier) SetGlobalSoundModifier(GlobalSoundModifier._getPropList()); @@ -541,8 +536,6 @@ void C4Game::Clear() delete pFileMonitor; pFileMonitor = NULL; // fade out music Application.MusicSystem.FadeOut(2000); - // Reset colors - SetDefaultGamma(); // game no longer running IsRunning = false; PointersDenumerated = false; @@ -570,7 +563,6 @@ void C4Game::Clear() Control.Clear(); // Clear - if (pDraw) { pDraw->ResetGamma(); pDraw->ApplyGamma(); } Scoreboard.Clear(); MouseControl.Clear(); Players.Clear(); @@ -3708,14 +3700,12 @@ void C4Game::SetDefaultGamma() // Skip this if graphics haven't been initialized yet (happens when // we bail during initialization) if (!pDraw) return; - // Default gamma ramps - for (int32_t iRamp=0; iRampSetGamma(Config.Graphics.Gamma1, Config.Graphics.Gamma2, Config.Graphics.Gamma3, iRamp); - else - pDraw->SetGamma(0x000000, 0x808080, 0xffffff, iRamp); - } + // Default gamma + pDraw->ResetGamma(); + pDraw->SetGamma(float(Config.Graphics.Gamma) / 100.0, + float(Config.Graphics.Gamma) / 100.0, + float(Config.Graphics.Gamma) / 100.0, + C4MaxGammaUserRamps); } void C4Game::SetGlobalSoundModifier(C4PropList *new_modifier) diff --git a/src/game/C4GraphicsSystem.cpp b/src/game/C4GraphicsSystem.cpp index 5385f12a3..3b2b60499 100644 --- a/src/game/C4GraphicsSystem.cpp +++ b/src/game/C4GraphicsSystem.cpp @@ -149,9 +149,6 @@ void C4GraphicsSystem::Execute() ::pGUI->Render(false); } - // gamma update - pDraw->ApplyGamma(); - // Video record & status (fullsrceen) if (!Application.isEditor) Video.Execute(); @@ -194,8 +191,6 @@ bool C4GraphicsSystem::InitLoaderScreen(const char *szLoaderSpec) if (!pNewLoader->Init(szLoaderSpec)) { delete pNewLoader; return false; } if (pLoaderScreen) delete pLoaderScreen; pLoaderScreen = pNewLoader; - // apply user gamma for loader - pDraw->ApplyGamma(); // done, success return true; } diff --git a/src/gamescript/C4GameScript.cpp b/src/gamescript/C4GameScript.cpp index 720a3ad8b..8d506183d 100644 --- a/src/gamescript/C4GameScript.cpp +++ b/src/gamescript/C4GameScript.cpp @@ -1981,15 +1981,18 @@ static long FnReloadParticle(C4PropList * _this, C4String *szParticleName) return Game.ReloadParticle(FnStringPar(szParticleName)); } -static bool FnSetGamma(C4PropList * _this, long dwClr1, long dwClr2, long dwClr3, long iRampIndex) +static bool FnSetGamma(C4PropList * _this, long iRed, long iGreen, long iBlue, long iRampIndex) { - pDraw->SetGamma(dwClr1, dwClr2, dwClr3, iRampIndex); + pDraw->SetGamma(float(iRed) / 100, + float(iGreen) / 100, + float(iBlue) / 100, + iRampIndex); return true; } static bool FnResetGamma(C4PropList * _this, long iRampIndex) { - pDraw->SetGamma(0x000000, 0x808080, 0xffffff, iRampIndex); + ::Game.SetDefaultGamma(); return true; } diff --git a/src/graphics/C4Draw.cpp b/src/graphics/C4Draw.cpp index fa87d9678..595e71e10 100644 --- a/src/graphics/C4Draw.cpp +++ b/src/graphics/C4Draw.cpp @@ -170,43 +170,6 @@ DWORD C4Pattern::PatternClr(unsigned int iX, unsigned int iY) const return CachedPattern[iY * Wdt + iX]; } -void C4GammaControl::SetClrChannel(WORD *pBuf, BYTE c1, BYTE c2, int c3) -{ - // Using this minimum value, gamma ramp errors on some cards can be avoided - int MinGamma = 0x100; - // adjust clr3-value - ++c3; - // get rises - int r1=c2-c1,r2=c3-c2,r=(c3-c1)/2; - // calc beginning and end rise - r1=2*r1-r; r2=2*r2-r; - // calc ramp - WORD *pBuf2=pBuf+128; - for (int i=0; i<128; ++i) - { - int i2=128-i; - // interpolate linear ramps with the rises r1 and r - *pBuf ++=Clamp(((c1+r1*i/128) *i2 + (c2-r*i2/128) *i) <<1, MinGamma, 0xffff); - // interpolate linear ramps with the rises r and r2 - *pBuf2++=Clamp(((c2+r*i/128) *i2 + (c3-r2*i2/128) *i) <<1, MinGamma, 0xffff); - } -} - -void C4GammaControl::Set(DWORD dwClr1, DWORD dwClr2, DWORD dwClr3) -{ - // set red, green and blue channel - SetClrChannel(ramp.red , GetRedValue(dwClr1), GetRedValue(dwClr2), GetRedValue(dwClr3)); - SetClrChannel(ramp.green, GetGreenValue(dwClr1), GetGreenValue(dwClr2), GetGreenValue(dwClr3)); - SetClrChannel(ramp.blue , GetBlueValue(dwClr1), GetBlueValue(dwClr2), GetBlueValue(dwClr3)); -} - -DWORD C4GammaControl::ApplyTo(DWORD dwClr) -{ - // apply to red, green and blue color component - return RGBA(ramp.red[GetRedValue(dwClr)]>>8, ramp.green[GetGreenValue(dwClr)]>>8, ramp.blue[GetBlueValue(dwClr)]>>8, dwClr>>24); -} - - //-------------------------------------------------------------------- void C4Draw::Default() @@ -216,21 +179,16 @@ void C4Draw::Default() Active=false; BlitModulated=false; dwBlitMode = 0; - Gamma.Default(); - DefRamp.Default(); + ResetGamma(); pFoW = NULL; ZoomX = 0; ZoomY = 0; Zoom = 1; MeshTransform = NULL; fUsePerspective = false; - for (int32_t iRamp=0; iRamp<3*C4MaxGammaRamps; iRamp+=3) - { dwGamma[iRamp+0]=0; dwGamma[iRamp+1]=0x808080; dwGamma[iRamp+2]=0xffffff; } - fSetGamma=false; } void C4Draw::Clear() { ResetGamma(); - DisableGamma(); Active=BlitModulated=false; dwBlitMode = 0; } @@ -846,71 +804,39 @@ C4Rect C4Draw::GetOutRect() const return C4Rect(0, 0, RenderTarget->Wdt, RenderTarget->Hgt); } -void C4Draw::SetGamma(DWORD dwClr1, DWORD dwClr2, DWORD dwClr3, int32_t iRampIndex) +void C4Draw::SetGamma(float r, float g, float b, int32_t iRampIndex) { - // No gamma effects - if (Config.Graphics.DisableGamma) return; - if (iRampIndex < 0 || iRampIndex >= C4MaxGammaRamps) return; - // turn ramp index into array offset - iRampIndex*=3; - // set array members - dwGamma[iRampIndex+0]=dwClr1; - dwGamma[iRampIndex+1]=dwClr2; - dwGamma[iRampIndex+2]=dwClr3; - // mark gamma ramp to be recalculated - fSetGamma=true; + // Set + gamma[iRampIndex][0] = r; + gamma[iRampIndex][1] = g; + gamma[iRampIndex][2] = b; + // Recalculate resulting gamma. Note that we flip gamma direction here, + // because higher gammaOut means darker. + gammaOut[0] = gammaOut[1] = gammaOut[2] = 1.0f; + for (int i = 0; i < C4MaxGammaRamps; i++) { + gammaOut[0] /= gamma[i][0]; + gammaOut[1] /= gamma[i][1]; + gammaOut[2] /= gamma[i][2]; + } } void C4Draw::ResetGamma() { - pApp->ApplyGammaRamp(DefRamp.ramp, false); -} - -void C4Draw::ApplyGamma() -{ - // No gamma effects - if (Config.Graphics.DisableGamma) return; - if (!fSetGamma) return; - - // calculate color channels by adding the difference between the gamma ramps to their normals - int32_t ChanOff[3]; - DWORD tGamma[3]; - const int32_t DefChanVal[3] = { 0x00, 0x80, 0xff }; - // calc offset for curve points - for (int32_t iCurve=0; iCurve<3; ++iCurve) - { - memset(ChanOff, 0, sizeof(int32_t)*3); - // ...channels... - for (int32_t iChan=0; iChan<3; ++iChan) - // ...ramps... - for (int32_t iRamp=0; iRamp>(16-iChan*8)) - DefChanVal[iCurve]; - // calc curve point - tGamma[iCurve]=C4RGB(Clamp(DefChanVal[iCurve]+ChanOff[0], 0, 255), Clamp(DefChanVal[iCurve]+ChanOff[1], 0, 255), Clamp(DefChanVal[iCurve]+ChanOff[2], 0, 255)); + for (int i = 0; i < C4MaxGammaRamps; i++) { + gamma[i][0] = 1.0f; + gamma[i][1] = 1.0f; + gamma[i][2] = 1.0f; } - // calc ramp - Gamma.Set(tGamma[0], tGamma[1], tGamma[2]); - // set gamma - pApp->ApplyGammaRamp(Gamma.ramp, false); - fSetGamma=false; -} - -void C4Draw::DisableGamma() -{ - // set it - pApp->ApplyGammaRamp(DefRamp.ramp, true); -} - -void C4Draw::EnableGamma() -{ - // set it - pApp->ApplyGammaRamp(Gamma.ramp, false); + gammaOut[0] = 1.0f; + gammaOut[1] = 1.0f; + gammaOut[2] = 1.0f; } DWORD C4Draw::ApplyGammaTo(DWORD dwClr) { - return Gamma.ApplyTo(dwClr); + return C4RGB(int(pow(float(GetRedValue(dwClr)) / 255.0f, gammaOut[0]) * 255.0), + int(pow(float(GetGreenValue(dwClr)) / 255.0f, gammaOut[1]) * 255.0), + int(pow(float(GetBlueValue(dwClr)) / 255.0f, gammaOut[2]) * 255.0)); } void C4Draw::SetZoom(float X, float Y, float Zoom) @@ -953,10 +879,6 @@ bool C4Draw::Init(C4AbstractApp * pApp, unsigned int iXRes, unsigned int iYRes, { this->pApp = pApp; - // store default gamma - if (!pApp->SaveDefaultGammaRamp(DefRamp.ramp)) - DefRamp.Default(); - pApp->pWindow->pSurface = new C4Surface(pApp, pApp->pWindow); if (!CreatePrimarySurfaces(iXRes, iYRes, iBitDepth, iMonitor)) diff --git a/src/graphics/C4Draw.h b/src/graphics/C4Draw.h index 6c12245af..d20fdcb3d 100644 --- a/src/graphics/C4Draw.h +++ b/src/graphics/C4Draw.h @@ -114,35 +114,6 @@ struct C4BltVertex float ftx,fty,ftz; // blit positions }; -// This structure is used by StdGL, too -typedef struct _GAMMARAMP -{ - WORD red [256]; - WORD green[256]; - WORD blue [256]; -} GAMMARAMP; - -// gamma ramp control -class C4GammaControl -{ -private: - void SetClrChannel(WORD *pBuf, BYTE c1, BYTE c2, int c3); // set color channel ramp - -protected: - GAMMARAMP ramp; - -public: - C4GammaControl() { Default(); } // ctor - void Default() { Set(0x000000, 0x808080, 0xffffff); } // set default ramp - - void Set(DWORD dwClr1, DWORD dwClr2, DWORD dwClr3); // set color ramp - - DWORD ApplyTo(DWORD dwClr); // apply gamma to color value - - friend class C4Draw; - friend class CStdGL; -}; - // helper struct struct ZoomData { @@ -161,12 +132,10 @@ public: public: C4AbstractApp * pApp; // the application bool Active; // set if device is ready to render, etc. - C4GammaControl Gamma; // gamma - C4GammaControl DefRamp; // default gamma ramp - uint32_t dwGamma[C4MaxGammaRamps*3]; // gamma ramps + float gamma[C4MaxGammaRamps][3]; // input gammas + float gammaOut[3]; // combined gamma int MaxTexSize; protected: - bool fSetGamma; // must gamma ramp be reassigned? BYTE byByteCnt; // bytes per pixel (2 or 4) float fClipX1,fClipY1,fClipX2,fClipY2; // clipper in unzoomed coordinates float fStClipX1,fStClipY1,fStClipX2,fStClipY2; // stored clipper in unzoomed coordinates @@ -253,12 +222,9 @@ public: void DrawPix(C4Surface * sfcDest, float tx, float ty, DWORD dwCol); // Consider using PerformMultiPix if you draw more than one pixel void DrawLineDw(C4Surface * sfcTarget, float x1, float y1, float x2, float y2, DWORD dwClr, float width = 1.0f); // Consider using PerformMultiLines if you draw more than one line // gamma - void SetGamma(DWORD dwClr1, DWORD dwClr2, DWORD dwClr3, int32_t iRampIndex); // set gamma ramp - void ResetGamma(); // reset all gamma ramps to default - void ApplyGamma(); // apply gamma ramp to ddraw - void DisableGamma(); // temporarily reset app gamma to default - void EnableGamma(); // set current gamma ramp in app - DWORD ApplyGammaTo(DWORD dwClr); // apply gamma to given color + void SetGamma(float r, float g, float b, int32_t iRampIndex); // set gamma + void ResetGamma(); // reset gamma to default + DWORD ApplyGammaTo(DWORD dwClr); // apply gamma to given color // blit states void ActivateBlitModulation(DWORD dwWithClr) { BlitModulated=true; BlitModulateClr=dwWithClr; } // modulate following blits with a given color void DeactivateBlitModulation() { BlitModulated=false; } // stop color modulation of blits diff --git a/src/graphics/C4DrawGL.cpp b/src/graphics/C4DrawGL.cpp index 191d68697..d3beca553 100644 --- a/src/graphics/C4DrawGL.cpp +++ b/src/graphics/C4DrawGL.cpp @@ -347,6 +347,7 @@ void CStdGL::SetupMultiBlt(C4ShaderCall& call, const C4BltTransform* pTransform, }; call.SetUniform4fv(C4SSU_ClrMod, 1, fMod); + call.SetUniform3fv(C4SSU_Gamma, 1, gammaOut); if(baseTex != 0) { @@ -572,6 +573,7 @@ bool CStdGL::CreateSpriteShader(C4Shader& shader, const char* name, int ssc, C4G const char* uniformNames[C4SSU_Count + 1]; uniformNames[C4SSU_ClrMod] = "clrMod"; + uniformNames[C4SSU_Gamma] = "gamma"; uniformNames[C4SSU_BaseTex] = "baseTex"; uniformNames[C4SSU_OverlayTex] = "overlayTex"; uniformNames[C4SSU_OverlayClr] = "overlayClr"; @@ -611,6 +613,7 @@ bool CStdGL::CreateSpriteShader(C4Shader& shader, const char* name, int ssc, C4G shader.LoadSlices(pGroups, "ObjectLightShader.glsl"); shader.LoadSlices(pGroups, "LightShader.glsl"); shader.LoadSlices(pGroups, "AmbientShader.glsl"); + shader.LoadSlices(pGroups, "GammaShader.glsl"); if (!shader.Init(name, uniformNames)) { @@ -739,9 +742,6 @@ bool CStdGL::RestoreDeviceObjects() glGetIntegerv(GL_MAX_TEXTURE_SIZE, &s); if (s>0) MaxTexSize = s; - // restore gamma if active - if (Active) - EnableGamma(); // reset blit states dwBlitMode = 0; @@ -752,10 +752,6 @@ bool CStdGL::RestoreDeviceObjects() bool CStdGL::InvalidateDeviceObjects() { bool fSuccess=true; - // clear gamma -#ifndef USE_SDL_MAINLOOP - DisableGamma(); -#endif // deactivate Active=false; // invalidate font objects diff --git a/src/graphics/C4DrawGL.h b/src/graphics/C4DrawGL.h index 88b10e14f..644bdbe7d 100644 --- a/src/graphics/C4DrawGL.h +++ b/src/graphics/C4DrawGL.h @@ -57,6 +57,8 @@ static const int C4SSC_NORMAL = 16; // extract normals from normal map instead o enum C4SS_Uniforms { C4SSU_ClrMod, // always + C4SSU_Gamma, // always + C4SSU_BaseTex, // C4SSC_BASE C4SSU_OverlayTex, // C4SSC_OVERLAY C4SSU_OverlayClr, // C4SSC_OVERLAY diff --git a/src/graphics/C4DrawMeshGL.cpp b/src/graphics/C4DrawMeshGL.cpp index 3b9b94fd0..918a4e5d9 100644 --- a/src/graphics/C4DrawMeshGL.cpp +++ b/src/graphics/C4DrawMeshGL.cpp @@ -425,6 +425,7 @@ namespace ((dwModClr >> 24) & 0xff) / 255.0f }; call.SetUniform4fv(C4SSU_ClrMod, 1, fMod); + call.SetUniform3fv(C4SSU_Gamma, 1, pDraw->gammaOut); // Player color const float fPlrClr[3] = { @@ -616,6 +617,7 @@ namespace if(dwBlitMode & C4GFXBLIT_MOD2) ssc |= C4SSC_MOD2; if(pFoW != NULL) ssc |= C4SSC_LIGHT; const C4Shader* shader = pass.Program->Program->GetShader(ssc); + if (!shader) return; C4ShaderCall call(shader); call.Start(); diff --git a/src/graphics/C4Surface.cpp b/src/graphics/C4Surface.cpp index c977795bf..6058fe6d0 100644 --- a/src/graphics/C4Surface.cpp +++ b/src/graphics/C4Surface.cpp @@ -485,7 +485,7 @@ bool C4Surface::SavePNG(const char *szFilename, bool fSaveAlpha, bool fApplyGamm for (int x=0; xGamma.ApplyTo(dwClr); + if (fApplyGamma) dwClr = pDraw->ApplyGammaTo(dwClr); png.SetPix(x, y, dwClr); } } diff --git a/src/landscape/C4LandscapeRender.cpp b/src/landscape/C4LandscapeRender.cpp index 86cd69765..2dccdc311 100644 --- a/src/landscape/C4LandscapeRender.cpp +++ b/src/landscape/C4LandscapeRender.cpp @@ -545,6 +545,7 @@ bool C4LandscapeRenderGL::LoadShader(C4GroupSet *pGroups, C4Shader& shader, cons shader.LoadSlices(pGroups, "LightShader.glsl"); shader.LoadSlices(pGroups, "AmbientShader.glsl"); shader.LoadSlices(pGroups, "ScalerShader.glsl"); + shader.LoadSlices(pGroups, "GammaShader.glsl"); // Initialise! if (!shader.Init(name, UniformNames)) { @@ -574,6 +575,7 @@ bool C4LandscapeRenderGL::LoadShaders(C4GroupSet *pGroups) UniformNames[C4LRU_MaterialTex] = "materialTex"; UniformNames[C4LRU_LightTex] = "lightTex"; UniformNames[C4LRU_AmbientTex] = "ambientTex"; + UniformNames[C4LRU_Gamma] = "gamma"; UniformNames[C4LRU_Resolution] = "resolution"; UniformNames[C4LRU_Center] = "center"; UniformNames[C4LRU_MatMap] = "matMap"; @@ -880,6 +882,7 @@ void C4LandscapeRenderGL::Draw(const C4TargetFacet &cgo, const C4FoWRegion *Ligh ShaderCall.Start(); // Bind data + ShaderCall.SetUniform3fv(C4LRU_Gamma, 1, pGL->gammaOut); ShaderCall.SetUniform2f(C4LRU_Resolution, Surfaces[0]->Wdt, Surfaces[0]->Hgt); float centerX = float(cgo.TargetX)+float(cgo.Wdt)/2, centerY = float(cgo.TargetY)+float(cgo.Hgt)/2; diff --git a/src/landscape/C4LandscapeRender.h b/src/landscape/C4LandscapeRender.h index 852b7e60e..032858f18 100644 --- a/src/landscape/C4LandscapeRender.h +++ b/src/landscape/C4LandscapeRender.h @@ -42,6 +42,7 @@ enum C4LR_Uniforms C4LRU_LightTex, C4LRU_AmbientTex, + C4LRU_Gamma, C4LRU_Resolution, C4LRU_Center, C4LRU_MatMap, diff --git a/src/landscape/C4Weather.cpp b/src/landscape/C4Weather.cpp index 23ecbb839..94ba71313 100644 --- a/src/landscape/C4Weather.cpp +++ b/src/landscape/C4Weather.cpp @@ -147,12 +147,12 @@ int32_t C4Weather::GetClimate() return Climate; } -static DWORD SeasonColors[4][3] = +static float SeasonColors[4][3] = { - { 0x000000, 0x7f7f90, 0xefefff }, // winter: slightly blue; blued out by temperature - { 0x070f00, 0x90a07f, 0xffffdf }, // spring: green to yellow - { 0x000000, 0x808080, 0xffffff }, // summer: regular ramp - { 0x0f0700, 0xa08067, 0xffffdf } // fall: dark, brown ramp + { 0.90, 0.90, 1.00 }, // winter: slightly blue; blued out by temperature + { 1.00, 1.05, 0.90 }, // spring: green to yellow + { 1.00, 1.00, 1.00 }, // summer: regular ramp + { 1.00, 0.95, 0.90 } // fall: dark, brown ramp }; void C4Weather::SetSeasonGamma() @@ -161,28 +161,16 @@ void C4Weather::SetSeasonGamma() // get season num and offset int32_t iSeason1=(Season/25)%4; int32_t iSeason2=(iSeason1+1)%4; int32_t iSeasonOff1=Clamp(Season%25, 5, 19)-5; int32_t iSeasonOff2=15-iSeasonOff1; - DWORD dwClr[3]; memset(dwClr, 0, sizeof(DWORD)*3); + float gamma[3] = { 0.0f, 0.0f, 0.0f }; // interpolate between season colors - for (int32_t i=0; i<3; ++i) - for (int32_t iChan=0; iChan<24; iChan+=8) - { - BYTE byC1=BYTE(SeasonColors[iSeason1][i]>>iChan); - BYTE byC2=BYTE(SeasonColors[iSeason2][i]>>iChan); - int32_t iChanVal=(byC1*iSeasonOff2 + byC2*iSeasonOff1) / 15; - // red+green: reduce in winter - if (Temperature<0) - { - if (iChan) - iChanVal+=Temperature/2; - else - // blue channel: emphasize in winter - iChanVal-=Temperature/2; - } - // set channel - dwClr[i] |= Clamp(iChanVal,0,255)<SetGamma(dwClr[0], dwClr[1], dwClr[2], C4GRI_SEASON); + pDraw->SetGamma(gamma[0], gamma[1], gamma[2], C4GRI_SEASON); } void C4Weather::CompileFunc(StdCompiler *pComp) @@ -196,14 +184,25 @@ void C4Weather::CompileFunc(StdCompiler *pComp) pComp->Value(mkNamingAdapt(TemperatureRange, "TemperatureRange", 30)); pComp->Value(mkNamingAdapt(Climate, "Climate", 0)); pComp->Value(mkNamingAdapt(NoGamma, "NoGamma", 0)); - uint32_t dwGammaDefaults[C4MaxGammaRamps*3]; + + int32_t gamma[C4MaxGammaRamps*3], + gammaDefaults[C4MaxGammaRamps*3]; for (int32_t i=0; igamma[i][0] * 100.0f); + gamma[i*3+1] = int(pDraw->gamma[i][1] * 100.0f); + gamma[i*3+2] = int(pDraw->gamma[i][2] * 100.0f); + } + pComp->Value(mkNamingAdapt(mkArrayAdaptM(gamma), "Gamma", gammaDefaults)); + for (int32_t i=0; igamma[i][0] = float(gamma[i*3+0]) / 100.0f; + pDraw->gamma[i][1] = float(gamma[i*3+1]) / 100.0f; + pDraw->gamma[i][2] = float(gamma[i*3+2]) / 100.0f; } - pComp->Value(mkNamingAdapt(mkArrayAdaptM(pDraw->dwGamma), "Gamma", dwGammaDefaults)); } C4Weather Weather; diff --git a/src/lib/StdMeshMaterial.cpp b/src/lib/StdMeshMaterial.cpp index f5e2d8ab0..b6ddbfd79 100644 --- a/src/lib/StdMeshMaterial.cpp +++ b/src/lib/StdMeshMaterial.cpp @@ -866,6 +866,7 @@ bool StdMeshMaterialProgram::CompileShader(StdMeshMaterialLoader& loader, C4Shad #ifndef USE_CONSOLE uniformNames.resize(C4SSU_Count + ParameterNames.size() + 1); uniformNames[C4SSU_ClrMod] = "clrMod"; + uniformNames[C4SSU_Gamma] = "gamma"; uniformNames[C4SSU_BaseTex] = "baseTex"; // unused uniformNames[C4SSU_OverlayTex] = "overlayTex"; // unused uniformNames[C4SSU_OverlayClr] = "oc_PlayerColor"; diff --git a/src/object/C4Def.cpp b/src/object/C4Def.cpp index 1aebd875a..a2ca88720 100644 --- a/src/object/C4Def.cpp +++ b/src/object/C4Def.cpp @@ -70,6 +70,7 @@ public: shader.LoadSlices(&::GraphicsResource.Files, "UtilShader.glsl"); shader.LoadSlices(&::GraphicsResource.Files, "ObjectBaseShader.glsl"); shader.LoadSlices(&::GraphicsResource.Files, "MeshShader.glsl"); + shader.LoadSlices(&::GraphicsResource.Files, "GammaShader.glsl"); // Note that these shader slices are always loaded, even if lighting // is disabled. The shaders then assume a default light if HAVE_LIGHT diff --git a/src/platform/C4App.h b/src/platform/C4App.h index e2d6a2244..1d6978918 100644 --- a/src/platform/C4App.h +++ b/src/platform/C4App.h @@ -94,9 +94,7 @@ public: bool GetIndexedDisplayMode(int32_t iIndex, int32_t *piXRes, int32_t *piYRes, int32_t *piBitDepth, int32_t *piRefreshRate, uint32_t iMonitor); bool SetVideoMode(unsigned int iXRes, unsigned int iYRes, unsigned int iColorDepth, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen); void RestoreVideoMode(); - // Gamma - virtual bool ApplyGammaRamp(struct _GAMMARAMP &ramp, bool fForce); - virtual bool SaveDefaultGammaRamp(struct _GAMMARAMP &ramp); + virtual bool DoScheduleProcs(int iTimeout); bool FlushMessages(); C4Window * pWindow; diff --git a/src/platform/C4AppGTK.cpp b/src/platform/C4AppGTK.cpp index 48fedd245..93ce3578c 100644 --- a/src/platform/C4AppGTK.cpp +++ b/src/platform/C4AppGTK.cpp @@ -244,58 +244,6 @@ static XRROutputInfo* GetXRROutputInfoForWindow(Display* dpy, Window w) return info; } -bool C4AbstractApp::ApplyGammaRamp(struct _GAMMARAMP& ramp, bool fForce) -{ - if (!Active && !fForce) return false; - if (Priv->xrandr_major_version < 1 || (Priv->xrandr_major_version == 1 && Priv->xrandr_minor_version < 3)) return false; - if (Priv->gammasize != 256) return false; - Display * const dpy = gdk_x11_display_get_xdisplay(gdk_display_get_default()); - XRRCrtcGamma g = { Priv->gammasize, ramp.red, ramp.green, ramp.blue }; - - XRROutputInfo* i = GetXRROutputInfoForWindow(dpy, pWindow->wnd); - if (!i) - { - Log(" Error setting gamma ramp: No XRROutputInfo available"); - return false; - } - XRRSetCrtcGamma(dpy, i->crtc, &g); - XRRFreeOutputInfo(i); - return true; -} - -bool C4AbstractApp::SaveDefaultGammaRamp(struct _GAMMARAMP& ramp) -{ - if (Priv->xrandr_major_version < 1 || (Priv->xrandr_major_version == 1 && Priv->xrandr_minor_version < 3)) return false; - Display * const dpy = gdk_x11_display_get_xdisplay(gdk_display_get_default()); - XRROutputInfo* i = GetXRROutputInfoForWindow(dpy, pWindow->wnd); - if (!i) - { - Log(" Error getting default gamma ramp: No XRROutputInfo available"); - return false; - } - - XRRCrtcGamma * g = XRRGetCrtcGamma(dpy, i->crtc); - XRRFreeOutputInfo(i); - if (!g) - { - Log(" Error getting default gamma ramp: XRRGetCrtcGamma"); - return false; - } - Priv->gammasize = g->size; - if (Priv->gammasize != 256) - { - LogF(" Size of GammaRamp is %d, not 256", Priv->gammasize); - } - else - { - memcpy(ramp.red, g->red, sizeof(ramp.red)); - memcpy(ramp.green, g->green, sizeof(ramp.green)); - memcpy(ramp.blue, g->blue, sizeof(ramp.blue)); - } - XRRFreeGamma(g); - return true; -} - // Copy the text to the clipboard or the primary selection bool C4AbstractApp::Copy(const StdStrBuf & text, bool fClipboard) { diff --git a/src/platform/C4AppMac.mm b/src/platform/C4AppMac.mm index f02ba123d..272822ffc 100644 --- a/src/platform/C4AppMac.mm +++ b/src/platform/C4AppMac.mm @@ -190,37 +190,6 @@ bool C4AbstractApp::SetVideoMode(unsigned int iXRes, unsigned int iYRes, unsigne return true; } -bool C4AbstractApp::ApplyGammaRamp(struct _GAMMARAMP &ramp, bool fForce) -{ - CGGammaValue r[256]; - CGGammaValue g[256]; - CGGammaValue b[256]; - for (int i = 0; i < 256; i++) - { - r[i] = static_cast(ramp.red[i])/65535.0; - g[i] = static_cast(ramp.green[i])/65535.0; - b[i] = static_cast(ramp.blue[i])/65535.0; - } - CGSetDisplayTransferByTable(C4OpenGLView.displayID, 256, r, g, b); - return true; -} - -bool C4AbstractApp::SaveDefaultGammaRamp(struct _GAMMARAMP &ramp) -{ - CGGammaValue r[256]; - CGGammaValue g[256]; - CGGammaValue b[256]; - uint32_t count; - CGGetDisplayTransferByTable(C4OpenGLView.displayID, 256, r, g, b, &count); - for (int i = 0; i < 256; i++) - { - ramp.red[i] = r[i]*65535; - ramp.green[i] = g[i]*65535; - ramp.blue[i] = b[i]*65535; - } - return true; -} - #endif bool IsGermanSystem() From a45c865be16d216f1e57b82254b0485c913f0ca3 Mon Sep 17 00:00:00 2001 From: Peter Wortmann Date: Mon, 31 Aug 2015 17:22:50 +0100 Subject: [PATCH 86/97] Fixed preprocessor for AUDIO_TK != AUDIO_TK_OPENAL --- src/platform/C4SoundInstance.cpp | 2 ++ src/platform/C4SoundModifiers.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/platform/C4SoundInstance.cpp b/src/platform/C4SoundInstance.cpp index 7f89ca404..15c9c7476 100644 --- a/src/platform/C4SoundInstance.cpp +++ b/src/platform/C4SoundInstance.cpp @@ -467,7 +467,9 @@ void C4SoundInstance::SetModifier(C4SoundModifier *new_modifier, bool is_global) { if (modifier) { +#if AUDIO_TK == AUDIO_TK_OPENAL modifier->ApplyTo(iChannel); +#endif } else { diff --git a/src/platform/C4SoundModifiers.cpp b/src/platform/C4SoundModifiers.cpp index 5ed131561..713d9ca01 100644 --- a/src/platform/C4SoundModifiers.cpp +++ b/src/platform/C4SoundModifiers.cpp @@ -89,13 +89,15 @@ void C4SoundModifier::Update() released = false; } +#if AUDIO_TK == AUDIO_TK_OPENAL void C4SoundModifier::ApplyTo(ALuint source) { // apply slot to source if valid -#if (AUDIO_TK == AUDIO_TK_OPENAL) && defined(HAVE_ALEXT) +#if defined(HAVE_ALEXT) if (slot) alSource3i(source, AL_AUXILIARY_SEND_FILTER, slot, 0, AL_FILTER_NULL); #endif } +#endif float C4SoundModifier::GetFloatProp(C4PropertyName key, float ratio, float default_value) { From f57bfa089c4e3c0924cf4f1f7ee9642337dca685 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Sat, 8 Aug 2015 19:11:35 +0200 Subject: [PATCH 87/97] revert workaround made for #1368, doesn't work on (certain) Intel chipsets. Instead, limit the maximum bone count to 64 so to meet the limit of 1024 uniform components by certain graphics cards (#1285) --- planet/Graphics.ocg/ObjectDefaultVS.glsl | 25 +++++------------------- src/graphics/C4DrawGL.cpp | 10 ---------- src/graphics/C4DrawGL.h | 5 ----- src/graphics/C4DrawMeshGL.cpp | 17 ++++++---------- 4 files changed, 11 insertions(+), 46 deletions(-) diff --git a/planet/Graphics.ocg/ObjectDefaultVS.glsl b/planet/Graphics.ocg/ObjectDefaultVS.glsl index 1a9213785..44447ac2a 100644 --- a/planet/Graphics.ocg/ObjectDefaultVS.glsl +++ b/planet/Graphics.ocg/ObjectDefaultVS.glsl @@ -15,11 +15,7 @@ // Default Vertex Shader for mesh-based objects. -// Input uniforms, if OC_WA_LOW_MAX_VERTEX_UNIFORM_COMPONENTS is NOT defined: -// bones: array of 4x3 bone transformation matrices. - -// Input uniforms, if OC_WA_LOW_MAX_VERTEX_UNIFORM_COMPONENTS is defined: -// bones: array of 3x4 transposed bone transformation matrices. +// Input uniforms: // Input vertex attributes: // oc_BoneWeights0 and oc_BoneWeight1: vectors of bone influence weights. @@ -34,15 +30,11 @@ // inside the bone matrix array that contains the identity matrix, with a bone // weight of 1.0. -#define MAX_BONE_COUNT 80 +#define MAX_BONE_COUNT 64 varying vec3 normalDir; -#ifndef OC_WA_LOW_MAX_VERTEX_UNIFORM_COMPONENTS -uniform mat4x3 bones[MAX_BONE_COUNT]; -#else -uniform mat3x4 bones[MAX_BONE_COUNT]; -#endif +uniform mat4 bones[MAX_BONE_COUNT]; // For more performance, this should be set by the engine, and this shader // should be compiled three times: with BONE_COUNT set to 0, 4, and 8, @@ -57,17 +49,10 @@ attribute vec4 oc_BoneIndices1; attribute vec4 oc_BoneWeights1; #endif -#ifndef OC_WA_LOW_MAX_VERTEX_UNIFORM_COMPONENTS -vec4 merge_bone(vec4 vertex, vec4 original, mat4x3 bone, float weight) +vec4 merge_bone(vec4 vertex, vec4 original, mat4 bone, float weight) { - return (mat4(bone) * original) * weight + vertex; + return (bone * original) * weight + vertex; } -#else -vec4 merge_bone(vec4 vertex, vec4 original, mat3x4 bone, float weight) -{ - return (mat4(transpose(bone)) * original) * weight + vertex; -} -#endif slice(position) { diff --git a/src/graphics/C4DrawGL.cpp b/src/graphics/C4DrawGL.cpp index d3beca553..43f11ca25 100644 --- a/src/graphics/C4DrawGL.cpp +++ b/src/graphics/C4DrawGL.cpp @@ -260,15 +260,6 @@ CStdGLCtx *CStdGL::CreateContext(C4Window * pWindow, C4AbstractApp *pApp) LogSilentF("GLExt: %s", gl_extensions ? gl_extensions : ""); } } - - // Check which workarounds we have to apply - { - // If we have less than 2048 uniform components available, we - // need to upload bone matrices in a different way - GLint count; - glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, &count); - Workarounds.LowMaxVertexUniformCount = count < 2048; - } } if (!success) { @@ -828,7 +819,6 @@ void CStdGL::Default() iPixelFormat=0; sfcFmt=0; iClrDpt=0; - Workarounds.LowMaxVertexUniformCount = false; } #endif // USE_CONSOLE diff --git a/src/graphics/C4DrawGL.h b/src/graphics/C4DrawGL.h index 644bdbe7d..857c5807c 100644 --- a/src/graphics/C4DrawGL.h +++ b/src/graphics/C4DrawGL.h @@ -190,11 +190,6 @@ public: C4Shader* GetSpriteShader(int ssc); C4Shader* GetSpriteShader(bool haveBase, bool haveOverlay, bool haveNormal); - struct - { - bool LowMaxVertexUniformCount; - } Workarounds; - protected: bool CreatePrimarySurfaces(unsigned int iXRes, unsigned int iYRes, int iColorDepth, unsigned int iMonitor); diff --git a/src/graphics/C4DrawMeshGL.cpp b/src/graphics/C4DrawMeshGL.cpp index 918a4e5d9..6874e24a5 100644 --- a/src/graphics/C4DrawMeshGL.cpp +++ b/src/graphics/C4DrawMeshGL.cpp @@ -128,10 +128,7 @@ namespace ); } - if (pGL->Workarounds.LowMaxVertexUniformCount) - return StdStrBuf("#define OC_WA_LOW_MAX_VERTEX_UNIFORM_COMPONENTS\n") + buf; - else - return buf; + return buf; } // Note this only gets the code which inserts the slices specific for the pass @@ -477,7 +474,7 @@ namespace // Or, even better, we could upload them into a UBO, but Intel doesn't support them prior to Sandy Bridge. struct BoneTransform { - float m[3][4]; + float m[4][4]; }; std::vector bones; if (mesh_instance.GetBoneCount() == 0) @@ -486,7 +483,7 @@ namespace static const BoneTransform dummy_bone = { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f + 0.0f, 0.0f, 1.0f, 1.0f }; bones.push_back(dummy_bone); } @@ -499,7 +496,8 @@ namespace BoneTransform cooked_bone = { bone(0, 0), bone(0, 1), bone(0, 2), bone(0, 3), bone(1, 0), bone(1, 1), bone(1, 2), bone(1, 3), - bone(2, 0), bone(2, 1), bone(2, 2), bone(2, 3) + bone(2, 0), bone(2, 1), bone(2, 2), bone(2, 3), + 0, 0, 0, 1 }; bones.push_back(cooked_bone); } @@ -624,10 +622,7 @@ namespace // Upload the current bone transformation matrixes (if there are any) if (!bones.empty()) { - if (pGL->Workarounds.LowMaxVertexUniformCount) - glUniformMatrix3x4fv(shader->GetUniform(C4SSU_Bones), bones.size(), GL_FALSE, &bones[0].m[0][0]); - else - glUniformMatrix4x3fv(shader->GetUniform(C4SSU_Bones), bones.size(), GL_TRUE, &bones[0].m[0][0]); + call.SetUniformMatrix4x4fv(C4SSU_Bones, bones.size(), &bones[0].m[0][0]); } // Bind the vertex data of the mesh From 9480ebc60cd169d1838ab5231bf418767a7ef97e Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Mon, 31 Aug 2015 23:30:28 +0200 Subject: [PATCH 88/97] path to David's music pack --- tools/install/musicpack.nsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/install/musicpack.nsh b/tools/install/musicpack.nsh index c93998d6a..058cd1358 100644 --- a/tools/install/musicpack.nsh +++ b/tools/install/musicpack.nsh @@ -6,7 +6,7 @@ !include nsDialogs.nsh !include LogicLib.nsh -!define MUSICPACK_URL "http://download.openclonk.org/OpenClonkOST.ocg" +!define MUSICPACK_URL "http://www.openclonk.org/download/Music.ocg" ; !define MUSICPACK_URL "http://www.cognium.de/misc/test.ocg" Var Dialog From 95baaa7934ab10a807fb05a36c49892dc637c089 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Mon, 31 Aug 2015 20:50:28 -0400 Subject: [PATCH 89/97] Enable usage of LeftControl, RightControl, LeftShift and RightShift as player control keys. --- src/game/C4Game.cpp | 3 +++ src/gui/C4KeyboardInput.cpp | 5 +++++ src/platform/C4WindowWin32.cpp | 12 ++++++++---- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index 5dd77def2..f10b0aa23 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -1862,6 +1862,9 @@ bool C4Game::DoKeyboardInput(C4KeyCode vk_code, C4KeyEventType eEventType, bool PressedKeys[vk_code] = false; } #endif + // reduce stuff like Ctrl+RightCtrl to simply RightCtrl + if (fCtrl && (vk_code == K_CONTROL_L || vk_code == K_CONTROL_R)) fCtrl = false; + if (fShift && (vk_code == K_SHIFT_L || vk_code == K_SHIFT_R)) fShift = false; // compose key C4KeyCodeEx Key(vk_code, C4KeyShiftState(fAlt*KEYS_Alt + fCtrl*KEYS_Control + fShift*KEYS_Shift), fRepeated); // compose keyboard scope diff --git a/src/gui/C4KeyboardInput.cpp b/src/gui/C4KeyboardInput.cpp index 1ad973e4b..189d8af85 100644 --- a/src/gui/C4KeyboardInput.cpp +++ b/src/gui/C4KeyboardInput.cpp @@ -413,6 +413,11 @@ StdStrBuf C4KeyCodeEx::KeyCode2String(C4KeyCode wCode, bool fHumanReadable, bool } #if defined(_WIN32) + // Query map + const C4KeyCodeMapEntry *pCheck = KeyCodeMap; + while (pCheck->szName) + if (wCode == pCheck->wCode) return StdStrBuf((pCheck->szShortName && fShort) ? pCheck->szShortName : pCheck->szName); else ++pCheck; + // TODO: Works? // StdStrBuf Name; Name.SetLength(1000); // int res = GetKeyNameText(wCode, Name.getMData(), Name.getSize()); diff --git a/src/platform/C4WindowWin32.cpp b/src/platform/C4WindowWin32.cpp index 86826c3b8..d43c06c32 100644 --- a/src/platform/C4WindowWin32.cpp +++ b/src/platform/C4WindowWin32.cpp @@ -45,7 +45,7 @@ #define ConsoleDlgWindowStyle (WS_VISIBLE | WS_POPUP | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX) /** Convert certain keys to unix scancodes (those that differ from unix scancodes) */ -static void ConvertToUnixScancode(WPARAM wParam, C4KeyCode *scancode) +static void ConvertToUnixScancode(WPARAM wParam, C4KeyCode *scancode, bool extended) { C4KeyCode &s = *scancode; @@ -68,6 +68,7 @@ static void ConvertToUnixScancode(WPARAM wParam, C4KeyCode *scancode) case VK_PAUSE: s = K_PAUSE; break; case VK_PRINT: s = K_PRINT; break; case VK_RCONTROL: s = K_CONTROL_R; break; + case VK_CONTROL: s = (extended ? K_CONTROL_R : K_CONTROL_L); break; case VK_NUMLOCK: s = K_NUM; break; case VK_NUMPAD1: s = K_NUM1; break; case VK_NUMPAD2: s = K_NUM2; break; @@ -92,7 +93,8 @@ LRESULT APIENTRY FullScreenWinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l // compute scancode C4KeyCode scancode = (((unsigned int)lParam) >> 16) & 0xFF; - ConvertToUnixScancode(wParam, &scancode); + bool extended = ((lParam & 0x01000000) != 0); + ConvertToUnixScancode(wParam, &scancode, extended); // Process message switch (uMsg) @@ -238,7 +240,8 @@ LRESULT APIENTRY ViewportWinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa // compute scancode C4KeyCode scancode = (((unsigned int)lParam) >> 16) & 0xFF; - ConvertToUnixScancode(wParam, &scancode); + bool extended = ((lParam & 0x01000000) != 0); + ConvertToUnixScancode(wParam, &scancode, extended); // Process message switch (uMsg) @@ -456,7 +459,8 @@ LRESULT APIENTRY DialogWinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPara // compute scancode C4KeyCode scancode = (((unsigned int)lParam) >> 16) & 0xFF; - ConvertToUnixScancode(wParam, &scancode); + bool extended = ((lParam & 0x01000000) != 0); + ConvertToUnixScancode(wParam, &scancode, extended); // Process message switch (uMsg) From 0b37c9649027d6ead673ad32a4ba4de8d18dc9c6 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Tue, 1 Sep 2015 08:20:34 -0400 Subject: [PATCH 90/97] Fix Windows builds. Removed some leftover gamma ramp functionality from Win32 AbstractApp. --- src/platform/C4WindowWin32.cpp | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/src/platform/C4WindowWin32.cpp b/src/platform/C4WindowWin32.cpp index d43c06c32..b7a188fe2 100644 --- a/src/platform/C4WindowWin32.cpp +++ b/src/platform/C4WindowWin32.cpp @@ -977,35 +977,6 @@ bool C4AbstractApp::SetVideoMode(unsigned int iXRes, unsigned int iYRes, unsigne #endif } -bool C4AbstractApp::SaveDefaultGammaRamp(_GAMMARAMP &ramp) -{ - HDC hDC = GetDC(pWindow->hWindow); - if (hDC) - { - bool r = !!GetDeviceGammaRamp(hDC, &ramp); - if (!r) - { - Log(" Error getting default gamma ramp; using standard"); - } - ReleaseDC(pWindow->hWindow, hDC); - return r; - } - return false; -} - -bool C4AbstractApp::ApplyGammaRamp(_GAMMARAMP &ramp, bool fForce) -{ - if (!Active && !fForce) return false; - HDC hDC = GetDC(pWindow->hWindow); - if (hDC) - { - bool r = !!SetDeviceGammaRamp(hDC, &ramp); - ReleaseDC(pWindow->hWindow, hDC); - return r; - } - return false; -} - void C4AbstractApp::MessageDialog(const char * message) { MessageBoxW(0, GetWideChar(message), ADDL(C4ENGINECAPTION), MB_ICONERROR); From 38806f4c0bddaac1bf09f3610c4dd1630322ad78 Mon Sep 17 00:00:00 2001 From: Peter Wortmann Date: Tue, 1 Sep 2015 19:11:31 +0100 Subject: [PATCH 91/97] Define left + right control for Mac Higher wizardry. --- src/platform/C4Window.h | 2 ++ src/platform/C4WindowMac.mm | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/platform/C4Window.h b/src/platform/C4Window.h index de9c8ac28..a0995aa51 100644 --- a/src/platform/C4Window.h +++ b/src/platform/C4Window.h @@ -225,6 +225,8 @@ const int CocoaKeycodeOffset = 300; extern C4KeyCode K_SHIFT_L; extern C4KeyCode K_SHIFT_R; +extern C4KeyCode K_CONTROL_L; +extern C4KeyCode K_CONTROL_R; extern C4KeyCode K_ALT_L; extern C4KeyCode K_ALT_R; extern C4KeyCode K_F1; diff --git a/src/platform/C4WindowMac.mm b/src/platform/C4WindowMac.mm index 6eb62588e..526a24a1b 100644 --- a/src/platform/C4WindowMac.mm +++ b/src/platform/C4WindowMac.mm @@ -147,6 +147,8 @@ bool C4Window::ReInit(C4AbstractApp* pApp) C4KeyCode K_SHIFT_L = 56 + CocoaKeycodeOffset; C4KeyCode K_SHIFT_R = 60 + CocoaKeycodeOffset; +C4KeyCode K_CONTROL_L = 0x3b + CocoaKeycodeOffset; +C4KeyCode K_CONTROL_R = 0x3e + CocoaKeycodeOffset; C4KeyCode K_ALT_L = 58 + CocoaKeycodeOffset; C4KeyCode K_ALT_R = 61 + CocoaKeycodeOffset; C4KeyCode K_F1 = 122 + CocoaKeycodeOffset; From 6257d9d6be04ff89496acf370463c0b24af71919 Mon Sep 17 00:00:00 2001 From: WinExploder Date: Sat, 29 Aug 2015 19:53:52 +0200 Subject: [PATCH 92/97] added item spawning functionality and better effect for meteor; added alien meteor skin squashed: -Made meteor particle effect awesome --Slight changes to rotation of Alien meteor and particles -cleaned up alien meteor and merged item spawning functionality into normal meteor -Fixed AlienMeteor spawn chance -Changed AlienMeteor visuals slightly -Made AlienMeteor Particles even better C: -WIP: Alien meteor + particles --- .../Animals.ocd/Chippie.ocd/Egg.ocd/Script.c | 8 +- .../Particles.ocd/BlueFire.ocd/Graphics.png | Bin 0 -> 9384 bytes .../Particles.ocd/BlueFire.ocd/Particle.txt | 3 + .../BlueFireTrail.ocd/Graphics.png | Bin 0 -> 77348 bytes .../BlueFireTrail.ocd/Particle.txt | 3 + .../Meteor.ocd/Alien.ocd/DefCore.txt | 14 ++ .../Meteor.ocd/Alien.ocd/Graphics.mesh | Bin 0 -> 488023 bytes .../Meteor.ocd/Alien.ocd/Scene.material | 27 +++ .../Meteor.ocd/Alien.ocd/Script.c | 109 ++++++++++ .../Meteor.ocd/Alien.ocd/StringTblDE.txt | 1 + .../Meteor.ocd/Alien.ocd/StringTblUS.txt | 1 + .../Meteor.ocd/Alien.ocd/meteorite.png | Bin 0 -> 15708 bytes .../Alien.ocd/meteorite_normals.png | Bin 0 -> 44487 bytes .../Disasters.ocd/Meteor.ocd/Script.c | 193 ++++++++++++++---- 14 files changed, 319 insertions(+), 40 deletions(-) create mode 100644 planet/Objects.ocd/Effects.ocd/Particles.ocd/BlueFire.ocd/Graphics.png create mode 100644 planet/Objects.ocd/Effects.ocd/Particles.ocd/BlueFire.ocd/Particle.txt create mode 100644 planet/Objects.ocd/Effects.ocd/Particles.ocd/BlueFireTrail.ocd/Graphics.png create mode 100644 planet/Objects.ocd/Effects.ocd/Particles.ocd/BlueFireTrail.ocd/Particle.txt create mode 100644 planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Alien.ocd/DefCore.txt create mode 100644 planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Alien.ocd/Graphics.mesh create mode 100644 planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Alien.ocd/Scene.material create mode 100644 planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Alien.ocd/Script.c create mode 100644 planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Alien.ocd/StringTblDE.txt create mode 100644 planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Alien.ocd/StringTblUS.txt create mode 100644 planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Alien.ocd/meteorite.png create mode 100644 planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Alien.ocd/meteorite_normals.png diff --git a/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Egg.ocd/Script.c b/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Egg.ocd/Script.c index e8b95f265..49f61756a 100644 --- a/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Egg.ocd/Script.c +++ b/planet/Objects.ocd/Animals.ocd/Chippie.ocd/Egg.ocd/Script.c @@ -163,4 +163,10 @@ private func Hatch() PV_Random(10, 20), particles, 60); RemoveObject(); return true; -} \ No newline at end of file +} + +// If spawned via a meteor, use a cool green skin. +public func GetMeteorSkin() +{ + return Meteor_Alien; +} diff --git a/planet/Objects.ocd/Effects.ocd/Particles.ocd/BlueFire.ocd/Graphics.png b/planet/Objects.ocd/Effects.ocd/Particles.ocd/BlueFire.ocd/Graphics.png new file mode 100644 index 0000000000000000000000000000000000000000..304f68848045c11c7432a245c19e282562668d24 GIT binary patch literal 9384 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⪙fg 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℞!YEzpko)z9$KIDC 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

    X{q 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

    +&FR5EN0>wOaB%->CGkYW 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 literal 0 HcmV?d00001 diff --git a/planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Script.c b/planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Script.c index 686e03de5..a9cc822ef 100644 --- a/planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Script.c +++ b/planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Script.c @@ -2,65 +2,102 @@ Meteor A burning rock falling from the sky, explodes on impact. - @author Maikel + @author Maikel, Zapper */ +// A meteor can spawn objects on impact. +local spawn_id, spawn_amount; /*-- Disaster Control --*/ -public func SetChance(int chance) +/** + Enables meteorites. + The meteorites can be set to spawn objects on impact. The amount to spawn will be spawn_amount randomized by 50%. +*/ +public func SetChance(int chance, id spawn_id, int spawn_amount) { - if (this != Meteor) - return; - var effect = GetEffect("IntMeteorControl"); + spawn_amount = spawn_amount ?? 1; + if (GetType(this) != C4V_Def) return FatalError("Must be called as a definition call."); + + var effect = FindMeteoriteEffectFor(spawn_id); if (!effect) - effect = AddEffect("IntMeteorControl", nil, 100, 20, nil, Meteor); + effect = AddEffect("IntMeteorControl", nil, 100, 20, nil, this, spawn_id, spawn_amount); effect.chance = chance; - return; + + return true; } -public func GetChance() +/** + Returns the chance of meteorites that is currently set. spawn_id can be nil for the normal meteorite. +*/ +public func GetChance(id spawn_id) { - if (this != Meteor) - return; - var effect = GetEffect("IntMeteorControl"); + if (GetType(this) != C4V_Def) return FatalError("Must be called as a definition call."); + var effect = FindMeteoriteEffectFor(spawn_id); if (effect) return effect.chance; - return; + return 0; } -protected func FxIntMeteorControlTimer(object target, proplist effect, int time) +// Finds the meteorite effect that matches a specific spawn id. +private func FindMeteoriteEffectFor(id spawn_id) { - if (Random(100) < effect.chance && !Random(10)) + var i = 0, fx; + while (fx = GetEffect("IntMeteorControl", nil, i++)) + { + if (fx.spawn_id == spawn_id) return fx; + } + return nil; +} + +private func FxIntMeteorControlStart(object target, effect fx, temp, id spawn_id, int spawn_amount) +{ + if (temp) return; + fx.spawn_id = spawn_id; + fx.spawn_amount = spawn_amount; +} + + + +private func FxIntMeteorControlTimer(object target, effect fx, int time) +{ + if (Random(100) < fx.chance && !Random(10)) { // Launch a meteor. - var meteor = CreateObjectAbove(Meteor); var x = Random(LandscapeWidth()); var y = 0; var size = RandomX(60, 90); var xdir = RandomX(-22, 22); var ydir = RandomX(28, 36); - meteor->Launch(x, y, size, xdir, ydir); + var real_spawn_amount = Max(1, RandomX(fx.spawn_amount / 2, 3 * fx.spawn_amount / 2)); + LaunchMeteor(x, y, size, xdir, ydir, fx.spawn_id, real_spawn_amount); } return FX_OK; } // Scenario saving -func FxIntMeteorControlSaveScen(obj, fx, props) +public func FxIntMeteorControlSaveScen(obj, fx, props) { - props->Add("Meteor", "Meteor->SetChance(%d)", fx.chance); + props->Add("Meteor", "Meteor->SetChance(%d, %v, %d)", fx.chance, fx.spawn_id, fx.spawn_amount); return true; } -global func LaunchMeteor(int x, int y, int size, int xdir, int ydir) +/** + Launches a meteor. + The meteor can spawn objects via spawn_id. +*/ +global func LaunchMeteor(int x, int y, int size, int xdir, int ydir, id spawn_id, int spawn_amount) { - var meteor = CreateObjectAbove(Meteor); - return meteor->Launch(x, y, size, xdir, ydir); + var meteor_skin = Meteor; + if (spawn_id) meteor_skin = spawn_id->~GetMeteorSkin() ?? meteor_skin; + + var meteor = CreateObject(meteor_skin); + return meteor->Launch(x, y, size, xdir, ydir, spawn_id, spawn_amount); } /*-- Meteor --*/ -public func Launch(int x, int y, int size, int xdir, int ydir) +public func Launch(int x, int y, int size, int xdir, int ydir, id spawn_id, int spawn_amount) { // Launch from indicated position. SetPosition(x, y); @@ -69,15 +106,27 @@ public func Launch(int x, int y, int size, int xdir, int ydir) // Set the initial velocity. SetXDir(xdir); SetYDir(ydir); - // Set random rotation. - SetR(Random(360)); - SetRDir(RandomX(-10, 10)); + // Remember spawning information. + this.spawn_id = spawn_id; + this.spawn_amount = spawn_amount ?? 1; // Safety check. if (!IsLaunchable()) return false; + // Allow for some more effects (overloadable). + this->OnAfterLaunch(); + return true; +} + +public func OnAfterLaunch() +{ + // Set random rotation. + SetR(Random(360)); + SetRDir(RandomX(-10, 10)); + // Emit light + SetLightRange(300, 100); + SetLightColor(RGB(100, 230, 120)); // Set right action. AddEffect("IntMeteor", this, 100, 1, this); - return true; } private func IsLaunchable() @@ -90,7 +139,55 @@ private func IsLaunchable() return true; } -protected func FxIntMeteorTimer() +private func FxIntMeteorStart(object target, effect fx, bool temp) +{ + if (temp) return; + fx.smoketrail = + { + R = 255, + B = PV_KeyFrames(0, 0,100, 30,0, 100,255, 1000,255), + G = PV_KeyFrames(0, 0,150, 30,0, 100,255, 1000,255), + + Alpha = PV_KeyFrames(1000, 0, 0, 30, 255, 1000, 0), + Size = PV_Linear(20,60), + Stretch = 1000, + Phase = PV_Random(0,4), + Rotation = PV_Random(-GetR() - 15, -GetR() + 15), + DampingX = 1000, + DampingY = 1000, + BlitMode = 0, + CollisionVertex = 0, + OnCollision = PC_Stop(), + Attach = nil + }; + fx.brighttrail = + { + Prototype = fx.smoketrail, + Alpha = PV_Linear(180,0), + Size = PV_Linear(20,30), + BlitMode = GFX_BLIT_Additive, + }; + fx.frontburn = + { + R = 255, + B = 50, + G = 190, + + Alpha = PV_KeyFrames(0, 0, 0, 500, 25, 1000, 0), + Size = PV_Linear(4,5), + Stretch = 1000, + Phase = PV_Random(0,4), + Rotation = PV_Random(-GetR() - 15, -GetR() + 15), + DampingX = 1000, + DampingY = 1000, + BlitMode = GFX_BLIT_Additive, + CollisionVertex = 0, + OnCollision = PC_Stop(), + Attach = ATTACH_Front | ATTACH_MoveRelative + }; +} + +protected func FxIntMeteorTimer(object target, effect fx, bool temp) { var size = GetCon(); // Air drag. @@ -98,10 +195,12 @@ protected func FxIntMeteorTimer() ydir -= size * ydir ** 2 / 11552000; // Magic number. SetYDir(ydir, 100); // Smoke trail. - CreateParticle("Smoke", PV_Random(-2, 2), PV_Random(-2, 2), PV_Random(-3, 3), PV_Random(-3, 3), 30 + Random(60), Particles_SmokeTrail(), 5); - // Fire trail. - CreateParticle("MagicSpark", 0, 0, PV_Random(-20, 20), PV_Random(-20, 20), 16, Particles_SparkFire(), 4); - CreateParticle("Fire", PV_Random(-size / 8, size / 8), PV_Random(-size / 8, size / 8), PV_Random(-1, 1), PV_Random(-1, 1), 30, Particles_FireTrail(), 6 + size / 10); + CreateParticle("SmokeThick", 0, 0, PV_Random(-3, 3), PV_Random(-3, 3), 200, fx.smoketrail, 5); + // Flash + CreateParticle("SmokeThick", 0, -4, PV_Random(-3, 3), PV_Random(-3, 3), 3, fx.brighttrail, 2); + // left and right burn + CreateParticle("FireDense", PV_Random(-5, 5), 15, PV_Random(-5, -20), PV_Random(-15, -30), 20, fx.frontburn, 30); + CreateParticle("FireDense", PV_Random(-5, 5), 15, PV_Random(5, 20), PV_Random(-15, -30), 20, fx.frontburn, 30); // Sound. // Burning and friction decrease size. @@ -111,6 +210,13 @@ protected func FxIntMeteorTimer() return 1; } +// Scenario saving +func FxIntMeteorSaveScen(obj, fx, props) +{ + props->AddCall("Meteor", obj, "AddEffect", "\"IntMeteor\"", obj, 100, 1, obj); + return true; +} + protected func Hit(int xdir, int ydir) { var size = 10 + GetCon(); @@ -125,17 +231,26 @@ protected func Hit(int xdir, int ydir) // Explode meteor, explode size scales with the energy of the meteor. var dam = size * speed2 / 500; dam = BoundBy(size/2, 5, 30); - Explode(dam); + // Blow up a dummy object so that the explosion can happen before we spawn items. + var dummy = CreateObject(Dummy, 0, 0, GetController()); + dummy->Explode(dam); + + // Fling around some objects? + if (spawn_id) + { + for (var i = 0; i < spawn_amount; ++i) + { + var angle = Angle(0, 0, -xdir, -ydir) + RandomX(-45, 45); + var force = BoundBy(GetCon() / 2, 10, 50) + RandomX(-10, 10); + var item = CreateObject(spawn_id, 0, 0, GetOwner()); + item->SetSpeed(Sin(angle, force), -Cos(angle, force)); + } + } + + RemoveObject(); return; } -// Scenario saving -func FxIntMeteorSaveScen(obj, fx, props) -{ - props->AddCall("Meteor", obj, "AddEffect", "\"IntMeteor\"", obj, 100, 1, obj); - return true; - } - /*-- Proplist --*/ local Name = "$Name$"; From cc876e01ceaf041c964d7b69c330bff22e7eeb60 Mon Sep 17 00:00:00 2001 From: David Dormagen Date: Tue, 1 Sep 2015 22:54:31 +0200 Subject: [PATCH 93/97] moved LaunchMeteor into more general Objects.ocd/System.ocg folder This is to prevent errors on including objects that contain global functions. I believe this will be needed more in the future, thus there is now a new System.ocg folder. --- .../Disasters.ocd/Meteor.ocd/Script.c | 13 ------------- planet/objects.ocd/System.ocg/Disasters.c | 16 ++++++++++++++++ planet/objects.ocd/System.ocg/Info.txt | 2 ++ 3 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 planet/objects.ocd/System.ocg/Disasters.c create mode 100644 planet/objects.ocd/System.ocg/Info.txt diff --git a/planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Script.c b/planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Script.c index a9cc822ef..a76d00262 100644 --- a/planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Script.c +++ b/planet/Objects.ocd/Environment.ocd/Disasters.ocd/Meteor.ocd/Script.c @@ -82,19 +82,6 @@ public func FxIntMeteorControlSaveScen(obj, fx, props) return true; } -/** - Launches a meteor. - The meteor can spawn objects via spawn_id. -*/ -global func LaunchMeteor(int x, int y, int size, int xdir, int ydir, id spawn_id, int spawn_amount) -{ - var meteor_skin = Meteor; - if (spawn_id) meteor_skin = spawn_id->~GetMeteorSkin() ?? meteor_skin; - - var meteor = CreateObject(meteor_skin); - return meteor->Launch(x, y, size, xdir, ydir, spawn_id, spawn_amount); -} - /*-- Meteor --*/ public func Launch(int x, int y, int size, int xdir, int ydir, id spawn_id, int spawn_amount) diff --git a/planet/objects.ocd/System.ocg/Disasters.c b/planet/objects.ocd/System.ocg/Disasters.c new file mode 100644 index 000000000..8fd0d39dd --- /dev/null +++ b/planet/objects.ocd/System.ocg/Disasters.c @@ -0,0 +1,16 @@ +/** + Contains functions that require definitions from the "disasters" folder. +*/ + +/** + Launches a meteor. + The meteor can spawn objects via spawn_id. +*/ +global func LaunchMeteor(int x, int y, int size, int xdir, int ydir, id spawn_id, int spawn_amount) +{ + var meteor_skin = Meteor; + if (spawn_id) meteor_skin = spawn_id->~GetMeteorSkin() ?? meteor_skin; + + var meteor = CreateObject(meteor_skin); + return meteor->Launch(x, y, size, xdir, ydir, spawn_id, spawn_amount); +} diff --git a/planet/objects.ocd/System.ocg/Info.txt b/planet/objects.ocd/System.ocg/Info.txt new file mode 100644 index 000000000..71afbd26e --- /dev/null +++ b/planet/objects.ocd/System.ocg/Info.txt @@ -0,0 +1,2 @@ +This folder contains general functions that would otherwise go into the global System.ocg but depend on definitions in Objects.ocd. +That way, the game can also be used without errors when Objects.ocd is not loaded. From 15a1a6252120b814078554c2dd6ec0d79dcd593e Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Tue, 1 Sep 2015 19:10:34 -0400 Subject: [PATCH 94/97] Automatically deduce shift state in combo keys with Control/Shift combo. --- src/control/C4PlayerControl.cpp | 15 +++++++++++++++ src/game/C4Game.cpp | 4 +--- src/gui/C4KeyboardInput.cpp | 7 +++++++ src/gui/C4KeyboardInput.h | 2 ++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/control/C4PlayerControl.cpp b/src/control/C4PlayerControl.cpp index 3ac6a960f..9df38e25e 100644 --- a/src/control/C4PlayerControl.cpp +++ b/src/control/C4PlayerControl.cpp @@ -344,6 +344,21 @@ bool C4PlayerControlAssignment::ResolveRefs(C4PlayerControlAssignmentSet *pParen } } KeyCombo = NewCombo; + // adjust Control and Shift into key states for non-sequence combo keys + // e.g. LeftControl,A should become LeftControl,Ctrl+A. + if (KeyCombo.size() > 1 && !fComboIsSequence) + { + int32_t shift = 0; + for (KeyComboVec::iterator i = KeyCombo.begin(); i != KeyCombo.end(); ++i) + { + if (i->Key.Key == K_CONTROL_L || i->Key.Key == K_CONTROL_R) shift |= KEYS_Control; + if (i->Key.Key == K_SHIFT_L || i->Key.Key == K_SHIFT_R) shift |= KEYS_Shift; + shift |= i->Key.dwShift; + } + for (KeyComboVec::iterator i = KeyCombo.begin(); i != KeyCombo.end(); ++i) i->Key.dwShift |= shift; + } + // remove control/shift duplications + for (KeyComboVec::iterator i = KeyCombo.begin(); i != KeyCombo.end(); ++i) i->Key.FixShiftKeys(); // the trigger key is always last of the chain if (KeyCombo.size()) TriggerKey = KeyCombo.back().Key; else TriggerKey = C4KeyCodeEx(); // done diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index f10b0aa23..c68c131b6 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -1862,11 +1862,9 @@ bool C4Game::DoKeyboardInput(C4KeyCode vk_code, C4KeyEventType eEventType, bool PressedKeys[vk_code] = false; } #endif - // reduce stuff like Ctrl+RightCtrl to simply RightCtrl - if (fCtrl && (vk_code == K_CONTROL_L || vk_code == K_CONTROL_R)) fCtrl = false; - if (fShift && (vk_code == K_SHIFT_L || vk_code == K_SHIFT_R)) fShift = false; // compose key C4KeyCodeEx Key(vk_code, C4KeyShiftState(fAlt*KEYS_Alt + fCtrl*KEYS_Control + fShift*KEYS_Shift), fRepeated); + Key.FixShiftKeys(); // compose keyboard scope DWORD InScope = 0; if (fPlrCtrlOnly) diff --git a/src/gui/C4KeyboardInput.cpp b/src/gui/C4KeyboardInput.cpp index 189d8af85..6c6777d48 100644 --- a/src/gui/C4KeyboardInput.cpp +++ b/src/gui/C4KeyboardInput.cpp @@ -213,6 +213,13 @@ const C4KeyCodeMapEntry KeyCodeMap[] = { #include "CocoaKeycodeMap.h" #endif +void C4KeyCodeEx::FixShiftKeys() +{ + // reduce stuff like Ctrl+RightCtrl to simply RightCtrl + if ((dwShift & KEYS_Control) && (Key == K_CONTROL_L || Key == K_CONTROL_R)) dwShift &= ~KEYS_Control; + if ((dwShift & KEYS_Shift) && (Key == K_SHIFT_L || Key == K_SHIFT_R)) dwShift &= ~KEYS_Shift; +} + C4KeyCode C4KeyCodeEx::GetKeyByScanCode(const char *scan_code) { // scan code is in hex format diff --git a/src/gui/C4KeyboardInput.h b/src/gui/C4KeyboardInput.h index 6543927a8..ae7699df4 100644 --- a/src/gui/C4KeyboardInput.h +++ b/src/gui/C4KeyboardInput.h @@ -216,6 +216,8 @@ struct C4KeyCodeEx : Key(Key), dwShift(Shift), fRepeated(fIsRepeated) {} bool IsRepeated() const { return fRepeated; } + + void FixShiftKeys(); // reduce stuff like Ctrl+RightCtrl to simply RightCtrl private: static C4KeyCode GetKeyByScanCode(const char *scan_code); }; From e5814f8841dd055ee1ef6e68cf17d640c427eb15 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Tue, 1 Sep 2015 21:37:16 -0400 Subject: [PATCH 95/97] Silence some spurious compiler warnings about partially initialized structures. --- src/platform/C4CrashHandlerWin32.cpp | 11 +++++------ src/platform/C4WindowWin32.cpp | 4 ++-- src/platform/StdFile.cpp | 6 +++--- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/platform/C4CrashHandlerWin32.cpp b/src/platform/C4CrashHandlerWin32.cpp index 3a68b74af..b2bb535d4 100644 --- a/src/platform/C4CrashHandlerWin32.cpp +++ b/src/platform/C4CrashHandlerWin32.cpp @@ -271,8 +271,7 @@ namespace { if (SymInitialize(process, 0, true)) { LOG_STATIC_TEXT("\nStack trace:\n"); - STACKFRAME64 frame; - memset(&frame, 0, sizeof(STACKFRAME64)); + auto frame = STACKFRAME64(); DWORD image_type; CONTEXT context = *exc->ContextRecord; // Setup frame info @@ -439,8 +438,8 @@ LONG WINAPI GenerateDump(EXCEPTION_POINTERS* pExceptionPointers) if (file != INVALID_HANDLE_VALUE) { - MINIDUMP_USER_STREAM_INFORMATION user_stream_info = {0}; - MINIDUMP_USER_STREAM user_stream = {0}; + auto user_stream_info = MINIDUMP_USER_STREAM_INFORMATION(); + auto user_stream = MINIDUMP_USER_STREAM(); char build_id[] = OC_BUILD_ID; if (OC_BUILD_ID[0] != '\0') { @@ -544,7 +543,7 @@ namespace { return FALSE; // Get thread info - CONTEXT ctx = {0}; + auto ctx = CONTEXT(); #ifndef CONTEXT_ALL #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS) @@ -553,7 +552,7 @@ namespace { BOOL result = GetThreadContext(data->thread, &ctx); // Setup a fake exception to log - EXCEPTION_RECORD erec = {0}; + auto erec = EXCEPTION_RECORD(); erec.ExceptionCode = STATUS_ASSERTION_FAILURE; erec.ExceptionFlags = 0L; erec.ExceptionInformation[0] = (ULONG_PTR)data->expression; diff --git a/src/platform/C4WindowWin32.cpp b/src/platform/C4WindowWin32.cpp index b7a188fe2..042cc9239 100644 --- a/src/platform/C4WindowWin32.cpp +++ b/src/platform/C4WindowWin32.cpp @@ -167,7 +167,7 @@ LRESULT APIENTRY FullScreenWinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l case WM_CHAR: { // UTF-8 has 1 to 4 data bytes, and we need a terminating \0 - char c[5] = {0}; + char c[5] = {0,0,0,0,0}; if(!WideCharToMultiByte(CP_UTF8, 0L, reinterpret_cast(&wParam), 1, c, 4, 0, 0)) return 0; // GUI: forward @@ -574,7 +574,7 @@ C4Window * C4Window::Init(C4Window::WindowKind windowKind, C4AbstractApp * pApp, else if (windowKind == W_Fullscreen) { // Register window class - WNDCLASSEXW WndClass = {0}; + auto WndClass = WNDCLASSEXW(); WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.style = CS_DBLCLKS; WndClass.lpfnWndProc = FullScreenWinProc; diff --git a/src/platform/StdFile.cpp b/src/platform/StdFile.cpp index 460f734a8..38fc22559 100644 --- a/src/platform/StdFile.cpp +++ b/src/platform/StdFile.cpp @@ -458,7 +458,7 @@ bool FileExists(const char *szFilename) size_t FileSize(const char *szFilename) { #if defined(_WIN32) || defined(_WIN64) - WIN32_FILE_ATTRIBUTE_DATA attributes = {0}; + auto attributes = WIN32_FILE_ATTRIBUTE_DATA(); if (GetFileAttributesEx(GetWideChar(szFilename), GetFileExInfoStandard, &attributes) == 0) return 0; #ifdef _WIN64 @@ -488,7 +488,7 @@ size_t FileSize(int fdes) int FileTime(const char *szFilename) { #ifdef _WIN32 - WIN32_FILE_ATTRIBUTE_DATA attributes = {0}; + auto attributes = WIN32_FILE_ATTRIBUTE_DATA(); if (GetFileAttributesEx(GetWideChar(szFilename), GetFileExInfoStandard, &attributes) == 0) return 0; int64_t ft = (static_cast(attributes.ftLastWriteTime.dwHighDateTime) << (sizeof(attributes.ftLastWriteTime.dwLowDateTime) * 8)) | attributes.ftLastWriteTime.dwLowDateTime; @@ -968,7 +968,7 @@ void DirectoryIterator::Read(const char *dirname) std::string search_path(dirname); search_path.push_back(DirectorySeparator); #ifdef WIN32 - WIN32_FIND_DATAW file = {0}; + auto file = WIN32_FIND_DATAW(); HANDLE fh = FindFirstFileW(GetWideChar((search_path + '*').c_str()), &file); if (fh == INVALID_HANDLE_VALUE) { From 7d9f7aee0271050d05eb5bc2ea0c1a53bf6f16fa Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Tue, 1 Sep 2015 22:18:39 -0400 Subject: [PATCH 96/97] Fix some unused variables and integer type conversions. --- src/editor/C4ConsoleWin32.cpp | 1 + src/game/ClonkMain.cpp | 2 +- src/platform/C4CrashHandlerWin32.cpp | 6 +++--- src/platform/C4WindowWin32.cpp | 8 ++++---- src/platform/StdJoystick.cpp | 8 -------- 5 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/editor/C4ConsoleWin32.cpp b/src/editor/C4ConsoleWin32.cpp index 98d9e0bb0..f9cc33829 100644 --- a/src/editor/C4ConsoleWin32.cpp +++ b/src/editor/C4ConsoleWin32.cpp @@ -715,6 +715,7 @@ void C4ConsoleGUI::DisplayInfoText(C4ConsoleGUI::InfoTextType type, StdStrBuf& t break; default: assert(false); + return; } SetDlgItemTextW(hWindow,dialog_item,text.GetWideChar()); UpdateWindow(GetDlgItem(hWindow,dialog_item)); diff --git a/src/game/ClonkMain.cpp b/src/game/ClonkMain.cpp index a0a18c460..01c944a11 100644 --- a/src/game/ClonkMain.cpp +++ b/src/game/ClonkMain.cpp @@ -154,7 +154,7 @@ static void crash_handler(int signo, siginfo_t * si, void *) case SIGTERM: write(logfd, "SIGTERM", sizeof ("SIGTERM") - 1); break; } char hex[sizeof(void *) * 2]; - int i; intptr_t x = reinterpret_cast(si->si_addr); + intptr_t x = reinterpret_cast(si->si_addr); switch (signo) { case SIGILL: case SIGFPE: case SIGSEGV: case SIGBUS: case SIGTRAP: diff --git a/src/platform/C4CrashHandlerWin32.cpp b/src/platform/C4CrashHandlerWin32.cpp index b2bb535d4..bd3be8555 100644 --- a/src/platform/C4CrashHandlerWin32.cpp +++ b/src/platform/C4CrashHandlerWin32.cpp @@ -172,7 +172,7 @@ namespace { LOG_DYNAMIC_TEXT("Additional information for the exception:\n Assertion that failed: " ASSERTION_INFO_FORMAT "\n File: " ASSERTION_INFO_FORMAT "\n Line: %d\n", reinterpret_cast(exc->ExceptionRecord->ExceptionInformation[0]), reinterpret_cast(exc->ExceptionRecord->ExceptionInformation[1]), - exc->ExceptionRecord->ExceptionInformation[2]); + (int) exc->ExceptionRecord->ExceptionInformation[2]); break; } @@ -317,11 +317,11 @@ namespace { } else if (image_base > 0) { - LOG_DYNAMIC_TEXT("+%#lx", static_cast(frame.AddrPC.Offset - image_base)); + LOG_DYNAMIC_TEXT("+%#lx", static_cast(frame.AddrPC.Offset - image_base)); } else { - LOG_DYNAMIC_TEXT("%#lx", static_cast(frame.AddrPC.Offset)); + LOG_DYNAMIC_TEXT("%#lx", static_cast(frame.AddrPC.Offset)); } DWORD disp; line->SizeOfStruct = sizeof(*line); diff --git a/src/platform/C4WindowWin32.cpp b/src/platform/C4WindowWin32.cpp index 042cc9239..47947f8c2 100644 --- a/src/platform/C4WindowWin32.cpp +++ b/src/platform/C4WindowWin32.cpp @@ -708,7 +708,7 @@ bool C4Window::RestorePosition(const char *szWindowName, const char *szSubKey, b void C4Window::SetTitle(const char *szToTitle) { - if (hWindow) SetWindowTextW(hWindow, szToTitle ? GetWideChar(szToTitle) : L""); + if (hWindow) SetWindowTextW(hWindow, (!szToTitle) ? L"" : GetWideChar(szToTitle)); } bool C4Window::GetSize(C4Rect * pRect) @@ -727,7 +727,7 @@ void C4Window::SetSize(unsigned int cx, unsigned int cy) if (hWindow) { // If bordered, add border size - RECT rect = {0, 0, cx, cy}; + RECT rect = { 0, 0, static_cast(cx), static_cast(cy) }; ::AdjustWindowRectEx(&rect, GetWindowLong(hWindow, GWL_STYLE), FALSE, GetWindowLong(hWindow, GWL_EXSTYLE)); cx = rect.right - rect.left; cy = rect.bottom - rect.top; @@ -828,7 +828,7 @@ bool C4AbstractApp::FlushMessages() void C4AbstractApp::SetLastErrorFromOS() { LPWSTR buffer = 0; - DWORD rv = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, + FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, 0, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), reinterpret_cast(&buffer), 0, 0); sLastError.Take(StdStrBuf(buffer)); LocalFree(buffer); @@ -925,7 +925,7 @@ bool C4AbstractApp::SetVideoMode(unsigned int iXRes, unsigned int iYRes, unsigne SetLastErrorFromOS(); return false; } - int orientation = dmode.dmDisplayOrientation; + unsigned long orientation = dmode.dmDisplayOrientation; if (iXRes == -1 && iYRes == -1) { dspMode=dmode; diff --git a/src/platform/StdJoystick.cpp b/src/platform/StdJoystick.cpp index 4061dcea8..21f88b714 100644 --- a/src/platform/StdJoystick.cpp +++ b/src/platform/StdJoystick.cpp @@ -20,14 +20,6 @@ #include "C4Include.h" #include -static uint32_t dwStdGamepadAxis1 = 0; -static uint32_t dwStdGamepadAxis2 = 1; - -static uint32_t dwStdGamepadMaxX = 0; -static uint32_t dwStdGamepadMinX = 0; -static uint32_t dwStdGamepadMaxY = 0; -static uint32_t dwStdGamepadMinY = 0; - #include #include From 43165e24cd349e3d2faf33d907bc4174241616f9 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Tue, 1 Sep 2015 22:51:32 -0400 Subject: [PATCH 97/97] Change C4AbstractApp:SetVideoMode spatial resolution parameters to signed int. The magic value -1 is used to denote "current screen mode", but it has trouble fitting into the unsigned concept. An alternative would be to use 0 as the magic value, but that would include quite a few places (including existing configuration settings) to change. --- src/platform/C4App.h | 2 +- src/platform/C4AppGTK.cpp | 2 +- src/platform/C4AppMac.mm | 2 +- src/platform/C4AppSDL.cpp | 2 +- src/platform/C4WindowWin32.cpp | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/platform/C4App.h b/src/platform/C4App.h index 1d6978918..9c1fe92bf 100644 --- a/src/platform/C4App.h +++ b/src/platform/C4App.h @@ -92,7 +92,7 @@ public: virtual void Quit(); bool GetIndexedDisplayMode(int32_t iIndex, int32_t *piXRes, int32_t *piYRes, int32_t *piBitDepth, int32_t *piRefreshRate, uint32_t iMonitor); - bool SetVideoMode(unsigned int iXRes, unsigned int iYRes, unsigned int iColorDepth, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen); + bool SetVideoMode(int iXRes, int iYRes, unsigned int iColorDepth, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen); void RestoreVideoMode(); virtual bool DoScheduleProcs(int iTimeout); diff --git a/src/platform/C4AppGTK.cpp b/src/platform/C4AppGTK.cpp index 93ce3578c..564637f5f 100644 --- a/src/platform/C4AppGTK.cpp +++ b/src/platform/C4AppGTK.cpp @@ -132,7 +132,7 @@ bool C4AbstractApp::FlushMessages() return true; } -bool C4AbstractApp::SetVideoMode(unsigned int iXRes, unsigned int iYRes, unsigned int iColorDepth, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen) +bool C4AbstractApp::SetVideoMode(int iXRes, int iYRes, unsigned int iColorDepth, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen) { Display * const dpy = gdk_x11_display_get_xdisplay(gdk_display_get_default()); if (!fFullScreen) diff --git a/src/platform/C4AppMac.mm b/src/platform/C4AppMac.mm index 272822ffc..759d52301 100644 --- a/src/platform/C4AppMac.mm +++ b/src/platform/C4AppMac.mm @@ -156,7 +156,7 @@ StdStrBuf C4AbstractApp::GetGameDataPath() return StdCopyStrBuf([[[NSBundle mainBundle] resourcePath] fileSystemRepresentation]); } -bool C4AbstractApp::SetVideoMode(unsigned int iXRes, unsigned int iYRes, unsigned int iColorDepth, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen) +bool C4AbstractApp::SetVideoMode(int iXRes, int iYRes, unsigned int iColorDepth, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen) { fFullScreen &= !lionAndBeyond(); // Always false for Lion since then Lion's true(tm) Fullscreen is used C4WindowController* controller = pWindow->objectiveCObject(); diff --git a/src/platform/C4AppSDL.cpp b/src/platform/C4AppSDL.cpp index 3dedbf4a7..74276e243 100644 --- a/src/platform/C4AppSDL.cpp +++ b/src/platform/C4AppSDL.cpp @@ -249,7 +249,7 @@ bool C4AbstractApp::GetIndexedDisplayMode(int32_t iIndex, int32_t *piXRes, int32 return true; } -bool C4AbstractApp::SetVideoMode(unsigned int iXRes, unsigned int iYRes, unsigned int iColorDepth, unsigned int RefreshRate, unsigned int iMonitor, bool fFullScreen) +bool C4AbstractApp::SetVideoMode(int iXRes, int iYRes, unsigned int iColorDepth, unsigned int RefreshRate, unsigned int iMonitor, bool fFullScreen) { //RECT r; //pWindow->GetSize(&r); diff --git a/src/platform/C4WindowWin32.cpp b/src/platform/C4WindowWin32.cpp index 47947f8c2..97114fcda 100644 --- a/src/platform/C4WindowWin32.cpp +++ b/src/platform/C4WindowWin32.cpp @@ -873,7 +873,7 @@ void C4AbstractApp::RestoreVideoMode() { } -bool C4AbstractApp::SetVideoMode(unsigned int iXRes, unsigned int iYRes, unsigned int iColorDepth, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen) +bool C4AbstractApp::SetVideoMode(int iXRes, int iYRes, unsigned int iColorDepth, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen) { #ifndef USE_CONSOLE SetWindowLong(pWindow->hWindow, GWL_EXSTYLE, @@ -935,7 +935,7 @@ bool C4AbstractApp::SetVideoMode(unsigned int iXRes, unsigned int iYRes, unsigne int i=0; if (!fFound) while (EnumDisplaySettingsW(Mon.GetWideChar(), i++, &dmode)) // compare enumerated mode with requested settings - if (dmode.dmPelsWidth==iXRes && dmode.dmPelsHeight==iYRes && dmode.dmBitsPerPel==iColorDepth && dmode.dmDisplayOrientation==orientation + if (static_cast(dmode.dmPelsWidth) == iXRes && static_cast(dmode.dmPelsHeight) == iYRes && dmode.dmBitsPerPel == iColorDepth && dmode.dmDisplayOrientation == orientation && (iRefreshRate == 0 || dmode.dmDisplayFrequency == iRefreshRate)) { fFound=true;

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 VIg@gw73WOOcDm=(?AWn={6Fn3*fjtE literal 308725 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ø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≤zp1TG6w)_D_1+ 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�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%0D3|70P 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 diff --git a/planet/Objects.ocd/Structures.ocd/Loom.ocd/Loom.material b/planet/Objects.ocd/Structures.ocd/Loom.ocd/Loom.material new file mode 100644 index 000000000..98b91c5c8 --- /dev/null +++ b/planet/Objects.ocd/Structures.ocd/Loom.ocd/Loom.material @@ -0,0 +1,24 @@ +material Loom +{ + receive_shadows on + technique + { + pass + { + cull_hardware none + scene_blend alpha_blend + + ambient 1.0 1.0 1.0 1.0 + diffuse 1.0 1.0 1.0 1.0 + specular 0.0 0.0 0.0 0.0 12.5 + emissive 0.0 0.0 0.0 0.0 + + texture_unit + { + texture Loom.png + tex_address_mode wrap + filtering trilinear + } + } + } +} diff --git a/planet/Objects.ocd/Structures.ocd/Loom.ocd/Loom.skeleton b/planet/Objects.ocd/Structures.ocd/Loom.ocd/Loom.skeleton new file mode 100644 index 0000000000000000000000000000000000000000..9b16a31f46596630da738d359098ce6f0480e260 GIT binary patch literal 23254 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 Date: Fri, 28 Aug 2015 16:17:56 +0200 Subject: [PATCH 72/97] Loom: renamed animation "my_animation" to "Working" --- .../Structures.ocd/Loom.ocd/Loom.skeleton | Bin 23254 -> 23249 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/planet/Objects.ocd/Structures.ocd/Loom.ocd/Loom.skeleton b/planet/Objects.ocd/Structures.ocd/Loom.ocd/Loom.skeleton index 9b16a31f46596630da738d359098ce6f0480e260..888b4e135267285fca3aa80b71fac7db9dc7de0c 100644 GIT binary patch delta 22 ecmcb%mGR Date: Fri, 28 Aug 2015 16:20:16 +0200 Subject: [PATCH 73/97] Added to organic hit sounds by ala. --- planet/Sound.ocg/OrganicHit1.ogg | Bin 0 -> 11126 bytes planet/Sound.ocg/OrganicHit2.ogg | Bin 0 -> 12003 bytes planet/Sound.ocg/authors.txt | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 planet/Sound.ocg/OrganicHit1.ogg create mode 100644 planet/Sound.ocg/OrganicHit2.ogg diff --git a/planet/Sound.ocg/OrganicHit1.ogg b/planet/Sound.ocg/OrganicHit1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3124b92ac97c28f5d83cac5aaf0c840e273a5549 GIT binary patch literal 11126 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