//:://///////////////////////////////////////////// //:: satchmogold's VFX Tool library //:: sc_inc_mytmagic //::////////////////////////////////////////////// //* ***************************** INTERFACE ************************************* const int X2_TL_GROUNDTILE_ICE = 426; const int X2_TL_GROUNDTILE_WATER = 401; const int X2_TL_GROUNDTILE_GRASS = 402; const int X2_TL_GROUNDTILE_LAVA_FOUNTAIN = 349; // ugly const int X2_TL_GROUNDTILE_LAVA = 350; const int X2_TL_GROUNDTILE_CAVEFLOOR = 406; const int X2_TL_GROUNDTILE_SEWER_WATER = 461; //These functions have the same parameters as the original tile magic functions. //The only difference is that the row and column parameters specify the one tile to be effected, //instead of a range of the area to effect. // change the type of the ground or (by default) sub ground tiles (i.e. water) to the specified type // Valid values are // const int X2_TL_GROUNDTILE_ICE = 426; // const int X2_TL_GROUNDTILE_WATER = 401; // const int X2_TL_GROUNDTILE_GRASS = 402; // const int X2_TL_GROUNDTILE_LAVA_FOUNTAIN = 349; // ugly // const int X2_TL_GROUNDTILE_LAVA = 350; // const int X2_TL_GROUNDTILE_CAVEFLOOR = 406; // const int X2_TL_GROUNDTILE_SEWER_WATER = 461; //(object oArea, int nColumn, int nRow); void JWChangeSpecificAreaGroundTile(object oArea, int nGroundTileConst, int nColumn, int nRow, float fZOffset = -0.4f ); // Valid values are // const int X2_TL_GROUNDTILE_ICE = 426; // const int X2_TL_GROUNDTILE_WATER = 401; // const int X2_TL_GROUNDTILE_GRASS = 402; // const int X2_TL_GROUNDTILE_LAVA_FOUNTAIN = 349; // ugly // const int X2_TL_GROUNDTILE_LAVA = 350; // const int X2_TL_GROUNDTILE_CAVEFLOOR = 406; // const int X2_TL_GROUNDTILE_SEWER_WATER = 461; //(object oArea, int nColumn, int nRow); // lLocation is the place to do it, fDelay is how long it lasts, fZOffset shouldn't need changing void JWChangeoneAreaGroundTileOnly(location lLocation, int nGroundTileConst, float fDelay = 12.0, float fZOffset = -0.4f ); void JWResetSpecificAreaGroundTile(object oArea, int nColumn, int nRow); //* ***************************** IMPLEMENTATION ************************************* void JWResetSpecificAreaGroundTile(object oArea, int nColumn, int nRow) { object oTile = GetFirstObjectInArea(oArea); float x = 5.0 + ( 10.0 * nRow ); float y = 5.0 + ( 10.0 * nColumn ); vector vPos; while (GetIsObjectValid(oTile)) { if (GetObjectType(oTile) == OBJECT_TYPE_PLACEABLE && GetTag(oTile) == "x2_tmp_tile") { vPos = GetPosition( oTile ); if ( vPos.x == x && vPos.y == y ) { SetPlotFlag(oTile,FALSE); DestroyObject (oTile); } } oTile = GetNextObjectInArea(oArea); } } void JWChangeSpecificAreaGroundTile(object oArea, int nGroundTileConst, int nColumn, int nRow, float fZOffset = -0.4f ) { object oTile; vector vPos; vPos.x = 5.0 + ( 10.0 * nRow ); vPos.y = 5.0 + ( 10.0 * nColumn ); vPos.z = fZOffset; float fFace = 0.0; location lLoc = Location(oArea, vPos, fFace); oTile = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_invisobj", lLoc,FALSE, "x2_tmp_tile"); SetPlotFlag(oTile,TRUE); ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(nGroundTileConst), oTile); } void JWChangeoneAreaGroundTileOnly(location lLocation, int nGroundTileConst, float fDelay = 12.0, float fZOffset = -0.4f ) { vector vVector=GetPositionFromLocation(lLocation); vVector.z=vVector.z-fZOffset; lLocation=Location(GetArea(OBJECT_SELF),vVector,180.0); object oTile = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_invisobj", lLocation,FALSE, "x2_tmp_tile"); ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(nGroundTileConst), oTile); DelayCommand(fDelay,(DestroyObject(oTile))); }