text:
// ****************************************************************************
// NOTICE
//
// This work was produced for the U.S. Government under Contract 693KA8-22-C-00001
// and is subject to Federal Aviation Administration Acquisition Management System
// Clause 3.5-13, Rights In Data-General, Alt. III and Alt. IV (Oct. 1996).
//
// The contents of this document reflect the views of the author and The MITRE
// Corporation and do not necessarily reflect the views of the Federal Aviation
// Administration (FAA) or the Department of Transportation (DOT). Neither the FAA
// nor the DOT makes any warranty or guarantee, expressed or implied, concerning
// the content or accuracy of these views.
//
// For further information, please contact The MITRE Corporation, Contracts Management
// Office, 7515 Colshire Drive, McLean, VA 22102-7539, (703) 983-6000.
//
// 2022 The MITRE Corporation. All Rights Reserved.
// ****************************************************************************

#include "public/AircraftCalculations.h"
#include <stdexcept>
#include <public/CoreUtils.h>
#include <public/AircraftCalculations.h>
#include <public/PositionCalculator.h>

using namespace std;
using namespace aaesim::open_source;

log4cplus::Logger AircraftCalculations::logger = log4cplus::Logger::getInstance("AircraftCalculations");

bool AircraftCalculations::LegacyGetPositionFromPathLength(const Units::Length &distance_to_go,
                                                           const std::vector<HorizontalPath> &horizontal_trajectory,
                                                           Units::Length &x_position,
                                                           Units::Length &y_position,
                                                           Units::UnsignedAngle &course,
                                                           int &traj_index) {

   PositionCalculator position_calculator(horizontal_trajectory, TrajectoryIndexProgressionDirection::UNDEFINED);
   bool is_valid = position_calculator.CalculatePositionFromAlongPathDistance(distance_to_go,
                                                                              x_position,
                                                                              y_position,
                                                                              course);

   traj_index = static_cast<int>(position_calculator.GetCurrentTrajectoryIndex());
   if (distance_to_go < Units::zero()) {
      traj_index = 0;
   }

   return is_valid;
}

void AircraftCalculations::LegacyGetPathLengthFromPosition(const Units::Length x,
                                                           const Units::Length y,
                                                           const vector<HorizontalPath> &horizontal_trajectory,
                                                           Units::Length &distance_along_path,
                                                           Units::Angle &course) {
   vector<HorizontalPath>::size_type ignored_trajectory_index;
   const std::vector<HorizontalPath>::size_type default_start_index = 0;
   CalculateDistanceAlongPathFromPosition(x, y, horizontal_trajectory, default_start_index, distance_along_path, course, ignored_trajectory_index);
}

vector<AircraftCalculations::PathDistance> AircraftCalculations::ComputePathDistances(
      const Units::Length x,
      const Units::Length y,
      const std::vector<HorizontalPath>::size_type &starting_index,
      const vector<HorizontalPath> &hTraj) {

   // returns distances and cross track errors for all points in a vector
   //         ordered ascending by distance.

   vector<PathDistance> path_distances;

   for (auto i = starting_index; i < hTraj.size(); i++) {

      PathDistance pd;

      Units::MetersLength d = sqrt(Units::sqr(x - Units::MetersLength(hTraj[i].GetXPositionMeters()))
                                   + Units::sqr(y - Units::MetersLength(hTraj[i].GetYPositionMeters())));
      pd.m_distance_to_path_node = d;
      pd.m_horizontal_path_index = i;

      if (std::isnan(d.value())) {
         string msg = "undefined distance (NaN) computed for path distance";
         LOG4CPLUS_FATAL(logger, msg);
      }

      if (path_distances.empty()) {
         path_distances.push_back(pd);
      } else {

         auto path_distance_iter = path_distances.begin();

         while (path_distance_iter < path_distances.end()) {
            if ((*path_distance_iter).m_distance_to_path_node > pd.m_distance_to_path_node) {
               break;
            }

            path_distance_iter++;
         }

         path_distances.insert(path_distance_iter, pd);
      }
   }

   return path_distances;

}

// converts angle into a range from 0 to 2PI (0 to 360 degrees)
Units::UnsignedRadiansAngle AircraftCalculations::Convert0to2Pi(Units::Angle course_in) {
   Units::UnsignedRadiansAngle result = course_in;
   result.normalize();

   return result;
}

// converts angle into a range from -PI to PI (-180 to 180 degrees)
Units::SignedRadiansAngle AircraftCalculations::ConvertPitoPi(Units::Angle course_in) {
   Units::SignedRadiansAngle result = course_in;
   result.normalize();

   return result;
}

Units::NauticalMilesLength AircraftCalculations::PtToPtDist(Units::Length x0,
                                                            Units::Length y0,
                                                            Units::Length x1,
                                                            Units::Length y1) {
   // Computes distance between points.
   //
   // x0:x component of first point in feet.
   // y0:y component of first point in feet.
   // x1:x component of last point in feet.
   // y1:y component of last point in feet.
   //
   // returns distance between (x0,y0) to (x1,y1) in nmi.

   Units::NauticalMilesLength dist = sqrt(Units::sqr(x1 - x0) + Units::sqr(y1 - y0));

   return dist;
}

Units::Speed AircraftCalculations::GsAtACS(AircraftState acs) {
   // method to compute ground speed from the position at an aircraft state.
   //
   // acs:aircraft state containing position to compute for.
   //
   // returns:computed ground speed.

   return Units::FeetPerSecondSpeed(sqrt(pow(acs.m_xd, 2) + pow(acs.m_yd, 2)));
}

void AircraftCalculations::CrossTrackError(const Units::Length x,
                                           const Units::Length y,
                                           int trajIx,
                                           const vector<HorizontalPath> hTraj,
                                           int &nextTrajIx,
                                           Units::Length &cte) {

   //  Calculates the cross track for a segment leading to a horizontal
   //  trajectory point.  The calculation is performed differently for a
   //  turn segment and for a straight segment.
   //
   //  x,y: aircraft position in meters.
   //  trajIx: index of trajectory point.
   //  hTraj: horizontal trajectory for aircraft; positions, turn radius
   //         in meters; m_path_course in radians.  Segment type, m_path_course, and
   //         position are used from here.
   //  nextTrajIx: downstream trajectory point (output).
   //  cte: cross track error in meters (output).
   //
   //  Turn Segment:
   //  Position is tested to see if it is in the space formed by the two
   //  directed line segments that form the turn arc.
   //  First, determine the turn orientation: see if the points center of
   //  turn, start turn, and end turn are clockwise or counter-clockwise.
   //  If the orientation of the points center of turn, start turn, position
   //  do not have the same orientation, then return a large number for cte.
   //  If the orientation of the points center of turn, turn stop, position
   //  does not have the opposite orientation, return a large number for cte.
   //  If the conditions are met, then return the distance from the turn
   //  center minus the radius for cte.  It is possible for two sequential
   //  turn segments to be slightly misaligned so that a position could be
   //  after one segment and before another segment.  In this case, the
   //  position will be considered as on the next segment.
   //
   //  Straight Segment:
   //  Straight segments could have a small turn, and still be considered
   //  straight. A perpendicular to the m_path_course segment through the
   //  position is calculated.  If this perpendicular intersects the
   //  segment, its distance from the segment is returned.  If the position
   //  is after the horizontal trajectory point, a large value for cte is
   //  returned.  If the position is before the beginning of the segment,
   //  the distance from the position to the beginning of the segment
   //  (preceding horizontal trajectory point) is returned for cte and the
   //  horizontal trajectory point is returned for nextTrajIx.
   //
   //  In either case, the preceding segment could be of the other type and
   //  a gap could exist.  Must test if in the gap and not within the
   //  preceding segment.

   // dummy values

   cte = Units::Infinity();
   nextTrajIx = (int) -INFINITY;

   if (trajIx >= hTraj.size() - 1) {
      // No segment going to first point on route (last trajectory point)
      return;
   }

   if (hTraj[trajIx].m_segment_type == HorizontalPath::SegmentType::TURN) {
      // Compute cross track error for turn.

      // Allowed for RF Legs
      //if (trajIx == 0) {
      //  cout << "Illegal condition computing cross track error." << endl;
      //  cout << "First trajectory point cannot be for a turn." << endl;
      //  exit(-39);
      //}

      double x0 = hTraj[trajIx].m_turn_info.x_position_meters; // turn center
      double y0 = hTraj[trajIx].m_turn_info.y_position_meters;
      double x1 = hTraj[trajIx + 1].GetXPositionMeters();          // start turn
      double y1 = hTraj[trajIx + 1].GetYPositionMeters();
      double x2 = hTraj[trajIx].GetXPositionMeters();            // stop turn
      double y2 = hTraj[trajIx].GetYPositionMeters();

      double dx = Units::MetersLength(x).value();
      double dy = Units::MetersLength(y).value();

      // determine orientation of turn.  If crossproduct is zero, then points are colinear
      // sign(P0, P1, p2) i.e., center, start, end.
      double crossProdSign0 = (y0 - y1) * x2 + (x1 - x0) * y2 + (x0 * y1 - x1 * y0);
      if (crossProdSign0 == 0) { // zero length turn
         return;
      }

      // determine orientation of turn center, start turn, position
      double crossProdSign1 = (y0 - y1) * dx + (x1 - x0) * dy + (x0 * y1 - x1 * y0);
      if (((crossProdSign0 > 0) && (crossProdSign1 < 0)) || ((crossProdSign0 < 0)
                                                             && (crossProdSign1 > 0))) {
         // position is before start turn
         // need to test if not in previous segment, i.e. in the V between two segments (see AAES-360)
         if (hTraj[trajIx + 1].m_segment_type == HorizontalPath::SegmentType::TURN) {
            double x3 = hTraj[trajIx + 1].m_turn_info.x_position_meters;
            double y3 = hTraj[trajIx + 1].m_turn_info.y_position_meters;
            double crossProdSign3 = (y3 - y1) * dx + (x1 - x3) * dy + (x3 * y1 - x1 * y3);
            if (((crossProdSign3 > 0) && (crossProdSign1 < 0)) || ((crossProdSign3 < 0)
                                                                   && (crossProdSign1 >
                                                                       0))) { // not in previous section - so calculate error
               nextTrajIx = trajIx;
               cte = abs(Units::MetersLength(sqrt(pow(x0 - dx, 2) + pow(y0 - dy, 2))) -
                         Units::MetersLength(hTraj[trajIx].m_turn_info.radius));
            } // otherwise return not in segment
         } else { // previous segment is straight
            // Use Pythagorean Theorem
            if (trajIx >= hTraj.size() - 2) {
               return;
            }
            double x3 = hTraj[trajIx + 2].GetXPositionMeters();
            double y3 = hTraj[trajIx + 2].GetYPositionMeters();
            if (pow(x3 - dx, 2) + pow(y3 - dy, 2) >
                (pow(x1 - dx, 2) + pow(y1 - dy, 2) + pow(x3 - x1, 2) + pow(y3 - y1, 2))) {
               // not in preceding segment so calculate cte
               cte = abs(Units::MetersLength(sqrt(pow(x1 - dx, 2) + pow(y1 - dy, 2))));
               nextTrajIx = trajIx;
            }
         }
         return; // position is before start turn
      }

      double crossProdSign2 = (y0 - y2) * dx + (x2 - x0) * dy + (x0 * y2 - x2 * y0);
      if (((crossProdSign1 > 0) && (crossProdSign2 > 0)) || ((crossProdSign1 < 0)
                                                             && (crossProdSign2 < 0))) {
         if (trajIx == 0) {
            Units::MetersLength endDistance = abs(Units::MetersLength(sqrt(pow(x2 - dx, 2) + pow(y2 - dy, 2))));
            if (endDistance < Units::MetersLength(500)) {
               cte = endDistance;
               nextTrajIx = trajIx;
            }
         }
         return; // position is after stop turn
      }

      cte = abs(Units::MetersLength(sqrt(pow(x0 - dx, 2) + pow(y0 - dy, 2))) -
                Units::MetersLength(hTraj[trajIx].m_turn_info.radius));
      nextTrajIx = trajIx;
      return;

   } else if (hTraj[trajIx].m_segment_type == HorizontalPath::SegmentType::STRAIGHT) {

      double x0 = hTraj[trajIx + 1].GetXPositionMeters();                // start of segment
      double y0 = hTraj[trajIx + 1].GetYPositionMeters();
      double x1 = hTraj[trajIx].GetXPositionMeters();                  // end of segment
      double y1 = hTraj[trajIx].GetYPositionMeters();
      double dx = Units::MetersLength(x).value();   // position
      double dy = Units::MetersLength(y).value();

      double vx = x1 - x0;
      double vy = y1 - y0;
      double wx = dx - x0;
      double wy = dy - y0;

      // test for zero length leg
      if (fabs(vx) < 0.00001 && fabs(vy) < 0.00001) {
         // is the query point at the same spot?
         if (fabs(wx) < 0.00001 && fabs(wy) < 0.00001) {
            cte = Units::zero();
            nextTrajIx = trajIx;
         }
         return;
      }

      double c1 = vx * wx + vy * wy;
      if (c1 < 0) { // before start of segment
         // See if in preceding segment
         if (trajIx + 2 < hTraj.size()) {
            if (hTraj[trajIx + 1].m_segment_type == HorizontalPath::SegmentType::STRAIGHT) {
               double x2 = hTraj[trajIx + 2].GetXPositionMeters();
               double y2 = hTraj[trajIx + 2].GetYPositionMeters();
               double ux = x2 - x0;
               double uy = y2 - y0;
               double c3 = ux * wx + uy * wy;
               if (c3 >= 0) {
                  // position is in the preceding segment
                  return;
               }
            } else { // previous segment is turn}
               double x3 = hTraj[trajIx].m_turn_info.x_position_meters; // turn center
               double y3 = hTraj[trajIx].m_turn_info.y_position_meters;
               double x2 = hTraj[trajIx + 1].GetXPositionMeters();          // start turn
               double y2 = hTraj[trajIx + 1].GetYPositionMeters();
               double crossProdSign0 = (y3 - y0) * x2 + (x0 - x3) * y2 + (x3 * y0 - x0 * y3);
               if (crossProdSign0 == 0) { // zero length turn
                  return;
               }
               double crossProdSign1 = (y3 - y0) * dx + (x0 - x3) * dy + (x3 * y0 - x0 * y3);
               if (((crossProdSign0 > 0) && (crossProdSign1 > 0)) ||
                   ((crossProdSign0 < 0) && (crossProdSign1 < 0))) {
                  return; // in previous section
               }
            }
         }
         // Not in preeceding segment so include with this segment
         cte = abs(Units::MetersLength(sqrt(pow(x0 - dx, 2) + pow(y0 - dy, 2))));
         nextTrajIx = trajIx;
         return;
      }

      double c2 = vx * vx + vy * vy;
      if (c2 < c1) { // after end of segment
         // check that not at end of route (trajIx == 0)
         if (trajIx > 0) {
            return;
         }
         // Need to include positions after end of route or simulation will
         // not terminate properly
         cte = abs(Units::MetersLength(sqrt(pow(x1 - dx, 2) + pow(y1 - dy, 2))));
         nextTrajIx = trajIx;
         return;
      }

      // position is between the end points of the segment
      double b = c1 / c2;
      double xb = x0 + b * vx;
      double yb = y0 + b * vy;
      cte = abs(Units::MetersLength(sqrt(pow(xb - dx, 2) + pow(yb - dy, 2))));
      nextTrajIx = trajIx;
      return;

   } else {
      // Error
      throw logic_error("Invalid segment_type condition found in crossTrackError");
   }

} // crossTrackError()

