Skip to content

Commit 1a32576

Browse files
committed
Merge pull request OpenXcom#2 from SupSuper/master
sync
2 parents baeac0d + 2ee614e commit 1a32576

6 files changed

Lines changed: 39 additions & 11 deletions

File tree

bin/data/Ruleset/Xcom1Ruleset.rul

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -988,7 +988,7 @@ facilities:
988988
buildCost: 500000
989989
buildTime: 12
990990
monthlyCost: 10000
991-
radarRange: 1500
991+
radarRange: 1695
992992
radarChance: 10
993993
mapName: XBASE_04
994994
- type: STR_LARGE_RADAR_SYSTEM
@@ -997,7 +997,7 @@ facilities:
997997
buildCost: 800000
998998
buildTime: 25
999999
monthlyCost: 15000
1000-
radarRange: 2250
1000+
radarRange: 2577
10011001
radarChance: 20
10021002
mapName: XBASE_05
10031003
- type: STR_MISSILE_DEFENSES
@@ -1105,7 +1105,7 @@ facilities:
11051105
buildCost: 1400000
11061106
buildTime: 26
11071107
monthlyCost: 30000
1108-
radarRange: 2400
1108+
radarRange: 2759
11091109
radarChance: 100
11101110
mapName: XBASE_15
11111111
- type: STR_HANGAR

src/Geoscape/GeoscapeState.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,7 +1001,7 @@ bool DetectXCOMBase::operator()(const Ufo *ufo) const
10011001
if ((ufo->getMissionType() != "STR_ALIEN_RETALIATION" && !Options::aggressiveRetaliation) || // only UFOs on retaliation missions actively scan for bases
10021002
ufo->getTrajectory().getID() == "__RETALIATION_ASSAULT_RUN" || // UFOs attacking a base don't detect!
10031003
ufo->isCrashed() || // Crashed UFOs don't detect!
1004-
_base.getDistance(ufo) >= 80 * (1 / 60.0) * (M_PI / 180.0)) // UFOs have a detection range of 80 XCOM units.
1004+
_base.getDistance(ufo) >= ufo->getRules()->getSightRange() * (1 / 60.0) * (M_PI / 180.0)) // UFOs have a detection range of 80 XCOM units. - we use a great circle fomrula and nautical miles.
10051005
{
10061006
return false;
10071007
}
@@ -1041,12 +1041,11 @@ void GeoscapeState::time10Minutes()
10411041

