Compare commits

...

75 Commits

Author SHA1 Message Date
SoScared
52934818e9 RevealOnDeath with Aircraft 2017-09-02 20:19:18 +02:00
abcdefg30
8ddfcd705b Don't spawn aircraft husks when not airborne 2017-09-02 20:12:48 +02:00
abcdefg30
578313c3a5 Adjust IsAtGroundLevel fixing EjectOnDeath 2017-09-02 20:08:18 +02:00
reaperrr
01fdd67ef0 Polish RA Jeep and APC muzzle offsets
And Jeep turret offset.
2017-09-02 14:30:37 +02:00
Matthias Mailänder
ac9b641240 Bring back the MiGs to the desert shellmap. 2017-09-02 14:15:59 +02:00
rob-v
18604cf905 Change default Observer shroud option for Explored map 2017-09-02 14:03:03 +02:00
Paul Chote
dc2fca9df8 Clear editor search fields and yield focus on escape. 2017-09-02 13:00:02 +02:00
reaperrr
e8d95a1d57 Fixed no explosions showing on some RA civ structures
The combination of HitShape, but not Targetable makes the actors be considered invalid for effect warheads.
Lack of Targetable makes them invulnerable anyway, so removing HitShape and Health (and Explodes) is the most logical fix.
2017-09-02 09:27:49 +01:00
Matthias Mailänder
d6aab1bd7a Remove a bogus ore map in a water segment. 2017-09-02 09:13:41 +01:00
Paul Chote
a293e162b2 Suppress scroll events from the DropDownWidget fullscreen mask. 2017-08-31 12:43:53 +02:00
Matthias Mailänder
60752b115f Fix indentions of trait documentation table of contents. 2017-08-30 17:17:36 +02:00
SoScared
b4f02440d9 patch tent cost increase 2017-08-28 21:07:13 +02:00
reaperrr
bd951d8fb0 Fix FindActorsOnLine overscan 2017-08-26 23:48:01 +01:00
Paul Chote
f520b375e4 Add mod-specific appdata metadata. 2017-08-26 23:47:33 +01:00
Paul Chote
cadf6956a9 Use curl instead of wget in fetch-thirdparty-deps. 2017-08-26 13:54:42 +02:00
SoScared
db317eb226 Additional tweak of the Artillery weapon 2017-08-25 15:32:11 +02:00
Matthias Mailänder
b36ca98a83 Fix Dune 2000 harvester husk offset.
Closes #10087.
2017-08-24 11:36:58 +02:00
C. Helmig
1b5261e58a d2k: sonic weapon fix.
Works around buggy friend-foe discrimination (/Falloff) for sonic weapon. Damage values closer to original game. (Fixes #13850)
2017-08-23 13:04:43 +02:00
reaperrr
5654736086 Properly account for disabled Armaments in various places
These places didn't care if an Armament was disabled, which could lead to unexpected behavior.
2017-08-22 20:57:56 +01:00
reaperrr
3038f15f00 Consider disabled armaments invalid 2017-08-22 20:57:48 +01:00
SoScared
187dd5a071 fix ore spots on Dual Cold Front 2017-08-22 19:40:24 +02:00
reaperrr
740f04801b Allow skipping make anim for actors with WithMakeAnimation and GrantConditionOnDeploy 2017-08-17 22:04:47 +01:00
reaperrr
619d433e8b Allow skipping 'sell'/reversed make anim on Sell 2017-08-17 22:04:43 +01:00
reaperrr
4ca87c1e05 Allow skipping 'sell'/undeploy anim for actors that TransformOnCapture 2017-08-17 22:04:35 +01:00
Paul Chote
0b97003d83 Add x64process stat. 2017-08-17 19:48:21 +02:00
Paul Chote
6ba02da2eb Force '.' decimal point for windowscale stat. 2017-08-17 19:48:07 +02:00
SoScared
4496cffa4a probe new civilian structures 2017-08-17 15:26:58 +02:00
AoAGeneral
c3f1f617e0 TD Bridges.
Currently in both playtest and release the bridges for TD used to be 500hp with no armor. Meaning that minigunners and other unit types were able to kill them off fairly quickly. Giving them extra HP and an armor type means units such as minigunners, humvees, flamethrowers, and APCs can't kill bridges off quickly.
2017-08-13 20:21:50 +02:00
rob-v
dbab122594 Keep Attack M./Guard action while holding hotkey (revert Playtest change) 2017-08-13 17:46:41 +01:00
Allan Greis Eriksen
521236398d Audio device names is now shown correcly in the Audio Device combolist.
Ignored DA version of resource dll.
2017-08-13 18:38:29 +02:00
Oliver Brakmann
4b7f8c6c82 Fix Mobile not sanitizing target location of Move orders 2017-08-13 17:25:19 +01:00
Paul Chote
2e60e41764 Change beaconlib reference to match other deps. 2017-08-13 18:16:52 +02:00
Paul Chote
e8f552bf68 Update BeaconLib to 1.0.1. 2017-08-13 18:16:52 +02:00
abcdefg30
8743f13caa Fix monster tanks not attacking radar domes 2017-08-13 18:01:36 +02:00
abcdefg30
963a8e6ea9 Add the win and loss videos to Monster Tank Madness 2017-08-13 18:01:36 +02:00
Paul Chote
c8f1ce0d42 Update macOS launcher to 20170812 tag. 2017-08-13 17:53:58 +02:00
Paul Chote
13e0e927fe Switch to .NET 4.5 compatible Marshal.SizeOf overload. 2017-08-13 17:40:50 +02:00
Paul Chote
d3c130e8ae Fix d2k commandbar artwork glitch. 2017-08-13 14:10:10 +02:00
Paul Chote
8ff1762eac Revert TicksBeforePathing move from Mobile to Move.
This partially reverts commit 11c8cda0c3.
2017-08-13 13:41:13 +02:00
abc013
ef418403c5 Changed SAM launch offset 2017-08-13 12:55:03 +02:00
abcdefg30
74da4065fc Remove TargetWhenIdle and TargetWhenDamaged from AutoTarget 2017-08-10 19:18:57 +02:00
abcdefg30
b3e4fc807e Add TRUCK.Husk to Tiberian Dawn 2017-08-10 18:25:16 +02:00
SoScared
893ee6eb2c final RA balance patch for the next playtest/release 2017-08-10 18:17:48 +02:00
abcdefg30
a5df442499 Don't spawn new actors before all RemovedFromWorld callbacks have run 2017-08-10 18:03:47 +02:00
Paul Chote
a87df0f81e Focus the ViewportController on Standard/Inverted scroll modes. 2017-08-10 12:49:30 +02:00
Paul Chote
75130c47ff Extract ViewportEdgeScrollMargin settings entry. 2017-08-10 12:44:52 +02:00
Paul Chote
fd73556685 Revert "Have some activities count as idle activities"
This reverts commit ae111248f3.
2017-08-10 12:25:15 +02:00
rob-v
958cfcd378 Disable click sound on command bar buttons 2017-08-09 21:52:04 +01:00
rob-v
08be5d3907 Add ButtonWidget.DisableKeySound property 2017-08-09 21:51:58 +01:00
reaperrr
4adee762d9 Fix SpawnActorPower not playing launch sounds 2017-08-09 21:28:26 +01:00
abcdefg30
bf0b139398 Move the interior tile 384 from the Floor to the Wall category 2017-08-09 20:55:56 +02:00
SoScared
65fedd1eb1 Add Gap effect values to new vision range changes and ironing out misc. values 2017-08-09 20:37:06 +02:00
rob-v
117b229cb6 Fix Client tooltip crash in Lobby 2017-08-09 19:17:33 +01:00
abc013
76f52abd3d Fix ground units can stay on water (tile 409) 2017-08-08 12:33:19 +02:00
AoAGeneral
a7212d52fb TD Prerequisite changes.
Adds prerequisite labels to E1, E3, E6, and TDTRUCK.

Closes #13780
2017-08-08 12:22:19 +02:00
reaperrr
5e0a789dac Shrink shape of TD SAM 2017-08-07 14:52:29 +02:00
reaperrr
17b4158a56 Shrink shape of RA SAM
To adress balancing concerns.
Also tweaked sprite offsets to make it more centered.
2017-08-07 14:52:25 +02:00
reaperrr
09d9cf7da6 Rename tdtruk to truck 2017-08-07 11:00:48 +02:00
reaperrr
63ee481f01 Rename TD TowerMissle to TowerMissile 2017-08-07 11:00:46 +02:00
reaperrr
818fc9d173 Fix RA effect waheads
- take Trees into consideration (they don't have Ground TargetType)
- fixed the delayed effect warheads on Vulcan
2017-08-07 11:00:44 +02:00
Oliver Brakmann
fed3b5f565 Fix harv docking activities getting lost under certain circumstances 2017-08-07 10:45:57 +02:00
AoAGeneral
1d2dc1c232 TD Balance Changes. (20170802)
Engineer movement speed reduced to 48 from 56.

Helicopter crash damage increased to 100 from 40.

Rocket infantry spread damage reduced to 32 from 128.

------

Engineer movement was the same speed as minigunners and at times would enable them to escape the minigunners. This slight speed reduction helps for this.

Helicopter crash damage was lacking and a slight increase in this enables them to do some damage. With the cost of the helicopter it is still not a good idea to sacrifice aircraft just for exta damage.

Rocket infantry spread is reduced because of the damage done to infantry packs. Games turned into tanks mixed with rocket infantry. Reducing this spread enables them to single target units more closely then in larger armies.
2017-08-07 09:38:16 +02:00
Matthias Mailänder
722ea75cab Add weapon rules documentation. 2017-08-05 21:03:52 +02:00
Matthias Mailänder
e81b9e9467 Cache shouldn't be exposed at all so drop it. 2017-08-05 21:03:52 +02:00
Matthias Mailänder
509dc09aa6 Explain the color notation. 2017-08-05 21:03:52 +02:00
Matthias Mailänder
d71c377e93 Give Dictionaries a friendlier notation. 2017-08-05 21:03:52 +02:00
Matthias Mailänder
c6baf16fa7 Move friendly type names into shared helper class. 2017-08-05 21:03:52 +02:00
Lars Beckers
0529a16298 Fix RA Aftermath installer metadata on Linux 2017-08-02 20:11:23 +02:00
FrameLimiter
53adc2bec7 Fix duplicate Targetable value on ^Ammobox 2017-08-02 19:45:41 +02:00
Taryn Hill
e97617d618 Improve the exception message when a Bridge's DemolishWeapon cannot be found 2017-07-29 22:30:47 +02:00
Paul Chote
4d47dd6ad7 Add Demo Truck and MAD Tank to Deploy description. 2017-07-23 20:10:57 +02:00
Paul Chote
7ad95ed0b0 Implement IIssueDeployOrder on MADTank. 2017-07-23 20:10:57 +02:00
GSonderling
1d6732f24f Removed references to make docs 2017-07-23 15:26:45 +02:00
SoScared
85931d5f0b Revert 4 cell adjacency of Kennel/Silo back to 2. 2017-07-22 22:48:51 +01:00
abcdefg30
6f68b4fb3e Disable bots on Poland Raid (again) 2017-07-22 22:34:10 +01:00
98 changed files with 1544 additions and 302 deletions

3
.gitignore vendored
View File

@@ -62,6 +62,7 @@ OpenRA.Launcher.Mac/OpenRA.xcodeproj/*.mode1v3
# auto-generated documentation
DOCUMENTATION.md
WEAPONS.md
Lua-API.md
*.html
openra.6
@@ -80,3 +81,5 @@ StyleCopViolations.xml
# Support directory
/Support
/da/Microsoft.Build.Utilities.v3.5.resources.dll
/da

View File

@@ -14,9 +14,6 @@
# to check the official mod dlls for StyleCop violations, run:
# make check
#
# to generate documentation aimed at modders, run:
# make docs
#
# to install, run:
# make [prefix=/foo] [bindir=/bar/bin] install
#
@@ -414,7 +411,13 @@ install-linux-mime:
install-linux-appdata:
@$(INSTALL_DIR) "$(DESTDIR)$(datadir)/appdata/"
@$(INSTALL_DATA) packaging/linux/openra.appdata.xml "$(DESTDIR)$(datadir)/appdata/"
@sed 's/{MOD}/ra/g' packaging/linux/openra.appdata.xml.in | sed 's/{MOD_NAME}/Red Alert/g' | sed 's/{SCREENSHOT_RA}/ type="default"/g' | sed 's/{SCREENSHOT_CNC}//g' | sed 's/{SCREENSHOT_D2K}//g'> packaging/linux/openra-ra.appdata.xml
@$(INSTALL_DATA) packaging/linux/openra-ra.appdata.xml "$(DESTDIR)$(datadir)/appdata/"
@sed 's/{MOD}/cnc/g' packaging/linux/openra.appdata.xml.in | sed 's/{MOD_NAME}/Tiberian Dawn/g' | sed 's/{SCREENSHOT_RA}//g' | sed 's/{SCREENSHOT_CNC}/ type="default"/g' | sed 's/{SCREENSHOT_D2K}//g'> packaging/linux/openra-cnc.appdata.xml
@$(INSTALL_DATA) packaging/linux/openra-cnc.appdata.xml "$(DESTDIR)$(datadir)/appdata/"
@sed 's/{MOD}/d2k/g' packaging/linux/openra.appdata.xml.in | sed 's/{MOD_NAME}/Dune 2000/g' | sed 's/{SCREENSHOT_RA}//g' | sed 's/{SCREENSHOT_CNC}//g' | sed 's/{SCREENSHOT_D2K}/ type="default"/g'> packaging/linux/openra-d2k.appdata.xml
@$(INSTALL_DATA) packaging/linux/openra-d2k.appdata.xml "$(DESTDIR)$(datadir)/appdata/"
@-$(RM) packaging/linux/openra-ra.appdata.xml packaging/linux/openra-cnc.appdata.xml packaging/linux/openra-d2k.appdata.xml
install-man-page: man-page
@$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man6/"
@@ -495,9 +498,6 @@ help:
@echo 'to check the official mods for erroneous yaml files, run:'
@echo ' make test'
@echo
@echo 'to generate documentation aimed at modders, run:'
@echo ' make docs'
@echo
@echo 'to install, run:'
@echo ' make [prefix=/foo] [bindir=/bar/bin] install'
@echo

View File

@@ -152,7 +152,6 @@ namespace OpenRA.Activities
set { NextActivity = value; }
}
public bool IsIdle { get; protected set; }
public bool IsInterruptible { get; protected set; }
public bool IsCanceled { get { return State == ActivityState.Canceled; } }

View File

@@ -53,7 +53,7 @@ namespace OpenRA
public IOccupySpace OccupiesSpace { get; private set; }
public ITargetable[] Targetables { get; private set; }
public bool IsIdle { get { return CurrentActivity == null || CurrentActivity.IsIdle; } }
public bool IsIdle { get { return CurrentActivity == null; } }
public bool IsDead { get { return Disposed || (health != null && health.IsDead); } }
public CPos Location { get { return OccupiesSpace.TopLeft; } }

View File

@@ -157,6 +157,8 @@ namespace OpenRA
public string Platform = "Default";
public bool ViewportEdgeScroll = true;
public int ViewportEdgeScrollMargin = 5;
public bool LockMouseWindow = false;
public MouseScrollType MiddleMouseScroll = MouseScrollType.Standard;
public MouseScrollType RightMouseScroll = MouseScrollType.Disabled;

View File

@@ -61,7 +61,7 @@ namespace OpenRA.Mods.Cnc.Traits
}
}
class MadTank : IIssueOrder, IResolveOrder, IOrderVoice, ITick, IPreventsTeleport
class MadTank : IIssueOrder, IResolveOrder, IOrderVoice, ITick, IPreventsTeleport, IIssueDeployOrder
{
readonly Actor self;
readonly MadTankInfo info;
@@ -116,6 +116,11 @@ namespace OpenRA.Mods.Cnc.Traits
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
}
Order IIssueDeployOrder.IssueDeployOrder(Actor self)
{
return new Order("Detonate", self, false);
}
public string VoicePhraseForOrder(Actor self, Order order)
{
return info.Voice;

View File

@@ -52,7 +52,7 @@ namespace OpenRA.Mods.Common.Activities
return NextActivity;
// TODO: This should fire each weapon at its maximum range
if (attackPlane != null && target.IsInRange(self.CenterPosition, attackPlane.Armaments.Select(a => a.Weapon.MinRange).Min()))
if (attackPlane != null && target.IsInRange(self.CenterPosition, attackPlane.Armaments.Where(Exts.IsTraitEnabled).Select(a => a.Weapon.MinRange).Min()))
ChildActivity = ActivityUtils.SequenceActivities(new FlyTimed(ticksUntilTurn, self), new Fly(self, target), new FlyTimed(ticksUntilTurn, self));
else
ChildActivity = ActivityUtils.SequenceActivities(new Fly(self, target), new FlyTimed(ticksUntilTurn, self));

View File

@@ -21,7 +21,6 @@ namespace OpenRA.Mods.Common.Activities
public FlyCircle(Actor self)
{
IsIdle = true;
plane = self.Trait<Aircraft>();
cruiseAltitude = plane.Info.CruiseAltitude;
}

View File

@@ -22,7 +22,6 @@ namespace OpenRA.Mods.Common.Activities
public HeliFlyCircle(Actor self)
{
helicopter = self.Trait<Aircraft>();
IsIdle = true;
}
public override Activity Tick(Actor self)

View File

@@ -23,8 +23,6 @@ namespace OpenRA.Mods.Common.Activities
{
public class Move : Activity
{
const int AverageTicksBeforePathing = 5;
const int SpreadTicksBeforePathing = 5;
static readonly List<CPos> NoPath = new List<CPos>();
readonly Mobile mobile;
@@ -41,7 +39,6 @@ namespace OpenRA.Mods.Common.Activities
int waitTicksRemaining;
// To work around queued activity issues while minimizing changes to legacy behaviour
int ticksBeforePathing;
bool evaluateNearestMovableCell;
// Scriptable move order
@@ -140,9 +137,6 @@ namespace OpenRA.Mods.Common.Activities
protected override void OnFirstRun(Actor self)
{
ticksBeforePathing = AverageTicksBeforePathing +
self.World.SharedRandom.Next(-SpreadTicksBeforePathing, SpreadTicksBeforePathing);
if (evaluateNearestMovableCell && destination.HasValue)
{
var movableDestination = mobile.NearestMoveableCell(destination.Value);
@@ -165,9 +159,9 @@ namespace OpenRA.Mods.Common.Activities
if (path == null)
{
if (ticksBeforePathing > 0)
if (mobile.TicksBeforePathing > 0)
{
--ticksBeforePathing;
--mobile.TicksBeforePathing;
return this;
}
@@ -264,9 +258,9 @@ namespace OpenRA.Mods.Common.Activities
if (--waitTicksRemaining >= 0)
return null;
if (ticksBeforePathing > 0)
if (mobile.TicksBeforePathing > 0)
{
--ticksBeforePathing;
--mobile.TicksBeforePathing;
return null;
}

View File

@@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.Activities
nt.BeforeTransform(self);
var makeAnimation = self.TraitOrDefault<WithMakeAnimation>();
if (makeAnimation != null)
if (!SkipMakeAnims && makeAnimation != null)
{
// Once the make animation starts the activity must not be stopped anymore.
IsInterruptible = false;

View File

@@ -21,9 +21,6 @@ namespace OpenRA.Mods.Common
{
public static bool IsAtGroundLevel(this Actor self)
{
if (self.IsDead)
return false;
if (self.OccupiesSpace == null)
return false;

View File

@@ -41,9 +41,9 @@
<HintPath>..\thirdparty\download\FuzzyLogicLibrary.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="rix0rrr.BeaconLib, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<Reference Include="rix0rrr.BeaconLib">
<HintPath>..\thirdparty\download\rix0rrr.BeaconLib.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
@@ -549,6 +549,7 @@
<Compile Include="UtilityCommands\ExtractSettingsDocsCommand.cs" />
<Compile Include="UtilityCommands\ExtractZeroBraneStudioLuaAPI.cs" />
<Compile Include="UtilityCommands\ExtractTraitDocsCommand.cs" />
<Compile Include="UtilityCommands\ExtractWeaponDocsCommand.cs" />
<Compile Include="Widgets\Logic\Ingame\MusicControllerLogic.cs" />
<Compile Include="Widgets\UnitCommandWidget.cs" />
<Compile Include="WorldExtensions.cs" />

View File

@@ -210,7 +210,7 @@ namespace OpenRA.Mods.Common.Traits
foreach (var armament in Armaments)
{
var checkIsValid = checkForCenterTargetingWeapons ? armament.Weapon.TargetActorCenter : !armament.OutOfAmmo;
if (checkIsValid && armament.Weapon.IsValidAgainst(t, self.World, self))
if (checkIsValid && !armament.IsTraitDisabled && armament.Weapon.IsValidAgainst(t, self.World, self))
return true;
}

View File

@@ -151,6 +151,9 @@ namespace OpenRA.Mods.Common.Traits
foreach (var a in Armaments)
{
if (a.IsTraitDisabled)
continue;
var port = SelectFirePort(self, targetYaw);
if (port == null)
return;

View File

@@ -60,10 +60,6 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Ticks to wait until next AutoTarget: attempt.")]
public readonly int MaximumScanTimeInterval = 8;
public readonly bool TargetWhenIdle = true;
public readonly bool TargetWhenDamaged = true;
public override object Create(ActorInitializer init) { return new AutoTarget(init, this); }
public override void RulesetLoaded(Ruleset rules, ActorInfo info)
@@ -157,17 +153,18 @@ namespace OpenRA.Mods.Common.Traits
public void Damaged(Actor self, AttackInfo e)
{
if (IsTraitDisabled)
if (IsTraitDisabled || !self.IsIdle || Stance < UnitStance.ReturnFire)
return;
if (!self.IsIdle || !Info.TargetWhenDamaged)
// Don't retaliate against healers
if (e.Damage.Value < 0)
return;
var attacker = e.Attacker;
if (attacker.Disposed || Stance < UnitStance.ReturnFire)
if (attacker.Disposed)
return;
if (!attacker.IsInWorld && !attacker.Disposed)
if (!attacker.IsInWorld)
{
// If the aggressor is in a transport, then attack the transport instead
var passenger = attacker.TraitOrDefault<Passenger>();
@@ -175,19 +172,15 @@ namespace OpenRA.Mods.Common.Traits
attacker = passenger.Transport;
}
// not a lot we can do about things we can't hurt... although maybe we should automatically run away?
// Not a lot we can do about things we can't hurt... although maybe we should automatically run away?
var attackerAsTarget = Target.FromActor(attacker);
if (!activeAttackBases.Any(a => a.HasAnyValidWeapons(attackerAsTarget)))
return;
// don't retaliate against own units force-firing on us. It's usually not what the player wanted.
// Don't retaliate against own units force-firing on us. It's usually not what the player wanted.
if (attacker.AppearsFriendlyTo(self))
return;
// don't retaliate against healers
if (e.Damage.Value < 0)
return;
Aggressor = attacker;
bool allowMove;
@@ -197,10 +190,7 @@ namespace OpenRA.Mods.Common.Traits
public void TickIdle(Actor self)
{
if (IsTraitDisabled)
return;
if (Stance < UnitStance.Defend || !Info.TargetWhenIdle)
if (IsTraitDisabled || Stance < UnitStance.Defend)
return;
bool allowMove;

View File

@@ -47,7 +47,18 @@ namespace OpenRA.Mods.Common.Traits
public object Create(ActorInitializer init) { return new Bridge(init.Self, this); }
public void RulesetLoaded(Ruleset rules, ActorInfo ai) { DemolishWeaponInfo = rules.Weapons[DemolishWeapon.ToLowerInvariant()]; }
public void RulesetLoaded(Ruleset rules, ActorInfo ai)
{
if (string.IsNullOrEmpty(DemolishWeapon))
throw new YamlException("A value for DemolishWeapon of a Bridge trait is missing.");
WeaponInfo weapon;
var weaponToLower = DemolishWeapon.ToLowerInvariant();
if (!rules.Weapons.TryGetValue(weaponToLower, out weapon))
throw new YamlException("Weapons Ruleset does not contain an entry '{0}'".F(weaponToLower));
DemolishWeaponInfo = weapon;
}
public IEnumerable<Pair<ushort, int>> Templates
{

View File

@@ -139,12 +139,12 @@ namespace OpenRA.Mods.Common.Traits
{
if (!preventDock)
{
harv.QueueActivity(new CallFunc(() => dockedHarv = harv, false));
harv.QueueActivity(DockSequence(harv, self));
harv.QueueActivity(new CallFunc(() => dockedHarv = null, false));
dockOrder.Queue(new CallFunc(() => dockedHarv = harv, false));
dockOrder.Queue(DockSequence(harv, self));
dockOrder.Queue(new CallFunc(() => dockedHarv = null, false));
}
harv.QueueActivity(new CallFunc(() => harv.Trait<Harvester>().ContinueHarvesting(harv)));
dockOrder.Queue(new CallFunc(() => harv.Trait<Harvester>().ContinueHarvesting(harv)));
}
void INotifyOwnerChanged.OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)

View File

@@ -117,6 +117,9 @@ namespace OpenRA.Mods.Common.Traits
foreach (var a in attack.Armaments)
{
if (a.IsTraitDisabled)
continue;
foreach (var b in a.Barrels)
{
var muzzle = self.CenterPosition + a.MuzzleOffset(self, b);

View File

@@ -55,6 +55,9 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Can this actor undeploy?")]
public readonly bool CanUndeploy = true;
[Desc("Skip make/deploy animation?")]
public readonly bool SkipMakeAnimation = false;
public object Create(ActorInitializer init) { return new GrantConditionOnDeploy(init, this); }
}
@@ -223,7 +226,7 @@ namespace OpenRA.Mods.Common.Traits
OnDeployCompleted();
else
foreach (var n in notify)
n.Deploy(self);
n.Deploy(self, Info.SkipMakeAnimation);
}
/// <summary>Play undeploy sound and animation and after that revoke the condition.</summary>
@@ -246,7 +249,7 @@ namespace OpenRA.Mods.Common.Traits
OnUndeployCompleted();
else
foreach (var n in notify)
n.Undeploy(self);
n.Undeploy(self, Info.SkipMakeAnimation);
}
void OnDeployStarted()

View File

@@ -392,6 +392,10 @@ namespace OpenRA.Mods.Common.Traits
public class Mobile : ConditionalTrait<MobileInfo>, INotifyCreated, IIssueOrder, IResolveOrder, IOrderVoice, IPositionable, IMove,
IFacing, IDeathActorInitModifier, INotifyAddedToWorld, INotifyRemovedFromWorld, INotifyBlockingMove, IActorPreviewInitModifier, INotifyBecomingIdle
{
const int AverageTicksBeforePathing = 5;
const int SpreadTicksBeforePathing = 5;
internal int TicksBeforePathing = 0;
readonly Actor self;
readonly Lazy<IEnumerable<int>> speedModifiers;
public bool IsMoving { get; set; }
@@ -629,14 +633,18 @@ namespace OpenRA.Mods.Common.Traits
{
if (order.OrderString == "Move")
{
if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(order.TargetLocation))
var loc = self.World.Map.Clamp(order.TargetLocation);
if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(loc))
return;
if (!order.Queued)
self.CancelActivity();
self.SetTargetLine(Target.FromCell(self.World, order.TargetLocation), Color.Green);
self.QueueActivity(order.Queued, new Move(self, order.TargetLocation, WDist.FromCells(8), null, true));
TicksBeforePathing = AverageTicksBeforePathing + self.World.SharedRandom.Next(-SpreadTicksBeforePathing, SpreadTicksBeforePathing);
self.SetTargetLine(Target.FromCell(self.World, loc), Color.Green);
self.QueueActivity(order.Queued, new Move(self, loc, WDist.FromCells(8), null, true));
}
if (order.OrderString == "Stop")

View File

@@ -116,16 +116,24 @@ namespace OpenRA.Mods.Common.Traits.Render
}
// TODO: Make this use Forward instead
void INotifyDeployTriggered.Deploy(Actor self)
void INotifyDeployTriggered.Deploy(Actor self, bool skipMakeAnim)
{
var notified = false;
var notify = self.TraitsImplementing<INotifyDeployComplete>();
if (skipMakeAnim)
{
foreach (var n in notify)
n.FinishedDeploy(self);
return;
}
foreach (var wsb in wsbs)
{
if (wsb.IsTraitDisabled)
continue;
var notify = self.TraitsImplementing<INotifyDeployComplete>();
wsb.PlayCustomAnimation(self, info.Sequence, () =>
{
if (notified)
@@ -141,16 +149,24 @@ namespace OpenRA.Mods.Common.Traits.Render
}
// TODO: Make this use Reverse instead
void INotifyDeployTriggered.Undeploy(Actor self)
void INotifyDeployTriggered.Undeploy(Actor self, bool skipMakeAnim)
{
var notified = false;
var notify = self.TraitsImplementing<INotifyDeployComplete>();
if (skipMakeAnim)
{
foreach (var n in notify)
n.FinishedUndeploy(self);
return;
}
foreach (var wsb in wsbs)
{
if (wsb.IsTraitDisabled)
continue;
var notify = self.TraitsImplementing<INotifyDeployComplete>();
wsb.PlayCustomAnimationBackwards(self, info.Sequence, () =>
{
if (notified)

View File

@@ -23,6 +23,9 @@ namespace OpenRA.Mods.Common.Traits
public readonly int RefundPercent = 50;
public readonly string[] SellSounds = { };
[Desc("Skip playing (reversed) make animation.")]
public readonly bool SkipMakeAnimation = false;
public override object Create(ActorInitializer init) { return new Sellable(init.Self, this); }
}
@@ -63,11 +66,17 @@ namespace OpenRA.Mods.Common.Traits
foreach (var ns in self.TraitsImplementing<INotifySold>())
ns.Selling(self);
var makeAnimation = self.TraitOrDefault<WithMakeAnimation>();
if (makeAnimation != null)
makeAnimation.Reverse(self, new Sell(self), false);
else
self.QueueActivity(false, new Sell(self));
if (!info.SkipMakeAnimation)
{
var makeAnimation = self.TraitOrDefault<WithMakeAnimation>();
if (makeAnimation != null)
{
makeAnimation.Reverse(self, new Sell(self), false);
return;
}
}
self.QueueActivity(false, new Sell(self));
}
public bool IsTooltipVisible(Player forPlayer)

View File

@@ -53,11 +53,13 @@ namespace OpenRA.Mods.Common.Traits
public override object Create(ActorInitializer init) { return new SpawnActorOnDeath(init, this); }
}
public class SpawnActorOnDeath : ConditionalTrait<SpawnActorOnDeathInfo>, INotifyKilled
public class SpawnActorOnDeath : ConditionalTrait<SpawnActorOnDeathInfo>, INotifyKilled, INotifyRemovedFromWorld
{
readonly string faction;
readonly bool enabled;
Player attackingPlayer;
public SpawnActorOnDeath(ActorInitializer init, SpawnActorOnDeathInfo info)
: base(info)
{
@@ -65,7 +67,7 @@ namespace OpenRA.Mods.Common.Traits
faction = init.Contains<FactionInit>() ? init.Get<FactionInit, string>() : init.Self.Owner.Faction.InternalName;
}
public void Killed(Actor self, AttackInfo e)
void INotifyKilled.Killed(Actor self, AttackInfo e)
{
if (!enabled || IsTraitDisabled)
return;
@@ -79,39 +81,41 @@ namespace OpenRA.Mods.Common.Traits
if (Info.DeathType != null && !e.Damage.DamageTypes.Contains(Info.DeathType))
return;
self.World.AddFrameEndTask(w =>
attackingPlayer = e.Attacker.Owner;
}
// Don't add the new actor to the world before all RemovedFromWorld callbacks have run
void INotifyRemovedFromWorld.RemovedFromWorld(Actor self)
{
if (attackingPlayer == null)
return;
var td = new TypeDictionary
{
// Actor has been disposed by something else before its death (for example `Enter`).
if (self.Disposed)
return;
new ParentActorInit(self),
new LocationInit(self.Location + Info.Offset),
new CenterPositionInit(self.CenterPosition),
new FactionInit(faction)
};
var td = new TypeDictionary
{
new ParentActorInit(self),
new LocationInit(self.Location + Info.Offset),
new CenterPositionInit(self.CenterPosition),
new FactionInit(faction)
};
if (Info.OwnerType == OwnerType.Victim)
td.Add(new OwnerInit(self.Owner));
else if (Info.OwnerType == OwnerType.Killer)
td.Add(new OwnerInit(attackingPlayer));
else
td.Add(new OwnerInit(self.World.Players.First(p => p.InternalName == Info.InternalOwner)));
if (Info.OwnerType == OwnerType.Victim)
td.Add(new OwnerInit(self.Owner));
else if (Info.OwnerType == OwnerType.Killer)
td.Add(new OwnerInit(e.Attacker.Owner));
else
td.Add(new OwnerInit(self.World.Players.First(p => p.InternalName == Info.InternalOwner)));
if (Info.SkipMakeAnimations)
td.Add(new SkipMakeAnimsInit());
if (Info.SkipMakeAnimations)
td.Add(new SkipMakeAnimsInit());
foreach (var modifier in self.TraitsImplementing<IDeathActorInitModifier>())
modifier.ModifyDeathActorInit(self, td);
foreach (var modifier in self.TraitsImplementing<IDeathActorInitModifier>())
modifier.ModifyDeathActorInit(self, td);
var huskActor = self.TraitsImplementing<IHuskModifier>()
.Select(ihm => ihm.HuskActor(self))
.FirstOrDefault(a => a != null);
var huskActor = self.TraitsImplementing<IHuskModifier>()
.Select(ihm => ihm.HuskActor(self))
.FirstOrDefault(a => a != null);
w.CreateActor(huskActor ?? Info.Actor, td);
});
self.World.AddFrameEndTask(w => w.CreateActor(huskActor ?? Info.Actor, td));
}
}
}

View File

@@ -50,6 +50,7 @@ namespace OpenRA.Mods.Common.Traits
{
var location = self.World.Map.CenterOfCell(order.TargetLocation);
PlayLaunchSounds();
Game.Sound.Play(SoundType.World, info.DeploySound, location);
if (!string.IsNullOrEmpty(info.EffectSequence) && !string.IsNullOrEmpty(info.EffectPalette))

View File

@@ -175,8 +175,8 @@ namespace OpenRA.Mods.Common.Traits
public interface INotifyDeployTriggered
{
void Deploy(Actor self);
void Undeploy(Actor self);
void Deploy(Actor self, bool skipMakeAnim);
void Undeploy(Actor self, bool skipMakeAnim);
}
public interface IAcceptResourcesInfo : ITraitInfo { }

View File

@@ -11,8 +11,10 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.GameRules;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
using OpenRA.Support;
using OpenRA.Traits;
@@ -189,5 +191,64 @@ namespace OpenRA.Mods.Common
return rules.Actors.Where(a => a.Value.HasTraitInfo<IBlocksProjectilesInfo>())
.SelectMany(a => a.Value.TraitInfos<HitShapeInfo>()).Max(h => h.Type.OuterRadius);
}
public static string FriendlyTypeName(Type t)
{
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(HashSet<>))
return "Set of {0}".F(t.GetGenericArguments().Select(FriendlyTypeName).ToArray());
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary<,>))
return "Mapping of {0} to {1}".F(t.GetGenericArguments().Select(FriendlyTypeName).ToArray());
if (t.IsSubclassOf(typeof(Array)))
return "Collection of {0}".F(FriendlyTypeName(t.GetElementType()));
if (t.IsGenericType && t.GetGenericTypeDefinition().GetInterfaces().Any(e => e.IsGenericType && e.GetGenericTypeDefinition() == typeof(IEnumerable<>)))
return "Collection of {0}".F(FriendlyTypeName(t.GetGenericArguments().First()));
if (t == typeof(int) || t == typeof(uint))
return "Integer";
if (t == typeof(int2))
return "2D Integer";
if (t == typeof(float) || t == typeof(decimal))
return "Real Number";
if (t == typeof(float2))
return "2D Real Number";
if (t == typeof(CPos))
return "2D Cell Position";
if (t == typeof(CVec))
return "2D Cell Vector";
if (t == typeof(WAngle))
return "1D World Angle";
if (t == typeof(WRot))
return "3D World Rotation";
if (t == typeof(WPos))
return "3D World Position";
if (t == typeof(WDist))
return "1D World Distance";
if (t == typeof(WVec))
return "3D World Vector";
if (t == typeof(HSLColor) || t == typeof(Color))
return "Color (RRGGBB[AA] notation)";
if (t == typeof(IProjectileInfo))
return "Projectile";
if (t == typeof(IWarhead))
return "Warhead";
return t.Name;
}
}
}

View File

@@ -13,7 +13,6 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenRA.Graphics;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.UtilityCommands
@@ -57,7 +56,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
}
var traitName = t.Name.EndsWith("Info") ? t.Name.Substring(0, t.Name.Length - 4) : t.Name;
toc.AppendLine(" * [{0}](#{1})".F(traitName, traitName.ToLowerInvariant()));
toc.AppendLine(" * [{0}](#{1})".F(traitName, traitName.ToLowerInvariant()));
var traitDescLines = t.GetCustomAttributes<DescAttribute>(false).SelectMany(d => d.Lines);
doc.AppendLine();
doc.AppendLine("### {0}".F(traitName));
@@ -92,7 +91,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
foreach (var info in infos)
{
var fieldDescLines = info.Field.GetCustomAttributes<DescAttribute>(true).SelectMany(d => d.Lines);
var fieldType = FriendlyTypeName(info.Field.FieldType);
var fieldType = Util.FriendlyTypeName(info.Field.FieldType);
var loadInfo = info.Field.GetCustomAttributes<FieldLoader.SerializeAttribute>(true).FirstOrDefault();
var defaultValue = loadInfo != null && loadInfo.Required ? "<em>(required)</em>" : FieldSaver.SaveField(liveTraitInfo, info.Field.Name).Value.Value;
doc.Append("<tr><td>{0}</td><td>{1}</td><td>{2}</td>".F(info.YamlName, defaultValue, fieldType));
@@ -118,58 +117,5 @@ namespace OpenRA.Mods.Common.UtilityCommands
.OrderBy(i => i.Name)
.ToArray();
}
static string FriendlyTypeName(Type t)
{
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(HashSet<>))
return "Set of {0}".F(t.GetGenericArguments().Select(FriendlyTypeName).ToArray());
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary<,>))
return "Dictionary<{0},{1}>".F(t.GetGenericArguments().Select(FriendlyTypeName).ToArray());
if (t.IsSubclassOf(typeof(Array)))
return "Multiple {0}".F(FriendlyTypeName(t.GetElementType()));
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Primitives.Cache<,>))
return "Cached<{0},{1}>".F(t.GetGenericArguments().Select(FriendlyTypeName).ToArray());
if (t == typeof(int) || t == typeof(uint))
return "Integer";
if (t == typeof(int2))
return "2D Integer";
if (t == typeof(float) || t == typeof(decimal))
return "Real Number";
if (t == typeof(float2))
return "2D Real Number";
if (t == typeof(CPos))
return "2D Cell Position";
if (t == typeof(CVec))
return "2D Cell Vector";
if (t == typeof(WAngle))
return "1D World Angle";
if (t == typeof(WRot))
return "3D World Rotation";
if (t == typeof(WPos))
return "3D World Position";
if (t == typeof(WDist))
return "1D World Distance";
if (t == typeof(WVec))
return "3D World Vector";
if (t == typeof(HSLColor))
return "Color";
return t.Name;
}
}
}

View File

@@ -0,0 +1,99 @@
#region Copyright & License Information
/*
* Copyright 2007-2017 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenRA.GameRules;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.UtilityCommands
{
class ExtractWeaponDocsCommand : IUtilityCommand
{
string IUtilityCommand.Name { get { return "--weapon-docs"; } }
bool IUtilityCommand.ValidateArguments(string[] args)
{
return true;
}
[Desc("Generate weaponry documentation in MarkDown format.")]
void IUtilityCommand.Run(Utility utility, string[] args)
{
// HACK: The engine code assumes that Game.modData is set.
Game.ModData = utility.ModData;
Console.WriteLine(
"This documentation is aimed at modders. It displays a template for weapon definitions " +
"as well as its contained types (warheads and projectiles) with default values and developer commentary. " +
"Please do not edit it directly, but add new `[Desc(\"String\")]` tags to the source code. This file has been " +
"automatically generated for version {0} of OpenRA.", utility.ModData.Manifest.Metadata.Version);
Console.WriteLine();
var toc = new StringBuilder();
var doc = new StringBuilder();
var currentNamespace = "";
var objectCreator = utility.ModData.ObjectCreator;
var weaponInfo = objectCreator.GetTypesImplementing<WeaponInfo>();
var warheads = objectCreator.GetTypesImplementing<IWarhead>().OrderBy(t => t.Namespace);
var projectiles = objectCreator.GetTypesImplementing<IProjectileInfo>().OrderBy(t => t.Namespace);
var weaponTypes = Enumerable.Concat(weaponInfo, Enumerable.Concat(projectiles, warheads));
foreach (var t in weaponTypes)
{
if (t.ContainsGenericParameters || t.IsAbstract)
continue; // skip helpers like TraitInfo<T>
if (currentNamespace != t.Namespace)
{
currentNamespace = t.Namespace;
doc.AppendLine();
doc.AppendLine("## {0}".F(currentNamespace));
toc.AppendLine("* [{0}](#{1})".F(currentNamespace, currentNamespace.Replace(".", "").ToLowerInvariant()));
}
var traitName = t.Name.EndsWith("Info") ? t.Name.Substring(0, t.Name.Length - 4) : t.Name;
toc.AppendLine(" * [{0}](#{1})".F(traitName, traitName.ToLowerInvariant()));
var traitDescLines = t.GetCustomAttributes<DescAttribute>(false).SelectMany(d => d.Lines);
doc.AppendLine();
doc.AppendLine("### {0}".F(traitName));
foreach (var line in traitDescLines)
doc.AppendLine(line);
var infos = FieldLoader.GetTypeLoadInfo(t);
if (!infos.Any())
continue;
doc.AppendLine("<table>");
doc.AppendLine("<tr><th>Property</th><th>Default Value</th><th>Type</th><th>Description</th></tr>");
var liveTraitInfo = t == typeof(WeaponInfo) ? null : objectCreator.CreateBasic(t);
foreach (var info in infos)
{
var fieldDescLines = info.Field.GetCustomAttributes<DescAttribute>(true).SelectMany(d => d.Lines);
var fieldType = Util.FriendlyTypeName(info.Field.FieldType);
var defaultValue = liveTraitInfo == null ? "" : FieldSaver.SaveField(liveTraitInfo, info.Field.Name).Value.Value;
doc.Append("<tr><td>{0}</td><td>{1}</td><td>{2}</td>".F(info.YamlName, defaultValue, fieldType));
doc.Append("<td>");
foreach (var line in fieldDescLines)
doc.Append(line + " ");
doc.AppendLine("</td></tr>");
}
doc.AppendLine("</table>");
}
Console.Write(toc.ToString());
Console.Write(doc.ToString());
}
}
}

View File

@@ -845,6 +845,82 @@ namespace OpenRA.Mods.Common.UtilityCommands
}
}
// TargetWhenIdle and TargetWhenDamaged were removed from AutoTarget
if (engineVersion < 20170722)
{
if (node.Key.StartsWith("AutoTarget", StringComparison.Ordinal))
{
var valueNodes = node.Value.Nodes;
var targetIdle = valueNodes.FirstOrDefault(n => n.Key == "TargetWhenIdle");
var targetDamaged = valueNodes.FirstOrDefault(n => n.Key == "TargetWhenDamaged");
var hasInitialStance = valueNodes.FirstOrDefault(n => n.Key == "InitialStance") != null;
var enableStances = valueNodes.FirstOrDefault(n => n.Key == "EnableStances");
if (targetDamaged == null)
{
if (targetIdle != null)
{
if (hasInitialStance)
Console.WriteLine("'TargetWhenIdle' was removed from 'AutoTarget'. 'InitialStance' might need to be adjusted.");
else
{
valueNodes.Add(new MiniYamlNode("InitialStance", targetIdle.Value.Value.ToLower() == "true" ? "Defend" : "ReturnFire"));
if (enableStances != null)
enableStances.Value.Value = "false";
else
valueNodes.Add(new MiniYamlNode("EnableStances", "false"));
}
valueNodes.Remove(targetIdle);
}
}
else
{
if (targetIdle == null)
{
if (hasInitialStance)
Console.WriteLine("'TargetWhenDamaged' was removed from 'AutoTarget'. 'InitialStance' might need to be adjusted.");
else
{
// In this case the default for "TargetWhenIdle" (true) takes effect, i.e. use the "Defend" stance
valueNodes.Add(new MiniYamlNode("InitialStance", "Defend"));
if (enableStances != null)
enableStances.Value.Value = "false";
else
valueNodes.Add(new MiniYamlNode("EnableStances", "false"));
}
valueNodes.Remove(targetDamaged);
}
else
{
if (hasInitialStance)
Console.WriteLine("'TargetWhenDamaged' and 'TargetWhenIdle' were removed from 'AutoTarget'. 'InitialStance' might need to be adjusted.");
else
{
var idle = targetIdle.Value.Value.ToLower() == "true";
var damaged = targetDamaged.Value.Value.ToLower() == "true";
if (idle)
valueNodes.Add(new MiniYamlNode("InitialStance", "Defend"));
else
valueNodes.Add(new MiniYamlNode("InitialStance", damaged ? "ReturnFire" : "HoldFire"));
if (enableStances != null)
enableStances.Value.Value = "false";
else
valueNodes.Add(new MiniYamlNode("EnableStances", "false"));
}
valueNodes.Remove(targetIdle);
valueNodes.Remove(targetDamaged);
}
}
}
}
UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1);
}

View File

@@ -28,6 +28,7 @@ namespace OpenRA.Mods.Common.Widgets
}
public bool DisableKeyRepeat = false;
public bool DisableKeySound = false;
[Translate] public string Text = "";
public string Background = "button";
@@ -141,9 +142,10 @@ namespace OpenRA.Mods.Common.Widgets
if (!IsDisabled())
{
OnKeyPress(e);
Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickSound", null);
if (!DisableKeySound)
Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickSound", null);
}
else
else if (!DisableKeySound)
Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickDisabledSound", null);
return true;

View File

@@ -183,7 +183,7 @@ namespace OpenRA.Mods.Common.Widgets
public override bool HandleMouseInput(MouseInput mi)
{
if (mi.Event != MouseInputEvent.Down && mi.Event != MouseInputEvent.Up)
if (mi.Event == MouseInputEvent.Move)
return false;
if (mi.Event == MouseInputEvent.Down)

View File

@@ -165,6 +165,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
InitializeActorPreviews();
};
searchTextField.OnEscKey = () =>
{
searchTextField.Text = "";
searchTextField.YieldKeyboardFocus();
return true;
};
var actorCategorySelector = widget.Get<DropDownButtonWidget>("CATEGORIES_DROPDOWN");
actorCategorySelector.GetText = () =>
{

View File

@@ -73,6 +73,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
InitializeTilePreview();
};
searchTextField.OnEscKey = () =>
{
searchTextField.Text = "";
searchTextField.YieldKeyboardFocus();
return true;
};
Func<string, string> categoryTitle = s => s != null ? s : "Search Results";
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
{

View File

@@ -10,13 +10,10 @@
#endregion
using System;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Orders;
using OpenRA.Mods.Common.Traits;
using OpenRA.Orders;
using OpenRA.Primitives;
using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets
@@ -58,14 +55,20 @@ namespace OpenRA.Mods.Common.Widgets
attackMoveButton.IsHighlighted = () => world.OrderGenerator is GenericSelectTarget
&& ((GenericSelectTarget)world.OrderGenerator).OrderName == "AttackMove";
attackMoveButton.OnClick = () =>
Action<bool> toggle = allowCancel =>
{
if (attackMoveButton.IsHighlighted())
world.CancelInputMode();
{
if (allowCancel)
world.CancelInputMode();
}
else
world.OrderGenerator = new GenericSelectTarget(selectedActors,
"AttackMove", "attackmove", Game.Settings.Game.MouseButtonPreference.Action);
};
attackMoveButton.OnClick = () => toggle(true);
attackMoveButton.OnKeyPress = _ => toggle(false);
}
var forceMoveButton = widget.GetOrNull<ButtonWidget>("FORCE_MOVE");
@@ -110,14 +113,20 @@ namespace OpenRA.Mods.Common.Widgets
guardButton.IsHighlighted = () => world.OrderGenerator is GenericSelectTarget
&& ((GenericSelectTarget)world.OrderGenerator).OrderName == "Guard";
guardButton.OnClick = () =>
Action<bool> toggle = allowCancel =>
{
if (guardButton.IsHighlighted())
world.CancelInputMode();
{
if (allowCancel)
world.CancelInputMode();
}
else
world.OrderGenerator = new GuardOrderGenerator(selectedActors,
"Guard", "guard", Game.Settings.Game.MouseButtonPreference.Action);
};
guardButton.OnClick = () => toggle(true);
guardButton.OnKeyPress = _ => toggle(false);
}
var scatterButton = widget.GetOrNull<ButtonWidget>("SCATTER");

View File

@@ -127,7 +127,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var keyhandler = shroudSelector.Get<LogicKeyListenerWidget>("SHROUD_KEYHANDLER");
keyhandler.OnKeyPress = HandleKeyPress;
selected = limitViews ? groups.First().Value.First() : disableShroud;
selected = limitViews ? groups.First().Value.First() : world.WorldActor.Owner.Shroud.ExploreMapEnabled ? combined : disableShroud;
selected.OnClick();
}

View File

@@ -51,6 +51,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
widget.IsVisible = () => (orderManager.LobbyInfo.ClientWithIndex(clientIndex) != null);
tooltipContainer.BeforeRender = () =>
{
if (!widget.IsVisible())
return;
var latencyPrefixSize = latencyPrefix == null ? 0 : latencyPrefix.Bounds.X + latencyPrefixFont.Measure(latencyPrefix.GetText() + " ").X;
var locationWidth = locationFont.Measure(location.GetText()).X;
var adminWidth = adminFont.Measure(admin.GetText()).X;

View File

@@ -13,6 +13,7 @@ using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
@@ -37,7 +38,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
static bool fetchedNews;
// Increment the version number when adding new stats
const int SystemInformationVersion = 2;
const int SystemInformationVersion = 3;
Dictionary<string, Pair<string, string>> GetSystemInformation()
{
var lang = System.Globalization.CultureInfo.InstalledUICulture.TwoLetterISOLanguageName;
@@ -47,10 +48,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ "platform", Pair.New("OS Type", Platform.CurrentPlatform.ToString()) },
{ "os", Pair.New("OS Version", Environment.OSVersion.ToString()) },
{ "x64", Pair.New("OS is 64 bit", Environment.Is64BitOperatingSystem.ToString()) },
{ "x64process", Pair.New("Process is 64 bit", Environment.Is64BitProcess.ToString()) },
{ "runtime", Pair.New(".NET Runtime", Platform.RuntimeVersion) },
{ "gl", Pair.New("OpenGL Version", Game.Renderer.GLVersion) },
{ "windowsize", Pair.New("Window Size", "{0}x{1}".F(Game.Renderer.Resolution.Width, Game.Renderer.Resolution.Height)) },
{ "windowscale", Pair.New("Window Scale", Game.Renderer.WindowScale.ToString("F2")) },
{ "windowscale", Pair.New("Window Scale", Game.Renderer.WindowScale.ToString("F2", CultureInfo.InvariantCulture)) },
{ "lang", Pair.New("System Language", lang) }
};
}

View File

@@ -35,8 +35,6 @@ namespace OpenRA.Mods.Common.Widgets
public FrozenActor FrozenActorTooltip { get; private set; }
public ResourceType ResourceTooltip { get; private set; }
public int EdgeScrollThreshold = 5;
int2? joystickScrollStart, joystickScrollEnd;
int2? standardScrollStart;
bool isStandardScrolling;
@@ -308,7 +306,12 @@ namespace OpenRA.Mods.Common.Widgets
if (scrollType == MouseScrollType.Standard || scrollType == MouseScrollType.Inverted)
{
if (mi.Event == MouseInputEvent.Down && !isStandardScrolling)
{
if (!TakeMouseFocus(mi))
return false;
standardScrollStart = mi.Location;
}
else if (mi.Event == MouseInputEvent.Move && (isStandardScrolling ||
(standardScrollStart.HasValue && ((standardScrollStart.Value - mi.Location).Length > Game.Settings.Game.MouseScrollDeadzone))))
{
@@ -322,6 +325,7 @@ namespace OpenRA.Mods.Common.Widgets
var wasStandardScrolling = isStandardScrolling;
isStandardScrolling = false;
standardScrollStart = null;
YieldMouseFocus(mi);
if (wasStandardScrolling)
return true;
@@ -335,6 +339,7 @@ namespace OpenRA.Mods.Common.Widgets
{
if (!TakeMouseFocus(mi))
return false;
joystickScrollStart = mi.Location;
}
@@ -474,14 +479,15 @@ namespace OpenRA.Mods.Common.Widgets
ScrollDirection CheckForDirections()
{
var margin = Game.Settings.Game.ViewportEdgeScrollMargin;
var directions = ScrollDirection.None;
if (Viewport.LastMousePos.X < EdgeScrollThreshold)
if (Viewport.LastMousePos.X < margin)
directions |= ScrollDirection.Left;
if (Viewport.LastMousePos.Y < EdgeScrollThreshold)
if (Viewport.LastMousePos.Y < margin)
directions |= ScrollDirection.Up;
if (Viewport.LastMousePos.X >= Game.Renderer.Resolution.Width - EdgeScrollThreshold)
if (Viewport.LastMousePos.X >= Game.Renderer.Resolution.Width - margin)
directions |= ScrollDirection.Right;
if (Viewport.LastMousePos.Y >= Game.Renderer.Resolution.Height - EdgeScrollThreshold)
if (Viewport.LastMousePos.Y >= Game.Renderer.Resolution.Height - margin)
directions |= ScrollDirection.Down;
return directions;

View File

@@ -32,8 +32,11 @@ namespace OpenRA.Mods.Common
// Then we iterate over this list, and find all actors for which their health radius is at least within lineWidth of the line.
// For actors without a health radius, we simply check their center point.
// The square in which we select all actors must be large enough to encompass the entire line's width.
var xDir = Math.Sign(lineEnd.X - lineStart.X);
var yDir = Math.Sign(lineEnd.Y - lineStart.Y);
// xDir and yDir must never be 0, otherwise the overscan will be 0 in the respective direction.
var xDiff = lineEnd.X - lineStart.X;
var yDiff = lineEnd.Y - lineStart.Y;
var xDir = xDiff < 0 ? -1 : 1;
var yDir = yDiff < 0 ? -1 : 1;
var dir = new WVec(xDir, yDir, 0);
var overselect = dir * (1024 + lineWidth.Length + targetExtraSearchRadius.Length);

View File

@@ -81,7 +81,7 @@ namespace OpenRA.Platforms.Default
}
// A null indicates termination of that string, so add that to our list.
devices.Add(Encoding.Default.GetString(buffer.ToArray()));
devices.Add(Encoding.UTF8.GetString(buffer.ToArray()));
buffer.Clear();
// Two successive nulls indicates the end of the list.

View File

@@ -193,6 +193,7 @@ function Docs-Command
{
./make.ps1 version
./OpenRA.Utility.exe all --docs | Out-File -Encoding "UTF8" DOCUMENTATION.md
./OpenRA.Utility.exe all --weapon-docs | Out-File -Encoding "UTF8" WEAPONS.md
./OpenRA.Utility.exe all --lua-docs | Out-File -Encoding "UTF8" Lua-API.md
}
else

View File

@@ -270,7 +270,7 @@ Container@PLAYER_WIDGETS:
Width: 34
Height: 34
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Attack Move
TooltipDesc: Selected units will move to the desired location\nand attack any enemies they encounter en route.\n\nLeft-click icon then right-click on target location.
TooltipContainer: TOOLTIP_CONTAINER
@@ -286,6 +286,7 @@ Container@PLAYER_WIDGETS:
Width: 34
Height: 34
Background: command-button
DisableKeySound: true
TooltipText: Force Move
TooltipDesc: Selected units will move to the desired location\n - Default activity for the target is suppressed\n - Vehicles will attempt to crush enemies at the target location\n - Units entering transports will consider nearby alternatives\n\nLeft-click icon then right-click on target.\nHold {(Alt)} to activate temporarily while commanding units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -302,6 +303,7 @@ Container@PLAYER_WIDGETS:
Width: 34
Height: 34
Background: command-button
DisableKeySound: true
TooltipText: Force Attack
TooltipDesc: Selected units will attack the targeted unit or location\nignoring their default activity for the target.\n\nLeft-click icon then right-click on target.\nHold {(Ctrl)} to activate temporarily while commanding units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -318,7 +320,7 @@ Container@PLAYER_WIDGETS:
Width: 34
Height: 34
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Guard
TooltipDesc: Selected units will follow the targeted unit.\n\nLeft-click icon then right-click on target unit.
TooltipContainer: TOOLTIP_CONTAINER
@@ -335,6 +337,7 @@ Container@PLAYER_WIDGETS:
Height: 34
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Deploy
TooltipDesc: Selected units will perform their default deploy activity\n - MCVs will unpack into a Construction Yard\n - Construction Yards will re-pack into a MCV\n - Transports will unload their passengers\n - Helicopters will return to base\n\nActs immediately on selected units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -351,6 +354,7 @@ Container@PLAYER_WIDGETS:
Height: 34
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Scatter
TooltipDesc: Selected units will stop their current activity\nand move to a nearby location.\n\nActs immediately on selected units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -367,6 +371,7 @@ Container@PLAYER_WIDGETS:
Height: 34
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Stop
TooltipDesc: Selected units will stop their current activity.\n\nActs immediately on selected units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -382,6 +387,7 @@ Container@PLAYER_WIDGETS:
Width: 34
Height: 34
Background: command-button
DisableKeySound: true
TooltipText: Waypoint Mode
TooltipDesc: Use Waypoint Mode to give multiple linking commands\nto the selected units. Units will execute the commands\nimmediately upon receiving them.\n\nLeft-click icon then give commands in the game world.\nHold {(Shift)} to activate temporarily while commanding units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -407,6 +413,7 @@ Container@PLAYER_WIDGETS:
Height: 26
Background: stance-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Attack Anything Stance
TooltipDesc: Set the selected units to Attack Anything stance:\n - Units will attack enemy units and structures on sight\n - Units will pursue attackers across the battlefield
TooltipContainer: TOOLTIP_CONTAINER
@@ -423,6 +430,7 @@ Container@PLAYER_WIDGETS:
Height: 26
Background: stance-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Defend Stance
TooltipDesc: Set the selected units to Defend stance:\n - Units will attack enemy units on sight\n - Units will not move or pursue enemies
TooltipContainer: TOOLTIP_CONTAINER
@@ -439,6 +447,7 @@ Container@PLAYER_WIDGETS:
Height: 26
Background: stance-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Return Fire Stance
TooltipDesc: Set the selected units to Return Fire stance:\n - Units will retaliate against enemies that attack them\n - Units will not move or pursue enemies
TooltipContainer: TOOLTIP_CONTAINER
@@ -455,6 +464,7 @@ Container@PLAYER_WIDGETS:
Height: 26
Background: stance-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Hold Fire Stance
TooltipDesc: Set the selected units to Hold Fire stance:\n - Units will not fire upon enemies\n - Units will not move or pursue enemies
TooltipContainer: TOOLTIP_CONTAINER

View File

@@ -74,8 +74,8 @@ RMBO:
MustBeDestroyed:
RequiredForShortGame: true
AutoTarget:
TargetWhenIdle: false
TargetWhenDamaged: true
EnableStances: false
InitialStance: ReturnFire
Health:
HP: 150

View File

@@ -50,6 +50,6 @@ airstrike.proxy:
ClockSequence: clock
CircleSequence: circles
TDTRUK:
TRUCK:
Buildable:
Prerequisites: ~disabled

View File

@@ -966,7 +966,9 @@
RequiresForceFire: yes
TargetTypes: Ground, Water
Health:
HP: 500
HP: 600
Armor:
Type: Heavy
SoundOnDamageTransition:
DamagedSounds: xplos.aud
DestroyedSounds: xplobig4.aud

View File

@@ -133,3 +133,12 @@ STNK.Husk:
IntoActor: stnk
RenderSprites:
Image: stnk.destroyed
TRUCK.Husk:
Inherits: ^Husk
Tooltip:
Name: Supply Truck (Destroyed)
TransformOnCapture:
IntoActor: truck
RenderSprites:
Image: truck.destroyed

View File

@@ -8,6 +8,7 @@ E1:
Name: Minigunner
Buildable:
BuildPaletteOrder: 10
Prerequisites: barracks
Queue: Infantry.GDI, Infantry.Nod
Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles
Mobile:
@@ -66,6 +67,7 @@ E3:
Name: Rocket Soldier
Buildable:
BuildPaletteOrder: 20
Prerequisites: barracks
Queue: Infantry.GDI, Infantry.Nod
Description: Anti-tank/Anti-aircraft infantry. \n Strong vs Tanks, Aircraft\n Weak vs Infantry
Mobile:
@@ -160,10 +162,11 @@ E6:
Name: Engineer
Buildable:
BuildPaletteOrder: 30
Prerequisites: barracks
Queue: Infantry.GDI, Infantry.Nod
Description: Damages and captures enemy structures.\n Unarmed
Mobile:
Speed: 56
Speed: 48
Health:
HP: 30
Passenger:

View File

@@ -776,6 +776,10 @@ SAM:
Inherits@IDISABLE: ^DisabledOverlay
Inherits@AUTOTARGET: ^AutoTargetAir
Inherits@shape: ^2x1Shape
HitShape:
Type: Rectangle
TopLeft: -768,-512
BottomRight: 768,512
Valued:
Cost: 650
Tooltip:
@@ -928,7 +932,7 @@ ATWR:
TurnSpeed: 255
Offset: 128,128,384
Armament@PRIMARY:
Weapon: TowerMissle
Weapon: TowerMissile
LocalOffset: 256,128,0, 256,-128,0
LocalYaw: -100,100
Armament@SECONDARY:

View File

@@ -586,12 +586,12 @@ MHQ:
Buildable:
Description: Mobile base of operations
TDTRUK:
TRUCK:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle.GDI, Vehicle.Nod
BuildPaletteOrder: 35
Prerequisites: ~techlevel.low
Prerequisites: vehicleproduction
Description: Transports cash to other players.\n Unarmed
Valued:
Cost: 500
@@ -610,3 +610,5 @@ TDTRUK:
DeliversCash:
Payload: 500
PlayerExperience: 50
SpawnActorOnDeath:
Actor: TRUCK.Husk

View File

@@ -337,8 +337,14 @@ apc.destroyed:
Facings: 32
ZOffset: -512
tdtruk:
truck:
idle:
Facings: 32
UseClassicFacingFudge: True
icon: tdtrukicon
icon: truckicon
truck.destroyed:
idle: truck
Facings: 32
UseClassicFacingFudge: True
ZOffset: -512

View File

@@ -39,6 +39,8 @@ FlametankExplode:
HeliCrash:
Inherits: ^DamagingExplosion
Warhead@1Dam: SpreadDamage
Damage: 100
HeliExplode:
Warhead@1Dam: SpreadDamage

View File

@@ -20,7 +20,7 @@
Damage: 35
ValidTargets: Ground, Air
Versus:
None: 30
None: 20
Wood: 85
Light: 100
Heavy: 100
@@ -89,7 +89,7 @@ OrcaAGMissiles:
Damage: 28
ValidTargets: Ground
Versus:
None: 50
None: 30
Wood: 100
Light: 100
Heavy: 75
@@ -215,7 +215,7 @@ BoatMissile:
VictimScanRadius: 0
ValidTargets: Air
TowerMissle:
TowerMissile:
Inherits: ^MissileWeapon
ReloadDelay: 15
Range: 7c0

View File

@@ -43,7 +43,7 @@ Container@PLAYER_WIDGETS:
Height: 41
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Attack Move
TooltipDesc: Selected units will move to the desired location\nand attack any enemies they encounter en route.\n\nLeft-click icon then right-click on target location.
TooltipContainer: TOOLTIP_CONTAINER
@@ -59,6 +59,7 @@ Container@PLAYER_WIDGETS:
Height: 41
VisualHeight: 0
Background: command-button
DisableKeySound: true
TooltipText: Force Move
TooltipDesc: Selected units will move to the desired location\n - Default activity for the target is suppressed\n - Vehicles will attempt to crush enemies at the target location\n\nLeft-click icon then right-click on target.\nHold {(Alt)} to activate temporarily while commanding units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -75,6 +76,7 @@ Container@PLAYER_WIDGETS:
Height: 41
VisualHeight: 0
Background: command-button
DisableKeySound: true
TooltipText: Force Attack
TooltipDesc: Selected units will attack the targeted unit or location\nignoring their default activity for the target.\n\nLeft-click icon then right-click on target.\nHold {(Ctrl)} to activate temporarily while commanding units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -91,7 +93,7 @@ Container@PLAYER_WIDGETS:
Height: 41
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Guard
TooltipDesc: Selected units will follow the targeted unit.\n\nLeft-click icon then right-click on target unit.
TooltipContainer: TOOLTIP_CONTAINER
@@ -108,6 +110,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Deploy
TooltipDesc: Selected units will perform their default deploy activity\n - MCVs will unpack into a Construction Yard\n - Thumpers will start or stop attracting worms\n\nActs immediately on selected units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -124,6 +127,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Scatter
TooltipDesc: Selected units will stop their current activity\nand move to a nearby location.\n\nActs immediately on selected units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -140,6 +144,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Stop
TooltipDesc: Selected units will stop their current activity.\n\nActs immediately on selected units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -155,6 +160,7 @@ Container@PLAYER_WIDGETS:
Height: 41
VisualHeight: 0
Background: command-button
DisableKeySound: true
TooltipText: Waypoint Mode
TooltipDesc: Use Waypoint Mode to give multiple linking commands\nto the selected units. Units will execute the commands\nimmediately upon receiving them.\n\nLeft-click icon then give commands in the game world.\nHold {(Shift)} to activate temporarily while commanding units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -178,6 +184,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background:
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Attack Anything Stance
TooltipDesc: Set the selected units to Attack Anything stance:\n - Units will attack enemy units and structures on sight\n - Units will pursue attackers across the battlefield
TooltipContainer: TOOLTIP_CONTAINER
@@ -194,6 +201,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background:
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Defend Stance
TooltipDesc: Set the selected units to Defend stance:\n - Units will attack enemy units on sight\n - Units will not move or pursue enemies
TooltipContainer: TOOLTIP_CONTAINER
@@ -210,6 +218,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background:
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Return Fire Stance
TooltipDesc: Set the selected units to Return Fire stance:\n - Units will retaliate against enemies that attack them\n - Units will not move or pursue enemies
TooltipContainer: TOOLTIP_CONTAINER
@@ -226,6 +235,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background:
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Hold Fire Stance
TooltipDesc: Set the selected units to Hold Fire stance:\n - Units will not fire upon enemies\n - Units will not move or pursue enemies
TooltipContainer: TOOLTIP_CONTAINER

View File

@@ -36,7 +36,7 @@ harvester.husk:
idle: DATA.R8
Start: 1699
Facings: -32
ZOffset: -1023
ZOffset: -512
trike:
idle: DATA.R8

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

After

Width:  |  Height:  |  Size: 209 KiB

View File

@@ -15,10 +15,13 @@ Sound:
Warhead@1Dam: SpreadDamage
Range: 0, 32
Falloff: 100, 100
Damage: 150
Damage: 86
AffectsParent: false
ValidStances: Neutral, Enemy
Versus:
none: 200
light: 110
wood: 110
wall: 50
building: 60
heavy: 60
@@ -28,11 +31,14 @@ Sound:
DamageTypes: Prone50Percent, TriggerProne, SoundDeath
Warhead@2Dam: SpreadDamage
Range: 0, 32
Falloff: 50, 50 # Only does half damage to friendly units
Damage: 150
Falloff: 100, 100
Damage: 43 # Only does half damage to friendly units
AffectsParent: false
ValidStances: Ally
Versus:
none: 200
light: 110
wood: 110
wall: 50
building: 60
heavy: 60

View File

@@ -49,7 +49,7 @@ Container@PLAYER_WIDGETS:
Height: 26
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Attack Move
TooltipDesc: Selected units will move to the desired location\nand attack any enemies they encounter en route.\n\nLeft-click icon then right-click on target location.
TooltipContainer: TOOLTIP_CONTAINER
@@ -66,6 +66,7 @@ Container@PLAYER_WIDGETS:
Height: 26
VisualHeight: 0
Background: command-button
DisableKeySound: true
TooltipText: Force Move
TooltipDesc: Selected units will move to the desired location\n - Default activity for the target is suppressed\n - Vehicles will attempt to crush enemies at the target location\n - Units entering transports will consider nearby alternatives\n - Chrono Tanks will teleport towards the target location\n\nLeft-click icon then right-click on target.\nHold {(Alt)} to activate temporarily while commanding units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -83,6 +84,7 @@ Container@PLAYER_WIDGETS:
Height: 26
VisualHeight: 0
Background: command-button
DisableKeySound: true
TooltipText: Force Attack
TooltipDesc: Selected units will attack the targeted unit or location\nignoring their default activity for the target.\n\nLeft-click icon then right-click on target.\nHold {(Ctrl)} to activate temporarily while commanding units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -100,7 +102,7 @@ Container@PLAYER_WIDGETS:
Height: 26
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Guard
TooltipDesc: Selected units will follow the targeted unit.\n\nLeft-click icon then right-click on target unit.
TooltipContainer: TOOLTIP_CONTAINER
@@ -118,8 +120,9 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Deploy
TooltipDesc: Selected units will perform their default deploy activity\n - MCVs will unpack into a Construction Yard\n - Construction Yards will re-pack into a MCV\n - Transports will unload their passengers\n - Aircraft will return to base\n\nActs immediately on selected units.
TooltipDesc: Selected units will perform their default deploy activity\n - MCVs will unpack into a Construction Yard\n - Construction Yards will re-pack into a MCV\n - Transports will unload their passengers\n - Demolition Trucks and MAD Tanks will self-destruct\n - Aircraft will return to base\n\nActs immediately on selected units.
TooltipContainer: TOOLTIP_CONTAINER
Children:
Image@ICON:
@@ -135,6 +138,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Scatter
TooltipDesc: Selected units will stop their current activity\nand move to a nearby location.\n\nActs immediately on selected units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -152,6 +156,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Stop
TooltipDesc: Selected units will stop their current activity.\n\nActs immediately on selected units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -168,6 +173,7 @@ Container@PLAYER_WIDGETS:
Height: 26
VisualHeight: 0
Background: command-button
DisableKeySound: true
TooltipText: Waypoint Mode
TooltipDesc: Use Waypoint Mode to give multiple linking commands\nto the selected units. Units will execute the commands\nimmediately upon receiving them.\n\nLeft-click icon then give commands in the game world.\nHold {(Shift)} to activate temporarily while commanding units.
TooltipContainer: TOOLTIP_CONTAINER
@@ -192,6 +198,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Attack Anything Stance
TooltipDesc: Set the selected units to Attack Anything stance:\n - Units will attack enemy units and structures on sight\n - Units will pursue attackers across the battlefield
TooltipContainer: TOOLTIP_CONTAINER
@@ -209,6 +216,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Defend Stance
TooltipDesc: Set the selected units to Defend stance:\n - Units will attack enemy units on sight\n - Units will not move or pursue enemies
TooltipContainer: TOOLTIP_CONTAINER
@@ -226,6 +234,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Return Fire Stance
TooltipDesc: Set the selected units to Return Fire stance:\n - Units will retaliate against enemies that attack them\n - Units will not move or pursue enemies
TooltipContainer: TOOLTIP_CONTAINER
@@ -243,6 +252,7 @@ Container@PLAYER_WIDGETS:
VisualHeight: 0
Background: command-button
DisableKeyRepeat: true
DisableKeySound: true
TooltipText: Hold Fire Stance
TooltipDesc: Set the selected units to Hold Fire stance:\n - Units will not fire upon enemies\n - Units will not move or pursue enemies
TooltipContainer: TOOLTIP_CONTAINER

View File

@@ -118,7 +118,7 @@ aftermath-linux: Aftermath Expansion Disc (English)
readme.txt: 9902fb74c019df1b76ff5634e68f0371d790b5e0
setup/install/patch.rtp: 5bce93f834f9322ddaa7233242e5b6c7fea0bf17
Install:
extract-raw: SETUP/INSTALL/PATCH.RTP
extract-raw: setup/install/patch.rtp
^Content/ra/v2/expand/expand2.mix:
Offset: 4712984
Length: 469922

BIN
mods/ra/maps/agenda.oramap Normal file

Binary file not shown.

View File

@@ -41,6 +41,9 @@ HelicopterUnitTypes = { "e1", "e1", "e1", "e1", "e3", "e3" };
ParadropWaypoints = { Paradrop1, Paradrop2, Paradrop3, Paradrop4, Paradrop5, Paradrop6, Paradrop7, Paradrop8 }
Mig1Waypoints = { Mig11, Mig12, Mig13, Mig14 }
Mig2Waypoints = { Mig21, Mig22, Mig23, Mig24 }
BindActorTriggers = function(a)
if a.HasProperty("Hunt") then
if a.Owner == allies then
@@ -76,6 +79,18 @@ SendSovietUnits = function(entryCell, unitTypes, interval)
Trigger.OnAllKilled(units, function() SendSovietUnits(entryCell, unitTypes, interval) end)
end
SendMigs = function(waypoints)
local migEntryPath = { waypoints[1].Location, waypoints[2].Location }
local migs = Reinforcements.Reinforce(soviets, { "mig" }, migEntryPath, 4)
Utils.Do(migs, function(mig)
mig.Move(waypoints[3].Location)
mig.Move(waypoints[4].Location)
mig.Destroy()
end)
Trigger.AfterDelay(DateTime.Seconds(40), function() SendMigs(waypoints) end)
end
ShipAlliedUnits = function()
local units = Reinforcements.ReinforceWithTransport(allies, "lst",
ShipUnitTypes, { LstEntry.Location, LstUnload.Location }, { LstEntry.Location })[2]
@@ -171,6 +186,9 @@ WorldLoaded = function()
Trigger.AfterDelay(DateTime.Seconds(5), ChronoshiftAlliedUnits)
Utils.Do(ProducedUnitTypes, ProduceUnits)
Trigger.AfterDelay(DateTime.Seconds(30), function() SendMigs(Mig1Waypoints) end)
Trigger.AfterDelay(DateTime.Seconds(30), function() SendMigs(Mig2Waypoints) end)
SendSovietUnits(Entry1.Location, UnitTypes, 50)
SendSovietUnits(Entry2.Location, UnitTypes, 50)
SendSovietUnits(Entry3.Location, UnitTypes, 50)

View File

@@ -1239,6 +1239,30 @@ Actors:
ChronoshiftLocation: waypoint
Location: 80,65
Owner: Neutral
Mig11: waypoint
Location: 94,1
Owner: Neutral
Mig12: waypoint
Location: 68,33
Owner: Neutral
Mig13: waypoint
Location: 41,38
Owner: Neutral
Mig14: waypoint
Location: 1,26
Owner: Neutral
Mig21: waypoint
Location: 96,3
Owner: Neutral
Mig22: waypoint
Location: 70,35
Owner: Neutral
Mig23: waypoint
Location: 41,40
Owner: Neutral
Mig24: waypoint
Location: 1,28
Owner: Neutral
Rules: rules.yaml

Binary file not shown.

Binary file not shown.

View File

@@ -8,6 +8,8 @@ World:
-StartGameNotification:
MissionData:
Briefing: Dr. Demitri, creator of a Soviet Super Tank, wants to defect.\n\nWe planned to extract him while the Soviets were testing their new weapon, but something has gone wrong.\n\nThe Super Tanks are out of control, and Demitri is missing -- likely hiding in the village to the far south.\n\nFind our outpost and start repairs on it, then find and evacuate Demitri.\n\nAs for the tanks, we can reprogram them. Send a spy into the Soviet radar dome in the NE, turning the tanks on their creators.\n
WinVideo: sovbatl.vqa
LossVideo: sovtstar.vqa
^Building:
AnnounceOnSeen:
@@ -184,7 +186,7 @@ DOME.NoInfiltrate:
Image: DOME
-InfiltrateForExploration:
Targetable:
TargetTypes: Ground, C4, DetonateAttack, MissionObjective
TargetTypes: Ground, Structure, C4, DetonateAttack, MissionObjective
SPY:
Infiltrates:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -0,0 +1,784 @@
MapFormat: 11
RequiresMod: ra
Title: Poland Raid
Author: s1w
Tileset: TEMPERAT
MapSize: 128,128
Bounds: 16,16,96,96
Visibility: Lobby
Categories: Conquest
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: allies
PlayerReference@Multi0:
Name: Multi0
Playable: True
Faction: Random
Enemies: Creeps
AllowBots: false
PlayerReference@Creeps:
Name: Creeps
NonCombatant: True
Faction: allies
Enemies: Multi0, Multi1, Multi2, Multi3, Multi4
PlayerReference@Multi1:
Name: Multi1
Playable: True
Faction: Random
Enemies: Creeps
AllowBots: false
PlayerReference@Multi2:
Name: Multi2
Playable: True
Faction: Random
Enemies: Creeps
AllowBots: false
PlayerReference@Multi3:
Name: Multi3
Playable: True
Faction: Random
Enemies: Creeps
AllowBots: false
PlayerReference@Multi4:
Name: Multi4
Playable: True
Faction: Random
Enemies: Creeps
AllowBots: false
Actors:
Actor1: v16
Location: 26,55
Owner: Neutral
Actor2: v18
Location: 27,54
Owner: Neutral
Actor14: tc05
Location: 94,32
Owner: Neutral
Actor15: tc05
Location: 95,35
Owner: Neutral
Actor16: tc02
Location: 33,20
Owner: Neutral
Actor17: tc04
Location: 32,17
Owner: Neutral
Actor18: tc05
Location: 34,18
Owner: Neutral
Actor19: tc05
Location: 86,53
Owner: Neutral
Actor20: tc02
Location: 86,34
Owner: Neutral
Actor21: tc02
Location: 55,35
Owner: Neutral
Actor22: t17
Location: 58,36
Owner: Neutral
Actor23: t07
Location: 16,89
Owner: Neutral
Actor24: tc04
Location: 19,90
Owner: Neutral
Actor25: tc04
Location: 17,51
Owner: Neutral
Actor26: tc04
Location: 22,52
Owner: Neutral
Actor27: tc04
Location: 25,49
Owner: Neutral
Actor28: tc04
Location: 18,56
Owner: Neutral
Actor29: tc05
Location: 18,53
Owner: Neutral
Actor30: tc05
Location: 23,47
Owner: Neutral
Actor31: tc03
Location: 16,55
Owner: Neutral
Actor32: tc03
Location: 21,55
Owner: Neutral
Actor34: tc01
Location: 21,49
Owner: Neutral
Actor35: t17
Location: 26,52
Owner: Neutral
Actor36: t17
Location: 17,56
Owner: Neutral
Actor37: t14
Location: 23,51
Owner: Neutral
Actor38: t14
Location: 16,53
Owner: Neutral
Actor39: tc04
Location: 29,109
Owner: Neutral
Actor41: tc01
Location: 53,98
Owner: Neutral
Actor42: tc04
Location: 37,86
Owner: Neutral
Actor43: tc02
Location: 16,83
Owner: Neutral
Actor44: tc05
Location: 40,109
Owner: Neutral
Actor45: tc04
Location: 30,106
Owner: Neutral
Actor46: tc04
Location: 27,107
Owner: Neutral
Actor47: tc02
Location: 34,108
Owner: Neutral
Actor48: tc02
Location: 32,108
Owner: Neutral
Actor49: tc02
Location: 32,110
Owner: Neutral
Actor50: t03
Location: 33,106
Owner: Neutral
Actor51: t03
Location: 30,108
Owner: Neutral
Actor52: t16
Location: 41,95
Owner: Neutral
Actor53: tc05
Location: 109,109
Owner: Neutral
Actor54: tc05
Location: 37,109
Owner: Neutral
Actor55: tc01
Location: 35,109
Owner: Neutral
Actor62: tc01
Location: 57,37
Owner: Neutral
Actor63: tc03
Location: 59,37
Owner: Neutral
Actor64: tc03
Location: 53,35
Owner: Neutral
Actor66: tc02
Location: 41,51
Owner: Neutral
Actor67: tc01
Location: 97,32
Owner: Neutral
Actor68: tc01
Location: 97,33
Owner: Neutral
Actor69: tc03
Location: 98,31
Owner: Neutral
Actor70: tc02
Location: 77,88
Owner: Neutral
Actor71: tc04
Location: 103,73
Owner: Neutral
Actor72: t12
Location: 102,74
Owner: Neutral
Actor73: t03
Location: 99,74
Owner: Neutral
Actor74: t08
Location: 84,90
Owner: Neutral
Actor76: tc04
Location: 94,75
Owner: Neutral
Actor77: tc05
Location: 91,76
Owner: Neutral
Actor79: tc03
Location: 85,76
Owner: Neutral
Actor80: tc04
Location: 73,88
Owner: Neutral
Actor81: tc01
Location: 71,88
Owner: Neutral
Actor82: tc01
Location: 77,99
Owner: Neutral
Actor83: t07
Location: 26,89
Owner: Neutral
Actor84: t08
Location: 23,91
Owner: Neutral
Actor85: v12
Location: 41,94
Owner: Neutral
Actor88: t11
Location: 38,32
Owner: Neutral
Actor89: t08
Location: 95,44
Owner: Neutral
Actor90: t12
Location: 23,48
Owner: Neutral
Actor94: t16
Location: 29,106
Owner: Neutral
Actor95: tc04
Location: 54,74
Owner: Neutral
Actor96: tc05
Location: 48,72
Owner: Neutral
Actor98: t12
Location: 47,72
Owner: Neutral
Actor100: tc02
Location: 39,78
Owner: Neutral
Actor101: tc02
Location: 33,90
Owner: Neutral
Actor102: tc03
Location: 41,76
Owner: Neutral
Actor103: t06
Location: 47,73
Owner: Neutral
Actor104: t08
Location: 33,78
Owner: Neutral
Actor105: t02
Location: 32,89
Owner: Neutral
Actor106: tc01
Location: 29,89
Owner: Neutral
Actor107: t07
Location: 28,89
Owner: Neutral
Actor108: tc04
Location: 34,75
Owner: Neutral
Actor109: t16
Location: 35,74
Owner: Neutral
Actor110: tc02
Location: 38,73
Owner: Neutral
Actor111: t11
Location: 37,74
Owner: Neutral
Actor112: t11
Location: 16,84
Owner: Neutral
Actor113: t05
Location: 37,78
Owner: Neutral
Actor114: t17
Location: 71,43
Owner: Neutral
Actor115: tc01
Location: 76,32
Owner: Neutral
Actor116: t16
Location: 75,31
Owner: Neutral
Actor117: t16
Location: 87,48
Owner: Neutral
Actor118: t17
Location: 85,44
Owner: Neutral
Actor119: t11
Location: 79,46
Owner: Neutral
Actor120: t08
Location: 72,40
Owner: Neutral
Actor121: t02
Location: 69,21
Owner: Neutral
Actor122: t08
Location: 70,22
Owner: Neutral
Actor123: tc01
Location: 66,23
Owner: Neutral
Actor124: t16
Location: 66,21
Owner: Neutral
Actor125: t05
Location: 69,18
Owner: Neutral
Actor126: t13
Location: 66,18
Owner: Neutral
Actor127: t01
Location: 68,21
Owner: Neutral
Actor0: tc01
Location: 94,24
Owner: Neutral
Actor132: tc04
Location: 63,18
Owner: Neutral
Actor133: tc04
Location: 40,49
Owner: Neutral
Actor138: tc01
Location: 38,50
Owner: Neutral
Actor176: t16
Location: 100,75
Owner: Neutral
Actor137: tc01
Location: 42,96
Owner: Neutral
Actor190: t05
Location: 28,50
Owner: Neutral
Actor139: tc01
Location: 49,32
Owner: Neutral
Actor140: t05
Location: 48,33
Owner: Neutral
Actor141: t01
Location: 46,35
Owner: Neutral
Actor143: tc02
Location: 65,34
Owner: Neutral
Actor144: tc01
Location: 65,35
Owner: Neutral
Actor145: tc02
Location: 65,37
Owner: Neutral
Actor146: t08
Location: 56,37
Owner: Neutral
Actor147: tc05
Location: 53,32
Owner: Neutral
Actor148: tc01
Location: 56,33
Owner: Neutral
Actor149: t12
Location: 57,34
Owner: Neutral
Actor150: tc04
Location: 62,28
Owner: Neutral
Actor151: tc04
Location: 59,34
Owner: Neutral
Actor152: t07
Location: 61,28
Owner: Neutral
Actor153: t05
Location: 60,27
Owner: Neutral
Actor154: tc01
Location: 42,34
Owner: Neutral
Actor155: t07
Location: 43,33
Owner: Neutral
Actor156: t08
Location: 44,34
Owner: Neutral
Actor157: t16
Location: 41,34
Owner: Neutral
Actor158: tc01
Location: 80,30
Owner: Neutral
Actor159: t11
Location: 79,29
Owner: Neutral
Actor8: t06
Location: 89,30
Owner: Neutral
Actor128: t06
Location: 95,25
Owner: Neutral
Actor163: t03
Location: 71,33
Owner: Neutral
Actor164: t08
Location: 57,53
Owner: Neutral
Actor165: t08
Location: 30,89
Owner: Neutral
Actor166: tc01
Location: 28,88
Owner: Neutral
Actor167: t11
Location: 26,88
Owner: Neutral
Actor168: t07
Location: 55,99
Owner: Neutral
Actor169: t13
Location: 20,86
Owner: Neutral
Actor170: t11
Location: 33,86
Owner: Neutral
Actor171: tc05
Location: 16,90
Owner: Neutral
Actor172: tc02
Location: 22,89
Owner: Neutral
Actor173: t02
Location: 17,69
Owner: Neutral
Actor174: t11
Location: 29,72
Owner: Neutral
Actor175: t11
Location: 86,95
Owner: Neutral
Actor177: tc01
Location: 36,16
Owner: Neutral
Actor178: tc02
Location: 33,16
Owner: Neutral
Actor179: t15
Location: 31,16
Owner: Neutral
Actor180: t11
Location: 54,19
Owner: Neutral
Actor186: tc04
Location: 109,77
Owner: Neutral
Actor187: tc01
Location: 105,72
Owner: Neutral
Actor188: t10
Location: 107,73
Owner: Neutral
Actor191: tc03
Location: 27,110
Owner: Neutral
Actor192: t08
Location: 24,51
Owner: Neutral
Actor193: t08
Location: 21,51
Owner: Neutral
Actor194: t08
Location: 22,49
Owner: Neutral
Actor134: tc04
Location: 32,50
Owner: Neutral
Actor198: tc04
Location: 18,71
Owner: Neutral
Actor199: t16
Location: 16,70
Owner: Neutral
Actor200: tc02
Location: 20,74
Owner: Neutral
Actor201: tc05
Location: 17,77
Owner: Neutral
Actor202: tc03
Location: 19,73
Owner: Neutral
Actor203: tc05
Location: 16,67
Owner: Neutral
Actor204: t12
Location: 19,66
Owner: Neutral
Actor205: t11
Location: 107,83
Owner: Neutral
Actor206: t05
Location: 108,110
Owner: Neutral
Actor207: t15
Location: 65,59
Owner: Neutral
Actor208: tc03
Location: 57,64
Owner: Neutral
Actor209: t17
Location: 63,68
Owner: Neutral
Actor210: t16
Location: 68,70
Owner: Neutral
Actor211: tc04
Location: 62,66
Owner: Neutral
Actor212: t16
Location: 16,50
Owner: Neutral
Actor213: t16
Location: 21,46
Owner: Neutral
Actor214: t17
Location: 20,48
Owner: Neutral
Actor215: t08
Location: 25,38
Owner: Neutral
Actor216: t08
Location: 21,58
Owner: Neutral
Actor197: tc02
Location: 69,66
Owner: Neutral
Actor219: tc01
Location: 72,67
Owner: Neutral
Actor224: tc01
Location: 87,76
Owner: Neutral
Actor225: oilb
Location: 68,68
Owner: Neutral
Actor99: brl3
Location: 59,64
Owner: Neutral
Actor227: barl
Location: 67,70
Owner: Neutral
Actor228: brl3
Location: 66,68
Owner: Neutral
Actor226: oilb
Location: 59,62
Owner: Neutral
Actor230: barl
Location: 60,65
Owner: Neutral
Actor231: v15
Location: 66,70
Owner: Neutral
Actor232: dog
Location: 63,65
Owner: Creeps
Actor233: oilb
Location: 23,34
Owner: Neutral
Actor229: barl
Location: 61,65
Owner: Neutral
Actor235: brl3
Location: 26,36
Owner: Neutral
Actor33: v07
Location: 61,63
Owner: Neutral
Actor234: t05
Location: 27,84
Owner: Neutral
Actor218: t05
Location: 71,67
Owner: Neutral
Actor217: t16
Location: 21,34
Owner: Neutral
Actor223: t13
Location: 46,73
Owner: Neutral
Actor238: t08
Location: 16,79
Owner: Neutral
Actor239: t02
Location: 81,77
Owner: Neutral
Actor136: t16
Location: 61,102
Owner: Neutral
Actor185: fenc
Location: 49,84
Owner: Neutral
Actor3: t08
Location: 53,75
Owner: Neutral
Actor78: t16
Location: 111,42
Owner: Neutral
Actor61: tc01
Location: 109,23
Owner: Neutral
Actor161: t08
Location: 107,23
Owner: Neutral
Actor162: t07
Location: 98,28
Owner: Neutral
Actor12: t07
Location: 41,75
Owner: Neutral
Actor221: t08
Location: 91,86
Owner: Neutral
Actor222: mine
Owner: Neutral
Location: 109,46
Actor237: mine
Owner: Neutral
Location: 108,49
Actor241: mine
Owner: Neutral
Location: 86,27
Actor242: mine
Owner: Neutral
Location: 82,22
Actor243: mine
Owner: Neutral
Location: 79,25
Actor244: mine
Owner: Neutral
Location: 74,24
Actor245: mine
Owner: Neutral
Location: 92,17
Actor246: mine
Owner: Neutral
Location: 60,17
Actor247: mine
Owner: Neutral
Location: 62,21
Actor248: mine
Owner: Neutral
Location: 42,31
Actor249: mine
Owner: Neutral
Location: 37,29
Actor250: mine
Owner: Neutral
Location: 65,46
Actor251: mine
Owner: Neutral
Location: 60,45
Actor252: mine
Owner: Neutral
Location: 59,49
Actor253: mine
Owner: Neutral
Location: 78,52
Actor254: mine
Owner: Neutral
Location: 40,62
Actor255: mine
Owner: Neutral
Location: 22,83
Actor256: mine
Owner: Neutral
Location: 27,82
Actor257: mine
Owner: Neutral
Location: 22,93
Actor258: mine
Owner: Neutral
Location: 29,92
Actor259: mine
Owner: Neutral
Location: 50,78
Actor260: mine
Owner: Neutral
Location: 52,84
Actor261: mine
Owner: Neutral
Location: 57,80
Actor262: mine
Owner: Neutral
Location: 46,88
Actor263: mine
Owner: Neutral
Location: 43,82
Actor264: mine
Owner: Neutral
Location: 58,91
Actor265: mine
Owner: Neutral
Location: 56,103
Actor266: mine
Owner: Neutral
Location: 52,105
Actor267: mine
Owner: Neutral
Location: 93,109
Actor268: mine
Owner: Neutral
Location: 88,107
Actor269: mine
Owner: Neutral
Location: 82,109
Actor270: mine
Owner: Neutral
Location: 78,103
Actor271: mine
Owner: Neutral
Location: 109,102
Actor272: mine
Owner: Neutral
Location: 110,97
Actor273: mine
Owner: Neutral
Location: 86,79
Actor279: mpspawn
Owner: Neutral
Location: 46,24
Actor280: mpspawn
Owner: Neutral
Location: 103,32
Actor274: mpspawn
Owner: Neutral
Location: 26,66
Actor275: mpspawn
Owner: Neutral
Location: 34,101
Actor276: mpspawn
Owner: Neutral
Location: 99,85

View File

@@ -87,6 +87,7 @@ MIG:
BuildAtProductionType: Plane
BuildPaletteOrder: 50
Prerequisites: ~afld, stek, ~techlevel.high
BuildDuration: 1750
Description: Fast Ground-Attack Plane.\n Strong vs Buildings, Tanks\n Weak vs Infantry, Light armor, Aircraft
Valued:
Cost: 2000
@@ -117,9 +118,8 @@ MIG:
RepulsionSpeed: 40
MaximumPitch: 56
AutoTarget:
TargetWhenIdle: false
TargetWhenDamaged: false
EnableStances: false
InitialStance: HoldFire
InitialStanceAI: HoldFire
AmmoPool:
Ammo: 8
ReturnOnIdle:
@@ -182,9 +182,8 @@ YAK:
RepulsionSpeed: 40
MaximumPitch: 56
AutoTarget:
TargetWhenIdle: false
TargetWhenDamaged: false
EnableStances: false
InitialStance: HoldFire
InitialStanceAI: HoldFire
AmmoPool:
Ammo: 18
PipCount: 6
@@ -216,22 +215,22 @@ TRAN:
Tooltip:
Name: Chinook
Health:
HP: 120
HP: 140
Armor:
Type: Light
RevealsShroud:
Range: 10c0
Range: 8c0
Type: GroundPosition
RevealGeneratedShroud: False
RevealsShroud@GAPGEN:
Range: 8c0
Range: 6c0
Type: GroundPosition
Aircraft:
InitialFacing: 224
TurnSpeed: 5
Speed: 112
Speed: 128
LandableTerrainTypes: Clear,Rough,Road,Ore,Beach,Gems
AltitudeVelocity: 0c100
AltitudeVelocity: 0c58
WithIdleOverlay@ROTOR1AIR:
Offset: 597,0,213
Sequence: rotor
@@ -265,6 +264,7 @@ HELI:
BuildAtProductionType: Helicopter
BuildPaletteOrder: 40
Prerequisites: ~hpad, atek, ~techlevel.high
BuildDuration: 1750
Description: Helicopter gunship armed\nwith multi-purpose missiles.\n Strong vs Tanks, Aircraft\n Weak vs Infantry
Valued:
Cost: 2000

View File

@@ -69,19 +69,27 @@ FCOM:
Footprint: xx xx ==
Dimensions: 2,3
LocalCenterOffset: 0,-512,0
Valued:
Cost: 2000
Health:
HP: 400
HP: 800
Armor:
Type: Wood
Tooltip:
Name: Forward Command
RevealsShroud:
Range: 10c0
Range: 5c0
RevealGeneratedShroud: False
RevealsShroud@GAPGEN:
Range: 4c0
WithBuildingBib:
ExternalCapturable:
CaptureCompleteTime: 30
ExternalCapturableBar:
GivesBuildableArea:
BaseProvider:
Range: 8c0
EngineerRepairable:
Power:
Amount: -200
Amount: 0
ProvidesPrerequisite@buildingname:
HOSP:
@@ -282,6 +290,9 @@ V19.Husk:
RenderSelectionBars: False
-Targetable:
-Demolishable:
-HitShape:
-Health:
-Explodes:
BARL:
Inherits: ^TechBuilding
@@ -352,17 +363,21 @@ MISS:
Footprint: xxx xxx ===
Dimensions: 3,3
LocalCenterOffset: 0,-512,0
Valued:
Cost: 2000
Health:
HP: 400
HP: 600
RevealsShroud:
Range: 3c0
Range: 10c0
RevealGeneratedShroud: False
RevealsShroud@GAPGEN:
Range: 6c0
Armor:
Type: Wood
Tooltip:
Name: Technology Center
Name: Communications Center
WithBuildingBib:
ExternalCapturable:
ExternalCapturableBar:
EngineerRepairable:
WithDeathAnimation:
DeathSequence: dead
UseDeathTypeSuffix: false

View File

@@ -534,6 +534,11 @@
HitShape:
EditorTilesetFilter:
Categories: Aircraft
SpawnActorOnDeath:
RequiresCondition: airborne
Explodes:
Weapon: UnitExplode
RequiresCondition: !airborne
^Plane:
Inherits: ^NeutralPlane
@@ -761,8 +766,6 @@
TargetTypes: Ground, C4, DetonateAttack, Structure, NoAutoTarget
Armor:
Type: Light
Targetable:
TargetTypes: Ground, DetonateAttack
EditorTilesetFilter:
Categories: Decoration
@@ -787,6 +790,9 @@
^CivField:
Inherits: ^CivBuilding
-HitShape:
-Health:
-Explodes:
-Selectable:
-SelectionDecorations:
Tooltip:
@@ -904,6 +910,9 @@
Velocity: 86
EditorTilesetFilter:
Categories: Husk
RevealOnDeath:
Duration: 60
Radius: 4c0
^HelicopterHusk:
Inherits: ^BasicHusk
@@ -917,6 +926,9 @@
FallsToEarth:
BodyOrientation:
UseClassicFacingFudge: True
RevealOnDeath:
Duration: 60
Radius: 4c0
^Bridge:
Inherits@shape: ^1x1Shape

View File

@@ -95,11 +95,11 @@ TRAN.Husk:
Offset: 597,0,213
Sequence: rotor2
RevealsShroud:
Range: 10c0
Range: 8c0
Type: GroundPosition
RevealGeneratedShroud: False
RevealsShroud@GAPGEN:
Range: 8c0
Range: 6c0
Type: GroundPosition
RenderSprites:
Image: tran
@@ -135,6 +135,7 @@ BADR.Husk:
MinDamage: Undamaged
RenderSprites:
Image: badr
-RevealOnDeath:
MIG.Husk:
Inherits: ^PlaneHusk

View File

@@ -332,6 +332,8 @@ E7:
StandSequences: stand
AnnounceOnBuild:
AnnounceOnKill:
DetectCloaked:
CloakTypes: Cloak, Hijacker
Voiced:
VoiceSet: TanyaVoice
ProducibleWithLevel:
@@ -350,7 +352,7 @@ MEDI:
Tooltip:
Name: Medic
Health:
HP: 80
HP: 60
RevealsShroud:
Range: 3c0
Passenger:
@@ -536,11 +538,11 @@ SHOK:
Prerequisites: ~barr, stek, tsla, ~infantry.russia, ~techlevel.high
Description: Elite infantry with portable tesla coils.\n Strong vs Infantry, Vehicles\n Weak vs Aircraft
Valued:
Cost: 400
Cost: 300
Tooltip:
Name: Shock Trooper
Health:
HP: 60
HP: 50
Mobile:
Voice: Move
RevealsShroud:

View File

@@ -389,8 +389,9 @@ CTFLAG:
Name: Flag
WithBuildingBib:
HasMinibib: Yes
DamageMultiplier@INVULNERABLE:
Modifier: 0
-HitShape:
-Health:
-Explodes:
-Selectable:
-SelectionDecorations:
-Targetable:

View File

@@ -18,6 +18,7 @@ Player:
LowPowerSlowdown: 3
QueuedAudio: Building
SpeedUp: True
BuildTimeSpeedReduction: 100, 75, 60, 50
ClassicProductionQueue@Infantry:
Type: Infantry
LowPowerSlowdown: 3

View File

@@ -68,6 +68,7 @@ MSUB:
BuildAtProductionType: Submarine
BuildPaletteOrder: 60
Prerequisites: ~spen, stek, ~techlevel.high
BuildDuration: 1750
Description: Submerged anti-ground siege unit\nwith anti-air capabilities.\nCan detect other submarines.\n Strong vs Buildings, Ground units, Aircraft\n Weak vs Naval units\n Special Ability: Submerge
Valued:
Cost: 2000
@@ -182,6 +183,7 @@ CA:
BuildAtProductionType: Boat
BuildPaletteOrder: 50
Prerequisites: ~syrd, atek, ~techlevel.high
BuildDuration: 2000
Description: Very slow long-range ship.\n Strong vs Buildings, Ground units\n Weak vs Naval units, Aircraft
Valued:
Cost: 2400

View File

@@ -137,6 +137,9 @@ SPEN:
Type: Wood
RevealsShroud:
Range: 5c0
RevealGeneratedShroud: False
RevealsShroud@GAPGEN:
Range: 4c0
Exit@1:
SpawnOffset: 0,-213,0
Facing: 96
@@ -236,6 +239,9 @@ SYRD:
Type: Wood
RevealsShroud:
Range: 5c0
RevealGeneratedShroud: False
RevealsShroud@GAPGEN:
Range: 4c0
Exit@1:
SpawnOffset: -1024,1024,0
Facing: 160
@@ -551,8 +557,6 @@ AGUN:
RangeCircleType: aa
Power:
Amount: -50
DetectCloaked:
Range: 6c0
BodyOrientation:
UseClassicFacingFudge: True
@@ -602,6 +606,7 @@ DOME:
InfiltrateForExploration:
DetectCloaked:
Range: 10c0
RequiresCondition: !disabled
RenderDetectionCircle:
Power:
Amount: -40
@@ -804,15 +809,19 @@ FTUR:
SAM:
Inherits: ^Defense
Inherits@IDISABLE: ^DisabledOverlay
Inherits@shape: ^2x1Shape
Inherits@AUTOTARGET: ^AutoTargetAir
Inherits@shape: ^2x1Shape
HitShape:
Type: Rectangle
TopLeft: -768,-512
BottomRight: 768,512
Buildable:
Queue: Defense
BuildPaletteOrder: 100
Prerequisites: dome, ~structures.soviet, ~techlevel.medium
Description: Anti-Air base defense.\nRequires power to operate.\nCan detect cloaked units.\n Strong vs Aircraft\n Weak vs Ground units
Valued:
Cost: 750
Cost: 700
Tooltip:
Name: SAM Site
Building:
@@ -827,6 +836,9 @@ SAM:
Armor:
Type: Heavy
RevealsShroud:
Range: 6c0
RevealGeneratedShroud: False
RevealsShroud@GAPGEN:
Range: 5c0
WithBuildingBib:
HasMinibib: Yes
@@ -837,6 +849,7 @@ SAM:
WithTurretedSpriteBody:
Armament:
Weapon: Nike
LocalOffset: 0,0,320
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleOverlay:
@@ -844,8 +857,6 @@ SAM:
RangeCircleType: aa
Power:
Amount: -40
DetectCloaked:
Range: 6c0
BodyOrientation:
UseClassicFacingFudge: True
@@ -916,6 +927,9 @@ WEAP:
Type: Wood
RevealsShroud:
Range: 5c0
RevealGeneratedShroud: False
RevealsShroud@GAPGEN:
Range: 4c0
WithBuildingBib:
WithProductionDoorOverlay:
Sequence: build-top
@@ -1106,7 +1120,7 @@ PROC:
Armor:
Type: Wood
RevealsShroud:
Range: 6c0
Range: 5c0
RevealGeneratedShroud: False
RevealsShroud@GAPGEN:
Range: 4c0
@@ -1162,7 +1176,7 @@ SILO:
Tooltip:
Name: Silo
Building:
Adjacent: 4
Adjacent: 2
-GivesBuildableArea:
Health:
HP: 300
@@ -1333,7 +1347,7 @@ AFLD:
OrderName: SovietSpyPlane
Prerequisites: aircraft.soviet
Icon: spyplane
ChargeTime: 180
ChargeTime: 150
Description: Spy Plane
LongDesc: Reveals an area of the map\nand cloaked enemy units.
SelectTargetSpeechNotification: SelectTarget
@@ -1351,7 +1365,7 @@ AFLD:
OrderName: SovietParatroopers
Prerequisites: aircraft.soviet
Icon: paratroopers
ChargeTime: 360
ChargeTime: 300
Description: Paratroopers
LongDesc: A Badger drops a squad of infantry\nanywhere on the map.
DropItems: E1R1,E1R1,E1R1,E3R1,E3R1
@@ -1368,7 +1382,7 @@ AFLD:
OrderName: UkraineParabombs
Prerequisites: aircraft.ukraine
Icon: parabombs
ChargeTime: 360
ChargeTime: 300
Description: Parabombs
LongDesc: A squad of Badgers drops parachuted\nbombs on your target.
SelectTargetSpeechNotification: SelectTarget
@@ -1505,11 +1519,14 @@ STEK:
Dimensions: 3,3
LocalCenterOffset: 0,-512,0
Health:
HP: 600
HP: 800
Armor:
Type: Wood
RevealsShroud:
Range: 5c0
RevealGeneratedShroud: False
RevealsShroud@GAPGEN:
Range: 4c0
WithBuildingBib:
Power:
Amount: -100
@@ -1527,7 +1544,7 @@ BARR:
Prerequisites: anypower, ~structures.soviet, ~techlevel.infonly
Description: Trains infantry.
Valued:
Cost: 400
Cost: 500
Tooltip:
Name: Soviet Barracks
Building:
@@ -1609,7 +1626,7 @@ KENN:
Tooltip:
Name: Kennel
Building:
Adjacent: 4
Adjacent: 2
-GivesBuildableArea:
Health:
HP: 300
@@ -1656,7 +1673,7 @@ TENT:
Prerequisites: anypower, ~structures.allies, ~techlevel.infonly
Description: Trains infantry.
Valued:
Cost: 400
Cost: 500
Tooltip:
Name: Allied Barracks
Building:
@@ -1796,7 +1813,7 @@ SBAG:
Tooltip:
Name: Sandbag Wall
Health:
HP: 300
HP: 150
Armor:
Type: Wood
LineBuild:
@@ -1821,7 +1838,7 @@ FENC:
Tooltip:
Name: Wire Fence
Health:
HP: 300
HP: 150
Armor:
Type: Wood
LineBuild:
@@ -1849,7 +1866,7 @@ BRIK:
DamagedSounds: crmble2.aud
DestroyedSounds: kaboom30.aud
Health:
HP: 500
HP: 400
Armor:
Type: Concrete
Crushable:

View File

@@ -129,7 +129,7 @@ V2RL:
Tooltip:
Name: Heavy Tank
Health:
HP: 550
HP: 600
Armor:
Type: Heavy
Mobile:
@@ -213,6 +213,8 @@ V2RL:
VisualBounds: 44,38,0,-4
ProducibleWithLevel:
Prerequisites: vehicles.upgraded
DetectCloaked:
Range: 6c0
ARTY:
Inherits: ^Tank
@@ -322,7 +324,7 @@ MCV:
Armor:
Type: Light
Mobile:
Speed: 85
Speed: 71
Crushes: wall, mine, crate, infantry
RevealsShroud:
Range: 4c0
@@ -365,10 +367,11 @@ JEEP:
Range: 4c0
Turreted:
TurnSpeed: 10
Offset: 0,0,85
Offset: 0,0,128
Armament:
Weapon: M60mg
MuzzleSequence: muzzle
LocalOffset: 128,0,43
AttackTurreted:
WithMuzzleOverlay:
WithSpriteTurret:
@@ -407,7 +410,7 @@ APC:
Range: 4c0
Armament:
Weapon: M60mg
LocalOffset: 0,0,171
LocalOffset: 85,0,171
MuzzleSequence: muzzle
AttackFrontal:
WithMuzzleOverlay:
@@ -502,7 +505,7 @@ MGG:
Armor:
Type: Heavy
Mobile:
Speed: 85
Speed: 99
WithIdleOverlay@SPINNER:
Offset: -299,0,171
Sequence: spinner
@@ -535,7 +538,7 @@ MRJ:
Armor:
Type: Heavy
Mobile:
Speed: 85
Speed: 99
RevealsShroud:
Range: 7c0
WithIdleOverlay@SPINNER:
@@ -554,7 +557,7 @@ MRJ:
DeflectionStances: Neutral, Enemy
RenderJammerCircle:
DetectCloaked:
Range: 7c0
Range: 6c0
TTNK:
Inherits: ^Tank
@@ -563,13 +566,14 @@ TTNK:
Queue: Vehicle
BuildPaletteOrder: 170
Prerequisites: tsla, stek, ~vehicles.russia, ~techlevel.high
BuildDuration: 1166
Description: Tank with mounted tesla coil.\n Strong vs Infantry, Vehicles, Buildings\n Weak vs Aircraft
Valued:
Cost: 1350
Tooltip:
Name: Tesla Tank
Health:
HP: 400
HP: 450
Armor:
Type: Light
Mobile:
@@ -673,6 +677,7 @@ CTNK:
Queue: Vehicle
BuildPaletteOrder: 200
Prerequisites: atek, ~vehicles.germany, ~techlevel.high
BuildDuration: 1166
Description: Chrono Tank, teleports to areas within range.\n Strong vs Vehicles, Buildings\n Weak vs Infantry, Aircraft\n Special ability: Can teleport
Valued:
Cost: 1350
@@ -681,7 +686,7 @@ CTNK:
SelectionDecorations:
VisualBounds: 30,30
Health:
HP: 400
HP: 450
Armor:
Type: Light
Mobile:
@@ -743,6 +748,7 @@ STNK:
Queue: Vehicle
BuildPaletteOrder: 130
Prerequisites: atek, ~vehicles.england, ~techlevel.high
BuildDuration: 1166
Description: Lightly armored infantry transport\nwhich can cloak. Can detect cloaked units.\n Strong vs Light armor\n Weak vs Infantry, Tanks, Aircraft
Valued:
Cost: 1350

View File

@@ -426,19 +426,19 @@ sam:
idle: sam2
Facings: 32
UseClassicFacingFudge: True
Offset: -2,-2
Offset: -1,-2
damaged-idle: sam2
Start: 34
Facings: 32
UseClassicFacingFudge: True
Offset: -2,-2
Offset: -1,-2
make: sammake
Length: *
Offset: -2,-2
Offset: -1,-2
muzzle: samfire
Length: 18
Facings: 8
Offset: -2,-2
Offset: -1,6
bib: mbSAM
Length: *
Offset: 0,1

View File

@@ -2401,9 +2401,9 @@ Templates:
Size: 3,1
Categories: Beach
Tiles:
0: Beach
1: Beach
2: Beach
0: Water
1: Water
2: Water
Template@410:
Id: 410
Images: sh29.des

View File

@@ -630,7 +630,7 @@ Templates:
Id: 384
Images: xtra0001.int
Size: 1,1
Categories: Floor
Categories: Wall
Tiles:
0: Wall
Template@385:

View File

@@ -21,7 +21,7 @@
Warhead@3Eff: CreateEffect
Explosions: small_explosion
ImpactSounds: kaboom12.aud
ValidTargets: Ground, Ship
ValidTargets: Ground, Ship, Trees
Warhead@4EffWater: CreateEffect
Explosions: small_splash
ImpactSounds: splash9.aud
@@ -52,12 +52,20 @@
90mm:
Inherits: ^Cannon
Warhead@1Dam: SpreadDamage
Versus:
None: 30
Heavy: 115
105mm:
Inherits: ^Cannon
ReloadDelay: 70
Burst: 2
BurstDelay: 4
Warhead@1Dam: SpreadDamage
Versus:
None: 30
Heavy: 115
120mm:
Inherits: ^Cannon
@@ -66,6 +74,9 @@
InvalidTargets: Air, Infantry
Warhead@1Dam: SpreadDamage
Damage: 60
Versus:
None: 30
Heavy: 115
InvalidTargets: Air
TurretGun:
@@ -86,10 +97,10 @@ TurretGun:
Speed: 204
Blockable: false
LaunchAngle: 62
Inaccuracy: 2c256
Inaccuracy: 1c938
Warhead@1Dam: SpreadDamage
Spread: 426
Damage: 240
Damage: 230
Versus:
None: 90
Wood: 40
@@ -161,7 +172,7 @@ Grenade:
Spread: 256
Damage: 60
Versus:
None: 50
None: 60
Wood: 100
Light: 25
Heavy: 25

View File

@@ -16,7 +16,7 @@
Warhead@2Eff: CreateEffect
Explosions: self_destruct
ImpactSounds: kaboom22.aud
ValidTargets: Ground, Air, Ship
ValidTargets: Ground, Air, Ship, Trees
Warhead@3EffWater: CreateEffect
Explosions: large_splash
ImpactSounds: splash9.aud
@@ -39,7 +39,7 @@ CrateNapalm:
Warhead@2Eff: CreateEffect
Explosions: napalm
ImpactSounds: firebl3.aud
ValidTargets: Ground, Water, Air
ValidTargets: Ground, Water, Air, Trees
-Warhead@3EffWater: CreateEffect
Warhead@Smu: LeaveSmudge
SmudgeType: Scorch

View File

@@ -30,7 +30,7 @@
Warhead@3Eff: CreateEffect
Explosions: med_explosion
ImpactSounds: kaboom25.aud
ValidTargets: Ground, Air, Ship
ValidTargets: Ground, Air, Ship, Trees
Warhead@4EffWater: CreateEffect
Explosions: med_splash
ImpactSounds: splash9.aud
@@ -128,7 +128,7 @@ MammothTusk:
DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath
Warhead@3Eff: CreateEffect
ImpactSounds: kaboom12.aud
ValidTargets: Ground
ValidTargets: Ground, Trees
Warhead@5EffAir: CreateEffect
Explosions: med_explosion_air
ImpactSounds: kaboom25.aud

View File

@@ -29,6 +29,9 @@ FireballLauncher:
Speed: 250
TrailImage: fb2
Image: FB1
Warhead@1Dam: SpreadDamage
Versus:
Light: 50
Flamer:
Inherits: ^FireWeapon
@@ -88,6 +91,9 @@ PortaTesla:
Range: 6c0
Warhead@1Dam: SpreadDamage
Damage: 45
Versus:
Wood: 75
Heavy: 60
TTankZap:
Inherits: ^TeslaWeapon

View File

@@ -19,7 +19,7 @@
DamageTypes: Prone50Percent, TriggerProne, DefaultDeath
Warhead@2Eff: CreateEffect
Explosions: small_explosion_air
ValidTargets: Air, Ground, Water
ValidTargets: Air, Ground, Water, Trees
ZSU-23:
Inherits: ^AACannon
@@ -51,7 +51,7 @@ FLAK-23-AG:
ValidTargets: Air, Ground, Water
Warhead@2Eff: CreateEffect
Explosions: flak_explosion_ground
ValidTargets: Ground, Ship, Air
ValidTargets: Ground, Ship, Air, Trees
Warhead@3EffWater: CreateEffect
Explosions: small_splash
ValidTargets: Water, Underwater
@@ -75,7 +75,7 @@ FLAK-23-AG:
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
Warhead@2Eff: CreateEffect
Explosions: piffs
ValidTargets: Ground, Ship, Air
ValidTargets: Ground, Ship, Air, Trees
Warhead@3EffWater: CreateEffect
Explosions: water_piffs
ValidTargets: Water, Underwater
@@ -104,17 +104,18 @@ Vulcan:
Versus:
None: 200
Wood: 50
Light: 60
Light: 50
Heavy: 25
Concrete: 25
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
Warhead@4Eff_2: CreateEffect
Explosions: piffs
ValidTargets: Ground
ValidTargets: Ground, Ship, Trees
Delay: 2
Warhead@4Eff_2Water: CreateEffect
Explosions: water_piffs
ValidTargets: Water
ValidTargets: Water, Underwater
InvalidTargets: Ship, Structure
Delay: 2
Warhead@5Dam_3: SpreadDamage
Spread: 128
@@ -129,11 +130,12 @@ Vulcan:
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
Warhead@6Eff_3: CreateEffect
Explosions: piffs
ValidTargets: Ground
ValidTargets: Ground, Ship, Trees
Delay: 4
Warhead@6Eff_3Water: CreateEffect
Explosions: water_piffs
ValidTargets: Water
ValidTargets: Water, Underwater
InvalidTargets: Ship, Structure
Delay: 4
Warhead@7Dam_4: SpreadDamage
Spread: 128
@@ -148,11 +150,12 @@ Vulcan:
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
Warhead@8Eff_4: CreateEffect
Explosions: piffs
ValidTargets: Ground
ValidTargets: Ground, Ship, Trees
Delay: 6
Warhead@8Eff_4Water: CreateEffect
Explosions: water_piffs
ValidTargets: Water
ValidTargets: Water, Underwater
InvalidTargets: Ship, Structure
Delay: 6
Warhead@9Dam_5: SpreadDamage
Spread: 128
@@ -167,11 +170,12 @@ Vulcan:
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
Warhead@10Eff_5: CreateEffect
Explosions: piffs
ValidTargets: Ground
ValidTargets: Ground, Ship, Trees
Delay: 8
Warhead@10Eff_5Water: CreateEffect
Explosions: water_piffs
ValidTargets: Water
ValidTargets: Water, Underwater
InvalidTargets: Ship, Structure
Delay: 8
Warhead@11Dam_6: SpreadDamage
Spread: 128
@@ -186,11 +190,12 @@ Vulcan:
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
Warhead@12Eff_6: CreateEffect
Explosions: piffs
ValidTargets: Ground
ValidTargets: Ground, Ship, Trees
Delay: 10
Warhead@12Eff_6Water: CreateEffect
Explosions: water_piffs
ValidTargets: Water
ValidTargets: Water, Underwater
InvalidTargets: Ship, Structure
Delay: 10
ChainGun:
@@ -263,7 +268,7 @@ SilencedPPK:
Spread: 128
Warhead@2Eff: CreateEffect
Explosions: piffs
ValidTargets: Ground, Ship, Air
ValidTargets: Ground, Ship, Air, Trees
Warhead@3EffWater: CreateEffect
Explosions: water_piffs
ValidTargets: Water, Underwater
@@ -277,7 +282,7 @@ Colt45:
Damage: 50
Warhead@2Eff: CreateEffect
Explosions: piff
ValidTargets: Ground, Ship, Air
ValidTargets: Ground, Ship, Air, Trees
Warhead@3EffWater: CreateEffect
Explosions: water_piff
ValidTargets: Water, Underwater

View File

@@ -23,7 +23,7 @@ ParaBomb:
Warhead@3Eff: CreateEffect
Explosions: artillery_explosion
ImpactSounds: kaboom15.aud
ValidTargets: Ground, Ship
ValidTargets: Ground, Ship, Trees
Warhead@4EffWater: CreateEffect
Explosions: small_splash
ImpactSounds: splash9.aud
@@ -51,6 +51,7 @@ Atomic:
Explosions: nuke
ImpactSounds: kaboom1.aud
VictimScanRadius: 0
ValidTargets: Ground, Water, Air
Warhead@5Dam_areanuke1: SpreadDamage
Spread: 2c0
Damage: 60

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
<id>openra.desktop</id>
<id>openra-{MOD}.desktop</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0</project_license>
<name>OpenRA</name>
<name>OpenRA - {MOD_NAME}</name>
<summary>Reimagining of early Westwood real-time strategy games</summary>
<description>
<p>
@@ -25,15 +25,15 @@
</p>
</description>
<screenshots>
<screenshot type="default">
<screenshot{SCREENSHOT_RA}>
<image>http://www.openra.net/images/appdata/ingame-ra.png</image>
<caption>Red Alert mod</caption>
</screenshot>
<screenshot>
<screenshot{SCREENSHOT_CNC}>
<image>http://www.openra.net/images/appdata/ingame-cnc.png</image>
<caption>Tiberian Dawn mod</caption>
</screenshot>
<screenshot>
<screenshot{SCREENSHOT_D2K}>
<image>http://www.openra.net/images/appdata/ingame-d2k.png</image>
<caption>Dune 2000 Mod</caption>
</screenshot>

View File

@@ -9,7 +9,7 @@ if [[ "$OSTYPE" != "darwin"* ]]; then
command -v genisoimage >/dev/null 2>&1 || { echo >&2 "macOS packaging requires genisoimage."; exit 1; }
fi
LAUNCHER_TAG="osx-launcher-20170708"
LAUNCHER_TAG="osx-launcher-20170812"
if [ $# -ne "2" ]; then
echo "Usage: `basename $0` tag outputdir"

View File

@@ -28,6 +28,7 @@ rm -rf $HOME/openra-wiki
git clone git@github.com:OpenRA/OpenRA.wiki.git $HOME/openra-wiki
mono --debug ../OpenRA.Utility.exe all --docs > "${HOME}/openra-wiki/Traits${TAG}.md"
mono --debug ../OpenRA.Utility.exe all --weapon-docs > "${HOME}/openra-wiki/Weapons${TAG}.md"
mono --debug ../OpenRA.Utility.exe all --lua-docs > "${HOME}/openra-wiki/Lua API${TAG}.md"
pushd $HOME/openra-wiki

View File

@@ -100,7 +100,7 @@ namespace OpenRA
SHFILEINFO sfi = new SHFILEINFO();
for (var i = 0; i < 2; i++)
{
SHGetFileInfo(Assembly.GetExecutingAssembly().Location, 0, ref sfi, (uint)Marshal.SizeOf(sfi), (uint)(0x100 + i));
SHGetFileInfo(Assembly.GetExecutingAssembly().Location, 0, ref sfi, (uint)Marshal.SizeOf(typeof(SHFILEINFO)), (uint)(0x100 + i));
iconHandle[i] = sfi.hIcon;
SendMessage(gameProcess.MainWindowHandle, 0x80, (uint)(1 - i), sfi.hIcon);
}

View File

@@ -19,7 +19,7 @@ function get()
if [ ! -f SDL2.dll ]; then
echo "Fetching SDL2 from libsdl.org"
wget https://www.libsdl.org/release/SDL2-2.0.5-win32-x86.zip
curl -LOs https://www.libsdl.org/release/SDL2-2.0.5-win32-x86.zip
unzip SDL2-2.0.5-win32-x86.zip SDL2.dll
rm SDL2-2.0.5-win32-x86.zip
fi

View File

@@ -161,7 +161,7 @@ if (!(Test-Path "SmarIrc4net.dll"))
if (!(Test-Path "rix0rrr.BeaconLib.dll"))
{
echo "Fetching rix0rrr.BeaconLib from NuGet."
./nuget.exe install rix0rrr.BeaconLib -Version 1.0.0 -ExcludeVersion -Verbosity quiet
./nuget.exe install rix0rrr.BeaconLib -Version 1.0.1 -ExcludeVersion -Verbosity quiet
cp rix0rrr.BeaconLib/lib/net40/rix0rrr.BeaconLib.dll .
rmdir rix0rrr.BeaconLib -Recurse
}

View File

@@ -118,7 +118,7 @@ fi
if [ ! -f rix0rrr.BeaconLib.dll ]; then
echo "Fetching rix0rrr.BeaconLib from NuGet."
get rix0rrr.BeaconLib 1.0.0
get rix0rrr.BeaconLib 1.0.1
cp ./rix0rrr.BeaconLib/lib/net40/rix0rrr.BeaconLib.dll .
rm -rf rix0rrr.BeaconLib
fi