Units::SignedRadiansAngle AircraftCalculations::ComputeAngleBetweenVectors(const Units::Length &xvertex,
                                                                           const Units::Length &yvertex,
                                                                           const Units::Length &x1,
                                                                           const Units::Length &y1,
                                                                           const Units::Length &x2,
                                                                           const Units::Length &y2) {
   // vector 1 is from vertex to x1,y1
   Units::MetersLength dx1 = x1 - xvertex;
   Units::MetersLength dy1 = y1 - yvertex;
   double norm1 = sqrt(dx1.value() * dx1.value() + dy1.value() * dy1.value());

   // vector 2 is from turn center to turn end
   Units::MetersLength dx2 = x2 - xvertex;
   Units::MetersLength dy2 = y2 - yvertex;
   double norm2 = sqrt(dx2.value() * dx2.value() + dy2.value() * dy2.value());

   // theta is acos(dot product)
   double dotp = dx1.value() / norm1 * dx2.value() / norm2 + dy1.value() / norm1 * dy2.value() / norm2;
   if (fabs(dotp) > 1) {
      dotp = CoreUtils::SignOfValue(dotp) * 1.0;
   }
   Units::SignedRadiansAngle theta(acos(dotp));  // acos is on [0,pi]
   return theta;
}

Units::Area AircraftCalculations::ComputeCrossProduct(const Units::Length &xvertex,
                                                      const Units::Length &yvertex,
                                                      const Units::Length &x1,
                                                      const Units::Length &y1,
                                                      const Units::Length &x2,
                                                      const Units::Length &y2) {
   return (yvertex - y1) * x2 +
          (x1 - xvertex) * y2 +
          (xvertex * y1 - x1 * yvertex);
}

bool AircraftCalculations::CalculateDistanceAlongPathFromPosition(const Units::Length position_x,
                                                                  const Units::Length position_y,
                                                                  const std::vector<HorizontalPath> &horizontal_trajectory,
                                                                  const std::vector<HorizontalPath>::size_type starting_trajectory_index,
                                                                  Units::Length &distance_along_path,
                                                                  Units::Angle &course,
                                                                  std::vector<HorizontalPath>::size_type &resolved_trajectory_index) {

   static const Units::NauticalMilesLength cte_tolerance(2.5);  // legacy tolerance. do not change.
   return CalculateDistanceAlongPathFromPosition(cte_tolerance,
                                                 position_x,
                                                 position_y,
                                                 horizontal_trajectory,
                                                 starting_trajectory_index,
                                                 distance_along_path,
                                                 course,
                                                 resolved_trajectory_index);

}

bool AircraftCalculations::CalculateDistanceAlongPathFromPosition(const Units::Length cross_track_tolerance,
                                                                  const Units::Length position_x,
                                                                  const Units::Length position_y,
                                                                  const std::vector<HorizontalPath> &horizontal_trajectory,
                                                                  const std::vector<HorizontalPath>::size_type starting_trajectory_index,
                                                                  Units::Length &distance_along_path,
                                                                  Units::Angle &course,
                                                                  std::vector<HorizontalPath>::size_type &resolved_trajectory_index) {
    LOG4CPLUS_TRACE(logger, "Calculating distance from (" <<
            Units::MetersLength(position_x) << "," <<
            Units::MetersLength(position_y) << ") to hpath starting at (" <<
            Units::MetersLength(horizontal_trajectory[starting_trajectory_index].GetXPositionMeters()) << "," <<
            Units::MetersLength(horizontal_trajectory[starting_trajectory_index].GetYPositionMeters()) << "):" <<
            starting_trajectory_index << "/" << horizontal_trajectory.size());

   // Dummy values
   distance_along_path = Units::NegInfinity();
   course = Units::RadiansAngle(99999.99999);

   // Compute Euclidean distances for all horizontal trajectory points
   // and order in ascending sequence.
   vector<PathDistance> distances = AircraftCalculations::ComputePathDistances(
         position_x,
         position_y,
         starting_trajectory_index < 1 ? starting_trajectory_index : starting_trajectory_index - 1,
         horizontal_trajectory);

   // Find smallest distance with an acceptable cross track error.
   int nextTrajIx = -1;
   Units::NauticalMilesLength cte;
   for (auto i = 0; ((i < distances.size()) && (nextTrajIx == -1)); ++i) {

      int computedNextIx;
      AircraftCalculations::CrossTrackError(
            position_x,
            position_y,
            distances[i].m_horizontal_path_index,
            horizontal_trajectory,
            computedNextIx,
            cte);

      if (cte <= cross_track_tolerance) {
         nextTrajIx = computedNextIx;
      }
   }

   resolved_trajectory_index = static_cast<unsigned long>(nextTrajIx);

   if (nextTrajIx == -1) {
      /*
       * Developer's: note that this if logic is no longer a FATAL condition, but we
       * must allow it to throw. Some callers will catch and handle the situation because
       * it is sometimes normal. See AAES-382, AAES-633
       */
      char msg[500];
      sprintf(msg, "Trajectory point with acceptable cross track error not found %lf nmi\nThis can occur for two reasons:\n\t1. Position cannot be projected onto a route segment (before beginning or after end),\n\t2. Position is farther than horizontal tolerance from horizontal trajectory.\nThe second can occur for clearance type of CAPTURE or MAINTAIN (see Issue AAES-1037)", cte.value());
      throw logic_error(msg);
   }

   // Calculate DTG and course of aircraft.
   Units::Length dap;
   Units::RadiansAngle theta;
   if (horizontal_trajectory[nextTrajIx].m_segment_type == HorizontalPath::SegmentType::STRAIGHT) {

      Units::Length d = sqrt(Units::sqr(position_x - Units::MetersLength(horizontal_trajectory[nextTrajIx].GetXPositionMeters())) +
                             Units::sqr(position_y - Units::MetersLength(horizontal_trajectory[nextTrajIx].GetYPositionMeters())));

      course = AircraftCalculations::Convert0to2Pi(
            Units::RadiansAngle(horizontal_trajectory[nextTrajIx].m_path_course) + Units::PI_RADIANS_ANGLE);

      if (fabs(Units::MetersLength(d).value()) < 1E-5) {
         dap = Units::MetersLength(0.0);
      } else {
         Units::MetersLength dx = Units::MetersLength(horizontal_trajectory[nextTrajIx].GetXPositionMeters()) - position_x;
         Units::MetersLength dy = Units::MetersLength(horizontal_trajectory[nextTrajIx].GetYPositionMeters()) - position_y;
         theta = Units::RadiansAngle(atan2(dy.value(), dx.value()));

         Units::SignedAngle deltaTheta = ConvertPitoPi(theta - course);

         dap = d * cos(deltaTheta);
      }

   } else if (horizontal_trajectory[nextTrajIx].m_segment_type == HorizontalPath::SegmentType::TURN) {

      Units::MetersLength dx = position_x - Units::MetersLength(horizontal_trajectory[nextTrajIx].m_turn_info.x_position_meters);
      Units::MetersLength dy = position_y - Units::MetersLength(horizontal_trajectory[nextTrajIx].m_turn_info.y_position_meters);

      // theta is undefined if dx and dy are both zero
      // if within 5 meters of the point, consider at the point
      double lx = (Units::MetersLength(position_x)).value();
      double ly = (Units::MetersLength(position_y)).value();

      if (pow(lx - (horizontal_trajectory[nextTrajIx]).GetXPositionMeters(), 2) + pow(ly - (horizontal_trajectory[nextTrajIx]).GetYPositionMeters(), 2) < 9) {
         distance_along_path = Units::MetersLength(horizontal_trajectory[nextTrajIx].m_path_length_cumulative_meters);
         course = AircraftCalculations::Convert0to2Pi(
               Units::RadiansAngle(horizontal_trajectory[nextTrajIx].m_path_course) + Units::PI_RADIANS_ANGLE);
         return true;
      }

      theta = Units::UnsignedRadiansAngle(atan2(dy.value(), dx.value()));

      Units::RadiansAngle deltaTheta =
            AircraftCalculations::ConvertPitoPi(Units::UnsignedRadiansAngle(horizontal_trajectory[nextTrajIx].m_turn_info.q_start) - theta);

      dap = Units::MetersLength(horizontal_trajectory[nextTrajIx].m_turn_info.radius) * fabs(deltaTheta.value());

      if (CoreUtils::SignOfValue(deltaTheta.value()) > 0) {
         course = theta + Units::PI_RADIANS_ANGLE / 2;
      } else {
         course = theta - Units::PI_RADIANS_ANGLE / 2;
      }

      course = Convert0to2Pi(course);
   } else {
      throw logic_error("Non straight non turn segment_type in CalculateDistanceAlongPathFromPosition");
   }

   distance_along_path = dap + Units::MetersLength(horizontal_trajectory[nextTrajIx].m_path_length_cumulative_meters);
   return true;
}