10421042
if ((*j)->getDestination() == 0)
10431043
{
1044+
double range = ((*j)->getRules()->getSightRange() * (1 / 60.0) * (M_PI / 180));
10441045
for(std::vector<AlienBase*>::iterator b = _game->getSavedGame()->getAlienBases()->begin(); b != _game->getSavedGame()->getAlienBases()->end(); b++)
10451046
{
1046-
double range = (1696 * (1 / 60.0) * (M_PI / 180));
10471047
if ((*j)->getDistance(*b) <= range)
10481048
{
1049-
// TODO: move the detection range to the ruleset, or use the pre-defined one (which is 600, but detection range should be 500).
10501049
if (RNG::percent(50-((*j)->getDistance(*b) / range) * 50) && !(*b)->isDiscovered())
10511050
{
10521051
(*b)->setDiscovered(true);

src/Ruleset/RuleCraft.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ namespace OpenXcom
3030
RuleCraft::RuleCraft(const std::string &type) :
3131
_type(type), _sprite(-1), _fuelMax(0), _damageMax(0), _speedMax(0), _accel(0),
3232
_weapons(0), _soldiers(0), _vehicles(0), _costBuy(0), _costRent(0), _costSell(0),
33-
_refuelItem(""), _repairRate(1), _refuelRate(1), _radarRange(600), _transferTime(0),
34-
_score(0), _battlescapeTerrainData(0), _spacecraft(false), _listOrder(0), _maxItems(0)
33+
_refuelItem(""), _repairRate(1), _refuelRate(1), _radarRange(672), _sightRange(1696),
34+
_transferTime(0), _score(0), _battlescapeTerrainData(0), _spacecraft(false),
35+
_listOrder(0), _maxItems(0)
3536
{
3637

3738
}
@@ -76,6 +77,7 @@ void RuleCraft::load(const YAML::Node &node, Ruleset *ruleset, int modIndex, int
7677
_repairRate = node["repairRate"].as<int>(_repairRate);
7778
_refuelRate = node["refuelRate"].as<int>(_refuelRate);
7879
_radarRange = node["radarRange"].as<int>(_radarRange);
80+
_sightRange = node["sightRange"].as<int>(_sightRange);
7981
_transferTime = node["transferTime"].as<int>(_transferTime);
8082
_score = node["score"].as<int>(_score);
8183
if (const YAML::Node &terrain = node["battlescapeTerrainData"])
@@ -266,6 +268,16 @@ int RuleCraft::getRadarRange() const
266268
return _radarRange;
267269
}
268270

271+
/**
272+
* Gets the craft's sight range
273+
* for detecting bases.
274+
* @return The range in nautical miles.
275+
*/
276+
int RuleCraft::getSightRange() const
277+
{
278+
return _sightRange;
279+
}
280+
269281
/**
270282
* Gets the amount of time this item
271283
* takes to arrive at a base.

src/Ruleset/RuleCraft.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class RuleCraft
4343
int _sprite;
4444
int _fuelMax, _damageMax, _speedMax, _accel, _weapons, _soldiers, _vehicles, _costBuy, _costRent, _costSell;
4545
std::string _refuelItem;
46-
int _repairRate, _refuelRate, _radarRange, _transferTime, _score;
46+
int _repairRate, _refuelRate, _radarRange, _sightRange, _transferTime, _score;
4747
RuleTerrain *_battlescapeTerrainData;
4848
bool _spacecraft;
4949
int _listOrder, _maxItems;
@@ -89,6 +89,8 @@ class RuleCraft
8989
int getRefuelRate() const;
9090
/// Gets the craft's radar range.
9191
int getRadarRange() const;
92+
/// Gets the craft's sight range.
93+
int getSightRange() const;
9294
/// Gets the craft's transfer time.
9395
int getTransferTime() const;
9496
/// Gets the craft's score.

src/Ruleset/RuleUfo.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ namespace OpenXcom
2727
* type of UFO.
2828
* @param type String defining the type.
2929
*/
30-
RuleUfo::RuleUfo(const std::string &type) : _type(type), _size("STR_VERY_SMALL"), _sprite(-1), _damageMax(0), _speedMax(0), _accel(0), _power(0), _range(0), _score(0), _reload(0), _breakOffTime(0), _battlescapeTerrainData(0), _modSprite("")
30+
RuleUfo::RuleUfo(const std::string &type) :
31+
_type(type), _size("STR_VERY_SMALL"), _sprite(-1), _damageMax(0), _speedMax(0),
32+
_accel(0), _power(0), _range(0), _score(0), _reload(0), _breakOffTime(0), _sightRange(268),
33+
_battlescapeTerrainData(0), _modSprite("")
3134
{
3235
}
3336

@@ -57,6 +60,7 @@ void RuleUfo::load(const YAML::Node &node, Ruleset *ruleset)
5760
_score = node["score"].as<int>(_score);
5861
_reload = node["reload"].as<int>(_reload);
5962
_breakOffTime = node["breakOffTime"].as<int>(_breakOffTime);
63+
_sightRange = node["sightRange"].as<int>(_sightRange);
6064
if (const YAML::Node &terrain = node["battlescapeTerrainData"])
6165
{
6266
RuleTerrain *rule = new RuleTerrain(terrain["name"].as<std::string>());
@@ -221,4 +225,13 @@ std::string RuleUfo::getModSprite() const
221225
return _modSprite;
222226
}
223227

228+
/**
229+
* Gets the UFO's radar range
230+
* for detecting bases.
231+
* @return The range in nautical miles.
232+
*/
233+
int RuleUfo::getSightRange() const
234+
{
235+
return _sightRange;
236+
}
224237
}

src/Ruleset/RuleUfo.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class RuleUfo
3939
private:
4040
std::string _type, _size;
4141
int _sprite;
42-
int _damageMax, _speedMax, _accel, _power, _range, _score, _reload, _breakOffTime;
42+
int _damageMax, _speedMax, _accel, _power, _range, _score, _reload, _breakOffTime, _sightRange;
4343
RuleTerrain *_battlescapeTerrainData;
4444
std::string _modSprite;
4545
public:
@@ -77,6 +77,8 @@ class RuleUfo
7777
int getBreakOffTime() const;
7878
/// Gets the name of the surface that represents this UFO.
7979
std::string getModSprite() const;
80+
/// Gets the UFO's radar range.
81+
int getSightRange() const;
8082
};
8183

8284
}

0 commit comments

Comments
 (0)