redpajama_set_name: RedPajamaGithub


Ugh. Slept poorly last night. I woke up a lot to turn over and felt like I wasn't sleeping properly. When the alarm went off at 6am for a networking meeting I felt sluggish to say the least. I woke up with some nasal / sinus congestion which is down to my increased dairy consumption. This is a fact, when I cut dairy out again, this will go. It affects respiratory passages in many people and affects breathing (as you will see later). I had a large lemon and ginger tea before leaving, still thirsty.
Networking meeting includes breakfast. Eating well at these events can be tricky anyway. I had FEB (full English breakfast for the uninitiated!) which was very crispy (fatty) bacon, cheap and nasty sausage, scrambled eggs, 2 grilled tomatoes, button mushrooms that were so uniform in size I feel they were from a tin, but I may be wrong, hash brown, 1 slice wholemeal toast. 2 x small coffee, 1 x small juice, 2 x glasses water.
Drove to a club I work at on a Friday to teach aqua aerobics (on the poolside — think hot, sweaty and shouty) and then 45 minute break before I teach a class called BodyVive which is 'land' aerobics. In the break I had a coffee and Kit Kat. I would have always have done this in 'the old days' and it's my first Kit Kat for some long time. I think I can safely say, they are no longer my chocolate of choice. To think I used to tell my Crispins Pump class I'd do anything for a Kit Kat. Ha! long gone are those days Mr Nestle… So, here we go with the first real feedback on changes I am experiencing. BodyVive is a low impact aerobics class that you can get quite a lot out of if you put the effort in. I like to put the effort in, for my class and for me. This was not to be today. I couldn't breathe freely like I usually do (see above), I was exhausted to the point of offering lower options so I didn't have to work so hard and I was breathing heavily! My sweat stung my eyes. A sign of acidity building up. I started to smell from the exercise more quickly than I would like to be socially acceptable! I am a sweaty person anyway, but not smelly and sweaty. Today I could be both! My belly is so much bigger than 3 days ago, it was uncomfortable to lie on — my participants confirmed the fact too!
Popped into see Vida — and realised how dry I am becoming. The reduced salad and veg content is really affecting my water levels. I am still drinking water, but my lips and constantly dry and cracking , my elbows are starting to crack and I have a mild but nagging headache — I never get headaches. Bowel function is … well…not functioning.
Lunch was at 13.45 (a big gap from 7am breakfast) and just how it used to be. Cheese, piccalilli and lettuce spelt bread sandwich, an extra slice of bread and butter and coconut yoghurt. Coffee. Felt very leaden in my stomach after this. Did a rushed bit of admin, but then Dale and I were going out in the evening so go myself ready for that.
We were going to see the recording of 'Would I Lie To You' at Pinewood Studios and had to be there early to guarantee getting in. So we left home at 4pm and didn't know it would be so late but didn't get in until 23.15. I noticed this afternoon how tired I was after my lunch. This is how I used to be, sluggish and dozy in the afternoon.
The recording was fun, there were drinks and snacks for sale there, but I didn't have anything, so by the time we did get home it had been another huge gap between meals. I was however still feeling a large weight in my stomach that was keeping it distended.
We had a late supper when we got in of cheese and crackers (had to go and buy especially!) I was quite looking forward to this part of the experiment as I do like cheese and so with a tomato, some crisps and two large glasses of red, I was feeling stuffed by the time we went to bed at 1.15. A very long day.


text:
(TX) State considers bringing gold home
Texas has $1B in physical gold Friday, 22 Mar 2013
Governor Perry is showing support for a bill to bring home rare and precious metals the state already owns.
Republican Rep. Giovanni Capriglione of Southlake introduced House Bill 35-05. It would create the Texas Bullion Depository, which would house the physical gold bars the state owns.
The Texas Tribune reports the state has a billion dollars in physical gold, which is owned by the University of Texas Investment Management Company.
The gold is currently stored in the Federal Reserve Bank of New York.
"If we can securely store this gold in Texas and do it at a lower cost to the state than where it is currently stored then we should take a look at that," the Governor said in a statement from his press office to KXAN on Friday. "Number one priority is that it is securely stored." —MORE>>(kxan.com)

redpajama_set_name: RedPajamaCommonCrawl


Recently, I brought a Pioneer PDP 424 MV plasma with DVI input. I was looking for HMDI or DVI capability since the DVD Samsung 931player had an DVI output. Well it did not work. It turns out the DVI input is dedicated to computer output or DVI-PC as opposed to DVI-VIDEO. The salesman did not alert me about the incompatible formats.I read that the plasma could be recalibrated to accept DVI-video. Pioneer said no way. ANYBODY knows anything short of getting a home theatre capable computer to play my DVD movies? Dell and Alienware have DVI output ports on some of their computers. Anything else I should take into account if I get a computer with a DVI port?
HDMI/HDCP (high-bandwidth copy protection) is the first all digital consumer electronics A/V interface that supports several uncompressed standards, enhanced and high definition video formats as well as existing mult-channel audio format. One jack supports both video and audio information. The HDMI/HDCP input can be connected to an EIA/CEA-861 (Profiles compliance covers profiles for transmission of uncompressed digital video including high bandwidth digital content protection) compliant consumer electronic device, such as a set top box or dvd player equipped with and HDMI or DVI output connection.By inputting a High-bandwidth Digital Content Protection HD picture source to the HDMI terminal of this tv, high definition pictures can be displayed in their digital form. The HDMI input terminal is not intended to be used with personal computers.
I appreciate the info on the HMDI/HDCP. My problem is having a DVI-PC, only for computer, input on my Pioneer plasma and the question is 'can it be recalibrated to DVI-VIDEO' in order to use my DVD player..


text:
The Internationalization of European clubs in Brazil
Despite many Brazilian players playing in the major European leagues, the internationalization of Brazilian clubs has become almost a utopia. But the presence of European clubs in Brazil is already a reality. By using platforms such as Facebook, Instagram, Twitter and TikTok, they have taken the first steps in gaining (even more) popularity in the Brazilian market.
How does internationalization happen?
Recently the host of MKTEsportivoCast, Eduardo Esteves, welcomed our CEO, Frédéric Fausser, to his podcast. Brazil is still an untapped market for many European clubs, as he mentions at the beginning of the discussion. Whilst Brazilian clubs face difficulties to achieve and enhance their visibility to other global markets. This is seen to be because of;
International law implications and
An undergoing process of change in their management culture
With international brand names led by PSG forward Neymar, European clubs have a great chance to open the tap on the Brazilian market.
Why European clubs are successful?
"European clubs are companies. They act like companies. Think about winning new customers, markets and are aggressive. Brazilian clubs still have an associative model, a lot of politics and management changes every 2 or 3 years. It is difficult to have a vision and build an international strategy in this context", said Mr. Fausser.
Even outside their home markets, the European clubs have created social media pages with Portuguese content that are already rivalling Brazilians in engagement. Frédéric detailed the figures obtained by PSG and Liverpool;
PSG has 4 million Brazilian fans on Facebook and more than 6 million on YouTube. It is the largest community in the club world, ahead of France. The Brazilian followers of PSG, made them rank as the fifth-largest among clubs in the Brasileirão.
Liverpool recorded 110,000 interactions in September, more than several teams in Brazil's top flight.
We see in the metrics, many Europeans competing with Brazilians. And I talk about Brazilians being engaged by European clubs with content in Portuguese. The potential of the Brazilian market is fantastic!
So why is the competition is so high for the local clubs?
For European Clubs, internationalization does not mean only seeing a financial impact. It includes the augmentation of fan bases and strengthening of their brand in the region. On the flipside, Brazilian clubs see internationalization as a threat. It should be for them an opportunity for collaboration and growth with the help of sponsors. They know that localisation of content is a key element on their strategy.
A great example of this was how European clubs celebrated Peru's Independence day. "Who would not like to see activations of a European club during the carnival of Rio de Janeiro" he added. When European clubs or NBA visit Brazil there always bring with them sports memorabilia to share with the local fans. A local and offline activation that is always underestimated.
In addition, most of the European players who come to the Americas decide to go to MLS rather than Campeonato Brasileiro, which makes Brazil's internationalization tougher. If the opposite was to happen then they would definitely be speaking about monetisation through revenue generation and opportunities for branding.
Frederic highlighted the importance of a digital strategy and how it is the key to successful long-term results. Believing that the content production and marketing activations should be combined.
A huge opportunity for internationalization is with the regulations for sports betting, something that he highlights. Despite that the law was expected to come into force in the 2019 season, due to the pandemic it was postponed. So until it is over we will not fully see the opportunities it will offer. When it does it means that there will be even more opportunities for revenue generation.
Listen to the full episode, in Portuguese, on Spotify
Other Non classé
What's New in Belgium: Looking at Fan-Focused Innovation in the Pro League
Footballing audiences on Twitter show year-on-year growth
Liga MX, T-Mobile Agree Sponsorship Deal in US
Changing the Game: The Growing Importance of Apps in College Sports
Hockey Heads Outside in the Latest Winter Classic


Leeds Rhinos forward Carl Ablett hopes to return to the side in a few weeks after battling back from ankle surgery.
Ablett has been missing since September 1 last year and although he started pre-season with the rest of the squad, was forced to undergo further surgery on the problem.
The second-rower is now back in training and hopes to feature as new-look Leeds start to take shape under coach David Furner.
He told the Yorkshire Post: "Hopefully I'm not far off. Obviously it has been really frustrating. I completed the first part of pre-season, but I just had a little niggle in my ankle that has probably been there for a while.
"We made the decision to have the surgery done, so I had that done at the beginning of January.
"It is frustrating that I've done the first big block of hard work and then it obviously puts you back having the surgery.


This little babe. Do you see all of that hair? I love love love babies with tons of hair. Anyway, this is Margot and she's got the cutest pink complexion and the daintiest little lips. The details of newborns are so adorable. Don't you think?
Hi! Happy 2019! First post of the new year. I'd like to blog at least once a week this year (we'll see how that goes). I thought I'd start with Jackson's in home newborn session. Jackson's hair and Sammie the dog are my absolute favorite things about this session. Scroll all the way down to see Sammie.


text:
HomeTop StoriesUPDATED: Peak nor'easter winds arrive; expected to continue through early Sunday
UPDATED: Peak nor'easter winds arrive; expected to continue through early Sunday
November 16, 2019 Sam Walker
Waves could be seen peaking over the sand piled at a beach access in Kill Devil Hills. [Kari Pugh photo]
The National Weather Service reported peak wind gusts of 60 mph at Oregon Inlet as of 7 p.m. Saturday evening as the powerful coastal storm slowly churning up the Atlantic continued buffeting the Outer Banks.
Forecasters said the winds will remain steady through Sunday morning before beginning to "to come down but just a tad."
High wind, high surf and coastal flooding warnings remain in effect from the nor'easter centered off the Georgia coast as it takes makes a slow trek following the Gulf Stream through Monday.
NCDOT closed N.C. 12 from the Marc Basnight Bridge to Rodanthe at 5 p.m. Saturday due to visibility and public safety issues. Workers spend the day clearing sand from the road, and will return as soon as it's safe to continue, transportation officials said.
High tide on Saturday night is around 10:30 p.m., and then 11 a.m. and 11 p.m. on Sunday.
Along the northern beach towns, wind and waves have increased through the day, but there were no dune breeches or overwash so far.
All ferry routes to and from Ocracoke, and the Currituck Sound route, were shutdown on Saturday due to the winds and waves.
With sustained winds of over 40 mph, and gusts up to 60 mph, expected to last through Sunday, Dominion Energy, Cape Hatteras Electric Co-op and Tideland EMC have crews staged in key locations to address possible power outages.
There is the possibility of soundside flooding from Buxton to Ocracoke, with 2 to 4 foot water rises possible along the southern Pamlico Sound.
Ocracoke residents have said so far that they have seen no soundside flooding yet, and just a few of the normal spots had standing water from moderate-to-heavy rainfall experienced on Friday and early Saturday.
Many of the creeks around Wanchese have almost no water standing in them on Saturday. [Justin Bateman photo]
While the wind has blown out the sound water on the backside of the northern beaches, don't expect it to rush back in as winds will remain out of a northerly direction and slowly subside over the next several days.
N.C. 12 closing from Basnight Bridge to Rodanthe on Hatteras Island
Ocean overwash increasing on Hatteras Island; high tide at 10:30 a.m.


text:
Q: SOAP API - getUpdated()/retrieve() vs query()/queryMore() The Salesforce SOAP API's getUpdated() is designed to return all objects of a given type, inserted or updated within a given timeframe. IDs for updated records will then be returned and the Salesforce docs then recommends the use of retrieve() calls for every returned ID to   get details about the changed records.
An alternative approach would be to use the query()/queryMore() calls. Using these calls I will be able to use significantly fewer API calls, and - I'd say - generally a simpler setup in my client application.
Question is:
Why would I use the getUpdated()/retrieve() calls instead of query()/queryMore with a SOQL in style with:
SELECT Id, Subject, ...
FROM Task
WHERE LastModifiedDate >= 2013-01-27T00:00:00Z AND LastModifiedDate < 2013-01-28T00:00:00Z

I cannot find any performance arguments in the documentation?
Thanks

A: Specifically for the getUpdated() case, you are correct that you can do a query/queryMore alternative by building the correct where clause. However the where clause differs by object type. You should use the SystemModstamp field where available, if it doesn't have that, then use LastModifiedDate and if it doesn't have that, use CreatedDate. This is basically what getUpdated() is doing under the covers.
If you're writing something generic, then the additional describe calls needed to determine the correct where clause, can tip the balance back to getUpdated()/retrieve().
But, it worth understanding that there is no SOQL equivalent for getDeleted(), many types of rows can be hard deleted and so a queryAll with isDeleted=true will not spot these deletes, but getDeleted() will (which keeps a separate delete log). Its important to use getDeleted() to replicate the deletes to your external system.

A: While superfell and Mohith's answers are correct, they miss the nuanced detail of why you'd use getUpdated() versus query().
If you're building a synchronization between Salesforce and some other database and recording a 'high water mark' of the most recent date of a record changed, you could potentially 'miss' a record change if a transaction was under way when you ran your query() since the SystemModstamp of the records in the other transaction may have an earlier date than the ones visible by your query().
This answer covers it with more detail (superfell's answer): At what point in the transaction lifecycle is SystemModstamp set?

A: getUpdated()/retrieve() automatically gives you the updated record and hence no need for the extra query .Also if the platform is giving any standard methods its general practice to follow those as those reduce code.

A: In addition to everything which has been already said: query()/queryMore() enables to search objects within any timeframe, whereas using getUpdated() you can only go 1 month back.

redpajama_set_name: RedPajamaStackExchange


text:
Mark Wahlberg donates 1.3 million face masks to schools around the country
Mark Wahlberg is thanking educators around the U.S. for their perseverance and dedication during the COVID-19 pandemic. And he's doing so by donating more than one million face masks to protect at-risk teachers and their students.Wahlberg's activewear brand Performance Inspired recently teamed up with active lifestyle brand LifeToGo to donate 1.3 million disposable face masks to low-income schools across the United States. "This is a great opportunity to partner with LifeToGo and help our students and educators across the country to stay healthy and safe so they can focus on education," Mark Wahlberg said in a press release.Wahlberg, Performance Inspired and LifeToGo worked with school districts in select cities to identify low-income, at risk schools that could best use face mask donations. To date, more than 1.3 million students and teachers have received the disposable 3-ply masks from Wahlberg and co. Some districts receiving the generous aid include schools in Boise, ID; Chicago, IL; Cincinnati, OH; Grand Rapids, MI; Minneapolis, MN; Portland, OR and San Antonio, TX.To announce the campaign and donation effort, Wahlberg released a video message thanking essential workers and teachers."As you know, this has been a year of change and stress for everybody," Wahlberg says in the video. "But today, I want to thank our essential workers. You guys have kept us healthy, safe and supplied us with all the necessities."Including teachers and educators in this message of thanks, Wahlberg brings attention to an often overlooked "essential" profession."Everyday brings a new challenge, but we continue to pray for you and your families," Wahlberg adds. "And please know your efforts are much appreciated."VIDEO: Stranger answers Baltimore teacher's plea for ChromebooksSocial good efforts are a core part of Wahlberg's Performance Inspired brand. Currently, two percent of net profits of Performance Inspired go directly to charity.
Mark Wahlberg is thanking educators around the U.S. for their perseverance and dedication during the COVID-19 pandemic. And he's doing so by donating more than one million face masks to protect at-risk teachers and their students.
Wahlberg's activewear brand Performance Inspired recently teamed up with active lifestyle brand LifeToGo to donate 1.3 million disposable face masks to low-income schools across the United States.
"This is a great opportunity to partner with LifeToGo and help our students and educators across the country to stay healthy and safe so they can focus on education," Mark Wahlberg said in a press release.
Wahlberg, Performance Inspired and LifeToGo worked with school districts in select cities to identify low-income, at risk schools that could best use face mask donations. To date, more than 1.3 million students and teachers have received the disposable 3-ply masks from Wahlberg and co. Some districts receiving the generous aid include schools in Boise, ID; Chicago, IL; Cincinnati, OH; Grand Rapids, MI; Minneapolis, MN; Portland, OR and San Antonio, TX.
To announce the campaign and donation effort, Wahlberg released a video message thanking essential workers and teachers.
"As you know, this has been a year of change and stress for everybody," Wahlberg says in the video. "But today, I want to thank our essential workers. You guys have kept us healthy, safe and supplied us with all the necessities."
Including teachers and educators in this message of thanks, Wahlberg brings attention to an often overlooked "essential" profession.
"Everyday brings a new challenge, but we continue to pray for you and your families," Wahlberg adds. "And please know your efforts are much appreciated."
VIDEO: Stranger answers Baltimore teacher's plea for Chromebooks
Social good efforts are a core part of Wahlberg's Performance Inspired brand. Currently, two percent of net profits of Performance Inspired go directly to charity.
Previous Mnuchin and Pelosi meeting to negotiate stimulus as Democrats could vote on $2.2 trillion bill
Next President Trump awaits COVID-19 test results after aide Hope Hicks tests positive


GXP1100 is a next generation small business IP phone that features up to 2 calls with 1 SIP account, 4 programmable keys, single network port. The GXP1100 deliver superior HD audio quality, leading edge telephony features, automated provisioning for easy deployment, advanced security protection for privacy and broad interoperability with most 3rd party SIP devices and leading SIP/NGN/MMS platforms. it is a perfect choice for a small business, lobby, and hotel applications for a high quality, basic IP phone with attractive cost.
Este producto fue introducido en nuestro catálogo el Monday 18 November, 2013.


text:
«Водопьянов» — советский речной сторожевой корабль, оборудованный в начале Отечественной войны из мобилизованного парового колёсного буксира.

История службы
Паровой колёсный буксир был построен в Киеве на заводе «Ленинская кузня» под названием «Тухачевский», в честь советского военачальника. Но так как последний был репрессирован, то 13 июня 1937 года судно получило новое название «Водопьянов», в честь советского полярного лётчика.

С началом войны «Водопьянов» мобилизовали 23 июня 1941 года по предвоенному плану и после 6 июля полностью переоборудовали в военный корабль на заводе им. И. В. Сталина в Киеве.

22 июля «Водопьянов» (в военных документах даётся также и номерное название «СК-1») включён в состав Припятского отряда речных кораблей (ОРК) Пинской военной флотилии (ПВФ). Его командиром стал лейтенант запаса Старовойтенко Л. С. В течение всего июля и августа сторожевик действует на реке Припять. 22 августа он прикрывал припятскую переправу отступающей 5-й армии Юго-Западного фронта у сёл Рожава - Новошепеличи.

Вечером 23 августа передовой отряд 111-й пехотной дивизии немцев, усиленный самоходными орудиями StuG III, опрокинул отступающие по приказу, но плохо организованные части 27-го стрелкового корпуса 37-й армии Юго-Западного фронта и захватил плацдарм на левом берегу Днепра у села Окуниново. Таким образом корабли ПВФ, действовавшие севернее, оказались отрезаны от Киева, где в то время находился штаб флотилии.

В ночь на 26 августа 1941 года «Водопьянов» совместно с другими кораблями флотилии участвует в прорыве в Киев из района Чернобыль - Домантово, мимо немецкого окуниновского плацдарма. Но под сильным огнём корабль вынужден был повернуть к Домантово. Утром 26 августа 1941 года сторожевик погиб во время артиллерийского боя с немцами, вышедшими к правому берегу Днепра. 22 сентября исключён из списков кораблей ВМФ по приказу командующего флотом.

См. также
 Пинская военная флотилия
 Канонерская лодка «Белорус»
 Монитор «Витебск»
 Сторожевой корабль «Большевик»
 Сторожевой корабль «Парижская коммуна»
 Сторожевой корабль «Пушкин»
 Сторожевой корабль «Река»
 Сторожевой корабль «Рулевой»

Примечания

Литература
 В. А. Спичаков «Пинская военная флотилия в документах и воспоминаниях» - Львов: Лига-Пресс, 2009 - 384 с. - ISBN 978-966-397-118-2

Корабли СССР периода Второй мировой войны

redpajama_set_name: RedPajamaWikipedia


text:
package com.suscipio_solutions.consecro_mud.Locales;
import java.util.List;

import com.suscipio_solutions.consecro_mud.Common.interfaces.PhyStats;
import com.suscipio_solutions.consecro_mud.Locales.interfaces.Room;
import com.suscipio_solutions.consecro_mud.core.interfaces.Places;

public class CaveMaze extends StdMaze
{
	@Override public String ID(){return "CaveMaze";}
	public CaveMaze()
	{
		super();
		basePhyStats().setDisposition(basePhyStats().disposition()|PhyStats.IS_DARK);
		recoverPhyStats();
		climask=Places.CLIMASK_NORMAL;
	}
	@Override public int domainType(){return Room.DOMAIN_INDOORS_CAVE;}

	@Override public int maxRange(){return 5;}
	@Override public String getGridChildLocaleID(){return "CaveRoom";}
	@Override public List<Integer> resourceChoices(){return CaveRoom.roomResources;}
}


Over earth's history, there have been many different types of animal life. We know this because of fossils that have been found in many parts of the world. Amphibians, reptiles, and mammals have dominated the earth at different times.
Animals Past and Present takes a look at what types of animals were present during different time periods. It also explains how such things as plate tectonics, climate, and other factors affected these animals and the ecosystems they lived in.
A special section focuses on Illinois, and what animals could be found in the state at three different time periods: 65 million years ago, 10,000 years ago, and today.


text:
Giveaway of the Day Forums » Games Discussion
[sticky]
GOG.com Promotions & Free Games - Always DRM Free!
(306 posts) (22 voices)
Started 10 years ago by notblocklox
Latest reply from graylox
graylox
Here comes the last day of GOG's DRM free summer sale:
2014 DRM-Free Summer Sale: Grand Finale!
Your last chance to get any of the 30 special bundles up to 90% off!
Time does fly when you're having fun! A little over two weeks after we've launched our 2014 DRM-FREE SUMMER SALE for you, it's already time for the Grand Finale! If you've had a hard time deciding between the great variety of custom-tailored bundle deals, we've got great news for you! All of them come back today, for one final 24-hour long encore. That's right - all 30 special packs up for grabs simultaneously, with up to 90% off discount. You haven't seen that coming, now have you?! By the time we wrap-up our sale, we hope that gamers all over the world are set-up for the summer with DRM-Free games to enjoy wherever they may go on their vacation. But that's not all: keep an eye out for the second edition of our Flash Video contest. The challenges will be popping out irregularly through the whole finale, across our Twitter and Facebook feeds to give you more chance to prove your gaming knowledge and be awarded with a free game token!
This has been an exciting sale. We know we've had fun and judging from your enthusiastic feedback - so did you. We took notes on your praises, complaints, and suggestion to make the future sales even better. Thank you for being with us and making GOG.com even better, step by step. As for those of you who only now joined the biggest and merriest DRM-Free gaming community in the world: welcome and enjoy your stay. We'll do our very best to make it interesting for everyone!
In 24 hours from now (that is on Monday, June 30, at 12:59PM GMT) the 2014 DRM-FREE SUMMER SALE will be over, but that doesn't mean we don't have more excitement in store for you. Quite soon, you can expect news about GOG Galaxy, our up-and-coming DRM-Free online gaming platform, The Witcher Adventure Game, CD Projekt RED's newest addition to the gaming Witcherverse, and an interesting update on our planned Linux support. Not to mention some fantastic new releases coming your way… Truly, this is an exciting time to be a Gogger. Thank you for choosing to be one!
Text: http://www.gog.com/news/2014_drmfree_summer_sale_grand_finale
Good luck for the flash video contests!
No need to have a Twitter or FB account in order to participate. Just check https://twitter.com/GOGcom and mail your answer to GOG.
Though this is mostly a forum for Windows users, some of you may have been waiting for these GOG news:
GOG.com Now Supports Linux!
50 games for the free OS available right NOW!
A while ago, we've announced our plans to add Linux support as one of the features of our digital platform, with 100 games on the launch day sometime this fall. We've put much time and effort into this project and now we've found ourselves with over 50 titles, classic and new, prepared for distribution, site infrastructure ready, support team trained and standing by, and absolutely no reason to wait until October or November. We're still aiming to have at least 100 Linux games in the coming months, but we've decided not to delay the launch just for the sake of having a nice-looking number to show off to the press. It's not about them, after all, it's about you. So, one of the most popular site feature requests on our community wishlist is granted today: Linux support has officially arrived on GOG.com!
The first 50+ titles we've have in store for you come from all the corners of our DRM-Free catalog. Note that we've got many classic titles coming officially to Linux for the very first time, thanks to the custom builds prepared by our dedicated team of penguin tamers. That's over twenty fan-favorite GOG.com classics, like FlatOut&Flatout 2, , Darklands, or Realms of the Haunting we've personally ushered one by one into the welcoming embrace of Linux gamers. That's already quite a nice chunk of our back-catalog, and you can expect more from our dedicated Linux team soon!
Now, for the recent titles. We've got some indie games with native Linux versions that finally find their well-deserved spot in our store. Among them, debuting on Linux, CLARC - a well received original comedic Sci-Fi puzzler. On top of that, be on the lookout for two new additions to the GOG.com catalog: Gods Will Be Watching (coming in a couple of hours) and Unrest:Special Edition (Linux build coming right up!), both of them very fresh and intriguing. This is the very first time we can provide you with all the PC versions of a premiere game, and we will continue to do so in the future. If there's a Linux version of a title we're releasing, our aim is to deliver it to you Day-1. But enough about us, let's talk about the games. Here's what you can be playing on Linux today:
[[List of games]]
As if this wasn't exciting enough, we've put more than half of these titles on a special promo! Head out to the promo page and find out which of them you can get up to 75% off for the next 3 days. Of course, all of the games from the list above that you already own will be updated with Linux versions with no additional cost for you, just as you might have expected from GOG.com.
"OK, but how will Linux support actually work on GOG.com" - you might ask. For both native Linux versions, as well as special builds prepared by our team, GOG.com will provide distro-independent tar.gz archives and support convenient DEB installers for the two most popular Linux distributions: Ubuntu and Mint, in their current and future LTS editions. Helpful and responsive customer support has always been an important part of the GOG.com gaming experience. We wouldn't have it any other way when it comes to Linux, and starting today our helpdesk offers support for our official Linux releases on Ubuntu and Mint systems.
Diversity and freedom of choice have always been an important part of the GOG.com way. We're very glad that we could improve our service with the addition of the free (and DRM-Free) alternative to the commercial operating systems. Talking with gamers is just as important, so we're counting on your feedback! If you've got any questions, suggestions, or run into any trouble, just tell us in the forum thread below this post. Just please be gentle, this is our very first time with Linux. Happy launch day, everyone!
Text copy/pasta: http://www.gog.com/news/gogcom_now_supports_linux
Please read the original news on the GOG.com website to find all the links and the promos.
Announcement: http://www.gog.com/news/gogcom_now_supports_linux
Special Promo: http://www.gog.com/promo/linux_launch_promo_240714
Happy gaming with the penguin :)
https://www.youtube.com/watch?v=rGEqWzw8A9g
Oh my!, another great GOG promo.
Luckily my wallet isn't bothered with this, as I own already all of the games. :)
Weekend Promo: Telltale and Daedalic Adventures up to 90%
Daedalic Entertainment and Telltale Games titles up to 90% off!
Daedalic Entertainment and Telltale Games have become powerhouses when it comes to adventure games. Thanks to new, more innovative, as well as classic-inspired point-and-click titles, the genre is entering another golden age. With this weeks promo lineup you can all treat yourselves to both old-school gems and innovative new takes on adventuring with one additional treat from slightly different category. What treat, you ask? Of course Daedalic's recent successful venture into RPG territory--Blackguards Special Edition, a complex turn-based game of deep tactical combat, set in the often-visited world of DarkEye, available for only $22.49.
And now, back to adventure games! One look at the Telltale and Daedalic Adventures--and you'll probably agree that there is plenty for both newcomers and veterans. Sam & Max Save the World for only $2.99, Back to the Future: The Game for only $2.49, Tales of Monkey Island for only $3.49, Memoria for only $6.66, Deponia 3: Goodbye Deponia for only $6.66, and more! With 20 games in our weekend offering, the next few days should give your hands a steady exercise in pointing and clicking.
Celebrate the past and present golden age of adventure games and check out our Telltale and Daedalic Adventures promo page, to pick your favorite titles. You have until Tuesday, July 29, at 3:59AM GMT to get them up to 90% off. It's adventuring time!
Text copy+paste: http://www.gog.com/news/weekend_promo_telltale_and_daedalic_adventures
Telltale&Daedalic Weekend Promo 25/07/14
Blackguards Special Edition $22.49
DLC: Blackguards: Untold Legends DLC $2.99
Deponia $2.99
Deponia 2: Chaos on Deponia $6.66
Deponia 3: Goodbye Deponia $6.66
Dark Eye: Chains of Satinav, The $3.99
Memoria $6.66
Tales of Monkey Island $3.49
Sam & Max Save the World $2.99
Sam & Max Beyond Time and Space $2.99
Sam & Max: The Devil's Playhouse $3.49
The Night of the Rabbit $6.66
Back to the Future: The Game $2.49
1954 Alcatraz $9.99
A New Beginning - Final Cut $1.49
Edna & Harvey: The Breakout $4.99
Edna & Harvey: Harvey\'s New Eyes $3.99
Whispered World: Special Edition, The $9.99
Journey of a Roach $4.99
Gomo $2.66
Read the original news with links here:
http://www.gog.com/news/weekend_promo_telltale_and_daedalic_adventures
Get the games here:
http://www.gog.com/promo/telltaledaedalic_weekend_promo_250714
You like to jump from platform to platform? Then this weekend promo is for you (and me) :)
Weekend Promo: Platformers Aplenty!
Get Spelunky, Dust: An Elysian Tail, Psychonauts, plus 20 more pesky platformers up to 75% off! Grab The Witcher 1&2--80% off as well!
The art of jumping around has changed a lot throughout the years. Every now and then a game emerges and adds another twist to the proven and satisfying formula: time-warp, hidden dimensions, roguelike elements, RPG-inspired character development… that's just the tip of the iceberg! This week, we want you to JUMP AROUND (jump up, jump up, and get down) for up to 75% off!
Those of you who don't like to mince words and prefer a more minimalist style of visual storytelling are sure to fall in love with Teslagrad, a steampunkish side-scrolling adventure with electromagnetic mechanics, mesmerizing soundtrack, and complex puzzles. If you're a Nicola Tesla buff pick it up for only $3.99! It's $3.99 as well for Unepic, an RPG-like rogulike that will bring out your inner Munchkin. With a massive amount of loot to collect in the deep deep dungeons and plenty of tongue-in-cheek humor the game is a love letter to pen-and-paper role-playing and nerdom. If on the other hand you're a fan of the old-old-school and hard-as-nails challenges you simply have to bow down to the 16-bit gods of the Arcade'ian Golden Age and pick up Volgarr the Viking for only $3.99. The game is a fantastic tribute to all the demanding arcade titles of the 80s and 90s, with precise controls, retro graphics, and fountains of blood gushing from enemy corpses.
Check out the promo page, to see the entire selection of those pesky platformers! The promo lasts until Tuesday, August 19, at 3:59AM GMT. Everybody JUMP!
If platforming is not really your thing and you'd much rather refrain from jumping while slaying monsters, solving quests, and getting yourself in all sorts of trouble with the ladies, do check out our franchise promo for The Witcher: Enhanced Edition and The Witcher 2: Assassins of Kings. The award-winning RPG titles, featuring the rugged monster hunter Geralt of Rivia--one of the most enthralling characters of modern gaming, are both available 80% off, and are sure to make the wait for The Witcher 3: Wild Hunt a little bit easier on you. Pick up the first two games of the series for only $5.98 until Tuesday, August 19, at 3:59AM GMT!
Text: http://www.gog.com/news/weekend_promo_platformers_aplenty
Read the original announcement with all linked games:
http://www.gog.com/news/weekend_promo_platformers_aplenty
Mutator Promo
Buy 3 games up to 85% off, unlock 3 mystery mutator games for only $2 each.
In our universe governed by the mystifying laws of chaos, mutation lies at the very root of evolution and progress. Without warning one thing becomes another and mixing the same ingredients will lead to a new, surprising outcome every once in a while. Now, in nature these unexpected mutations vary from total success to complete failure. In the world of gaming, however, there can only be one outcome: fun!
Come, join us in exploration of the game genome in our fringe-science Mutator Promo! Nah, that sounds way too serious. Come and play around with test tubes full of games, and see what hot deals GOG.com will produce for you. Get at least 3 out of 30+ great titles to unlock 3 mystery mutator games for $2 each. What are they? Well, this wouldn't be very scientific if we knew that prior to the experiment! Might be a $5 game, might be an $45 game. Can your personal wishlist rig the outcome of the experiment? Who knows! The beauty of our chaotic universe at its finest, now in the Mutator Promo on GOG.com.
This exciting promo offer will last for six days, that is until Sunday, October 12, at 10:59AM GMT. We'll be shaking the test tubes along the way a few times to mix things up along the way and keep things interesting, so make sure to drop by the GOG.com lab every now and then, not to miss the wonder of discovery!
Text copied and pasted: http://www.gog.com/news/mutator_promo
Good luck with the mystery games.
thanks for the update
Giveaway: Aliens vs Predator Classic 2000
Humans, Xenomorphs, Hunters - one of them is the deadliest species in the Universe!
Aliens vs Predator Classic 2000, a suspenseful Sci-Fi first-person shooter with three very different single-player campaigns, one for each species, and a frantic multiplayer mode, is available FREE for 48 hours on GOG.com, as a part of our GOG Galaxy beta tests!
Aliens vs Predator Classic 2000 features the Colonial Marine, Alien and Predator Campaigns and the frenetic single-player Skirmish mode from the original title: Alien Versus Predator Gold Edition, which was released to massive acclaim in 2000. It's been updated for modern systems and includes support for Xbox 360 Controller. The three most ferocious species in the universe in a bloodthirsty battle for the ultimate prize: survival. Take your pick: be a Colonial Marine, a Predator or an Alien. Fight through suspense-filled environments: from starships and space stations to colonial bases and eerie planetscapes. One wrong move turns you from hunter to prey. Deathmatch, Species Deathmatch, Predator Tag, and Cooperative modes avait for you in the multiplayer section!
How to get the game for free? Simply sign up for the next stage of GOG Galaxy beta tests and an e-mail with your activation code will be sent to you within the next few days. You'll be helping us to analyze and improve the performance of the multiplayer component of GOG Galaxy, our DRM-free online gaming platform, by playing this acclaimed dynamic first person shooter! The game will be added to your account and yours to keep forever. Don't wait - you can only sign up until Friday, October 17, at 9:59AM GMT.
Text copied: http://www.gog.com/news/giveaway_aliens_vs_predator_classic_2000
Read the original text and get the links for the beta test on
http://www.gog.com/news/giveaway_aliens_vs_predator_classic_2000
New Publisher: Disney Interactive / Lucasfilm
The day has finally come and the holy grail of classic gaming has arrived on GOG.com. Welcome, Lucasfilm games! You are among friends, here! We're proud to announce our team-up with ©Disney Interactive that allows for the DRM-free release of 20+ classic titles from the cult-classic developer. We know you waited long for this moment, so we want to reunite you with those golden oldies with as little delay as possible. Today, to start with a bang, we are releasing a selection of 6 acclaimed titles from Lucasfilm's most famous gaming franchises, so that the Lucasfilm/Disney catalog on GOG.com is made impressive from day one. Here are the great titles you can get right away:
STAR WARS®: X-WING SPECIAL EDITION - digital distribution debut, on GOG.com!
STAR WARS®: TIE FIGHTER SPECIAL EDITION - digital distribution debut, on GOG.com!
SAM & MAX HIT THE ROAD (Windows + Mac + Linux!) - digital distribution debut, on GOG.com!
THE SECRET OF MONKEY ISLAND™: SPECIAL EDITION
INDIANA JONES® AND THE FATE OF ATLANTIS™ (Windows + Mac + Linux!)
STAR WARS®: KNIGHTS OF THE OLD REPUBLIC
Note that numerous Lucas titles, including 3 from the launch lineup (Star Wars®: X-Wing Special Edition, Star Wars®: TIE Fighter Special Edition, Sam & Max Hit the Road), are available digitally for the first time ever, ready to play with no fuss on modern operating systems. With more fantastic titles headed for our Lucasfilm/Disney catalog, you can expect to see Lucasfilm games popping up frequently on GOG.com in the coming months.
(C) & ™ Lucasfilm Ltd. All rights reserved. Used under authorization. STAR WARS, INDIANA JONES, SAM & MAX, MONKEY ISLAND and all characters, names, and related properties are trademarks of & (C) Lucasfilm Ltd. and/or its affiliates.
Text copy-pasta: http://www.gog.com/news/new_publisher_disney_interactivelucasfilm
Get those good old games on:
http://www.gog.com/news/new_publisher_disney_interactivelucasfilm
Update: GOG.com now also in French!
Bonjour et bienvenue sur GOG.com!
We're happy to announce that the site is now available in the native tongue of Molière, Jean-Jacques Rousseau, Honoré de Balzac, Jules Verne, and René Goscinny! Here, at GOG.com we're always trying to make DRM-free entertainment more accesible to gamers around the world. For your convenience we'll be rolling out support for different language versions of our service, and we're starting with French - right now! On top of main page translation, french-speaking support representative is waiting to help you with your game-related problems and answer your questions.
All this is nice, of course, but we know what is the most important part for you: the games! We've already had about 240 titles playable in French in our DRM-free catalog. With today's launch we're rolling out another 30 French versions of titles such as Heroes of Might and Magic 3 Complete, Prince of Persia: Warrior Within, or Darkstone for a nice 270+ French-speaking games total. You can get some of them with a nice discount in our special promo, aptly named "Vive la France!", that lasts until Tuesday, November 11, at 4:59AM GMT.
But that's not all. As french cuisine dictates, no meal is complete without something small and sweet for dessert! For the next 24 hours (that is until Saturday, November 8, at 7:59AM GMT), we're giving away a dear French-made classic, Little Big Adventure for FREE a game that's seeing its 20th anniversary! Remember to sign-up for your free copy and celebrate the event with us, and play one of the many memorable oldies coming from France.
Have a nice day, everyone!
Text copy+paste: https://www.gog.com/news/update_gogcom_now_also_in_french
Hurry over to GOG.com to grab your free game.
See also: http://www.giveawayoftheday.com/forums/topic/246353#post-353230
http://www.gog.com/
GOG 2014 Big Fall Sale is currently underway. I haven't gotten an email from them yet, but it is up on their website. 700+ games on sale, special bundle sales (currently Mount & Blade Series 75% off and Ultimate D&D Collection 80% off), free gifts (currently the first Mount & Blade game) and timed promotions. Most of their catalog seems to be on sale for about 50% off and the bundles and timed promotions general are at around 75% off. Sale runs until November 25th.
Thanks Campy!
It seems to be a real great sale again with a lot of temptations and a lot of gifts.
Free game: A special gift for everyone
I have no time for more info yet - excitedly watching
ROSETTA - Rendezvous With A Comet!
Txnnok
Did ya'll notice further down on the web page is another promo. Get the The Witcher 2 + The Gamers: Director's Cut FOR FREE. You just have to come back 7 days in a row and click the box each time.
I did although it doesn't look like it needs to be 7 days in a row. I think it just needs to be 7 days. You can get one each day and the sale lasts for 14 days. Personally, I have The Witcher 2 & have watched The Gamers on youtube (not sure what the director's cut adds if anything). BTW GOG has several movies now including a couple of free ones. Most of the movies are also currently on sale; generally 40% to 50% off.
If you don't already own the Witcher 2 it's well worth coming back each day. also for one day only you can get the excellent Mount & Blade for free.
Weekend Promo: Nordic In-N-Out
Nordic In-n-Out: complete your Nordic Games catalog with titles like The Guild series, the Spellforce saga, and Black Mirror 1&2 up to 90% off!
How you like THEM apples?!! We teamed up with our friends at Nordic to bring back their games to GOG.com for one more brief but glorious stint. Their entire catalog will be available for purchase for the next 4 days and it's an offer you can't refuse. You can get all the great titles at individual discounts ranging from 75% to 85%, or you can complete your Nordic catalog with all the missing games at 90% off! Let's take a look at some of the highlights on offer.
The Spellforce series delivers an RTS/RPG mixture depicting a fantasy saga of epic proportions. With a vast realm to explore and conquer, a huge collection of story-driven scenarios, and many memorable character, this series is something that every strategy and RPG fan should try at least once, especially when it's 85% off.
Painkiller: Black Edition is everything you love about old-school first person perspective shooters delivered in a good-looking, demonic package. The protagonist of the game takes on the denizens of hell and delivers a royal whooping to the fallen angel host and their monstrous pets. With incredible weapon design, satisfying fast-paced gameplay, and hordes of foes to shred to pieces, this game will satisfy your need for ultimate badassdom.
And let's not forget about the one-two combo of the acclaimed Gothic series with Gothic 2 Gold Edition and Gothic 3 available 85% off. Prepare yourself for a long and enjoyable visit to the realm of Myrtana full of peril and mystery.
There are many more gems among the 35 titles included in the promo so make sure you head on to the promo page and pick your own Nordic notables. Make haste, the games will only be available for purchase for the next 96 hours! The offer lasts until Tuesday, December 23, at 10:59AM GMT.
Text copied: http://www.gog.com/news/weekend_promo_nordic_innout
Don't miss this great opportunity to gift yourself or your friends some DRM free fun.
Have a good festive time, may it be Hanukkah or
Ramadan, Eid al-Fitr, Saint Nicholas Day, Eid'ul-Adha, Fiesta of Our Lady of Guadalupe, St. Lucia Day, Christmas Day, Three Kings Day/Epiphany, Boxing Day , Kwanzaa, Omisoka, Winter/Summer solstice, Birthday ...
Free release: Akalabeth: World of Doom + Ultima Series -80%
BEWARE FOOLISH MORTAL, YOU TRESPASS IN AKALABETH, WORLD OF DOOM!!
AKALABETH: WORLD OF DOOM, a remarkable piece of gaming history, the grandparent of the computer RPG genre, and a direct predecessor of the landmark Ultima series , is now available for Windows, Mac, and Linux, as a gift to the world of gaming from Lord British and GOG.com!
Today - in this day full of wonders - we celebrate both the exceptional man, and his monumental creation. By a special decree from the court of Lord British, AKALABETH: WORLD OF DOOM shall be henceforth available for FREE to all of the gamer folk, alongside ULTIMA™ 4: QUEST OF THE AVATAR, WORLDS OF ULTIMA: THE SAVAGE EMPIRE, and ULTIMA WORLDS OF ADVENTURE 2: MARTIAN DREAMS (the two spin-offs of the saga). All the remaining title s of the Ultima series are discounted by up to -80% until Friday, December 26, 8.59AM GMT. Rejoice, oh RPG fans! And happy holidays to all!
Wednesday, December 24, Twitch.tv/GOGcom: Ultimate Ultima holiday special! 35 years of gaming history, 12 hours of streaming, one man crazy enough to do it: GeordyJones!
Text excerpt: http://www.gog.com/news/free_release_akalabeth
Though nobody posted about GOG.com for a while, the site is going strong.
Very strong.
There are nearly every day news, new games, new sales or new features, even new disappointments.
A new feature is a German site; the big annoyance is, that there are regional locked games now.
You could call that censorship. Yes it is just that, however not GOG is the big censor, but national laws enforce this action. At the moment Australia (1 game) and Germany (2 games) are hit by it.
GOG is now one of the big players in the games business and can't fly any longer under the radar of national law authorities.
Just now started a much loved and at the same time much hated sale:
Insomnia returns to GOG.com.
More info here : http://www.giveawayoftheday.com/forums/topic/327205
Promo: Bundle Tower
A rising tower of discounts and new stuff daily, today we lay The Foundations.
So we had all these awesome bundles lying around, and we're thinking of what to do with 'em. They all just happen to be square (cubical even, if you squint and use your imagination), and one day our Promo-Master starts stacking them on top of each other thinking little of it. It's a long story. One thing led to another, things escalated quickly, and here we are now:
We're building a tower of bundles. With six days, new stuff every day, and discounts up to 85% off! Our DRM-free stonemasons begin the construction by laying down the very foundations of PC gaming: RPGs and Adventures (a fitting start for a tower of games).
A rock-solid four bundles. Hasbro RPG classics (including Planescape: Torment, Neverwinter Nights, Baldur's Gate, Icewind Dale) and the Divinity Trilogy (Divine Divinity, Beyond Divinity, Divinity 2) are available 80% off.
In the meantime, Lucasfilm Adventures at 70% off (Sam & Max Hit the Road, Secret of Monkey Island, Indiana Jones and The Fate of Atlantis), and a 75% off the entire Broken Sword Saga (in one bundle with Broken Sword 5 for the first time!), are just a point-and-click away. Of course, you can always get each game from the bundle individually at a slightly smaller discount.
Every 24 hours, we'll be unveiling new floors with up to 4 new bundles - some of them will even include completely fresh GOG.com game releases. Beyond that, the tower is a mystery, so it's worth the daily trip to see all news, intrigue, and even a mystery final offer. The Bundle Tower will be growing ever taller and stay open until Sunday, April 19, at 12:59 PM GMT. ...
Copypasta: http://www.gog.com/news/bundle_tower_promo
Now go and get the bundles on http://www.gog.com/
Telltale Games coming to GOG.com
Complete with GOG Galaxy support!
A time of DRM-free Telltale games is upon us. We signed the deal, and we're set to start releasing past and future games from the award-winning adventure game developer! All of the games will premiere with full GOG Galaxy support which includes Achievements, and more of the goodness like one-click installation, auto-updating, game time tracking and more!
The first adventure is available today: GAME OF THRONES: A TELLTALE GAMES SERIES at 40% off during launch, right on schedule for the worldwide premiere of Episode 4: Sons of Winter.
GAME OF THRONES: A TELLTALE GAMES SERIES is your chance to not just watch or read about the pathological madness, but to experience and play it out with your own personal touch. This Telltale Game series tells the story of an all-new House of Forrester located somewhere in the north reaches of Westeros. As the War of Five Kings rages, your family is caught in the maelstrom of warfare, revenge, intrigue and horror, in a struggle not to win… but to survive. GAME OF THRONES: A TELLTALE GAMES SERIES is a brand new side-story that bumps into familiar characters, and weaves across events known from the TV series which echo across the entire known world.
Soon, we'll tell more Telltale tales with The Wolf Among Us, Tales from the Borderlands, and and all seasons of The Walking Dead: A Telltale Games Series. Stay tuned!
Text copy and paste: http://www.gog.com/news/telltale_games_coming_to_gogcom
The new Telltale adventures completely DRM free - what a nice surprise.
Thanks for the update Graylox. Pity that I already have e very Telltale game in my Steam account, I'm starting to regret putting most of my games into one client. I've been having problems with my internet provider recently. The annoying thing about most of the games I have linked to my Steam account, if i'm not connected and I haven't already selected to play offline while I was online, I'm unable to play 95% of the games i have on my Steam account (that's well over 5000). At least I can play my GOG games anywhere anytime without internet connection (once I've downloaded the executable)
The 2015 DRM-Free Summer Sale Starts Today!
Unlock up to three free games, with daily bundles & game discounts up to 90% off, and a torrent of surprises!
It's that time of the year again.
Temperatures are rising, summer break is almost upon us, and whether you're going for a classic staycation or taking your laptop for a trip - we've got what it takes to make your summer vacation more gamey and 100% yours. Today, we're inviting you to a truly exhilarating, DRM-free summer adventure!
We're starting with a splash and diving straight into 100+ titles on promo in twice-daily deals, deep-discount bundles, and with FREE games to unlock! With new deals appearing on the site every 12 hours, we'll have more than 100 offers every day up to 90% off. We also have a few fun surprises in store to keep things fresh and worth the regular trip back to the summer sale!
Every summer adventure needs something special, that's why this year you can earn up to three games for free during the sale! Just do your thing, and the more you spend, the more free stuff you'll get! Regardless of whether you own the game or not, you'll receive a giftable code via email so you can redeem it yourself - or share it with a friend. The rewards -- free for everyone whose total spendings during the Summer Sale exceed a certain amount -- will include:
SimCity 2000 - free for everyone who spends at least $1.
S.T.A.L.K.E.R.: Clear Sky - free for everyone who spends at least $20.
Xenonauts - free for everyone who spends at least $50.
Plenty more summertime joy awaits us all, including a surprise giveaway, exciting game premieres, and more! The 2015 DRM-free Summer Promo is set to last 18 days, from June 3 until June 21 at 11:59 AM GMT (13:59 CET / 4:59 AM PDT / 7:59 AM EDT).
24h #DealOverload - 2015 DRM-free Summer Sale
In which all the things return!
Time really flies when you're having fun!
So fast in fact, that the best deals can really zoom by sometimes. If you missed out on any of our 2015 DRM-free Summer Sale deals so far, we have great news: all 650+ discounted games and 20 bundles are here for a 24-hour long recap until June 10, 11:59 AM GMT!
It's the 2015 DRM-Free Summer Sale #DealOverload
An electrifying, energizing, jolting, shocking, galvanizing cornucopia of value!
We're celebrating the one and only #DealOverload with a 48-hour giveaway: The Kung-Fu themed real time strategy game BATTLE REALMS is free! DRM-free gamers among us can share the summertime joy with your friends and family - the giveaway is open to everyone, with no strings attached and just one click away. All until June 11, 11:59 AM GMT.
But this special day brings not just a mountain of deals, but also two exciting DRM-free Telltale game premieres with GOG Galaxy support for achievements, auto-updating, game-time tracking and more:
The Walking Dead - A Telltale Games Series Seasons 1 and 2, as well as the standalone 400 Days episode, will be available in a bundle up to 75% off!
THE WOLF AMONG US sitting among Telltale's best-told adventures, the comic-book styled and inspired fantasy murder-mystery will also premiere DRM-free with a 75% discount.
Whether you're long time guest or a newcomer, there is still plenty of time to unlock up to three games for free. SimCity 2000, S.T.A.L.K.E.R.: Clear Sky, and Xenonauts await all those who spend $1, $20, and $50 respectively throughout the summer sale.
These are just the first of more surprises coming up during the 2015 DRM-free Summer Promo, which has 12 more days to go until June 21, coming to an end at 11:59 PM GMT (13:59 CET / 4:59 AM PDT / 7:59 AM EDT).
Text copy and paste: http://www.gog.com/news/24h_dealoverload_2015_drmfree_summer_sale
Besides all the fantastic bargains, GOG has amazing releases:
My favourite:
Pre-order: Armikrog
For the rest of the month I'll have to live on water and bread.
Happy #DRMfree gaming :)
Best Deals Return! It's The 2015 DRM-Free Summer Sale 48-hour Finale
Summer Sale 48-hour Finale
The grand GOG.com 2015 DRM-free Summer Sale Finale is finally here! 40+ bundles and 700+ game deals up to 90% off are back to tempt you one final time. They are joined by the DRM-free premiere of Tales from the Borderlands for an absolutely perfect weekend of gaming appreciation and excessive shopping.
All the best deals return!
It's insane, it's hectic, it's absolutely awesome! Starting now, every single deal, discount and markdown returns for one final countdown.
Missed The Walking Dead Series when it was 75% off? It's back, just for you.
Can't get over the fact that you and that discount on Kerbal Space Program are never, ever getting back together? Now you can, fates be damned.
Couldn't pick between Shadowrun: Dragonfall - Director's Cut and Legend of Grimrock 2? It's your last chance, go for both! And toss Jade Empire on top of that pile of gaming goodness, you deserve it.
Unlocked your free games yet?
This is your final chance to unlock up to three games for free - when you spend money to get games, you get even more games.
-- If you have spent at least $1, you have unlocked SimCity 2000;
-- Buy stuff for $20 or more to get S.T.A.L.K.E.R.: Clear Sky;
-- Cross the $50 threshold for Xenonauts, absolutely free.
If you have already crossed these lines, there's no stopping you from getting absolutely everything - may the guardian spirits of gaming have you in their care.
You have time to get in on the shopping frenzy before these offers expire on Sunday, June 21st, at 11:59am GMT (check this WolframAlpha conversion to know when that happens in your time zone).
Original Text with links on:
http://www.gog.com/news/all_deals_return_its_the_2015_drmfree_summer_sale_48hour_finale
Release: Tales from the Borderlands
Welcome to Pandora, kiddos.
TALES FROM THE BORDERLANDS, a Telltale adventure Gearbox game, is available now, DRM-free on GOG.com - and it's just as awesome and gun-filled as you would expect.
"I wish they took all the boring talky parts out of my Borderlands," said no one ever.
"Let's do the opposite of that," said the CEOs of Telltale Games and Borderlands, both of whom are good at making things you like. So break the internet Handsome Jack, TALES FROM THE BORDERLANDS is what you get when the zany world of Pandora gets to be weird in the spotlight!
If you are familiar with Telltale's signature adventure style you know exactly what to expect: beautiful, true to the original, art and a hilariously gripping story to shape with every act, decision or indecision.
Not long after the events of Borderlands 2, you will take control of a Hyperion hopeful and a native con-artist working the streets of Pandora. On their adventures you'll meet familiar faces and non-faces, including the titillating Mad Moxxi, Zer0 (still as a number), and the torturously Handsome Jack.
The intrigue is still unraveling, and the all the random guns are still being generated (it simply wouldn't be Borderlands without all the random guns, would it?), so pick up the entire season today and join us in waiting for the next exciting and DRM-free TALES FROM THE BORDERLANDS episode, available at 50% off for 72 hours, or until June 22nd, 11:59 GMT.
What does the press say?
"This is a story full of Borderlands' trademark humor" -- IGN
"If you like the idea of back-flipping onto a speeding caravan or slicing open a giant dog monster with a katana? This is exactly your speed." -- GamesRadar
http://www.gog.com/news/release_tales_from_the_borderlands
Between all of the different DRMfree offers GOG publishes nearly daily, I choose this to remind you that GOG.com is still going strong.
It's a nice bundle for the fans of older Adventure games (like I am):
Weekly Staff Picks: Party Hard, Adventure Soft
Party Hard, Adventure Soft! 6 classics bundled at 86% off!
1993Adventure
SIMON THE SORCERER 2
SIMON THE SORCERER 3D
FEEBLE FILES, THE
WAXWORKS
Each game for only €0.79/US$0.83 that are only €4.74/US$4.98 for a nice bundle of 6 games.
The promo will last until Thursday, August 13, 9:59 AM GMT.
http://www.gog.com/news/weekly_staff_picks_party_hard_adventure_soft
The weekend promotion is still up:
Weekend Promo: Gamescom Adventure
Up to 90% off Blackwell, Gemini Rue, Deponia, Blackguards 2, The Raven and more!
It's Gamescom week! All eyes are turned towards the big guys and the smaller players for a sneak peek at the next year in gaming. We too are watching with anticipation to see what new gaming adventures, trials, and exciting tribulations await us in the not so distant future. While we watch and listen, these four days are all about some of the awesomest adventures you have to catch up on - it's our sorta-extended Gamescom Adventure with deals up to 90% off!
It's a weekend filled with adventure from some of the best in the biz! Two titans - Deadelic and Wadjet Eye Games - come together each with their own unique flavor of classic point and click adventure. From Wadjet Eye's classically pixelated tales are gems like the famous, supernatural Blackwell series, or the dystopian cyberpunk story of Gemini Rue (will you see the twist coming?). For an even more twisted story of a post-apocalyptic humanity, check out Dead Synchronicity, a game that has at one point been described as "Guybrush meets Mad Max meets 12 Monkeys".
Then, there are the Daedalic adventures - games from a team that has nearly perfected the modern point and click. You can't not try the Deponia trilogy, featuring beautiful cartoony graphics and heaps of brilliant humor, all set on a garbage filled planet known as Deponia - full of gadgets, gizmos, and the weirdest most likeable gang of characters you'll meet. Though it's not quite your standard - there's plenty of pointing, clicking, and adventure to be had in the critically acclaimed Blackguards 2, a completely hexy, turn based, tactical RPG which will either break you or excite you with its plethora of fresh tactical options.
Joining the adventure is also The Raven - Legacy of a Master Thief with a special Linux premiere! This point-and-click adventure from the creators of The Book of Unwritten Tales embodies everything that made crime mystery novels so popular.
Ready for the show - it's our extended Gamescom Adventure - with 25+ tales and trials on sale at up to 90% off. The promo will last until Tuesday, August 11, 3:59 AM GMT.
http://www.gog.com/news/weekend_promo_gamescom_adventure
Weekend Promo: Ubisoft, Ubifine, Ubisavin'
Up to 75% off Heroes of Might & Magic III, Beyond Good & Evil, Settlers, Prince of Persia and more!
Heroes of Might and Magic is turning twenty this month - it's a hefty number for a game, though we're not exactly sure what that would be in human years. The important thing is that the series holds up just fine even today, much like these 40+ Ubisoft, Ubifine classics ripe for the picking. With discounts from 66-75% off, Ubisavin'!
Happy Birthday, Heroes of Might & Magic! You don't play a day over five. Great times we've had together; we still remember how we met back in '96 when you were still young but with so much potential. We'll never forget the way you took over our lives and our souls with Heroes of Might & Magic III either - we'd make you a best-of birthday-mixtape, but it would just end up being HoMM III on repeat. You're turning twenty this month, almost old enough for a crazy night in Vegas - but until then, we brought over some of your Ubifine friends, one of them probably snuck a beer anyway.
This party is about to go Beyond Good & Evil, and we wouldn't Settlers for anything less. The Prince of Persia is bouncing off the walls topless, while Splinter Cell is still being a wallflower. Come on in, this is still a Far Cry 2 from being over...
With over 40 names on the guestlist, check out our Weekend Promo: Ubisoft, Ubifine, Ubisavin' up to 75% off! The discounts will last until Wednesday, August 19, 12:59 PM GMT.
Copypasta:http://www.gog.com/news/weekend_promo_ubisoft_ubifine_ubisavin
http://www.gog.com/promo/ubisoft_weekend_promo_140815
Thanks for the heads up. :)
Indie Piñata comes to GOG.com
Mystery Games for $3 and deals up to 80% off.
The Indie Piñata is a whacky gaming sale brought to you by Crunching Koalas and GOG.com, a weeklong celebration of diverse indie games - organised to help gamers (you) discover great indie titles without breaking the bank. Instead, we'll break the Piñata!
There's so much stuff.
There's stuff alright, with plenty of video game stuffing.
We've got a hefty selection of deals up to 80% off - all indies, all highly recommended - this includes titles like Kerbal Space Program (-33%), NEO Scavenger (-50%), Legend of Grimrock 2 (-75%), and MouseCraft (-80%), so that you can pick and choose what you play (but it's probably best to get them all just in case).
Whack your Piñata!
If you're fond of surprises, for $3 (or your local equivalent), you can grab your own 100% whackable Piñata and find a random indie wonder inside - handpicked by us and Crunching Koalas. The Piñata can include games anywhere from $9.99 to $44.99, so there's a deal (and a satisfying POP) behind every swing - and we'll be ready to congratulate those of you who show off your discounted gains on Twitter with the hashtag #IndiePinata!
The Promo and Piñata include a completely separate batch of games, so there's plenty of variety and surprises - we'll also rotate the Promo and Piñata lineup after three days, just so that things don't get too stale. The Indie Piñata promo will last until 9/18/2015, 9:59AM GMT. Just remember - check yourself, before you whack yourself.
Stream watch:
It's the Indie Piñata at Twitch.tv/GOGcom, as well! We're celebrating with tons of special promo streams. Check out the schedule to know what's going on over the weekend, and follow our channel for 4-6 hours of awesome, daily gaming content!
Text copypasta: https://www.gog.com/news/indie_pinata_comes_to_gogcom
Get the DRMfree Indie Games here: https://www.gog.com/news/indie_pinata_comes_to_gogcom
Here you can see the list of games others found in their Piñatas until now:
http://www.gog.com/forum/general/indie_pinata_tracking_thread/page1
Welcome to the Big Fall Sale
350+ daily deals and bundles up to -90%. Free games to unlock. Fuzzy squirrel on the front page.
Ah yes. Fall. A time of gold and scarlet, overcoats, and increasingly cozy afternoons. A fine time to start stocking up for the winter. A fine time for a gaming sale indeed… So welcome to the Big Fall Sale - 11 days of new daily deals every 12 hours, a new set of bundles every 24 hours and free games to unlock.
The floodgates swing open for launch with the first 24 hours of over 350 deals on classics, new releases, and even bundles - all up to 90% off. The first batch of bundles features: Bethesda titles up to 66% off (including The Elder Scrolls and Fallout classics) and the ultimate Interplay Collection at 90% off.
You can also Build Your Own Bundle full of Daedalic Adventures including Blackguards 2 and more - here, your discount will increase as you select more games - pick 5 or more to get the full 85% off your purchase! (Or get 80% off 4 games, 75% off 3 games, and so on.)
While you're here, grab a few extra games for free by doing your thing and shopping around. The more you spend, the more you'll get back, so when your total spendings exceed $5, $15, and $30, you'll unlock a new game for FREE. They're pretty good ones too:
--System Shock 2 - free for everyone who spends at least $5.
--The Chronicles of Riddick: Assault on Dark Athena - free for everyone who spends at least $15.
--Banished - free for everyone who spends at least $30.
Pet the squirrel, grab your nuts, stock up for winter, and stay cozy out there - the Big Fall Sale is here with 11 days of discounted gaming joy, new deals every day, free games to collect, and plenty of reasons to keep coming back! The sale will last until November 15, 1:59 PM GMT.
You're sure to see tons of discounted games played by our enthusiastic #StreamTeam over at Twitch.tv/GOGcom - be sure to follow us to know when we go live or check out our streaming schedule (via teampup)!
Text copy & paste: https://www.gog.com/news/welcome_to_the_big_fall_sale
https://www.gog.com/


Forté excels in developing senior living websites that are designed to display beautifully on all devices. Our process begins with a strategic approach that defines exactly who the audience is and what your objectives will be. From there, we map all content and begin the design process. Our design team has years of experience designing websites for senior living. That means the unique visual preferences of your audience are always at the forefront. That same experience – almost 20 years exclusively serving senior living – is vital when it comes to developing copy that speaks directly to the concerns and desires of your audience. Our unparalleled expertise in senior living enables us to draw on real-world experience and feedback from users. Forté is equally adept at building intuitive "back end" administrative platforms that enable your staff to make simple changes like calendar updates easily and in-house. Beyond that, our expertise at Search Engine Optimization (SEO) and Search Engine Marketing (SEM) will ensure that your powerful new website is found exactly when and by exactly whom you're targeting.