Compare commits

..

2806 Commits

Author SHA1 Message Date
AoAGeneral
299b757045 TD APC Change. 20180217
Changed the build timer for APCs from 14 seconds to 15 seconds.

An oddity here is that it wasn't exactly on 14 seconds. It was closer to 13.6 seconds.
Changing this to be about 14.8 seconds will help a little from the mass production problem
rather then changing damages or HP further.
2018-02-18 16:29:33 +01:00
Mustafa Alperen Seki
389e105e1c Add back palace stuff to prep, but without multipile Production: 2018-02-17 19:39:46 +01:00
abcdefg30
81ace98362 Make Aircraft spawn husks with a neutral owner 2018-02-17 12:24:23 +01:00
abcdefg30
4c347199f5 Fix FallsToEarth not accounting for effective ownership 2018-02-17 12:24:09 +01:00
abcdefg30
bf0a300682 Revert "Add conyard.corrino"
This reverts commit bdaff27656.
2018-02-08 21:09:41 +01:00
abcdefg30
d7310be875 Revert "Limit D2K Palace SWs to their Faction's Palaces'"
This reverts commit d110b9c648.
2018-02-08 21:09:41 +01:00
abcdefg30
a150800a1e Fix a "granted condition is never consumed" warning in D2k 2018-02-07 21:23:22 +01:00
Mustafa Alperen Seki
904b71b890 Seperate Imperial and Harkonnen Sardaukars 2018-02-06 21:21:27 +01:00
Mustafa Alperen Seki
bdaff27656 Add conyard.corrino 2018-02-06 21:11:17 +01:00
Mustafa Alperen Seki
5b0875f66f Make SPM not fire from an actor with disabled instance of a SW. 2018-02-06 21:11:15 +01:00
Mustafa Alperen Seki
d110b9c648 Limit D2K Palace SWs to their Faction's Palaces' 2018-02-06 21:11:14 +01:00
Mustafa Alperen Seki
94028c8246 Make SupportPowerChargeBar conditional 2018-02-06 21:11:13 +01:00
Mustafa Alperen Seki
766c091c1c Make PrimaryBuilding conditional. 2018-02-06 21:11:11 +01:00
Mustafa Alperen Seki
645b181af7 Add GrantConditionOnFaction. 2018-02-06 21:10:59 +01:00
Muh-Muh
6864b2462f Add Capture as a possibility for completing the objectives on Soviet06 2018-02-06 12:06:00 +01:00
Muh-Muh
16e63a9487 Add myself to authors 2018-02-06 12:03:00 +01:00
Muh-Muh
3c87adbad5 Make only the right warfactory infiltratable. don't break the game if a player manages without infiltration. 2018-02-06 12:02:58 +01:00
netnazgul
cff7c01de0 Revise the map pool of RA mod 2018-02-04 16:40:14 +01:00
Paul Chote
eba1f86572 Preserve arguments passed into the windows launcher. 2018-02-04 16:17:26 +01:00
Paul Chote
4113ac0771 Don't create invalid targets (dead actors) in UOG. 2018-02-04 15:52:02 +01:00
Paul Chote
3c445ef029 Prevent injected unpause orders from restarting a finished game. 2018-02-04 15:37:06 +01:00
Paul Chote
a88687257e Fix missing PauseStateLocked check on "/pause" chat command. 2018-02-04 15:36:53 +01:00
Paul Chote
60749b250f Fix missing click sounds on observer stat hotkeys. 2018-02-03 19:30:40 +01:00
Paul Chote
5f60fba445 Use EffectiveOwner for actor tooltips. 2018-02-03 18:35:16 +01:00
Paul Chote
ae03c66059 Add support for disabling IIssueDeployOrders. 2018-01-28 18:24:23 +01:00
RoosterDragon
53950fa7f4 Fix order serialization issues. 2018-01-28 15:45:31 +01:00
Paul Chote
efb51c19bd Revert "Remove CreateGroup order as the ActorGroupProxy is gone." 2018-01-28 15:08:02 +01:00
Paul Chote
88526d661d Work around duplicated notification sound when the ingame menu is open. 2018-01-28 14:58:04 +01:00
Paul Chote
d7b117ca92 Remove AddChatLine registration on IngameChatLogic dispose. 2018-01-28 14:57:48 +01:00
Smittytron
52d93d4654 Dial back Atry V2 min range change 2018-01-21 10:53:56 +01:00
Mustafa Alperen Seki
afa6e5ee10 Fix Flamers sometimes explode with UnitExplode 2018-01-20 23:59:10 +01:00
AoAGeneral
f4dba7f9c7 Changes in TD:
APC vs none decreased from 35 to 30

APC vs wood decreased from 35 to 25

APC vs heavy decreased from 35 to 25

Obelisk HP Increased from 600 (60000) to 750 (75000)

APCs are doing to much damage vs structures and heavy armor. They are managing to kill Guard Towers, light tanks, and power plants to effectively in numbers between 5 and 10. This will help to prevent this from happening. A small decrease vs infantry allows rocket infantry to last just a little bit longer as well.

Obelisk is getting a HP increase. Going from the old notes and responses happening now leaves me to believe its HP is to small. In one testing example an obelisk getting airstriked leaves it with no HP left. 4 minigunner shots and then it dies. Increasing the HP allows an expensive structure to stand longer.
2018-01-16 23:46:23 +01:00
Paul Chote
2b18c57b41 Remove helicopter RTB from TD command bar deploy description. 2018-01-14 23:26:13 +01:00
Paul Chote
adacbb1b9d Remove ReturnToBase order feedback if no RearmBuildings are defined.
ReturnToBase requires RearmBuildings to function.
2018-01-14 23:26:10 +01:00
Mustafa Alperen Seki
e4ae5a64b3 Add PrimaryBuilding: to D2K Palaces 2018-01-13 17:57:32 +01:00
Mustafa Alperen Seki
8f29983bd5 Make ProduceActorPower care for PrimaryBuilding 2018-01-13 17:57:18 +01:00
Arular101
49fd2ed6da Cast to long to avoid overflow when multiplying by the health (part 2) 2018-01-13 17:33:21 +01:00
Arular101
c9f9a8923a Cast to long to avoid overflow when multiplying by the health 2018-01-13 17:33:10 +01:00
Oliver Brakmann
bab8d70cd0 Fix primary building flag not working properly in D2k 2018-01-13 17:26:23 +01:00
Alexis Hunt
ce5911f47a Correct UI for unslowed queues in low power.
Because of the way the tick logic works, 0 (or any negative number) for
LowPowerSlowdown is functionally equivalent to 1. But LowPowerSlowdown
is multipled by a time in several cases, so while 1 will produce the
correct result (no slowdown), 0 will say that the time remaining is
00:00. Forbid nonpositive values, and correct the d2k mod which was
using 0.

Additionally, in the production tooltip, the colour should display as
white even in low power if there is no slowdown.
2018-01-13 16:14:33 +01:00
Mustafa Alperen Seki
ee0f7bc98a Make /kill and /dispose use orders. 2018-01-13 15:55:20 +01:00
Mustafa Alperen Seki
77ddb2386a Fix building armors in D2k 2018-01-11 18:06:35 +01:00
C. Helmig
73413a4e20 Fix d2k walls being always visible through f.o.w. 2018-01-11 17:35:13 +01:00
Alexis Hunt
dad11df42b Do not speed D2K upgrades up based on buildings. 2018-01-11 12:01:18 +01:00
C. Helmig
2bf1640e2b Added primary building and "PRIMARY" text to high tech factory. 2018-01-09 22:41:09 +01:00
C. Helmig
405d59a8ea Add production bar to high tech factory. 2018-01-09 22:41:09 +01:00
Paul Chote
eadf381843 Refresh lobby server list when switching to the Servers tab. 2018-01-09 21:55:47 +01:00
Paul Chote
7e8b0fd288 Use https for web services. 2018-01-09 20:52:42 +01:00
Mustafa Alperen Seki
dfd37ea7b6 Make 1st missions use same way as 2nd to disable upgrades 2018-01-08 20:53:00 +01:00
Mustafa Alperen Seki
c19c922931 Disable upgrades in 2nd missions 2018-01-08 20:52:36 +01:00
Mustafa Alperen Seki
0d2f8013a6 Fix the crash on Har5 2018-01-07 23:18:41 +01:00
Paul Chote
5a6afcb01e Remove "Mission Aborted" notification.
This has been causing confusion for players who have already completed a mission.
2018-01-06 20:38:51 +00:00
RoosterDragon
327f417024 ScreenMap should TickRender, rather than just Tick.
This is as FrozenUnderFog.TickRender queues an update to the screen map. If this is not processed in the same tick, this results in screen bounds for the frozen actor being 1 tick behind. By making ScreenMap TickRender, it ensures changes from both Tick and TickRender traits are processed, rather than just Tick traits.
2018-01-06 15:21:49 +01:00
RoosterDragon
4207717749 Revert "Fix actors disappearing for a tick when swapping to the frozen actor."
This reverts commit 2eb090f153.

This fixes flicker for the actor->frozen transition, but then introduces the same flicker for the frozen->actor transition instead.
2018-01-06 15:21:37 +01:00
Paul Chote
6922f7653e Fix crash when the mouse-overed support power loses all instances. 2018-01-06 14:36:02 +01:00
Mustafa Alperen Seki
ec54eca7f4 Remove ^Tank default from RA mod 2018-01-06 12:10:42 +01:00
GSonderling
9d8fea871c AI will now defend MCV as if it was a harvester or a building.
Adjusted comments.
2018-01-04 22:20:01 +01:00
FrameLimiter
aa50ce266e Fixes STEK TargetTypes in mission allies-06a
The Soviet Tech Centers were automatically being targeted by units.
2018-01-04 08:23:37 +01:00
FrameLimiter
716dd78058 Fixes STEK TargetTypes in mission allies-06b
The Soviet Tech Center was automatically being targeted by units.
2018-01-04 08:23:37 +01:00
Smittytron
6a1972f8bb Reduce value of TD Civilian to 10 2018-01-03 11:03:03 +01:00
Paul Chote
36c3e07535 Remove CRLF from GameServer.cs. 2018-01-01 21:12:58 +01:00
Paul Chote
58547fda89 Guess mod titles based on other versions, if they exist. 2018-01-01 21:12:58 +01:00
Paul Chote
73da5e7a20 Fix d2k ingame-client tooltip background. 2018-01-01 22:12:09 +02:00
Paul Chote
7f20d1474d Fix RA aircraft prerequisites. 2018-01-01 19:40:38 +01:00
Paul Chote
ee728be537 Fix WithCargo crash. 2018-01-01 19:25:50 +01:00
Paul Chote
7b056509ec Don't try to remove tooltips that haven't been added. 2018-01-01 18:23:16 +02:00
Paul Chote
2eb090f153 Fix actors disappearing for a tick when swapping to the frozen actor. 2018-01-01 16:01:44 +01:00
Paul Chote
f8abd5d319 Serialize the correct player in FrozenActor-targeting orders. 2018-01-01 16:01:44 +01:00
Paul Chote
b3cde077fc Don't break the order stream if a frozen actor refers to a bogus player. 2018-01-01 16:01:44 +01:00
Paul Chote
47fa9e496d Fix tooltips not showing for frozen actors with dead backing actors.
This also documents some old bugs.
2018-01-01 16:01:44 +01:00
abcdefg30
19a9c70d5c Fix the communications center being on low power 2018-01-01 15:49:56 +01:00
abcdefg30
94a062b3e7 Properly unload passengers in nod05
Also lets the transport fly out of the map
2018-01-01 15:49:56 +01:00
Andrii Yukhymchak
11db40a2b3 Fixed issue with unit ready when capturing 2018-01-01 12:52:47 +00:00
Paul Chote
dec11f4fa0 Force spectator color to white to avoid spoofing by the server. 2018-01-01 11:25:08 +01:00
Paul Chote
ae394f937b Fix the color validator overriding spectator colors. 2018-01-01 11:25:08 +01:00
Paul Chote
3353215b66 Add a total player count to the MP browser. 2018-01-01 11:12:27 +01:00
Paul Chote
cd6dfd2185 Work around the "BUG: in order targeter" game chat warning. 2018-01-01 10:48:03 +01:00
Paul Chote
e70b61c4b0 Fix Chrono Tanks telesporting towards (0,0) when force-moving to an actor. 2018-01-01 10:48:03 +01:00
Mustafa Alperen Seki
2f6bbd906b Ignore Silos for SW Targeting on Harkonnen Missions
Also Defences for Saboteur
2017-12-31 12:02:13 +01:00
reaperrr
8fe45cb894 Fix surface ships except transport being unable to exit ship yard 2017-12-31 08:36:37 +02:00
FrameLimiter
61df53ea82 Fixes civilian panic from civ building explosion
The Civilian building explosions were not making the civilians panic.
2017-12-31 03:26:17 +01:00
abc013
38c4c10c73 Added Allies-06b to the Red Alert mod 2017-12-31 02:51:03 +01:00
Mustafa Alperen Seki
1aa57cd5b1 Fix an owner change for Smugglers on Har6s. 2017-12-30 21:30:10 +01:00
Mustafa Alperen Seki
b7830d97f2 Add Harkonnen9b 2017-12-30 21:30:10 +01:00
Mustafa Alperen Seki
a80924ebb3 Add Harkonnen 8 2017-12-30 20:18:37 +01:00
Mustafa Alperen Seki
69e9b94c5d Add Campaign Tooltip to D2K 2017-12-30 17:40:09 +01:00
Paul Chote
45f346c004 Fix label offsets. 2017-12-30 17:03:58 +01:00
Paul Chote
7fba6a2155 Add a view-only server list tab to the multiplayer lobby. 2017-12-30 17:03:58 +01:00
Paul Chote
235b16d4b3 Split server list logic into its own LogicObject. 2017-12-30 17:03:58 +01:00
reaperrr
4ef11f2763 Fix TD Orca missiles alternating between offsets
This is now properly fixed by using Burst: 1.
2017-12-29 15:28:34 +00:00
reaperrr
b3c3c7b414 Make RA heli weapons alternate between offsets
Instead of using one for AG-only and one for AA-only.
2017-12-29 15:28:34 +00:00
reaperrr
9b629a8f39 Remove dysfunctional TS yaml hacks
In addition to now being redundant due to Armament-side cycling through LocalOffsets, these didn't work because Burst is reset once ReloadDelay is reached, so that equal BurstDelay never really had the intended effect.
2017-12-29 15:28:34 +00:00
reaperrr
cefe3d2c8f When Armament has multiple LocalOffsets but weapon has Burst: 1, cycle through offsets 2017-12-29 15:28:34 +00:00
Mustafa Alperen Seki
9871abe562 Make crushable conditional 2017-12-29 15:25:38 +00:00
Paul Chote
14f6601f2b Tweak wording of playtest notice. 2017-12-29 02:56:50 +01:00
Paul Chote
1d8b2a9a08 Replace contrast with shadow on main menu version label. 2017-12-29 02:56:50 +01:00
Paul Chote
5c53172ab0 Add an update warning to the main menu. 2017-12-29 02:56:50 +01:00
Paul Chote
3effa5cec4 Add a setting to disable version checks. 2017-12-29 02:56:50 +01:00
Paul Chote
0208d0cc10 Move the version check code to WebServices and run only on first launch. 2017-12-29 02:56:50 +01:00
FrameLimiter
759bd044ed Moved Chinook entry/exit points to edge 2017-12-29 01:29:32 +01:00
FrameLimiter
4cdab30c48 Added an entry delay to insertion transport 2017-12-29 01:29:32 +01:00
FrameLimiter
98ec28e850 Fixes the chinooks not being removed in Nod04b
∙The entry/exit points for the Chinooks were out bounds.
∙The rally/unload points for the Chinooks were very close together and causing unloaded cargo to overlap.
2017-12-29 01:29:32 +01:00
Paul Chote
ef680dbbfe Add tooltips to the password icon and player count. 2017-12-28 22:42:50 +01:00
Paul Chote
0eaec5d861 Add an animated reload glyph to the MP server refresh. 2017-12-28 22:42:50 +01:00
Mustafa Alperen Seki
7014393211 Move Generic Prefixes to yaml and add prefix for Neutral 2017-12-28 12:00:53 +00:00
Mustafa Alperen Seki
841c873276 Fix Crash when Mcv: UnitsCommonName is empty. 2017-12-28 11:36:44 +00:00
TheChosenEvilOne
15354f52c1 Added FACT unpack checkbox to ra/cnc/ts. 2017-12-28 11:22:29 +00:00
TheChosenEvilOne
1a947907d3 Make Transforms a PausableConditionalTrait. 2017-12-28 11:22:29 +00:00
reaperrr
3d4095cffd Make sure AttackOrFlee returns Attack when it makes sense
Not listing enemy "NearDead" and own relative atk power "Strong" here looked wrong, and might've resulted in no decision being made.
2017-12-28 11:00:18 +00:00
reaperrr
104148378f Remove some redundancy in AttackOrFleeFuzzy 2017-12-28 11:00:18 +00:00
reaperrr
6b567722b8 Factor number of bursts plus ReloadDelay into AttackOrFleeFuzzy.RelativePower 2017-12-28 11:00:18 +00:00
reaperrr
a4595af1e3 Make AttackOrFleeFuzzy consider all DamageWarheads instead of only the first 2017-12-28 11:00:18 +00:00
reaperrr
382c0b5f1d Make AI StateBase.CanAttackTarget only return true on valid armaments that are also enabled 2017-12-28 10:40:31 +00:00
reaperrr
e6835cef6e Replace some .Any checks with explicit .Count checks in AI 2017-12-28 10:40:31 +00:00
reaperrr
3fe808e0fb Make Ground and Navy AI squads look for enabled (instead of any) targetables 2017-12-28 10:40:31 +00:00
reaperrr
6de90b02d0 Unhardcode various AI squad radii 2017-12-28 10:40:31 +00:00
Arular101
eefaf23885 Fix global-bounty warnings 2017-12-28 10:23:23 +00:00
reaperrr
1bac76fdd1 Remove redundant custom Duration from Bomber John Chronoshift power
The MNLYR has ReturnToOrigin: false anyway, so this was redundant and made no difference whatsoever.
2017-12-28 10:04:43 +00:00
reaperrr
f0ee87f078 Upgrade TS rules to SupportPower seconds -> ticks 2017-12-28 10:04:43 +00:00
reaperrr
7fb595a437 Upgrade D2k rules to SupportPower seconds -> ticks 2017-12-28 10:04:43 +00:00
reaperrr
88704ebac6 Upgrade TD rules to SupportPower seconds -> ticks 2017-12-28 10:04:43 +00:00
reaperrr
aa6ddc6a6e Upgrade RA rules to SupportPower seconds -> ticks 2017-12-28 10:04:43 +00:00
reaperrr
b70e4de5ee Refactor support powers to use ticks instead of seconds for all delays - code changes
Also renamed ChargeTime to ChargeInterval.
2017-12-28 10:04:43 +00:00
Arular101
3d62b1f9b3 Adjusted Minigun damage vs wood to match current damage after multiplying by 100. From 8 * 0.6 = 4.8 (actual value is 4) to 800 * 0.5 = 400 2017-12-28 10:12:52 +01:00
Arular101
4ea6a3c18c Small adjustments 2017-12-28 10:12:52 +01:00
Arular101
e734668f56 Upgrade rules for increasing HP and damage by 100x for the TS mod 2017-12-28 10:12:52 +01:00
Arular101
be89ce9efd Add myself to authors 2017-12-28 10:12:52 +01:00
Arular101
ede72410ff Increase damage and HP by 100x 2017-12-28 10:12:52 +01:00
C. Helmig
3a9ee8d51a Fixes mines not being auto-targeted even if revealed. 2017-12-28 08:06:14 +01:00
Paul Chote
27beed402f Display information banners in the MP server browser.
Notices are provided for outdated / unknown mod versions
and latest but playtest available.
2017-12-28 03:40:41 +01:00
Paul Chote
e7ce9aa263 Unhardcode server ping/query URLs. 2017-12-28 03:40:41 +01:00
Michael Silber
86a17e9260 Added TS map They All Float (Westwood). Part of Issue #12518
Added me (frühstück) to AUTHORS
2017-12-27 22:09:09 +01:00
Paul Chote
c6ad768a76 Remove redundant powerdown conditions. 2017-12-27 20:18:27 +01:00
Paul Chote
5425a5a28e Replace CanPowerDown with ToggleConditionOnOrder. 2017-12-27 20:18:27 +01:00
Michael Silber
b8ec20a010 Carryall pickup indicator set to top, left corner 2017-12-27 19:07:44 +00:00
Michael Silber
c445a20acf D2K carryall pickup indicator offset fix 2017-12-27 19:07:44 +00:00
Mustafa Alperen Seki
7f77e4cf40 Remove ProductionDoorOverlay while transforming 2017-12-27 13:50:58 +00:00
Mustafa Alperen Seki
acf25354b0 Consider BuildAtProductionType for exit types too for normal ProductionQueue 2017-12-27 13:46:20 +00:00
Mustafa Alperen Seki
5ac0625f97 Add /kill and /dispose chat commands 2017-12-27 13:26:38 +00:00
Mustafa Alperen Seki
fc07391c8c Add Type Support for InfiltrateFor* traits 2017-12-27 11:13:09 +00:00
Mustafa Alperen Seki
f7de5d46be Allow GrantConditionOnPrerequisite to work on Player: 2017-12-27 02:31:07 +01:00
Matthias
7b6b79493c Replace @ with new lines in legacy map briefing sections 2017-12-27 02:12:58 +01:00
Michael Silber
a3b186ccbc Burnt Trees using RadarColor from trees; issue #14582 2017-12-26 23:45:37 +01:00
Paul Chote
c73ce50a09 Include bots in the player count for consistency with the sidebar. 2017-12-26 20:05:38 +01:00
Paul Chote
8fc2caa01a Change the "Empty" filter to not discard servers that have only spectators. 2017-12-26 20:05:38 +01:00
Paul Chote
bccc0f8f17 Add a player list to the MP server browser. 2017-12-26 20:05:38 +01:00
Paul Chote
3ba610b535 Implement new master server ping protocol. 2017-12-26 20:05:38 +01:00
Paul Chote
a3882501b1 Ignore malformed LAN advertisements instead of crashing.
This matches the behaviour for online game handling.
2017-12-26 20:05:38 +01:00
Paul Chote
ec97214c16 Fix ProductionOverlay crash. 2017-12-25 21:34:31 +01:00
Unknown
4be593123d add me (jongleur1983) to AUTHORS
#14558: MovingToRefinery takes actor instead of CPos

DeliveryOffset (previously added by the harvester) is now taken into account by the AutoCarryable
fix whitespaces
2017-12-25 03:52:44 +01:00
Peter Amrehn
73bd80ebc5 #14542: order CarrryAll to the target's location, not to 0,0
(which is in order.TargetLocation
#14542: don't use deprecated TargetActor property, replace by

Target.Actor.Location
2017-12-25 03:52:44 +01:00
Matthias
ebd8a2b193 Adhere to the ZeroBranePackage conventions. 2017-12-24 10:35:13 +00:00
Paul Chote
0b446167b6 Unify and tweak layout of MP browser window. 2017-12-24 01:47:44 +01:00
Paul Chote
959804b167 Restore separated server creation dialog.
This also adds details about advertising and configuration.
2017-12-24 01:47:44 +01:00
Paul Chote
5256fb7bbd Restore separated direct connect dialog. 2017-12-24 01:47:44 +01:00
Paul Chote
205c45198c Remove secondary AllowPortForward setting.
The global setting is fine, and this simplifies
both the code and the UI.
2017-12-24 01:47:44 +01:00
abcdefg30
38cb3dea05 Make vehicles spawn husks with a neutral owner 2017-12-24 00:41:15 +01:00
abcdefg30
a6258485c9 Add a "EffectiveOwnerFromOwner" property to change the effective owner of a spawned actor 2017-12-24 00:41:15 +01:00
abcdefg30
b99d21b818 Add support for carrying effective owners over to husk actors 2017-12-24 00:41:15 +01:00
abcdefg30
b9987dcbda Add a fallback to InternalOwner if the victim was defeated 2017-12-24 00:41:15 +01:00
abcdefg30
d4d9959159 Let Husk implement IEffectiveOwner 2017-12-24 00:41:15 +01:00
abcdefg30
eab93ccf97 Add an EffectiveOwnerInit 2017-12-24 00:41:15 +01:00
abcdefg30
503b91d391 Remove an unused using 2017-12-24 00:41:15 +01:00
abcdefg30
bd52e56aaf Add the possibility to deny spawning actors for dead players 2017-12-24 00:41:15 +01:00
RoosterDragon
e42e766bb6 Prevent incorrect usage of ModelRenderer.
Force BeginFrame/EndFrame to be called correctly, and prevent calls to RenderAsync when outside of a frame.
2017-12-23 22:58:17 +01:00
Paul Chote
4c64a37e1d Reject invalid orders from unvalidated clients. 2017-12-23 21:48:59 +01:00
Mustafa Alperen Seki
e2f3989f46 Fix that conditions for InitialUnits are not given 2017-12-23 21:22:31 +01:00
Mustafa Alperen Seki
65e4019424 Update some prerequisites to include subfactions too 2017-12-23 18:35:01 +00:00
Mustafa Alperen Seki
4490eb3a2a Change Smuggler Starport and Merc HFac Cameo to use Ordos ones 2017-12-23 18:28:00 +00:00
Mustafa Alperen Seki
d762411b95 Update D2K voice and notifications to include subfactions 2017-12-23 18:28:00 +00:00
Mustafa Alperen Seki
395eb36cd1 Update D2K FactionImages
Default is now Ordos, as there are 3 ordos subfactions and 2 for others.
Fremen now uses Atreides Structures as in original, rather than
Harkonnen
2017-12-23 18:28:00 +00:00
reaperrr
fbc18dfb18 Use HashSet instead of IEnumerable to pass actors to renderable lists 2017-12-23 17:56:11 +00:00
reaperrr
04fb0f209d Spatially partition some actor overlays 2017-12-23 17:56:11 +00:00
reaperrr
6ef95405bf Split overlay renderable generation to separate list
To make the code a bit more readable and consistent with normal renderables.
2017-12-23 17:56:11 +00:00
Paul Chote
4993e74748 Fix SelectionBox line depths. 2017-12-23 17:32:07 +00:00
Paul Chote
2794b14f52 Calculate actor preview bounds directly. 2017-12-23 17:16:13 +00:00
Mustafa Alperen Seki
7bf3d5d7f6 Fix Cruiser's Turret 2017-12-23 13:16:41 +01:00
Mustafa Alperen Seki
27cc487575 Add Harkonnen 9a 2017-12-22 12:22:08 +01:00
abcdefg30
3af3299921 Fix a crash in PlaceBuilding.cs 2017-12-22 09:06:27 +00:00
reaperrr
41dd7ca428 Fix NukeLaunch being displayed too early
Adding it to ScreenMap from the ctor unconditionally didn't mesh well with potentially being added to world with a delay.
2017-12-22 04:17:18 +02:00
Paul Chote
028f7c6546 Adjust TD airstrike targeting to account for limited visibility. 2017-12-22 02:33:25 +01:00
Paul Chote
2ad42b6a7e Account for visibility when selecting AI superweapon targets. 2017-12-22 02:33:25 +01:00
Paul Chote
9dc330b300 Update FrozenActor TargetTypes alongside other variable state. 2017-12-22 02:33:25 +01:00
Paul Chote
b9e03ac009 Add FrozenActorLayer.FrozenActorsInRegion. 2017-12-22 02:33:25 +01:00
Paul Chote
b221787350 Allow CellRegions to be created with MPos. 2017-12-22 02:33:25 +01:00
Paul Chote
d24d80f483 Update minigames for bounty checkbox. 2017-12-21 23:52:04 +01:00
Paul Chote
cd4f54ade3 Add Kill Bounties checkbox to RA. 2017-12-21 23:52:04 +01:00
Paul Chote
1a73a2578b Make GivesBounty conditional. 2017-12-21 23:52:04 +01:00
Paul Chote
e79680e22c Add LobbyPrerequisiteCheckbox trait. 2017-12-21 23:52:04 +01:00
Pavel Penev
f8b75bbed4 Fixed HarvesterInsurance assuming all refineries get free harvesters via FreeActorWithDelivery 2017-12-21 21:55:55 +00:00
Mustafa Alperen Seki
956dbb762c Add Harkonnen 7 2017-12-21 22:54:57 +01:00
reaperrr
14c608786d Fix ReloadAmmoPool upgrade rule 2017-12-21 21:29:51 +02:00
Paul Chote
cfb293a53a Add a pull request template with important contributor information. 2017-12-21 21:04:37 +02:00
Paul Chote
ec4cf0646f Rewrite Serialize to improve clarity. 2017-12-21 20:01:14 +01:00
Paul Chote
5b51261dd3 Serialize the correct target type. 2017-12-21 20:01:14 +01:00
Paul Chote
9c88fc154f Remove redundant switch from order serialization. 2017-12-21 20:01:14 +01:00
RoosterDragon
987d0b77ac When dumping syncable traits, use a struct for the synced values.
Since most traits have few syncable members, this allows us to avoid allocating an array whose lifetime is only a few ticks long. For traits with more members, we fall back to allocating the array.
2017-12-19 22:01:08 +02:00
RoosterDragon
ca01a1f186 Presize MemoryStream when possible.
Also use GetBuffer when we know we have presized the stream to the exact required size to prevent a needless copy.
2017-12-19 00:59:11 +01:00
RoosterDragon
5d8c9a560a Release audio resource for video when StopVideo is called. 2017-12-19 00:57:58 +01:00
RoosterDragon
3f8c1ad5df Don't allocate a full-sized array when creating a VertexBuffer.
We can allocate a much smaller zeroed buffer and copy that multiple times in order to zero the memory. When creating large VertexBuffers, this caps our temporary allocation size significantly.
2017-12-19 00:57:02 +01:00
Paul Chote
c269525397 Fix support power tooltip time coloring. 2017-12-19 00:55:09 +01:00
Mustafa Alperen Seki
77ef13816f Add 4PLAY10 2017-12-18 23:19:44 +00:00
Mustafa Alperen Seki
09f4c6339e Add 4PLAY8 2017-12-18 23:15:45 +00:00
Mustafa Alperen Seki
2251078dde Add 4PLAY5 2017-12-18 23:11:04 +00:00
Mustafa Alperen Seki
365251f845 Add 4PLAY1 2017-12-18 23:09:15 +00:00
Mustafa Alperen Seki
c6f0b3e1a0 Add 2PLAY14 2017-12-18 23:07:28 +00:00
Mustafa Alperen Seki
31206de855 Add 2PLAY11 2017-12-18 23:04:43 +00:00
Mustafa Alperen Seki
fe3534ebcd Add 2PLAY9 2017-12-18 23:02:29 +00:00
Mustafa Alperen Seki
0dd52acd98 Add 2PLAY4 2017-12-18 23:00:04 +00:00
Mustafa Alperen Seki
a36242d524 Add 2PLAY3 2017-12-18 22:57:32 +00:00
Mustafa Alperen Seki
ecc09256d8 Add 2PLAY5 2017-12-18 22:54:38 +00:00
Mustafa Alperen Seki
fe01afe794 Move Update Queue to bottom on Player.yaml and ingame-player.yaml 2017-12-18 19:22:07 +00:00
Mustafa Alperen Seki
6f41be209c Allow all upgradable structures to build upgrades. 2017-12-18 19:22:07 +00:00
Paul Chote
e35e93557c Remove obsolete NearestCellTo helper. 2017-12-18 07:47:15 +00:00
Paul Chote
30cafcbc25 Use Util.AdjacentCells to determine ExternalCapture validity.
This matches the set of cells targeted by MoveAdjacentTo.
2017-12-18 07:47:15 +00:00
reaperrr
85c54e04d9 Replace LINQ in AirStates.CountAntiAirUnits 2017-12-17 21:18:44 +00:00
reaperrr
01a88862b3 Remove IDisable for good 2017-12-17 21:18:44 +00:00
reaperrr
c1cba4ecc1 Make Gate more independent from Building and pausable-conditional
Replace Gate IsDisabled checks with IsTraitDisabled/Paused checks
2017-12-17 21:18:44 +00:00
reaperrr
383840135f Replace IsDisabled checks in production with IsTraitPaused/Disabled checks
Note: We might want to separate IsTraitDisabled checks later (possibly make the latter cancel the currently produced item), but that can be done in a follow-up.
2017-12-17 21:18:44 +00:00
reaperrr
3aa8b3ae29 Remove unit.IsDisabled check from AirStates 2017-12-17 21:18:44 +00:00
RoosterDragon
be761de768 Compute map UIDs without copying all data to a MemoryStream.
We can use MergedStream to create a single combined stream with all the input and pass this to the hash function. This saves copying all the data into a MemoryStream to achieve the same goal, which requires more memory and allocations.
2017-12-17 19:20:12 +01:00
Paul Chote
49f0e4ebcf Fix incorrectly named lobby option properties. 2017-12-17 14:51:10 +02:00
Paul Chote
1a405b17ba Register the current mod even if LaunchPath is bogus. 2017-12-17 04:21:17 +01:00
RoosterDragon
a9d1d374b8 Remove draw line 2D helper method.
Callers can provide 3D points easily, and this avoids the need to allocate and slow down enumeration via the points.Select(p => new float3(p, 0)) wrapper.
2017-12-17 01:51:51 +01:00
RoosterDragon
de38313579 Cache VariableExpressions on load.
Compiling these expressions is sadly expensive, and we needed new ones for every trait on every actor each time one was generated. The expressions thankfully can be shared as they are pure functions, which removes this overhead.
2017-12-17 01:42:21 +01:00
RoosterDragon
bf21fc5213 Use StringComparison.Ordinal for StartsWith checks in TechTree.cs. 2017-12-17 01:28:25 +01:00
RoosterDragon
13edaefcac Avoid LINQ when building map domains. 2017-12-17 01:28:25 +01:00
RoosterDragon
dd2ae9fe5e Avoid LINQ in some Tick methods.
As Tick is called often, avoiding allocation overhead in these methods is useful.
2017-12-17 01:28:25 +01:00
Kevin Hinton
86f9b8807e Add EffectiveOwner to Lua Scripting API. 2017-12-16 18:00:41 +00:00
FrameLimiter
72a11ec2a5 Removed duplicate values in defaults.yaml 2017-12-16 17:45:33 +00:00
FrameLimiter
60633dfdf2 Removed duplicate values in civilian.yaml 2017-12-16 17:45:33 +00:00
FrameLimiter
a6dc9c3b21 Removed duplicate value in allies-01 rules.yaml 2017-12-16 17:45:33 +00:00
RoosterDragon
5b51f2a0fa Avoid format strings in some places.
Where it is possible to directly concat strings, prefer this in some often-called methods.
2017-12-16 17:26:29 +01:00
RoosterDragon
f78c3bef33 Allow VS 2017 to format solution file. 2017-12-16 17:25:55 +01:00
RoosterDragon
c8c7629bce Convert some stray spaces to tabs. 2017-12-16 15:53:03 +00:00
Paul Chote
502c3e2bf5 Remove global chat integration. 2017-12-13 21:04:16 +01:00
GSonderling
488cec64b8 Added support for filtering exits by production type. 2017-12-13 04:08:52 +01:00
Arular101
1bf59e885d Upgrade rules for increasing HP and damage by 10x for the D2K mod 2017-12-12 23:56:25 +01:00
Arular101
50185d3ccd Small adjustments 2017-12-12 23:56:25 +01:00
Arular101
64a3187fd1 Increase damage and HP by 10x 2017-12-12 23:56:25 +01:00
Arular101
a1b3fe2bda Parabombs tooltip for airfield
with selection grouping
2017-12-12 23:14:30 +01:00
Arular101
56634564f2 Parabomb tooltip fixes 2017-12-12 23:14:30 +01:00
Mustafa Alperen Seki
fd1aa07f83 Adjust D2K Building Selection Boxes 2017-12-12 23:02:55 +01:00
Paul Chote
3ad6a87920 Center the vertical alignment of lobby options if less than the panel height.
This also enables an extra row to be shown before triggering the scroll bar.
2017-12-12 22:43:11 +01:00
Paul Chote
3f67feab0e Rename boolean LobbyOption fields. 2017-12-12 22:43:11 +01:00
Paul Chote
36fccbc453 Add Checkbox/Dropdown to lobby options yaml fields. 2017-12-12 22:43:11 +01:00
Paul Chote
ea32c758eb Expose default UI labels and tooltips to yaml. 2017-12-12 22:43:11 +01:00
Paul Chote
99908c4d80 Move hardcoded list of lobby options into yaml. 2017-12-12 22:43:11 +01:00
Paul Chote
2e24c14503 Make SpawnMPUnitsInfo fields readonly. 2017-12-12 22:43:11 +01:00
Paul Chote
2c17780b94 Make ShroudInfo fields readonly. 2017-12-12 22:43:11 +01:00
Paul Chote
763630f547 Make DeveloperInfo fields readonly. 2017-12-12 22:43:11 +01:00
Paul Chote
97cdce7448 Add additional metadata to lobby options. 2017-12-12 22:43:11 +01:00
Arular101
b71b2ad523 Upgrade rules for increasing HP and damage by 100x for the TD mod 2017-12-12 22:18:41 +01:00
Arular101
7ad989fc43 Adjust values in custom maps and missions 2017-12-12 22:18:41 +01:00
Arular101
4e62531b11 Adjust values to match current damage 2017-12-12 22:18:41 +01:00
Arular101
2e681ba674 Increase damage and HP by 100x 2017-12-12 22:18:41 +01:00
Arular101
917d6b7627 Upgrade rules for increasing HP and damage by 100x for the RA mod 2017-12-12 20:50:27 +01:00
Arular101
261126194c Balance changes from #14471 2017-12-12 20:50:27 +01:00
Arular101
8069247726 Adjust values in custom maps and missions 2017-12-12 20:50:27 +01:00
Arular101
a429a62bf9 Adjust values to match current damage 2017-12-12 20:50:27 +01:00
Arular101
e049452f22 Increase damage and HP by 100x 2017-12-12 20:50:27 +01:00
RoosterDragon
7760c41bd9 Avoid array resizing in OpenAlAsyncLoadSound.
- Where it is accessible, use the length of the stream to presize the MemoryStream to the correct size.
- Instead of copying out the result via ToArray, grab the underlying buffer via GetBuffer and use that to create the sound source.

This avoids extraneous copying of the array containing the audio.
2017-12-12 00:01:04 +01:00
RoosterDragon
0899d02377 Avoid allocations when generating RadarSignatureCells.
The RadarWidget can supply a reusable buffer to each trait to avoid individual traits having to return new enumerables. Additionally, this allows the two traits to avoid LINQ and further allocations as they can manually enumerate and populate the buffer themselves.
2017-12-12 00:00:51 +01:00
Mustafa Alperen Seki
c69df4eedf Make subfactions use UI for their main faction
So it won't crash if a human player uses them.
2017-12-11 23:43:10 +01:00
Paul Chote
6633483d12 Increase infantry mouse bounds to improve usability. 2017-12-11 19:45:07 +01:00
Paul Chote
55b6084b60 Add a lint test for conflicting Interactable and Selectable. 2017-12-11 19:45:07 +01:00
Paul Chote
c87409ed1a Remove legacy bounds code. 2017-12-11 19:45:07 +01:00
Paul Chote
bf57eceeec Select highest priority actor when not drag selecting. 2017-12-11 19:45:07 +01:00
Paul Chote
ff5b4b15b3 Introduce IDecorationBounds to replace Actor.SelectionOverlayBounds. 2017-12-11 19:45:07 +01:00
Paul Chote
6f5d035e79 Introduce IMouseBounds and split/rework mouse rectangles.
The render bounds for an actor now include the area covered
by bibs, shadows, and any other widgets. In many cases this
area is much larger than we really want to consider for
tooltips and mouse selection.

An optional Margin is added to Selectable to support cases
like infantry, where we want the mouse area of the actor
to be larger than the drawn selection box.
2017-12-11 19:45:07 +01:00
Paul Chote
8fcc80b05a Use IRender.ScreenBounds in ScreenMap.
Traits are now required to trigger a ScreenMap update whenever they
believe that their ScreenBounds have changed.
2017-12-11 19:45:07 +01:00
Paul Chote
fa65fef4d1 Add IRenderModifier.ModifyScreenBounds to support WithShadow. 2017-12-11 19:45:07 +01:00
Paul Chote
86bfe28ade Add ScreenBounds method to IRender interface.
This method is expected to return Rectangles that cover
the region where Renderables returned by Render may exist.
2017-12-11 19:45:07 +01:00
Paul Chote
46f6263061 Update ScreenMap state in a single pass at the end of the tick. 2017-12-11 19:45:07 +01:00
Paul Chote
373aaee004 Use World.(AddTo|RemoveFrom)Maps in Immobile/Building. 2017-12-11 19:45:07 +01:00
Paul Chote
9e18ec7314 Simplify ScreenMap bounds checking. 2017-12-11 19:45:07 +01:00
Paul Chote
cdc426d162 Add IActorPreview.ScreenBounds. 2017-12-11 19:45:07 +01:00
Paul Chote
29255c8e01 Add IModel.AggregateBounds and ModelAnimation.ScreenBounds.
The bounds define the smallest Rectangle that covers all
rotations of all frames within a model sequence.
2017-12-11 19:45:07 +01:00
Paul Chote
506b677527 Add ModelAnimation.IsVisible property. 2017-12-11 19:45:07 +01:00
Paul Chote
041431d966 Add ISpriteSequence.Bounds and Animation(WithOffset).ScreenBounds.
The bounds define the smallest Rectangle that covers all frames within a sequence.
2017-12-11 19:45:07 +01:00
reaperrr
85c5259361 Fix AI crashing when trying to make parachuted harvester search map for resources while mid-air 2017-12-11 01:55:18 +01:00
reaperrr
b5ffe17d60 Make AI skip harvester orders if map has no resources 2017-12-11 01:55:18 +01:00
reaperrr
9ad0d78cdd Make the AI only consider harvesters 'idle' if last resource search failed
Otherwise the AI would consider the harvester 'idle' in too many situations.
This way, the AI now only uses its own resource search algorithm if the next resource patch is too far away for the FindResources activity to find it.
2017-12-11 01:55:18 +01:00
reaperrr
4d553900cf Move up harv.IsEmpty check in HackyAI
This is a fairly cheap check, so we should perform it before the activity checks
2017-12-11 01:55:18 +01:00
RoosterDragon
70ffa99203 Fix some uses of Exts.IsTraitEnabled. 2017-12-11 01:46:41 +01:00
RoosterDragon
9241c0f8b7 Provide only one overload of IsTraitEnabled. 2017-12-11 01:46:41 +01:00
RoosterDragon
c75a866f0d Lazily allocate sheet builder in ModelRenderer.
Avoid allocating the sheet builder each frame until it is needed. For mods that do not need to render models, this avoids allocating a large buffer and backing sheet as it will never render to the sheet. For mods that do render models, but don't need any this frame, this avoids allocating a new SheetBuilder that will not be used.
2017-12-11 01:44:21 +01:00
RoosterDragon
ec84b61316 Reduce memory required in MovementClassDomainIndex
The number of distinct domains on a map is often dozens, or at most hundreds. We can use a ushort to represent this easily, and reduce the size of the backing storage required to track domain indicies over the whole map.
2017-12-11 01:41:07 +01:00
RoosterDragon
2dd1bd2d39 Initialize map inverse cell projections with capacity 1.
This prevents the capacity being set to 4 when the first item is added. For flat maps, the inverse projection will only ever be of size 1, thus this is sufficient capacity. For isometric maps, 1 is often sufficient, we only need more near height changes where the discontinuity means multiple cells may project back. We can pay for some reallocations to expand the size in these cases.

On flat maps, this reduces the memory required by the backing array 4x.
2017-12-11 01:38:17 +01:00
RoosterDragon
8ef8c60a1a Remove allocations when enumerating sync hashes on an actor.
Exposing Actor.SyncHashes as an array allows allocation free enumeration, we just need to adjust the SyncHash type to run the hash function.
2017-12-10 13:49:52 +00:00
RoosterDragon
5338784e45 Fix bad uses of FirstEnabledTraitOrDefault on TraitInfos.
These are not traits so this method does not work. We can use EnabledByDefault on the ConditionalTraitInfo instead.
2017-12-10 13:39:24 +00:00
RoosterDragon
7a7eed4fb7 Add FirstEnabledTraitOrDefault helper method.
This avoids the allocations caused by LINQ when using traits.FirstOrDefault(Exts.IsTraitEnabled). This is important in FrozenActorLayer.RefreshState which is called very often. We apply the new helper method to all areas using the old pattern. An overload that takes an array allows arrays to be enumerated without causing allocations.
2017-12-10 13:39:24 +00:00
Paul Chote
cb670d83b3 Set PredictedStance when changing stance from Lua. 2017-12-08 01:54:55 +01:00
reaperrr
1a20dd15cb Fix D2k hightech factory sprite offsets
To match original.
2017-12-08 02:41:11 +02:00
reaperrr
2218b1a078 Fix terrain type of d2k tile #401 2017-12-08 02:41:11 +02:00
reaperrr
ce88d50d9c Fix offset and animation speed of D2k refinery smoke overlay 2017-12-08 02:41:11 +02:00
Paul Chote
7ebea32be9 Remove hardcoded settings backend. 2017-12-08 01:29:15 +01:00
Paul Chote
eb3ab682e8 Remove unused hotkeys from each mod. 2017-12-08 01:29:15 +01:00
Paul Chote
b4c5346346 Migrate hotkey linter to HotkeyManager. 2017-12-08 01:29:15 +01:00
Paul Chote
74c390d1d0 Migrate input settings to HotkeyManager. 2017-12-08 01:29:15 +01:00
Paul Chote
2f79173044 Migrate hotkey consumers to HotkeyManager. 2017-12-08 01:29:15 +01:00
Paul Chote
35a3df3736 Duplicate default hotkeys in yaml. 2017-12-08 01:29:15 +01:00
Paul Chote
f98907f42e Add HotkeyManager class. 2017-12-08 01:29:15 +01:00
Paul Chote
811427adc4 Add HotkeyReference.IsActivatedBy method. 2017-12-08 01:29:15 +01:00
Paul Chote
c4237d6a1a Rename NamedHotkey to HotkeyReference. 2017-12-08 01:29:15 +01:00
abcdefg30
6dd42f7ab1 Replace bogus ROF values in missions 2017-12-07 20:44:41 +02:00
RoosterDragon
62ab6ae6f1 OccupiedCells and TargetableCells must return arrays, not just enumerables.
This allows callers to efficiently enumerate these returned collections without the allocation and overhead imposed by the IEnumerable interface. All implementations were already returning arrays, so this only required a signature change.
2017-12-07 20:39:30 +02:00
FrameLimiter
da036c5728 Fixes EditorTilesetFilter for T04 cactus 2017-12-05 21:32:28 +01:00
Smittytron
3d8ab75faf RA Balance changes (December 2017) 2017-12-05 12:38:13 +01:00
Paul Chote
9d2935935c Add a debug visualization for screen map rectangles. 2017-12-04 23:10:23 +01:00
Paul Chote
0f512088d2 Unify ingame-debug.yaml. 2017-12-04 23:10:23 +01:00
Paul Chote
1a1c6368fc Fix ScreenMap handling of flipped sprites. 2017-12-04 03:54:23 +02:00
Arular101
1b94378f71 Disable the new build radius lobby option for minigames 2017-12-02 20:26:23 +01:00
Mustafa Alperen Seki
f4086e4fe0 Update one of the dead worm tiles 2017-12-02 05:18:19 +01:00
Pavel Penev
77ae802b9c Added D2k asset installer d2k-e 2017-12-02 00:08:50 +01:00
Pavel Penev
8f5787a57f Added D2k asset installer d2k-d 2017-12-02 00:08:50 +01:00
Pavel Penev
45a2f5e6c1 Added D2k asset installer d2k-c 2017-12-02 00:08:50 +01:00
Pavel Penev
649971d517 Renamed D2k asset installers to systematize namings 2017-12-02 00:08:50 +01:00
Pavel Penev
450cbeea96 Added an extra bit of installer data to Install.log 2017-12-02 00:08:50 +01:00
Pavel Penev
e09d502ce1 Make mod launchers run the game inside a child launcher instead of via OpenRA.Game.exe
This also removes the need to manually set application icons on Windows.
2017-12-02 00:05:57 +01:00
Pavel Penev
bd67bd24c0 Pull out game loop initialization from OpenRA.Program into OpenRA.Game and exception handling into its own class under OpenRA.Game/Support 2017-12-02 00:05:57 +01:00
abcdefg30
f249554b4f Fix swapped waypoint naming in Survival 01 2017-11-30 02:00:43 +01:00
abcdefg30
53dabfeb49 Move all waypoints of Survival 01 inside the map bounds 2017-11-30 02:00:43 +01:00
abcdefg30
3a94312fcd Move all waypoints of Evacuation inside the map bounds 2017-11-30 02:00:43 +01:00
abcdefg30
616ee6cce4 Remove a misplaced camera actor 2017-11-30 02:00:43 +01:00
RoosterDragon
6a97502e09 Reuse buffers when loading Xcc databases.
We can reuse the list as a buffer when reading strings to avoid throwaway allocations, which will reduce GC pressure during loading.
2017-11-30 02:16:51 +02:00
reaperrr
c48ddbdfa5 Fix Mammoth Mk2 render bounds
And polish trait internals a little.
2017-11-29 11:39:24 +02:00
reaperrr
d21992130a Fix TS harvester render bounds 2017-11-29 11:39:24 +02:00
Paul Chote
4994716cf7 Ignore empty children when aggregating EventBounds. 2017-11-27 16:09:34 +02:00
dsimmons87
65a2410738 Fixed bug in map Retry Install
If the download failed, the map status would be MapStatus.DownloadError,
which would cause the Install method to return immediately. I've updated
the Install method now to account for MapStatus.DownloadError.
2017-11-27 15:18:33 +02:00
Paul Chote
8fea476a0d Fix NRE when ProvidesPrerequisite is defined on the player actor. 2017-11-26 19:51:46 +01:00
abcdefg30
ed67cea852 Fix a crash in Disguise.cs when order.TargetActor is null 2017-11-26 18:41:53 +01:00
abcdefg30
c83dda4ce7 Initialize AsActor as self.Info 2017-11-26 18:41:53 +01:00
abcdefg30
4c707ad6a6 Fix WithDisguisingInfantryBody crashing when losing the disguise 2017-11-26 18:41:53 +01:00
Arular101
02d57c5fee Soviet05 Radar Reveal
Added beacon and message
2017-11-26 17:26:57 +01:00
Mustafa Alperen Seki
2043576857 Add Modified Outpost tooltip to Ordos4. 2017-11-26 16:53:17 +01:00
Mustafa Alperen Seki
15b77f8d91 Add Harkonnen 5 2017-11-26 16:53:17 +01:00
Paul Chote
b898b5001a Rename AttackBase.IsAttacking to IsAiming to make its uses and assumptions clear. 2017-11-26 15:58:00 +01:00
Paul Chote
ea05221180 Count AttackStatus.NeedsToTurn as valid for AttackBase.IsAttacking. 2017-11-26 15:58:00 +01:00
Marwan
8a38c6ef23 WithTextDecoration Fix 2017-11-26 15:35:50 +01:00
Mustafa Alperen Seki
43d100246f Remove ^TowerHusk: 2017-11-26 15:26:44 +01:00
Mustafa Alperen Seki
73134b0417 Rename D2K vehicle husks 2017-11-26 15:26:44 +01:00
Smittytron
d5622ae1ca Fix TD cliff tiles 29-31 2017-11-26 15:17:38 +01:00
Arular101
3ed18f51e3 Fix V2 Rocket Launcher facings
Now with AmmoPool

V2 changes for Fort Lonestar
2017-11-26 15:01:43 +01:00
Paul Chote
855042894c Fix bogus cached PowerState for map placed actors. 2017-11-26 03:37:33 +01:00
reaperrr
5ec3ad0957 Fix turrets following target even if AttackTurreted is disabled or paused 2017-11-25 03:55:56 +02:00
reaperrr
e215c5019e Fix regressions introduced by #13998 2017-11-25 03:55:56 +02:00
reaperrr
6e59fe3bc2 Adapt TS to removal of IsDisabled checks from Attack* traits 2017-11-25 03:55:56 +02:00
reaperrr
456d32f3eb Make Attack* traits PausableConditional and replace IsDisabled with IsTraitDisabled checks 2017-11-25 03:55:56 +02:00
reaperrr
68487d1197 Replace turret IsDisabled check with AT.IsTraitDisabled check 2017-11-25 03:55:56 +02:00
reaperrr
cea2658f31 Remove IsDisabled from AffectsShroud traits
Makes them only disableable via conditions.
2017-11-25 03:55:56 +02:00
reaperrr
00cd7a8da5 Adapt TS to removal of actor IsDisabled check in Cloak 2017-11-25 03:55:56 +02:00
reaperrr
ede6d5a57d Remove Actor.IsDisabled check from Cloak
Makes cloaking only disableable via conditions.
2017-11-25 03:55:56 +02:00
Smittytron
9c729c77bc Add Real tough guy difficulty to Allies04 2017-11-24 00:35:39 +01:00
Paul Chote
7c901c27f1 Generate a versioned tarball during package creation. 2017-11-22 22:39:08 +01:00
Mustafa Alperen Seki
8ce460ad8c Fix badgers showing owner row on RA mod. 2017-11-22 18:24:50 +01:00
reaperrr
56b6aabbb8 Use new IAutoRenderSize for determining actor render bounds 2017-11-21 01:00:09 +02:00
reaperrr
2501a93b87 Remove superflous AutoSelectionSize from TS high bridge placeholder
It defines CustomSelectionSize, so AutoSelectionSize is redundant/wrong here.
2017-11-21 01:00:09 +02:00
reaperrr
5a596d27c9 Switch RenderNameTag to use SelectionOverlayBounds 2017-11-21 01:00:09 +02:00
reaperrr
6711af63eb Move SelectionBarsRenderable to Mods.Common 2017-11-21 01:00:09 +02:00
reaperrr
be290cfabd Split Actor.Bounds into RenderBounds and SelectableBounds
Additionally, internally renamed VisualBounds to SelectionOverlayBounds to avoid confusion with RenderBounds.

This step was necessary to prevent actors with selectable area smaller than their graphics to be removed too early from ScreenMap even though part of the graphics should still be visible.
RA cruisers were a prime example, but to a lesser extent several other actors were affected as well.

This separation also serves as preparation to determine the final RenderBounds from multiple source bounds later, to fix the remaining ScreenMap issues (building 'bibs', aircraft shadows).
2017-11-21 01:00:09 +02:00
Mustafa Alperen Seki
ca1448c7ba Add Support of Types for GivesBuildableArea 2017-11-20 16:17:13 +02:00
Paul Chote
4cbc2ee6f3 Add support for custom sell cursors. 2017-11-19 23:40:33 +01:00
Paul Chote
5030a2257e Delegate cursor selection to GlobalButtonOrderGenerator subclasses. 2017-11-19 23:40:33 +01:00
Arular101
586dd6541b More Changes 2017-11-19 23:23:24 +01:00
Arular101
9c61f524f0 Tooltip fixes 2017-11-19 23:23:24 +01:00
Paul Chote
10fb487abf Update macOS launcher/dependencies to latest tag.
This supports/forces the 64 bit mono runtime, and
is the first version that compiles all native code
using travis-ci.
2017-11-19 16:55:44 +00:00
Andre Mohren
25968ee66f Allow WithIdleOverlayInfo to render while the actor is being build. 2017-11-19 16:52:59 +00:00
Mustafa Alperen Seki
7b12cf887d Add Harkonnen 6b 2017-11-19 16:21:42 +01:00
Mustafa Alperen Seki
01c1e08bd8 Add Original Remap Palette for RA Mod Campaign
and Shellmap
2017-11-19 15:08:42 +01:00
Arular101
3e5829355d Small override fix mission Intervention 2017-11-19 13:48:42 +00:00
abcdefg30
48df21c4a5 Fix the insertion transport not being removed in allies03b
The exit was outside of the map's border
2017-11-19 14:42:37 +01:00
abcdefg30
8654bcc244 Fix the FreePrisoners objective being completed without freeing prisoners 2017-11-19 14:42:37 +01:00
abcdefg30
dddc5dc80f Capturing also fires OnRemovedFromWorld 2017-11-19 14:42:37 +01:00
abcdefg30
3e3d98c735 Resolve a TODO in allies03a.lua 2017-11-19 14:42:37 +01:00
Arular101
f16f9b8ae3 Allies06a Radar Reveal
Added beacon and message
2017-11-19 14:32:33 +01:00
Mustafa Alperen Seki
29ec16f15d Some changes to crate unit bonuses 2017-11-19 12:58:34 +00:00
FrameLimiter
1e94ded9dd Changed Warhead to Warhead@1Dam 2017-11-19 12:55:28 +00:00
FrameLimiter
edd9e39dcd Removed redundent LaunchAngle override on 8Inch 2017-11-19 12:55:28 +00:00
FrameLimiter
cfe1a8cd02 Removed the redundant overrides 2017-11-19 12:55:28 +00:00
FrameLimiter
e6f73dc68f Updated weapon trait names for drop-zone-w mission 2017-11-19 12:55:28 +00:00
FrameLimiter
c70efd4a14 Fixes PortaTesla Warhead override for drop-zone-tikiaki 2017-11-19 12:49:43 +00:00
FrameLimiter
b7c3bc4e25 Fixes PortaTesla Warhead override for drop-zone 2017-11-19 12:49:43 +00:00
RoosterDragon
471d7ae40d Run GC more during loading.
This helps reduce the peak GC size by trimming temporary loading garbage a bit more often, rather than just doing it at the end of loading.
2017-11-19 12:42:25 +00:00
RoosterDragon
a71a5cc71d Reduce the size of the sheets created for fonts.
- A 512x512 sheet is about half full after precaching and some usage, but uses 16x less memory than the default 2048x2048 sheet. This saving occurs twice as we maintain a managed buffer for this sheet.
- Only precache smaller fonts, as the larger fonts are less used and take up more space than is worthwhile.
- Only precache in white, as red is largely unused.
2017-11-19 12:40:04 +00:00
RoosterDragon
713cdaef5d Reduce allocations needed by ReplayConnection.
Packets from each chunk are now saved directly in an array, removing the overhead of a list. Additionally, a list is reused as a buffer for decoding packets into, preventing a new buffer from needing to be allocated for each chunk.
2017-11-19 12:11:38 +00:00
FrameLimiter
f4502e9aa7 Map editor fix for misplaced T09.Husk 2017-11-19 01:32:52 +01:00
FrameLimiter
a5d7218dee Removed TilesetOverride for desert tree husk t08 2017-11-19 01:29:30 +01:00
FrameLimiter
773a619d2d Palette fix for desert tree husks 2017-11-19 01:26:13 +01:00
Smittytron
20a25c2f5e TD disable DetectCloaked on low power 2017-11-18 16:06:25 +01:00
Smittytron
070c54d069 Disable DetectCloaked on low power Tesla Coil 2017-11-17 13:42:51 +01:00
abcdefg30
2836cec0a3 Fix reinforcements in Nod06a not playing a notification 2017-11-17 13:28:10 +01:00
Mustafa Alperen Seki
f35f6c0813 Move Sprite handling from Disguise to WithDisguisingInfantryBody 2017-11-15 15:48:24 +00:00
Mustafa Alperen Seki
ecdfcda43e Add DisguisedAsCondition 2017-11-15 15:48:24 +00:00
Arular101
3efce265a8 Reduce barrel explosion damage vs wood armor 2017-11-15 15:17:08 +00:00
Smittytron
9d45528496 Remove Airstrike from nod06a Normal Difficulty 2017-11-15 14:47:55 +00:00
Arular101
8bec765925 Campaign file changes and cleanup
Remove NoAutoTarget
2017-11-15 15:43:44 +01:00
Arular101
fd9cd78810 Fix spy voices 2017-11-15 15:20:34 +01:00
Mustafa Alperen Seki
bb600620a9 Add ShowTicks to InfiltrateForCash 2017-11-15 15:16:39 +01:00
Forcecore
c762453607 (External)Capturable are now conditional 2017-11-15 13:54:15 +02:00
reaperrr
a7620c97f0 Some internal renamings in power-related traits 2017-11-13 03:09:05 +02:00
reaperrr
7f5f2eac6f Don't scale RepairIndicator with zoom 2017-11-13 03:09:05 +02:00
reaperrr
d328b9b7d8 Adapt RA to low power/power-down refactor 2017-11-13 03:09:05 +02:00
reaperrr
bb790b83e6 Adapt TD to low power/power-down refactor
Removed CanPowerDown from TD buildings.

Manual power-down is intentionally not supported by the in-game UI, the remaining CanPowerDown entries were effectively bit-rot.
2017-11-13 03:09:05 +02:00
reaperrr
e0e1f56af5 Adapt D2k to low power/power down refactor 2017-11-13 03:09:05 +02:00
reaperrr
7537daf74e Adapt TS to power-related trait refactorings 2017-11-13 03:09:05 +02:00
reaperrr
99edc71c54 PowerDown/low power refactor upgrade rule 2017-11-13 03:09:05 +02:00
reaperrr
917c6884ed Make WithSpriteBody a pausable trait
Allowing to drop the PauseAnimationWhenDisabled property (in favor of using PausOnCondition).
2017-11-13 03:09:05 +02:00
reaperrr
786a0eb07f Refactor PowerManager and RequiresPower to use conditions
Instead of Actor.IsDisabled.
Added INotifyPowerLevelChanged interface to do so as efficiently as possible.
2017-11-13 03:09:05 +02:00
reaperrr
6c02e3f2b7 Refactor CanPowerDown to provide a condition instead of triggering IsDisabled 2017-11-13 03:09:05 +02:00
Pavel Penev
8d7eb0bc47 Fix order deserialization when there is no indended order subject 2017-11-13 00:37:44 +01:00
reaperrr
d602ec6485 Rename SelfReloads to AutoReloads 2017-11-12 19:48:06 +00:00
reaperrr
18c371d702 Changed AmmoCondition to support condition stacking 2017-11-12 19:48:06 +00:00
reaperrr
9dabc9d672 Upgrade rule for adapting to removal of Armament.OutOfAmmo 2017-11-12 19:48:06 +00:00
reaperrr
8b7a71685c Remove AmmoPool-awareness from Armament 2017-11-12 19:48:06 +00:00
reaperrr
ded92f394c Upgrade rule for AmmoPool.SelfReloads removal 2017-11-12 19:48:06 +00:00
reaperrr
6f95080aa4 Add ReloadAmmoPool and adapt AmmoPool
Refactored and simplified Rearm activity.
Uses local Reload now.

Removed AmmoPool.SelfReloads.
2017-11-12 19:48:06 +00:00
reaperrr
a017018bee Fix official mods Aircraft.RearmBuildings setups
Only aircraft that a) have an AmmoPool and b) don't auto-reload should define RearmBuildings.
2017-11-12 19:48:06 +00:00
Forcecore
d49c98ce18 Move activity implementation now uses ChildActivity 2017-11-12 19:46:05 +01:00
abc013
3092927a7f Added a visual explosion to e4 2017-11-12 18:34:03 +00:00
Smittytron
3ce6cac9f3 Clarify gdi07 Secondary Objective 2017-11-12 18:29:54 +00:00
Arular101
fdac023a8d Rename V2 Rocket to V2 Rocket Launcher 2017-11-12 18:26:46 +00:00
Andrii Yukhymchak
f4dbf55510 Chrono into map edge fix 2017-11-12 18:23:17 +00:00
Smittytron
e65ffc8be2 Change remaining Vulcan vs Light values to 50 2017-11-12 18:18:11 +00:00
Forcecore
ef878c6aeb Introduced CaptureTypes for TransformOnCapture 2017-11-12 18:14:30 +00:00
Mustafa Alperen Seki
3aa91a08cc Fix Fake Naval Yard's Name 2017-11-12 12:30:28 +00:00
Arular101
a8d27257eb Remove custom aud for cruiser in shellmap 2017-11-11 11:21:27 +01:00
Mustafa Alperen Seki
dadfc0b09c Fix AutoTargetPriority traits of ra infantry 2017-11-09 22:38:52 +02:00
abcdefg30
0377c8ae20 Replace bogus values in the Fort Lonestar rules 2017-11-09 22:24:14 +02:00
abcdefg30
eac9286b78 Fix tiling errors on some RA maps 2017-11-09 09:54:59 +01:00
Mustafa Alperen Seki
ba50fbba18 Dont show refund text if Sellable: trait is disabled. 2017-11-05 16:22:42 +02:00
Forcecore
4c78a05081 ADD GrantConditionOnAttack Trait
Useful for making Gattling weapons (Yuri's Revenge and C&C Generals) or
Boris (RA2) / Natasha (RA3) call for airstrike.
2017-11-04 17:18:24 +01:00
Mustafa Alperen Seki
8914227811 Add ShowTicks to sellable 2017-11-04 17:16:26 +01:00
Paul Chote
a3636c69d9 Update macOS launcher with space-in-filename metadata registration fix. 2017-11-04 16:23:41 +01:00
Paul Chote
faf2634e3d Upgrade mod rules. 2017-11-04 16:08:58 +01:00
Paul Chote
d2f0e5ac2d Replace Allow(Allies|Neutral|Enemies) with ValidStances enum. 2017-11-04 16:08:58 +01:00
Paul Chote
1caf982c1f Support multiple capture types on Capturable. 2017-11-04 16:08:58 +01:00
Mustafa Alperen Seki
77feb3f76d Add GPS Dots for Comm Center and Forward Command 2017-11-03 13:36:40 +01:00
Paul Chote
4fe7ffed85 Simplify and fix code quality in GpsDot. 2017-11-03 09:56:00 +01:00
Paul Chote
1376ad674e Remove Player.CanViewActor and .CanTargetActor. 2017-11-03 09:56:00 +01:00
Paul Chote
47634b25f9 Remove IFogVisibilityModifier. 2017-11-03 09:56:00 +01:00
Paul Chote
4dba9f5b88 Add RevealDisguiseType.Move. 2017-11-03 09:30:50 +01:00
Paul Chote
7afd219742 Expose Disguise ValidStances and TargetTypes to yaml. 2017-11-03 09:30:50 +01:00
Paul Chote
c9c7c5744c Explicitly implement interfaces in Disguise trait. 2017-11-03 09:30:50 +01:00
Mustafa Alperen Seki
bfe540cd8b Add Harkonnen 6a 2017-11-03 08:32:04 +01:00
abcdefg30
025d5c8d05 Fix the "Secure the convoy's path" objective being completed without securing a path 2017-11-03 07:54:48 +01:00
Mustafa Alperen Seki
817449c018 Fix Inconsistency with AcceptsDeliveredCash on RA mod 2017-11-01 20:41:00 +01:00
Andrii Yukhymchak
636a9a74a1 Font Crash gracious fallback 2017-11-01 18:50:15 +01:00
kosti1
6a750d7a65 Added buildradius checkbox to lobby options 2017-11-01 18:18:41 +01:00
Paul Chote
b8326bfead Fix crash with AllyRepair on dead structures. 2017-10-26 18:48:41 +03:00
Paul Chote
5f9a67ed87 Migrate frozen actors from ExtraData to Target. 2017-10-26 18:48:41 +03:00
Paul Chote
29c423772f Serialize order Target directly instead of TargetActor/TargetCell. 2017-10-26 18:48:41 +03:00
Andrii Yukhymchak
6e1c1eaa94 Submarine fix 2017-10-26 01:48:36 +02:00
Paul Chote
77a7453347 Improve WidgetUtils.WrapText performance on long lines. 2017-10-26 01:42:16 +02:00
Andre Mohren
88c94ee841 Allow remaining time to be hidden in ProductionPaletteWidget. 2017-10-26 01:31:32 +02:00
Andre Mohren
aadfcdac66 Allow RallyPoint cursor to be defined via Yaml 2017-10-26 01:28:42 +02:00
Andre Mohren
cfeeb6563e RallyPointIndicator now optional 2017-10-26 01:21:29 +02:00
abcdefg30
cba7c60f6f Fix the "Unit Ready" notification playing erroneously 2017-10-25 22:43:35 +01:00
Paul Chote
cfac996438 Generalize factionVariant to a TypeDictionary of Inits. 2017-10-22 03:32:21 +03:00
rob-v
315cc966f4 Clear team in lobby for spectators 2017-10-21 14:12:11 +01:00
Paul Chote
5540eb1f2f Specify C# 5 as the language version in the Makefile too. 2017-10-19 14:18:03 +02:00
RoosterDragon
3a9abda441 Specify C# 5 as the language version used in all projects.
Attempts to use features from a new version will generate compile errors (on Roslyn and possibly other compilers), preventing accidental adoption of new language features.
2017-10-19 14:18:03 +02:00
Pi Delport
7da7764a65 (Update my name) 2017-10-18 08:03:57 -05:00
Paul Chote
9bdedda43a Make float2 immutable. 2017-10-17 15:46:07 +02:00
Paul Chote
69b4b541d2 Fix mutable use of float2 in SpriteFont. 2017-10-17 15:46:07 +02:00
Paul Chote
bee3f33f5f Remove long dead ResourceBarStyle.Bevelled code. 2017-10-17 15:46:07 +02:00
Matthias
cdedd1c7ac Some packages have been renamed in openSUSE
tested with openSUSE Leap 42.3
2017-10-16 15:35:06 +02:00
Matthias
7675c87593 Nuget dependency was dropped in #13912 2017-10-16 15:35:06 +02:00
Sam Gleske
80ce6d9988 Update package-all.sh
- Remove subshells and instead use bash parameter expansion.
- Utilize a function with a subshell to make adding additional packages easy.
2017-10-16 15:12:42 +02:00
Matthias Mailänder
ebb982789e Display a blocked cursor when not allowed to MoveIntoShroud. 2017-10-16 14:38:26 +02:00
Matthias Mailänder
b27289106d Don't give an okay voice when not allowed to move into shroud. 2017-10-16 14:38:26 +02:00
Matthias Mailänder
d4340fa799 Add a MoveIntoShroud switch to AttackMove as well. 2017-10-16 14:38:26 +02:00
reaperrr
db2d432c39 Fix Helis facing target center instead of attacked position 2017-10-16 14:25:03 +02:00
reaperrr
95dbcc1273 Update upgrade rule dates
These were merged after the release preparation branch for release 20171014 was created.
2017-10-16 14:22:11 +02:00
Smittytron
5471a3e729 Assign Gunboat and Sub to Techlevel Low 2017-10-15 23:15:43 +02:00
Paul Chote
d967c564a2 Remove TargetActor and TargetLocation from order issuing. 2017-10-15 19:07:46 +02:00
Paul Chote
4896a90b8d Add plumbing to issue orders against a generic Target. 2017-10-15 19:07:46 +02:00
Paul Chote
19b2c33514 Remove unused code from AttackOrderPower. 2017-10-15 19:07:46 +02:00
Andre Mohren
10740de6e9 DefaultSpriteSequence now allows derived classes to enhance sprites. 2017-10-14 19:50:05 +02:00
Raffael Zica
f2b5040d30 YamlException is now thrown if WeaponInfo can not be found in Ruleset.Weapons
Removed invalid spacing at the end of the line 36 in ThrowsShrapnel

Prevented NullReferenceException in cases where weapons aren't optional
2017-10-14 14:12:08 +02:00
abc013
c8b2a7dc04 Changed Aircraft explosion 2017-10-14 13:59:59 +02:00
abcdefg30
7ccf41be77 Catch invalid default game speeds while loading the ruleset 2017-10-14 13:54:26 +02:00
gkaretka
97e0f17e15 Add notification sound when paratroopers land 2017-10-14 13:40:53 +02:00
abcdefg30
a8c6d12c43 Fix the map editor crashing on invisible actors 2017-10-14 13:35:33 +02:00
Paul Chote
0e3de71036 Add line limit to global chat. 2017-10-14 13:10:27 +02:00
Paul Chote
ef43d8a86f Add missing StringComparison to IngameChatLogic. 2017-10-14 13:10:27 +02:00
Paul Chote
75d4062698 Limit chat messages to 2500 characters. 2017-10-14 13:10:27 +02:00
Paul Chote
249e813444 Fix submarine autotarget behaviour. 2017-10-08 20:11:30 +02:00
Paul Chote
e3e5dc1b49 Fix Defend stance auto-targeting naval structures. 2017-10-08 20:11:30 +02:00
Paul Chote
f425cbe0a4 Fix double-chronoshift return location exploit. 2017-10-08 20:04:36 +02:00
Paul Chote
f96c2710cd Remove directory creation side effect from Platform.SupportDir. 2017-10-08 19:53:10 +02:00
abcdefg30
4bca0c4c24 Fix devastators being carryable while overloading 2017-10-08 18:48:28 +01:00
abcdefg30
49e1af7f3f Fix the devastator lint warnings 2017-10-08 18:48:28 +01:00
abcdefg30
0727f7e9ff Only lint system maps 2017-10-08 18:23:25 +01:00
abcdefg30
5fdb828b60 Log which maps are processed by UpgradeModCommand
Upgrading the maps can take quite some time,
and at the moment you are left without information if something is happening.
2017-10-08 18:23:25 +01:00
abcdefg30
98170b0452 Use MapCache.LoadMapsWithoutCaching in UpgradeModCommand 2017-10-08 18:23:25 +01:00
abcdefg30
27345c1f6a Fix map linting crashing for not existing directories 2017-10-08 18:23:25 +01:00
abcdefg30
24c293e821 Fix Cargo force-requiring ConditionManager 2017-10-08 13:32:22 +01:00
abcdefg30
2366490fa0 Add an domain index check 2017-10-08 13:08:51 +02:00
abcdefg30
f48ba0ff86 Find alternative landing spots for blocked reinforcements 2017-10-08 13:08:51 +02:00
DeadlySurprise
80bf36e1a8 Deprecate Actor.IsDisabled 2017-10-08 00:12:15 +02:00
abc013
fb74c8351f Change Road -> Bridge on bridge tiles 2017-10-07 10:27:18 +02:00
reaperrr
8533debc44 Require explicit INotifyAddedToWorld and INotifyRemovedFromWorld 2017-10-07 10:17:11 +02:00
reaperrr
8ec3d5ddb8 Require explicit ITickRender 2017-10-07 10:17:11 +02:00
reaperrr
0ce3c113e1 Require explicit ITargetableCells 2017-10-07 10:17:11 +02:00
reaperrr
7ca9679b34 Require explicit ITargetablePositions 2017-10-07 10:17:11 +02:00
Andre Mohren
edeb980f5b Implemented a percentual chance to play the ImpactSound to CreateEffectWarhead 2017-10-07 10:15:22 +02:00
Matthias Mailänder
5b16bb952f Count all zero images as valid. 2017-10-07 10:09:35 +02:00
Matthias Mailänder
a8288a38f8 Allow sprites with empty frames to pass the ShpTS checks. 2017-10-07 10:09:35 +02:00
Matthias Mailänder
d7323e07cc Avoid modData.MapCache during lint checks 2017-10-07 10:08:53 +02:00
Mustafa Alperen Seki
2102fad2b5 Add CashTricklerBar 2017-10-06 23:02:02 +02:00
Mustafa Alperen Seki
a4b0bf5c52 Make CashTrickler PausableConditional 2017-10-06 23:02:02 +02:00
Mustafa Alperen Seki
049096efd7 Add InitialDelay to CashTrickler 2017-10-06 23:02:02 +02:00
abc013
dfe2076826 Fix passive vehicles can become ranks 2017-10-06 22:24:24 +02:00
abc013
f84699454f Fix some tiling errors in the map Haos Ridges [RA] 2017-10-06 22:04:32 +02:00
abc013
8c387c3bcf Fix a tile error in map Asymetric Battle [RA] 2017-10-06 22:02:39 +02:00
Andre Mohren
4e45747b41 Game no longer crashes if no ResourceLayer is used. 2017-10-06 21:57:57 +02:00
Matthias Mailänder
d64a9e6afc Add Devastator reactor overload upon deployment 2017-10-06 18:14:17 +02:00
Matthias Mailänder
370ee0841f Add GrantsCondition to KillsSelf 2017-10-06 18:14:17 +02:00
Forcecore
18c6fe09db Sound and Animation support for DonateCash 2017-10-06 18:07:18 +02:00
Paul Chote
d170262e09 Fix yaml merging of nodes that define their own overrides. 2017-10-06 17:54:11 +02:00
Paul Chote
18f6317560 Add a unit test for merging duplicated yaml nodes. 2017-10-06 17:54:11 +02:00
abcdefg30
178e7afd30 Remove a tiny bit of duplication on the TS walls 2017-10-06 15:38:53 +02:00
Paul Chote
4aee91cd47 Remove unnecessary trait lookups when cloaking/decloaking. 2017-10-06 10:09:12 +02:00
gkaretka
cf4c16b6bb Add .idea to .gitignore 2017-10-04 11:20:19 +02:00
abc013
b55ae1dcf0 Fixed TS Hand of Nod lights 2017-10-03 13:52:06 +02:00
Paul Chote
a1347a7f32 Populate MapLocations from LoadMaps.
This ensures that the map locations won't be created by the utility
but means that LoadMaps must be called before attempting to use MapLocations.
2017-09-30 17:37:52 +02:00
Paul Chote
64afe4cfde Display (attack|assault)move-blocked cursor outside map bounds.
This makes them consistent with the regular move order.
2017-09-30 14:33:40 +02:00
Paul Chote
e93183f0eb Clamp out of bounds attack-move orders to the edge of the map. 2017-09-30 14:33:40 +02:00
Paul Chote
36af2107d6 Fix the attack move order generator activating with an empty selection. 2017-09-30 14:33:40 +02:00
Paul Chote
d8f53a9ccd Fix crash when selection contains destroyed actors. 2017-09-30 14:33:40 +02:00
Paul Chote
fa8ab19dfd Fix global chat history buffer timestamps. 2017-09-28 15:09:12 +02:00
reaperrr
9aaf800bca Require explicit INotifyActorDisposing 2017-09-28 13:14:08 +02:00
reaperrr
5026dfe5d3 Require explicit INotifyCreated 2017-09-28 13:14:08 +02:00
reaperrr
6f790938d0 Require explicit IGameOver 2017-09-28 13:14:08 +02:00
reaperrr
2b391d5724 Require explicit ICreatePlayers 2017-09-28 13:14:08 +02:00
reaperrr
d7c2c6afc4 Require explicit INotifySelected and INotifySelection 2017-09-28 13:14:08 +02:00
reaperrr
a8e6cd2604 Require explicit IRenderOverlay 2017-09-28 13:14:08 +02:00
Paul Chote
69daa7e7cc Don't draw mine overlay for single-cell fields. 2017-09-27 21:00:56 +02:00
Paul Chote
a0e028ee0e Fix mine field overlay extending to map corner for the first tick. 2017-09-27 21:00:56 +02:00
Paul Chote
cc17b7419a Add voice feedback when issuing a mine deploy order. 2017-09-27 21:00:56 +02:00
Paul Chote
1d6cd81690 Add mine deployment to the command bar. 2017-09-27 21:00:56 +02:00
Jean-Rémy Buchs
2b96c2ed78 Add RequiresCondition to ProvidesPrerequisite 2017-09-24 14:56:47 +01:00
rob-v
c9b4568117 Add Statistics options hotkeys 2017-09-24 15:32:02 +02:00
Forcecore
b86d632c8c Land activity now lets the actor to land midair
Midair, at the altitude of the target actor.
2017-09-24 15:03:20 +02:00
Matthias Mailänder
205c947670 Settings documentation is no longer aimed at server admins. 2017-09-24 14:18:20 +02:00
Matthias Mailänder
030c942f73 Describe SendSystemInformation so people know how to opt-out. 2017-09-24 14:18:20 +02:00
Matthias Mailänder
da02620c4e Add field description from current Settings wiki entry. 2017-09-24 14:18:20 +02:00
Matthias Mailänder
2cf102d81a Remove trailing spaces. 2017-09-24 14:18:20 +02:00
Matthias Mailänder
95278b1f07 Don't add the launch arguments to the settings documentation. 2017-09-24 14:18:20 +02:00
Matthias Mailänder
faad941714 git ignore the auto-generated settings documentation 2017-09-24 14:18:20 +02:00
Matthias Mailänder
7549abc516 Wiki publish the auto-generated settings documentation. 2017-09-24 14:18:20 +02:00
Matthias Mailänder
1d8a50cdab Add build script support for the settings documentation. 2017-09-24 14:18:20 +02:00
Matthias Mailänder
0018bf3063 Add start and stop repair overlay animation support. 2017-09-24 11:43:49 +01:00
RoosterDragon
7160c8a1a9 Allow multiple VocFormat streams.
VocFormat.GetPCMInputStream now returns independent streams, allowing multiple instances of the same source to be streamed.
2017-09-24 11:23:39 +01:00
RoosterDragon
7ed769421e Providing streaming WavFormat data.
WavFormat.GetPCMInputStream now returns data that is streamed, rather than a MemoryStream.
2017-09-24 11:23:39 +01:00
reaperrr
4ae92a5c22 Only add partitioned effects to ScreenMap if (current) bounds are valid
This serves to avoid adding effect where either width or height is 0.
2017-09-24 10:54:58 +01:00
reaperrr
593e86325b Fix SpriteEffect not updating ScreenMap 2017-09-24 10:54:58 +01:00
reaperrr
eea14ec922 Fix DepthCharge dealing no damage to surfaced subs 2017-09-23 20:06:23 +01:00
reaperrr
eb3b68e24a Fix DepthCharge not showing an explosion when hitting emerged subs 2017-09-23 20:06:23 +01:00
reaperrr
1d402d4f8b Fix submerged sub vulnerability to most weapons 2017-09-23 20:06:23 +01:00
Andre Mohren
800f6adc21 Made WithSpriteTurret.TurretOffset protected virtual to be overridden by mod traits. 2017-09-22 13:29:15 +02:00
Matthias Mailänder
d17e414648 Fix the overlay to actor rule for crates 2017-09-22 13:04:29 +02:00
Matthias Mailänder
44cfa793df Don't import veinholedummy and correct it's index
as it is a Westwood hack we don't need to immitate.
There are already better ways to limit vein growth.
2017-09-22 13:04:29 +02:00
Paul Chote
48a018d994 Fix cheats reenabling OneShot support powers. 2017-09-19 17:53:53 +02:00
Matthias Mailänder
3af0b1a7a0 Remove PlayerPaletteFromCurrentTileset. 2017-09-17 16:20:38 +02:00
RoosterDragon
3b4904775a Remove OpenAlStreamingSound.
Whilst the implementation appears to work most of the time, it sometimes stops playing audio mid-track. This could be an implementation issue, or bugs in the underlying streaming APIs of the OpenAL library. Either way, it is not currently reliable enough to be used.
2017-09-17 15:50:49 +02:00
RoosterDragon
94942cb140 Create OpenAlAsyncLoadSound.
This loads the sound inside a task, then begins playing it, avoiding blocking the UI thread. Unlike OpenAlStreamingSound it does not stream the sound from disk, rather, it loads the entire sound into memory and plays it in one go.
2017-09-17 15:50:49 +02:00
Paul Chote
f4c2b36778 Fix height calculations in custom terrain layers. 2017-09-17 15:35:40 +02:00
reaperrr
c3ece99796 Spatially partition SatelliteLaunch and GpsSatellite effects 2017-09-17 12:52:04 +01:00
reaperrr
be370cb855 Spatially partition NukeLaunch effect 2017-09-17 12:52:04 +01:00
reaperrr
9aa861eca9 Spatially partition CrateEffect 2017-09-17 12:52:04 +01:00
reaperrr
46132ed5c6 Spatially partition SpriteEffect 2017-09-17 12:52:04 +01:00
Matthias Mailänder
1aebf9857c Add support for only rendering effects inside screen bounds 2017-09-17 12:52:04 +01:00
Matthias Mailänder
8ca43e3d6b Import map Hidden Valley 2017-09-17 11:45:45 +01:00
abcdefg30
1f6b9a7638 Add missing wall tiles to the interior tileset 2017-09-16 17:31:15 +02:00
reaperrr
32df83d3c4 A few more misc explicit interface changes
By-products of making ITick require explicit implementation.
2017-09-16 15:51:37 +02:00
reaperrr
28e1f391e0 Make ITick require explicit implementation 2017-09-16 15:51:37 +02:00
reaperrr
85e60ef77f More misc explicit interface implementations
By-product from making ITick explicit in various places.
2017-09-16 15:51:37 +02:00
reaperrr
03c3a5f310 Make ITick implementations explicit in OpenRA.Game 2017-09-16 15:51:37 +02:00
reaperrr
ec354f89cd Make ITick implementations explicit in Mods.Cnc and Mods.D2k 2017-09-16 15:51:37 +02:00
reaperrr
83afcc3448 Some misc explicit interfaces
Just a by-product from a previous commit, not meant to do anything specific other than bringing us a tiny step closer to requiring explicit implementations for these interfaces too, at some point.
2017-09-16 15:51:37 +02:00
reaperrr
761a4f29ab Make INotifyIdle and INotifyBecomingIdle require explicit implementation 2017-09-16 15:51:37 +02:00
reaperrr
ddfed13db4 Make Tick and TickIdle explicit in WithInfantryBody 2017-09-16 15:51:37 +02:00
Smittytron
a1ef581749 Remove EjectOnDeath from Vehicles 2017-09-16 14:10:54 +01:00
reaperrr
0c73baab3e Add large blue tib crystals to Hot Springs
Matching original positions.
2017-09-16 13:50:17 +02:00
reaperrr
89c143ae85 Fix remapable TS big blue tib crystal sequence offset 2017-09-16 13:50:17 +02:00
abcdefg30
d99a472456 Fix HackyAI trying to deploy undeployable actors 2017-09-16 11:01:53 +01:00
Paul Chote
42c4c7b7eb Fix compile error in CommandBarLogic. 2017-09-15 22:49:56 +01:00
Paul Chote
e04ae9aa2c Move remaining hardcoded selection power keys into yaml. 2017-09-15 23:06:38 +02:00
Paul Chote
83d522d945 Split unrelated hotkeys from WorldInteractionController. 2017-09-15 23:06:38 +02:00
Paul Chote
0e3bfcfb35 Replace WorldCommandWidget with individual logic classes. 2017-09-15 23:06:38 +02:00
Paul Chote
983f9c4cde Remove hardcoded DevReloadChrome and HideUserInterface hotkeys. 2017-09-15 23:06:38 +02:00
Paul Chote
25e88008ef Make the mute hotkey global. 2017-09-15 23:06:38 +02:00
Paul Chote
c759a68492 Move hardcoded screenshot hotkey into yaml. 2017-09-15 23:06:38 +02:00
Paul Chote
8c4afa414a Add a base single-hotkey logic class to avoid future duplication. 2017-09-15 23:06:38 +02:00
Paul Chote
c6fe1639db Support multiple key handlers. 2017-09-15 23:06:38 +02:00
Paul Chote
7459050af9 Rework global music hotkey bindings. 2017-09-15 23:06:38 +02:00
reaperrr
08aaa998aa Fix AI BuildingLimits
The AI BaseBuilder would allow building a structure not only when the current number was lower, but also of it was equal to the limit, which allowed the AI to build one too much of every building.
2017-09-15 19:31:57 +01:00
reaperrr
dbcfb0c92e Rename and move WithTurretedSpriteBody
The name wasn't in line with our implicit naming convention and ambigous on top of that.
Also, only used by RA and TD so moved to Mods.Cnc.
2017-09-15 18:10:13 +01:00
reaperrr
c611b5aeeb Remove 'ed' from WithTurretedAttackAnimation
Too confusing, as people might think it requires 'WithTurretedSpriteBody', also not entirely in line with our (admittedly implicit) render trait naming convention.
2017-09-15 18:10:13 +01:00
Mustafa Alperen Seki
c0b8bb3fcf Add Generals Pilot Logic 2017-09-14 23:26:10 +02:00
gwenzek
11a990e352 check if target is alive 2017-09-14 23:19:28 +02:00
gwenzek
7721d0b328 add a "capturing" condition for ExternalCapture 2017-09-14 23:19:28 +02:00
Forcecore
8027bed6b2 Separated ship squad from ground unit squad
Just like aircrafts are independent from ground squads.
2017-09-13 23:31:26 +02:00
abcdefg30
5ddf28fa81 Bomber John rules cleanup
Removed hacks, default values and duplicates
2017-09-13 22:13:49 +02:00
abcdefg30
0f95febefa Bomber John sequence cleanup
Most of those sequences were unused or default values
Tick count fixed as well
2017-09-13 22:13:49 +02:00
abcdefg30
ed598d2ab4 Make it possible to disable adjacency 2017-09-13 22:13:49 +02:00
abcdefg30
17f7aac35c Add more RevealDisguiseOn types 2017-09-13 21:18:21 +02:00
abcdefg30
71f2026b32 Remove the hardcoded cloak reference from activities 2017-09-13 21:18:21 +02:00
Paul Chote
049ed086f9 Add assault move to TS. 2017-09-11 19:08:33 +02:00
Paul Chote
646a6aa1e8 Fix TS target types. 2017-09-11 19:08:33 +02:00
Paul Chote
3575e82078 Add assault move to D2K. 2017-09-11 19:08:33 +02:00
Paul Chote
d588854cc5 Add assault move to TD. 2017-09-11 19:08:33 +02:00
Paul Chote
c46d1944d9 Add assault move to RA. 2017-09-11 19:08:33 +02:00
Paul Chote
a81749e102 Add frontend code for issuing assault move orders. 2017-09-11 19:08:33 +02:00
Paul Chote
ffee45cd76 Add AttackMove support for AssaultMove orders and condition granting. 2017-09-11 19:08:33 +02:00
Paul Chote
1e4640dc0b Clean up SupportPowerTooltipLogic:
- Avoid creating unnecessary bindings
- Avoid duplicated text size calculations
- Relayout panel when (and only when) needed
- Color timer red when paused
2017-09-10 21:30:55 +02:00
Paul Chote
458c913264 Clean up ProductionTooltipLogic:
- Avoid creating unnecessary bindings
- Fix time display not updating on low power
- Fix power usage color not updating on power changes
- Avoid duplicated text size calculations
2017-09-10 21:30:55 +02:00
Paul Chote
b3b2efa781 Move hardcoded viewport keys into yaml. 2017-09-10 21:30:55 +02:00
Paul Chote
2a6bb0678e Move hardcoded support power keys into yaml. 2017-09-10 21:30:55 +02:00
Paul Chote
4f00d62237 Move hardcoded production keys into yaml. 2017-09-10 21:30:55 +02:00
Paul Chote
19000219af Allow widgets to expose custom hotkey names to the linter. 2017-09-10 21:30:55 +02:00
Paul Chote
1180c5ddaa Move hardcoded production tab keys into yaml. 2017-09-10 21:30:55 +02:00
Paul Chote
f5e38a4e2c Move ISeedableResource interface to Mods.Common. 2017-09-10 18:36:39 +02:00
Paul Chote
1de767d9bf Move objectives interfaces to Mods.Common. 2017-09-10 18:36:39 +02:00
Paul Chote
3f72076e1a Move radar signature interfaces to Mods.Common. 2017-09-10 18:36:39 +02:00
Paul Chote
e54cf9acc3 Move linter interfaces to Mods.Common. 2017-09-10 18:36:39 +02:00
Paul Chote
0648fc9f31 Move damage notification interfaces to Mods.Common. 2017-09-10 18:36:39 +02:00
Paul Chote
e3212d1e64 Move the IMove interface to Mods.Common. 2017-09-10 18:36:39 +02:00
Paul Chote
0f6dda3f5f Calculate building placement offsets in screen space. 2017-09-10 18:26:54 +02:00
reaperrr
0161d68237 Fix RA TorpTube bridge explosions
There were two issues at work here:
1) The combination of default MaximumLaunchAngle and default CruiseAltitude made torpedoes fly a ballistic curve, which combined with BoundToTerrain type made them explode 'in the air' when hitting non-water tiles. This would result in AIr returned as target type, which is invalid for torpedoes.
2) The explosion warheads were missing the Ground target type, which is actually the (only) target type that the bridge tiles you hit with torpedoes have.
2017-09-10 18:10:24 +02:00
reaperrr
b68c935807 Fix water splash on bridge in RA
On bleed, both the explosion as well as the water splash warhead of weapons triggered on bridges, since they have both the Ground and Water target types.

Ground cannot be made invalid for water splashes without causing regressions elsewhere, so a new Bridge target type is introduced to explicitly make bridges invalid targets for water splash effect warheads.
2017-09-10 18:10:24 +02:00
Paul Chote
23382dc508 Remove dummy d2k support bin overlay. 2017-09-10 15:25:43 +02:00
SoScared
b78736acb7 Replace all Creep with Neutral actors on map Agenda 2017-09-10 15:06:41 +02:00
Taryn Hill
48a071c756 Always use noget in fetch-thirdparty-deps-windows.sh 2017-09-10 14:52:13 +02:00
Forcecore
1dfba51665 Removed dead WSB from Refinery trait 2017-09-09 11:15:31 +01:00
reaperrr
43664a12b5 Tweaked TS tiberium colors
- excluded tiberium palettes from global lighting, just like in the original
- tweaked colors to match original more closely
2017-09-07 21:40:29 +01:00
Ishan Bhargava
9cd81a6310 Add myself to AUTHORS
Pull request #5666
2017-09-07 18:33:34 +02:00
reaperrr
024887b268 Move Contrail to Traits
And make interface implementations explicit while we're at it.
2017-09-06 22:07:02 +01:00
Paul Chote
898ef8fe50 Add support for queuing Guard orders. 2017-09-03 12:54:09 +02:00
Paul Chote
f4f27f8980 Add support for queuing AttackMove orders. 2017-09-03 12:54:09 +02:00
SoScared
2bfc7cdd46 RevealOnDeath with Aircraft 2017-09-02 20:17:05 +02:00
abcdefg30
1649f3aa60 Don't spawn aircraft husks when not airborne 2017-09-02 16:26:12 +02:00
Matthias Mailänder
3ce8026337 Tweak the atomic missile SpawnOffsets. 2017-09-02 15:10:35 +02:00
Matthias Mailänder
6774c9ce01 Setup the Temple of Nod smoke in Tiberian Dawn. 2017-09-02 15:10:35 +02:00
Matthias Mailänder
fd0c34bf61 Fix death hand missile offsets. 2017-09-02 15:10:35 +02:00
Matthias Mailänder
2980decc93 Fix the Dune 2000 missile overlay offset. 2017-09-02 15:10:35 +02:00
Matthias Mailänder
855f1816f4 Tweak the time until hatch opening and rocket away. 2017-09-02 15:10:35 +02:00
Matthias Mailänder
4526344eed Add WithNukeLaunchAnimation and -Overlay traits. 2017-09-02 15:10:35 +02:00
Matthias Mailänder
c63620e979 Remove trailing spaces. 2017-09-02 15:10:35 +02:00
SoScared
df9c07da41 change damage vs None with ^Cannon 2017-09-02 14:58:19 +02:00
reaperrr
96e98a24ae Polish RA Jeep and APC muzzle offsets
And Jeep turret offset.
2017-09-02 14:29:34 +02:00
Matthias Mailänder
e9e3e9c22e Bring back the MiGs to the desert shellmap. 2017-09-02 14:14:50 +02:00
rob-v
6eb7a98cd2 Change default Observer shroud option for Explored map 2017-09-02 14:02:24 +02:00
Matthias Mailänder
49919e3d73 Add missing AutoTarget to DOGGIE. 2017-09-02 13:33:35 +02:00
Paul Chote
3c1e7896a5 Clear editor search fields and yield focus on escape. 2017-09-02 12:48:42 +02:00
Matthias Mailänder
0ce4d91dd6 Add map No where to run 2017-09-02 12:14:39 +02:00
Matthias Mailänder
b3dbeb13ca Add map Tiers of Sorrow. 2017-09-02 12:14:13 +02:00
reaperrr
15c636525d 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:30 +01:00
Matthias Mailänder
918690f9b2 Remove a bogus ore map in a water segment. 2017-09-02 09:13:14 +01:00
Matthias Mailänder
3c0b95cf6e Fix indentions of weapon documentation table of contents. 2017-09-02 08:56:31 +01:00
Paul Chote
3cf9d47b39 Fix TD stance bar naming. 2017-09-01 11:56:37 +02:00
Paul Chote
4a2988e676 Remove UnitCommandWidget. 2017-09-01 11:56:37 +02:00
Paul Chote
2a3a27aa65 Add CommandBarBlacklist to TS. 2017-09-01 11:56:37 +02:00
Paul Chote
9607c09516 Add command bar to TS. 2017-09-01 11:56:37 +02:00
Paul Chote
7997a24559 Adjust chrome.png and yaml layout.
Also cleans up stray whitespace.
2017-09-01 11:56:37 +02:00
reaperrr
2f66f83051 Remove IsPlane hack
The new VTOL boolean together with CanHover is enough to replace this.
2017-08-31 18:03:59 +02:00
reaperrr
28ffcfea3c Upgrade rule for setting VTOL to true for CanHover actors 2017-08-31 18:03:59 +02:00
reaperrr
3b01da737c Introduce Aircraft VTOL boolean
Rather than hard-linking vertical take-off/land to the CanHover = Helicopter assumption.
2017-08-31 18:03:59 +02:00
reaperrr
5d58374962 Remove FlyCircleTimed activity
A FlyCircle overload is sufficient.
2017-08-31 18:03:59 +02:00
reaperrr
df94765eac Upgrade rule for TakeOffOnResupply 2017-08-31 18:03:59 +02:00
reaperrr
c9ff362ea2 Add TakeOffOnCreation and TakeOffOnResupply to Aircraft
Before this, it was impossible to replicate the behavior of the original games (staying on pad/airfield after reload) without hacking around in Mods.Common.
This allows modders to disable these without meddling with code.
2017-08-31 18:03:59 +02:00
abcdefg30
5cfb5aaf2d Rework the addition and removal of building influence 2017-08-31 17:36:22 +02:00
reaperrr
93f385e9fc Give TS JumpJet shadow when airborne 2017-08-31 16:54:03 +02:00
reaperrr
d1a4133752 Fix WithShadow
It *modifies* the actor rendering, so returning an empty renderable was bogus, as were the IsInWorld/IsDead checks.
2017-08-31 16:54:03 +02:00
Paul Chote
69251d508b Suppress scroll events from the DropDownWidget fullscreen mask. 2017-08-31 12:43:17 +02:00
Paul Chote
1bd1a185f5 Unhardcode spectator combined/world view hotkeys. 2017-08-31 12:33:34 +02:00
Paul Chote
0525408664 Unhardcode map editor zooming hotkey. 2017-08-31 12:33:34 +02:00
Paul Chote
9a5b5d9b6f Unhardcode music control hotkeys. 2017-08-31 12:33:34 +02:00
Paul Chote
8d4ffee32a Add hotkey linting support for logic args. 2017-08-31 12:33:34 +02:00
SoScared
1a95aeda19 patch tent cost increase 2017-08-28 20:41:22 +02:00
atlimit8
fd6b2c0107 Move timers from ConditionManager to ExternalCondition 2017-08-27 12:43:27 +01:00
atlimit8
c61cd37bec ExternalCondition: List<struct TimedToken> timedTokens 2017-08-27 12:43:27 +01:00
atlimit8
62c76b8ae9 ExternalCondition: remove timedTokensBySource 2017-08-27 12:43:27 +01:00
atlimit8
f51323daa3 ExternalCondition: remove unneeded source references 2017-08-27 12:43:27 +01:00
atlimit8
c7d3c3ec73 Changes to ExternalCondition.TryRevokeCondition 2017-08-27 12:43:27 +01:00
Forcecore
72236b66f6 D2K Thumper deploy animation fix 2017-08-27 13:22:00 +02:00
abcdefg30
d6d8cf05b0 Adjust IsAtGroundLevel fixing EjectOnDeath 2017-08-26 15:54:02 -07:00
Taryn Hill
eed9af88f5 Always use noget in fetch-thirdparty-deps.sh 2017-08-26 15:50:47 -07:00
reaperrr
b1c63a4752 Fix FindActorsOnLine overscan 2017-08-26 15:43:44 -07:00
Paul Chote
a7c2f3e7e3 Add mod-specific appdata metadata. 2017-08-26 15:43:26 -07:00
Matthias Mailänder
8ae2a65d9d Shroud is actually a player trait. 2017-08-26 22:47:48 +01:00
Matthias Mailänder
a445049e3d Fix the indentions. 2017-08-26 18:35:41 +01:00
Paul Chote
49d5283ce1 Use curl instead of wget in fetch-thirdparty-deps. 2017-08-26 13:49:56 +02:00
Forcecore
739d0c0bb2 Disabled Ground squads finding targets individually
* Now they will tend to focus fire.
* Provides performance when when the AI designer implements better
  (and complex) target selection code
2017-08-25 23:13:26 +02:00
Zimmermann Gyula
cb36dfa532 Implement instant refineries.
AKA RA2 refinery logic.
2017-08-25 22:19:03 +02:00
Paul Chote
a29360f313 Add a lint test for hotkeys. 2017-08-25 21:56:52 +02:00
Paul Chote
1e0148e092 Migrate ButtonWidget to NamedHotkey. 2017-08-25 21:56:52 +02:00
Paul Chote
42bf232b37 Introduce NamedHotkey type. 2017-08-25 21:56:52 +02:00
Paul Chote
13a06c6e8d Move hardcoded static asset browser hotkeys to yaml. 2017-08-25 21:56:52 +02:00
Matthias Mailänder
988353e431 Remove cloak sounds not featured in the original.
closes #9519
2017-08-25 19:42:38 +02:00
SoScared
1e1109034f Additional tweak of the Artillery weapon 2017-08-25 15:29:18 +02:00
atlimit8
43880ea7b8 Make AppearsOnRadar trait conditional 2017-08-25 15:10:28 +02:00
atlimit8
8a825f2999 Add VariableExpression.NoVariables 2017-08-25 15:10:28 +02:00
Matthias Mailänder
2ccba3768b Add overlay animations to CAARAY. 2017-08-25 10:48:35 +01:00
Matthias Mailänder
dc72b8080c Fix Dune 2000 harvester husk offset.
Closes #10087.
2017-08-24 11:28:06 +02:00
C. Helmig
80b69af30c 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:02:54 +02:00
reaperrr
120d7f9976 WithHarvestAnimation style fixes
Make interface implementations explicit.
2017-08-23 12:34:00 +02:00
reaperrr
0103b7ca87 Make WithSpriteBody.PlayCustomAnimation resume loop of Sequence
...after it finished playing.
2017-08-23 12:34:00 +02:00
reaperrr
90a4fe7ca1 Resume looping default WithSpriteTurret.Sequence after custom anim
It doesn't really make sense not to, and the only trait using PlayCustomAnimation previously did this manually anyway.
2017-08-23 12:34:00 +02:00
reaperrr
c75e64a952 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:55:46 +01:00
reaperrr
951ee2210c Consider disabled armaments invalid 2017-08-22 20:55:46 +01:00
SoScared
28e28bf34c fix ore spots on Dual Cold Front 2017-08-22 19:28:06 +02:00
Matthias Mailänder
cba0fc3475 Remove CreateGroup order as the ActorGroupProxy is gone. 2017-08-22 18:44:35 +02:00
rob-v
01d631b228 Load replays also in sub directories 2017-08-21 14:54:46 +02:00
Mustafa Alperen Seki
f7983692ae Make Captures Upgradeable 2017-08-21 13:06:00 +02:00
Matthias Mailänder
287290bbdf Fix indentions of trait documentation table of contents. 2017-08-20 23:06:59 +02:00
reaperrr
a4ef199b75 Tweak TS Juggernaut BurstDelays and Report
Since the original sound contains 3 shots, it could happen that the sound played even though only 1 shot had been fired.
Additionally, it could happen that no sound was played when shooting because the first burst had already been fired.
Finally, in the original the 3rd shot was delayed a little compared to the first two.

This adresses all these issues.
2017-08-20 20:48:25 +02:00
reaperrr
c4bfb052d9 Apply BurstDelays rename to TS 2017-08-20 20:48:25 +02:00
reaperrr
98357cf2a9 Apply BurstDelays rename to RA 2017-08-20 20:48:25 +02:00
reaperrr
5581688781 Apply BurstDelays rename to TD 2017-08-20 20:48:25 +02:00
reaperrr
7704ae655e Apply BurstDelays rename to D2k 2017-08-20 20:48:25 +02:00
reaperrr
834a40b18d Refactor BurstDelay to BurstDelays
Allowing to set custom per-burst delays.
2017-08-20 20:48:25 +02:00
abcdefg30
4ce2e82ff0 AI States style fixes and minor polish 2017-08-17 23:25:51 +01:00
reaperrr
98b1468801 Clean up Harvester TickIdle a bit
Triggering UnblockRefinery each idle tick is bogus.
2017-08-17 22:58:37 +01:00
reaperrr
406f482a19 Cache INotifyHarvesterAction trait look-ups 2017-08-17 22:58:37 +01:00
reaperrr
bac8d3233a Streamline Harvester.SetProcLines return check 2017-08-17 22:58:37 +01:00
reaperrr
e9a420a9e5 Remove redundant TakeOff from Aircraft
ResupplyAircraft queues a TakeOff anyway, if the aircraft is a helicopter.
2017-08-17 22:19:05 +01:00
reaperrr
95d3d61ffa Make some Aircraft interface implementations explicit with subclassing 2017-08-17 22:19:05 +01:00
reaperrr
6c3ff0dc02 Make AircraftInfo more readable
Added some descriptions where I considered it necessary, added newlines between entries, reordered entries where it made sense.
2017-08-17 22:19:05 +01:00
reaperrr
cab6a96b16 Allow skipping make anim for actors with WithMakeAnimation and GrantConditionOnDeploy 2017-08-17 22:03:42 +01:00
reaperrr
f3f2621eeb Allow skipping 'sell'/reversed make anim on Sell 2017-08-17 22:03:42 +01:00
reaperrr
eb5fb5abba Allow skipping 'sell'/undeploy anim for actors that TransformOnCapture 2017-08-17 22:03:42 +01:00
rob-v
c848b30e9e Add chat tab to multiplayer/replays ingame menu 2017-08-17 21:54:19 +01:00
Paul Chote
daee217431 Add x64process stat. 2017-08-17 19:45:11 +02:00
Paul Chote
9fc0970cfc Force '.' decimal point for windowscale stat. 2017-08-17 19:45:11 +02:00
abcdefg30
7156c2c09d Add the missing base implementation to AttackFrontal's RulesetLoaded 2017-08-17 19:28:51 +02:00
rob-v
dd9d5450bc Add EnableDebugCommandsInReplays option 2017-08-17 19:23:22 +02:00
abcdefg30
6840177776 Fix actors being able to walk on cliffs after the sietch was destroyed 2017-08-17 19:05:38 +02:00
abcdefg30
d78b29b545 Fix sietches being repairable and remove the Power trait (unused) 2017-08-17 19:05:38 +02:00
abcdefg30
b66605033a Let the fremen fallback in atreides04 instead of attacking the base 2017-08-17 19:05:38 +02:00
abcdefg30
b329bf2642 Add more fail conditions to the spice harvesting missions 2017-08-17 19:05:38 +02:00
abcdefg30
02c371f68a Fix a bogus condition 2017-08-17 19:05:38 +02:00
abcdefg30
6907929cb4 Fix the harvest protection logic 2017-08-17 19:05:38 +02:00
abcdefg30
e07779942e Add a warning when attacking the Outpost to ordos04 2017-08-17 19:05:38 +02:00
abcdefg30
a942ca8f57 Add a global script for campaign missions in d2k 2017-08-17 19:05:38 +02:00
Mustafa Alperen Seki
7f0c7cee0d Make D2K Missions use Vanilla Remap Colors 2017-08-17 18:46:06 +02:00
Mustafa Alperen Seki
3bf217aaf7 Rename Emparor to Corrino on Shellmap 2017-08-17 18:46:06 +02:00
SoScared
6d1ca72a80 probe new civilian structures 2017-08-17 15:24:39 +02:00
abc013
944dfeb476 Corrected gnrl sequences & added TakeCover: to him 2017-08-13 21:06:14 +02:00
AoAGeneral
ab5d2766f6 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:17:15 +02:00
rob-v
eb21c4bddd Keep Attack M./Guard action while holding hotkey (revert Playtest change) 2017-08-13 17:44:26 +01:00
Allan Greis Eriksen
5435e34b9a Audio device names is now shown correcly in the Audio Device combolist. 2017-08-13 18:38:18 +02:00
Oliver Brakmann
8f26b4e92b Fix Mobile not sanitizing target location of Move orders 2017-08-13 17:23:37 +01:00
Paul Chote
62a006ed3e Change beaconlib reference to match other deps. 2017-08-13 18:15:55 +02:00
Paul Chote
cf386c6149 Update BeaconLib to 1.0.1. 2017-08-13 18:15:55 +02:00
abcdefg30
84d6fa1540 Fix monster tanks not attacking radar domes 2017-08-13 18:01:02 +02:00
abcdefg30
2dad2de0ff Add the win and loss videos to Monster Tank Madness 2017-08-13 18:01:02 +02:00
Paul Chote
34a44acf85 Update macOS launcher to 20170812 tag. 2017-08-13 17:53:23 +02:00
Paul Chote
b937bf43f7 Switch to .NET 4.5 compatible Marshal.SizeOf overload. 2017-08-13 17:39:00 +02:00
Paul Chote
f4d4a7eed4 Fix d2k commandbar artwork glitch. 2017-08-13 14:07:47 +02:00
Paul Chote
4e493f265f Revert TicksBeforePathing move from Mobile to Move.
This partially reverts commit 11c8cda0c3.
2017-08-13 13:31:58 +02:00
abc013
6e8dd5058e Changed SAM launch offset 2017-08-13 12:49:04 +02:00
Paul Chote
ad2c46ea73 Add a community code of conduct.
This adopts the standard 1.4 version of the Contributor Covenant.
http://contributor-covenant.org/
2017-08-13 12:32:01 +02:00
Jean-Rémy Buchs
49f42401e6 Improve the description of LandOnCondition of Aircraft 2017-08-11 10:56:27 -05:00
abcdefg30
de7a0c9861 Remove TargetWhenIdle and TargetWhenDamaged from AutoTarget 2017-08-10 19:11:47 +02:00
abcdefg30
0209c1c848 Add TRUCK.Husk to Tiberian Dawn 2017-08-10 18:24:19 +02:00
SoScared
64dfc38c2e final RA balance patch for the next playtest/release 2017-08-10 18:16:58 +02:00
abcdefg30
d1ab421240 Don't spawn new actors before all RemovedFromWorld callbacks have run 2017-08-10 17:57:11 +02:00
Paul Chote
22d7031819 Focus the ViewportController on Standard/Inverted scroll modes. 2017-08-10 12:50:00 +02:00
Paul Chote
d0d8062dbf Extract ViewportEdgeScrollMargin settings entry. 2017-08-10 12:44:44 +02:00
Paul Chote
dd709a2679 Revert "Have some activities count as idle activities"
This reverts commit ae111248f3.
2017-08-10 12:22:28 +02:00
rob-v
86cff9a774 Disable click sound on command bar buttons 2017-08-09 21:50:34 +01:00
rob-v
0c67ca3321 Add ButtonWidget.DisableKeySound property 2017-08-09 21:50:34 +01:00
reaperrr
f744a429a4 Fix SpawnActorPower not playing launch sounds 2017-08-09 21:27:42 +01:00
reaperrr
11d6dc2d3a Add TS base-building hit-shapes 2017-08-09 21:25:05 +01:00
reaperrr
6e2418d940 Add TS civilian hit-shapes 2017-08-09 21:25:05 +01:00
reaperrr
1b28cb9f60 Add TS default hit-shapes 2017-08-09 21:25:05 +01:00
reaperrr
ab6d18eab6 Center two-legged billboard sprites
They are supposed to be positioned in the middle of the two cells they occupy.
2017-08-09 21:25:05 +01:00
reaperrr
c40ec62511 Tweak sprite offsets of some TS aban civ buildings
In cases where the sprite has enough margin to the footprint cell edges, moving down the sprite a bit is much easier than manually setting up custom targetable offsets.
2017-08-09 21:25:05 +01:00
abcdefg30
94a386eda8 Move the interior tile 384 from the Floor to the Wall category 2017-08-09 20:52:00 +02:00
rob-v
88a3656f0a Fix Client tooltip crash in Lobby 2017-08-09 19:17:00 +01:00
SoScared
3c4a75e4b6 Add Gap effect values to new vision range changes and ironing out misc. values 2017-08-09 20:13:58 +02:00
Jean-Rémy Buchs
1d1802a163 Add LandOnCondition to the trait Aircraft which triggers a landing and prevents takeoffs while the condition is met 2017-08-08 15:13:50 -05:00
abc013
c4d2fdbd83 Fix ground units can stay on water (tile 409) 2017-08-08 12:32:43 +02:00
AoAGeneral
baa4b61d3f TD Prerequisite changes.
Adds prerequisite labels to E1, E3, E6, and TDTRUCK.

Closes #13780
2017-08-08 12:21:37 +02:00
reaperrr
b388c6186a Shrink shape of TD SAM 2017-08-07 14:49:24 +02:00
reaperrr
97bbfd34fd Shrink shape of RA SAM
To adress balancing concerns.
Also tweaked sprite offsets to make it more centered.
2017-08-07 14:49:24 +02:00
reaperrr
6945ae1747 Rename tdtruk to truck 2017-08-07 11:01:21 +02:00
reaperrr
f4499c1e84 Rename TD TowerMissle to TowerMissile 2017-08-07 11:01:21 +02:00
reaperrr
20efd1fc29 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:01:21 +02:00
Oliver Brakmann
d61939f59f Fix harv docking activities getting lost under certain circumstances 2017-08-07 10:45:45 +02:00
forcecore
d1328212c6 AttackFrontal's FacingTolerance is now in effect 2017-08-07 10:26:26 +02:00
reaperrr
d949e17b88 Perform FogObscures as late as possible
FogObscures is more expensive than simpler boolean, player or HasTraitInfo checks, so in these places it makes sense to perform the other checks first.
2017-08-07 09:42:12 +02:00
AoAGeneral
99dac05fd7 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:35:20 +02:00
Matthias Mailänder
fdad5e2c48 Add weapon rules documentation. 2017-08-05 21:00:06 +02:00
Matthias Mailänder
1a54b36e2b Cache shouldn't be exposed at all so drop it. 2017-08-05 21:00:06 +02:00
Matthias Mailänder
55ea54ff2d Explain the color notation. 2017-08-05 21:00:06 +02:00
Matthias Mailänder
59d88199cf Give Dictionaries a friendlier notation. 2017-08-05 21:00:06 +02:00
Matthias Mailänder
0a150bcc75 Move friendly type names into shared helper class. 2017-08-05 21:00:06 +02:00
reaperrr
879ab2ac1f Remove redundant Disposed checks
IsDead returns true if Disposed is true.
2017-08-05 18:31:15 +02:00
Lars Beckers
68607872bd Fix RA Aftermath installer metadata on Linux 2017-08-02 20:09:28 +02:00
FrameLimiter
9fdb7dc51b Fix duplicate Targetable value on ^Ammobox 2017-08-02 19:40:08 +02:00
Taryn Hill
57fb551545 Improve the exception message when a Bridge's DemolishWeapon cannot be found 2017-07-29 22:26:30 +02:00
reaperrr
8ee742d66a Split MuzzleOffset and MuzzleOrientation calcs to protected methods
To make overriding easier for downstream traits inheriting Armament.
2017-07-29 22:14:58 +02:00
reaperrr
26be2a3e99 Split Burst updating to separate method 2017-07-29 22:14:58 +02:00
reaperrr
e847f49256 Split barrel firing to separate method 2017-07-29 22:14:58 +02:00
reaperrr
514bd12885 Merge some Armament CanFire checks 2017-07-29 22:14:58 +02:00
reaperrr
bdfa8a361b Split Barrel can-fire checks to separate CanFire method 2017-07-29 22:14:58 +02:00
AoAGeneral
dc61c98098 TD Engineer Description.
Closes #13720
2017-07-25 18:59:47 -05:00
Paul Chote
4c222e5f2b Add Demo Truck and MAD Tank to Deploy description. 2017-07-23 20:10:08 +02:00
Paul Chote
cd9fc96c37 Implement IIssueDeployOrder on MADTank. 2017-07-23 20:10:08 +02:00
GSonderling
ef0b0847bc Removed references to make docs 2017-07-23 15:33:39 +02:00
rob-v
97306f2bcd Move DeveloperMode trait to Mods.Common 2017-07-23 15:08:24 +02:00
rob-v
d4e9e0e069 Add Visualization chat commands 2017-07-23 15:08:24 +02:00
reaperrr
8403adba37 Implement damage-based slowdown on TD Gunboats
In line with original.
2017-07-23 15:06:03 +02:00
reaperrr
9a25b33beb Adapt TD missions to TDGunboat refactor 2017-07-23 15:06:03 +02:00
reaperrr
94fa24088b Add dedicated TDGunboat traits
And get rid of Mobile.OnRails hack.
2017-07-23 15:06:03 +02:00
reaperrr
3bdd35fd2d Move AttackPopupTurreted to Attack subfolder 2017-07-23 15:06:03 +02:00
SoScared
4903912e3c Revert 4 cell adjacency of Kennel/Silo back to 2. 2017-07-22 22:48:33 +01:00
abcdefg30
aaaf66a6a3 Disable bots on Poland Raid (again) 2017-07-22 22:33:44 +01:00
Forcecore
0573f52a37 Add Railgun projectile 2017-07-21 23:18:38 +01:00
Paul Chote
9d84f4a845 Fix the automated installer generation. 2017-07-21 18:49:59 +01:00
reaperrr
5b24fddd5a Fix TD airfield targetable positions 2017-07-21 17:42:18 +01:00
Paul Chote
0f54d6f709 Allow mod to be launched after installing required content. 2017-07-21 00:15:38 +02:00
Paul Chote
d1ed0e09d0 Create user map directory if it doesn't exist. 2017-07-21 00:10:48 +02:00
abcdefg30
d8bc4905cb Add a selection priority of 6 to supply trucks 2017-07-20 15:13:41 +01:00
abcdefg30
4204ba1c1f Fix funpark01 failing at mission start 2017-07-18 22:49:12 +01:00
reaperrr
17f469f1a5 Revert Yak gun strafing 2017-07-18 14:25:00 +02:00
SoScared
0e64ac4709 Reduce vision range of MSILO, IC and Chronoshpere to 6c0 2017-07-18 01:13:15 +02:00
Paul Chote
afd8b9ab86 Rework harvester resource claiming:
* Maintains lists of claims, and only restricts
   reservations for friendly units.
 * Removes OnNotifyResourceClaimLost; it's not
   clear whether that is still useful, and it
   prevents future necessary cleanups.
 * Moves other code without changing behaviour.

This fixed stale claims from dead units and enemy
claims from preventing otherwise valid harvest
activities.
2017-07-18 01:09:19 +02:00
SoScared
9097837e6d Adjust AoE damage vs Wood in relation to HitShapes 2017-07-18 00:59:25 +02:00
Paul Chote
93fcfbb131 Fix ReadWriteZipFile crashing on update. 2017-07-18 00:10:07 +02:00
GSonderling
7a2d2cfd5f Reorganised desert beach templates.
Deleted spurious tabs and spaces

As requested by @reaperrr

Removed more spaces.

One last space deleted.
2017-07-18 00:02:24 +02:00
SoScared
bfca4897ea Visual, Polish/Performance and Balance Tweak 2017-07-17 23:37:04 +02:00
Jean-Rémy Buchs
488440197e Add new trait ReloadArmamentsBar which renders a bar to show the current reload status 2017-07-16 14:58:00 +01:00
Paul Chote
4ffcd9b4a5 Add template type to editor coordinate label. 2017-07-16 13:12:13 +02:00
Paul Chote
72cf5d29e7 Add search bar to editor Template list. 2017-07-16 13:12:13 +02:00
Paul Chote
f1b54ece8a Add search bar to editor Actors list. 2017-07-16 13:12:13 +02:00
andrew
ce671a2737 TD Supply Truck 2017-07-16 11:07:35 +01:00
Jean-Rémy Buchs
224ca78257 Fix crash in DistanceFromEdge if vector is too long 2017-07-15 17:49:29 +02:00
reaperrr
ace353cb84 Upgrade rule for Missile.TerrainHeightAware 2017-07-15 17:36:20 +02:00
reaperrr
7e8f920bc1 Allow disabling terrain height checks in Missile
This saves a good deal of performance for mods with no real height levels, including RA, TD and D2k.
2017-07-15 17:36:20 +02:00
reaperrr
86ab6e7ed3 Fix MoveWithinRange subcell consideration 2017-07-15 17:31:25 +02:00
reaperrr
b859b9ee43 Fix RotationPaletteEffect not working with player palettes 2017-07-15 11:19:09 +01:00
abcdefg30
0b6b997e81 Add a CommandBarBlacklist trait to blacklist Stop and Waypoint Mode 2017-07-14 23:18:28 +01:00
AoAGeneral
f921a45747 TD Airstrike Balance.
This has been a tough decision. I have nerfed the napalm damage from 65 to 35 commited by reaperrr since at 65 they were still one shotting weapon factories and airstrips. The problem however was that it still did way to much damage. Bringing the Vulcan down from 25 to 15 wood damage helps to keep it alive a majority of the time. (Still brings it to red at times.) Problem now is the airstrike is now a unit killing role rather then killing power plants and various other structures. (Doesn't exactly kill barracks/helipads everytime anymore.)
2017-07-15 00:16:19 +02:00
Paul Chote
3bea08f020 Fix Windows desktop icons being installed for all users. 2017-07-15 00:12:45 +02:00
RoosterDragon
9413d9595c Providing streaming AudFormat data.
AudFormat.GetPCMInputStream now returns data that is streamed, rather than a MemoryStream.
2017-07-14 23:02:49 +01:00
RoosterDragon
85c948fd8d Add a streaming audio playback interface.
This allows audio to be streamed, rather than needed to be fully loaded into memory.
2017-07-14 23:02:49 +01:00
reaperrr
45606c9528 Editor actor categories style fixes 2017-07-14 10:28:29 +02:00
reaperrr
1b0ae1e512 Mention hard-coded 'Air' TargetType in CEWH.AirThreshod desc 2017-07-13 20:58:47 +02:00
reaperrr
70b43222fe Adapt D2k AA missiles to CEWH refactor 2017-07-13 20:58:47 +02:00
reaperrr
bc54789641 Adapt TD anti-air weapons to CEWH refactor 2017-07-13 20:58:47 +02:00
reaperrr
65920a883f Upgrade rule for CreateEffectWarhead ImpactTypes -> Targets 2017-07-13 20:58:47 +02:00
reaperrr
5cd8acada4 Adapt TS effect warheads to CEWH refactor 2017-07-13 20:58:47 +02:00
reaperrr
ce8f3ed168 RA mission weapon warhead fixes 2017-07-13 20:58:47 +02:00
reaperrr
a7334d5583 Adapt RA missiles to CEWH refactor 2017-07-13 20:58:47 +02:00
reaperrr
db16165261 Adapt RA explosions, supers and other weapons to CEWH refactor 2017-07-13 20:58:47 +02:00
reaperrr
34dc52451a Adapt RA smallarms to CEWH refactor 2017-07-13 20:58:47 +02:00
reaperrr
346b6af30d Adapt RA ballistic weapons to CEWH refactor 2017-07-13 20:58:47 +02:00
reaperrr
13983765d6 Tweak RA naval vessel target types
The extremely coarse, shared with terrain Ground and Water types make it hard to distinguish between different actor categories, so we add Ship to all non-submerged vessels.
Additionally, we add 'Water' to submerged subs to prevent players from finding them by moving the cursor of a ship with DepthCharge over the suspected sub position.
The latter also allows force-firing DepthCharge at empty water cells.
2017-07-13 20:58:47 +02:00
reaperrr
cf5abc68ad Refactor CreateEffectWarhead ImpactTypes
Use target validity to simplify ImpactTypes.
2017-07-13 20:58:47 +02:00
reaperrr
efd8a9c1cb Rebalanced Yak
- increased ammo per gun from 9 to 10, for two full double-5-burst salvoes, adjusted ReloadDelay to keep total reload time about the same
- increased Spread by 33% to make up for lower effective pin-point accuracy
- increased damage vs. infantry by 25%, vs. light armor by 16.67%, vs. heavy armor by ~10%
2017-07-13 19:12:16 +02:00
reaperrr
fa02c97111 RA Parabombs balance fix
They're too over-powered on bleed due to the hitshap changes.
2017-07-13 19:12:16 +02:00
reaperrr
4afe9dd248 Enable RA ParaBomb shadow 2017-07-13 19:12:16 +02:00
reaperrr
abb8e27747 TD airstrike balance tweak
The increased building hitshape sizes allowed TD airstrikes to kill even Cyards and temples on bleed, which is overpowered compared to before the hitshapes were merged.
Cutting bomb damage vs. Wood to 65% lets Cyards, temples and adv. comm. centres survive airstrikes with yellow health.
2017-07-13 19:12:16 +02:00
reaperrr
afa9b9760e Unhardcode AttackBomber bomb and gun logic 2017-07-13 19:12:16 +02:00
reaperrr
a1cb0cf002 AttackBomber style fixes 2017-07-13 19:12:16 +02:00
reaperrr
07edf2f7c6 Reset burst counter if ReloadDelay has passed since last shot
This fixes the following issues:
- units like mammoth tanks sometimes at first only fired 1 shot on new encounter because they only depleted 1 burst before previous target was killed
- weapons that use strafing logic would not reset the offset multiplier after passing the target once, leading to wrong offsets on following attacks
2017-07-13 19:12:16 +02:00
reaperrr
6212b82f6d Use strafing for RA Yak
This is done by modifying the target offset by a value matching the Yak's
speed * BurstDelay, to sync the offsets with the actor speed.
2017-07-13 19:12:16 +02:00
reaperrr
afa8d3522c Add strafing support to weapons 2017-07-13 19:12:16 +02:00
reaperrr
92c9988eea Fix D2k Palace footprint 2017-07-13 17:43:41 +02:00
reaperrr
d95d7e0b0f Rename UseOccupiedCellsOffsets to UseTargetableCellsOffsets
With the introduction of the new 'u' BlockingUntargetable cell type, the old property name became inaccurate.
2017-07-13 17:43:41 +02:00
reaperrr
77ef3a0ed2 Simplify RA base building hitshape rules 2017-07-13 17:43:41 +02:00
reaperrr
70c251d5d5 Simplify TD base building hitshape rules 2017-07-13 17:43:41 +02:00
reaperrr
03c7c8f79c Simplify D2k TargetableOffsets rules
By using the new 'u' Footprint letter.
2017-07-13 17:43:41 +02:00
reaperrr
5bdb7bd689 Add OccupiedUntargetable FootprintCellType
For cells that are occupied & unpassable, but should be ignored by HitShape.UseOccupiedCellsOffsets.
2017-07-13 17:43:41 +02:00
reaperrr
fdb3866238 Remove FootprintUtils 2017-07-13 17:43:41 +02:00
reaperrr
46dc827d46 Refactor footprint cell lookups and move them to Building
Removing FootprintUtils happens in the next commit for better
reviewability.
2017-07-13 17:43:41 +02:00
Forcecore
801796b184 FIX game hanging when units with 0 min-range attack units at 0 range.
Fixes #13307
2017-07-12 20:51:35 +02:00
Paul Chote
59dae0ebf6 Split install-core into finer grained targets for the mod template. 2017-07-12 16:22:36 +02:00
Paul Chote
1c2db8806b Update to latest osx launcher tag. 2017-07-12 16:22:36 +02:00
reaperrr
9a7778e55d Fix black tile on template 438 of RA desert tileset 2017-07-12 15:57:19 +02:00
Jean-Rémy Buchs
6749060e57 Add RangeCircleMode to trait RenderRangeCircle 2017-07-12 00:10:52 +02:00
AoAGeneral
4a39bc8286 TD Balance Changes. 20172606
The list of changes do not affect the new hitboxes of the structures.

+ Orca damage increased from 25 to 28.
Damage is increased because of their lack of damage vs armored units and structures.

+ Apache ammo reload reduced from 200 to 40.
Apaches gaining a full clip of ammo is a bit to strong. Firing the first shot starts the timer tick and will reload even if the clip is not fully reloaded. This also fixes so they don't sit on top of infantry and blow them all away to quickly.

+ Apache ammo reload amount reduced from 10 to 1.
Fixed in unison with ammo reload timer.

+ Sam now fires two missiles. (CNC95)
Does extra damage.

+ Sam range increase from 8c0 to 10c0.
Compensate for the aircraft changes. Also had a problem of MSAMs were always the better choice rather then the structure SAMs itself. This change will make them more viable.

+ Sam range limit from 9c614 to 12c0.
Makes it so aircraft can still escape while the missile won't detonate at the edge of the circle range.

+ Humvee damag vs light increased from 50 to 55.
Compensates for the price of the hummer. Having just the HP wasn't enough to counter certian builds of Nod. Enabling them a slightly higher damage allows them to kill buggies and bikes a bit more effectively. Makes them also decent arty and MRLS killers.

+ Crates got some love.

+ Viceroids now spawn.

+ An atomic bomb can now detonate. (CNC95)

+ Veterancy level is now to rank 4.
This makes grabbing crates all the more rewarding and riskier. Such as willing to bring a mammoth tank or commando to the crate rather then a minigunner.
2017-07-11 16:25:49 +02:00
Paul Chote
e38db04ab7 Move Stylecop checks to their own helper executable. 2017-07-09 21:58:21 +02:00
Paul Chote
1fa1677204 Register default mods during installation on Windows. 2017-07-09 20:54:02 +02:00
Paul Chote
2685dbea3b Register default mods during installation on Debian/Ubuntu. 2017-07-09 20:54:02 +02:00
Paul Chote
2c522e0371 Add mod registration utility commands. 2017-07-09 20:54:02 +02:00
Paul Chote
bc4a5193e9 Add ExternalMods.Unregister method. 2017-07-09 20:54:02 +02:00
Paul Chote
739f357090 Read mod registrations from system support dir. 2017-07-09 20:54:02 +02:00
Paul Chote
e69f129fed Add Platform.SystemSupportDir for shared user data. 2017-07-09 20:54:02 +02:00
Paul Chote
372d940936 Rework stale ExternalMod metadata clearing. 2017-07-09 20:54:02 +02:00
Paul Chote
b30cfe4ada Move launchPath argument from ExternalMods ctor to .Register. 2017-07-09 20:54:02 +02:00
Paul Chote
daf8f8d956 Throw a FileNotFoundException if source zip file isn't found. 2017-07-08 23:22:44 +02:00
Paul Chote
6e145f902b Fix empty lobby faction tooltips. 2017-07-08 22:45:51 +02:00
Paul Chote
cd9ef47f94 Suppress unrelated mouse events while scrolling. 2017-07-08 22:21:04 +02:00
rob-v
f341330d5e Fix Joystick scrolling stuck 2017-07-08 22:21:04 +02:00
Paul Chote
4f16b0d464 Revert "Replace legacy Evaluator with IntegerExpressions."
This reverts commit cd0898236d.
2017-07-08 22:11:36 +02:00
Paul Chote
f7c57cfc6f Fix crash when loading read-only ReadWriteZipFiles. 2017-07-08 16:45:44 +01:00
Paul Chote
ab1a798d04 Add GrantConditionOnBotOwner trait. 2017-07-07 21:31:45 +01:00
Paul Chote
96a1c8d54b Update internal ra/cnc/d2k/ts bot types. 2017-07-07 21:31:45 +01:00
Paul Chote
b0906e1836 Add a bot type identifier. 2017-07-07 21:31:45 +01:00
Paul Chote
e88754cd4a Expose Player.BotType and make fields readonly. 2017-07-07 21:31:45 +01:00
Markus Hartung
3a6796ac9d Fix for some AppDomains that doesn't add trailing DirectorySeparatorChar. 2017-07-06 18:29:24 +01:00
Markus Hartung
c2e36b8eeb Ignore Visual Studio 2017 generated files 2017-07-06 18:29:24 +01:00
rob-v
1a546d9baf Polish Actor Categories 2017-07-06 01:50:43 +02:00
rob-v
aab9dfcaa0 Add TS Actor Categories 2017-07-06 01:50:43 +02:00
rob-v
8da112dc92 Add D2K Actor Categories 2017-07-06 01:50:43 +02:00
rob-v
6c962b6675 Add TD Actor Categories 2017-07-06 01:50:43 +02:00
rob-v
6005b59064 Add RA Actor Categories 2017-07-06 01:50:43 +02:00
rob-v
686686417f Add Actor Categories and Category dropdown filter in Map editor 2017-07-06 01:50:43 +02:00
reaperrr
8f4a92af99 Upgrade rules and yaml updates for Bib refactor 2017-07-06 01:42:55 +02:00
reaperrr
3200f4fb0f Remove bib-related hacks from Building and FootprintUtils 2017-07-06 01:42:55 +02:00
reaperrr
9b137afa6d Add ITargetableCells interface 2017-07-06 01:42:55 +02:00
reaperrr
69aa4f5962 Building style fixes for better readability 2017-07-06 01:42:55 +02:00
RoosterDragon
297f4ad9ed Ensure we set ZipConstants.DefaultCodePage by using a helper method.
We were currently dealing with this terrible global variable in FileSystem/ZipFile.cs previously, but other parts of the code such as DownloadPackageLogic were creating these files too, and may not have executed the static ctors that fixed the encoding yet.
2017-07-05 22:45:15 +01:00
rob-v
1f436ad0cb TS - Rename Template.Category to Template.Categories 2017-07-05 22:46:59 +02:00
rob-v
c3ccd1906d D2K - Rename Template.Category to Template.Categories 2017-07-05 22:46:59 +02:00
rob-v
5cee040fc0 TD - Rename Template.Category to Template.Categories 2017-07-05 22:46:59 +02:00
rob-v
03cfd5b880 RA - Rename Template.Category to Template.Categories 2017-07-05 22:46:59 +02:00
rob-v
4b9c6c4746 Allow multiple terrain (tile) categories 2017-07-05 22:46:59 +02:00
reaperrr
3abd65052c Fix TS Titan barrel, armament offsets and disable projectile image 2017-07-03 18:52:54 +02:00
reaperrr
b491ec871c Tweak TS sprite walker animations
- replace WithInfantryBody with WithFacingSpriteBody + WithMoveAnimation on Titan
- rename all mech 'run' anims to 'walk'
- tweak walk anim rates to better match movement speed/original
- tweak Wolverine attack anim to play a little faster
2017-07-03 18:52:54 +02:00
reaperrr
9a25dd6a60 Add elite explosion to TS Sonic & Stealth Tanks
Matching original TS.
2017-07-02 16:03:40 -05:00
reaperrr
faf9f7cede Change Explodes.Weapon default to null
FieldLoader.Require makes the default pointless, so it makes more sense to change it to null.
2017-07-02 16:03:40 -05:00
reaperrr
a6b9bab033 Make Explodes conditional 2017-07-02 16:03:40 -05:00
Mustafa Alperen Seki
6dca6b3740 Reimport 8PLAY3 and 5 2017-07-02 21:04:16 +02:00
Jean-Rémy Buchs
2e4cd8d820 Make SpawnActorOnDeath conditional 2017-07-02 10:00:08 -05:00
reaperrr
9e138178ad WithAttackAnimation style fix
Looks better this way.
2017-07-01 12:33:51 +01:00
reaperrr
9c2e3aaa05 Make WithMoveAnimation conditional and modify only a single assigned sprite body
The latter to match what we do on WithAttackAnimation already.
2017-07-01 12:33:51 +01:00
reaperrr
8a5a8a1646 RA yaml style fix 2017-07-01 11:11:51 +01:00
reaperrr
ff268eee44 Remove comments on explosion sequences in TD
We don't ship comments for explosions in the other mods, and every modder will either already know or can look them up in the asset browser.
2017-07-01 11:11:51 +01:00
reaperrr
ec5c218ac4 TD yaml style fixes 2017-07-01 11:11:51 +01:00
Paul Chote
fdafbd9f15 Remove hardcoded references to FacingInit and TurretFacingInit. 2017-07-01 10:35:22 +01:00
Paul Chote
2a2bd676a3 Remove hardcoded references to HideBibPreviewInit. 2017-07-01 10:35:22 +01:00
Paul Chote
b2c3a55c12 Add IActorPreviewInitInfo interface. 2017-07-01 10:35:22 +01:00
Paul Chote
e10b64d62c Add command bar to D2K. 2017-07-01 00:35:47 +02:00
Paul Chote
f801fc502f Adjust UI spritesheet to make more usable space. 2017-07-01 00:35:47 +02:00
reaperrr
3f8efb1163 Remove ApplyToAllTargetablePositions hack from RectangleShape
In its current form it is bad for performance due to the ITargetablePositions look-up, and fixing that only to remove the hack entirely a few weeks later would be kind of pointless, so let's get this over with.
2017-06-29 22:01:19 +02:00
rob-v
f75115a645 Remove unnecessary loading mod exceptions, log missing icon.png 2017-06-29 19:43:44 +02:00
abcdefg30
04033e5c79 Don't iterate over an array with only one element 2017-06-29 16:56:21 +02:00
abcdefg30
841798a0a8 Don't use a broken version string when git is not found 2017-06-29 16:56:21 +02:00
abcdefg30
057c201e85 Don't echo "Invalid command" when using the version command with a parameter 2017-06-29 16:56:21 +02:00
abcdefg30
83be37acaf Try to bypass the security warning 2017-06-29 16:56:21 +02:00
abcdefg30
57af145c12 Don't let the launcher scripts close the console window 2017-06-29 16:56:21 +02:00
Markus Hartung
27ce2fcda9 Add some resharper rules 2017-06-27 22:47:50 +01:00
rob-v
78bedb0513 Fix IsSinglePlayer 2017-06-27 22:43:15 +01:00
C. Helmig
8a508ecafa Change concrete radar color to match rock.
This is/was problematic, because right now players can spot expansions through the fog-of-war instantly.
This replicates original game behavior, too. Concrete in original dune2k doesn't show up on the radar.
2017-06-27 23:31:09 +02:00
Paul Chote
dbe16bfdb5 Add faction tooltips to TS. 2017-06-27 23:27:53 +02:00
Paul Chote
88ab77ce0f Polish Random faction tooltips. 2017-06-27 23:27:53 +02:00
Paul Chote
714b24329c Use standard button tooltip for faction descriptions. 2017-06-27 23:27:53 +02:00
Paul Chote
3996aadcb6 Add description yaml to D2K button tooltip. 2017-06-27 23:27:53 +02:00
reaperrr
2650973d51 Add ForceDisplayAtGroundLevel to CreateEffectWarhead
Allows to force the effect to always play at ground level, regardless of explosion altitude.
2017-06-27 23:19:32 +02:00
reaperrr
d283231d94 Fix TS Cyborg explosion and Tiberium explosion palette
Otherwise these would appear darker than the other explosions on maps with darker ambient color and have now translucency.
2017-06-27 23:19:32 +02:00
reaperrr
f7aac24c43 Fix TS Grenade explosion size
Now matches original.
2017-06-27 23:19:32 +02:00
rob-v
3e7bf1880f Fix Map editor total ore money 2017-06-27 22:05:40 +01:00
reaperrr
266b5d194f Fix TS visceroid and tib floater weapons
They'll need to target closest targetable position to be able to attack larger buildings, which conflicts with the TargetDamage warhead.
2017-06-27 21:07:39 +01:00
ltem
115c72aa4b Fixed the positioning of the performance graph. 2017-06-26 23:11:32 +01:00
Paul Chote
d81a07931f Fix D2K units not auto-targeting defenses in Defend stance. 2017-06-25 22:49:37 +02:00
reaperrr
ba1279aa93 Disable some effect warhead victim scans in TS 2017-06-25 22:40:12 +02:00
reaperrr
32e7ab7a30 Disable effect warhead victim scans in TD
They are meant to play regardless of whether an actor was hit anyway.
2017-06-25 22:40:12 +02:00
reaperrr
4823d5454d Disable effect warhead victim scans in D2k
They are always displayed unconditionally anyway.
2017-06-25 22:40:12 +02:00
reaperrr
e0abf8ed27 Disable effect WH victim scans in RA where sensible
AA missiles, flame weapons and nukes, pretty much, because they always
display the effect regardless of what they hit.
2017-06-25 22:40:12 +02:00
reaperrr
1d2361cdd3 Change default and auto-calc of victim scans to -1
For all projectiles and warheads.

Not really a must for everything else, but for CreateEffectWarhead, the
ImpactTypes refactor (separate PR) makes it a bit harder to make the
warhead valid in every situation, so setting the victim scan to zero is the easiest way to disable scanning for actors completely.
2017-06-25 22:40:12 +02:00
reaperrr
ca475fe133 Projectile style fixes 2017-06-25 22:40:12 +02:00
reaperrr
dc5818d035 Warhead style fixes
Implement interfaces explicitly
2017-06-25 22:40:12 +02:00
Paul Chote
a755070d76 Fix VisualHeight of RA commandbar buttons. 2017-06-25 22:37:36 +02:00
rob-v
f29d2028fe Fix missing-failing logging of Ruleset (Yaml)Exceptions 2017-06-25 18:45:12 +02:00
rob-v
6e1b2333f3 Fix ClientTooltip disables tooltip delay 2017-06-24 11:52:27 +01:00
rob-v
1b3422db2d Fix flickering tooltip 2017-06-24 11:52:27 +01:00
rob-v
7772ebedf4 Check for Carryall, RevealOnFire FrozenActor.Actor is null 2017-06-24 11:42:50 +01:00
rob-v
78bf530a4e Check for EnterTunnel FrozenActor.Actor is null 2017-06-24 11:42:50 +01:00
rob-v
6df7f18a3b Fix Initialize sounds (dispose of null SoundSource) 2017-06-24 11:29:55 +01:00
reaperrr
0a1083e554 Merge the Valid(...)Weapons methods 2017-06-24 11:24:17 +01:00
reaperrr
33e8bf9928 Adapt Attack logic to Weapon.TargetActorCenter 2017-06-24 11:24:17 +01:00
reaperrr
edffaa4987 Introduce Weapon.TargetActorCenter and adapt projectiles
This also fixes issues with attackers that don't have their own Attack
trait.
2017-06-24 11:24:17 +01:00
reaperrr
6b3c04a584 Fix old shape scaling 2017-06-24 11:15:12 +01:00
reaperrr
7d3cf7894b Fix upgrade rule dates
These were merged into bleed after prep was branched off, so they need a date newer than last release.
2017-06-24 11:15:12 +01:00
reaperrr
522a29f1e4 Reduce Ornithopter damage vs buildings
Especially larger ones.
2017-06-24 11:11:56 +01:00
abcdefg30
c58db84d35 Fix the harvesting sequence being invisible in TS 2017-06-23 12:45:16 +02:00
abcdefg30
1760a12428 Replace the wrong CURRENTENGINE description by OLDENGINE 2017-06-23 11:42:44 +02:00
abcdefg30
118039ded3 Add a missing i 2017-06-22 14:35:26 +02:00
abcdefg30
839945cf57 Fix a crash in CheckSequences when the sprite image is null 2017-06-22 14:35:26 +02:00
rob-v
da5c70184e Refactor RefreshServerListInner's games+lanGames argument 2017-06-22 11:59:04 +02:00
rob-v
3c323a8672 Extract loading of game rows into LoadGameRows method. 2017-06-22 11:59:04 +02:00
rob-v
53c7954f84 MP Browser - display current mod+version first 2017-06-22 11:59:04 +02:00
rob-v
7237fd83c6 Fix error handling of failed MP server refresh 2017-06-22 11:59:04 +02:00
reaperrr
8e9f20cf4b Cache traits implementing INotifyAttack 2017-06-22 04:13:47 -05:00
reaperrr
779218f381 Cache traits implementing modifiers 2017-06-22 04:13:47 -05:00
reaperrr
243ed3d76a Cache traits implementing INotifyBurstComplete 2017-06-22 04:13:47 -05:00
Forcecore
100abe3246 Requested changes applied
* private this.info --> public Info for GCOnDeploy
* Parameter change for (un)deploy activities
2017-06-20 23:42:14 -05:00
Forcecore
a7cedc54ff Deploy activities for mods and future AI scripting 2017-06-20 23:42:14 -05:00
Paul Chote
300a7222f3 Don't autotarget structures in Defend stance. 2017-06-18 21:07:21 +02:00
Paul Chote
2e2e1cae7f Fix MSAM/MLRS autotargeting. 2017-06-18 21:07:21 +02:00
Paul Chote
57df34dcbf Fix auto-targeting vs TD/TS/D2K creeps. 2017-06-18 21:07:21 +02:00
Paul Chote
0a1f2b7275 Fix auto-targeting vs submerged but detected RA submarines. 2017-06-18 21:07:21 +02:00
Paul Chote
0aa84aa5ed Fix auto-targeting vs RA tanks. 2017-06-18 21:07:21 +02:00
Paul Chote
4040863707 Fix queued move activities. 2017-06-18 20:55:50 +02:00
Oliver Brakmann
f6e87f63e7 Fix GetSupportDir not returning an absolute path 2017-06-18 20:46:22 +02:00
Mustafa Alperen Seki
c4e8af08ec Implement EliteAbility=VEIN_PROOF and SENSORS on units that need 2017-06-18 16:23:34 +02:00
Forcecore
a3c9d72cfd Unbreak queued order 2017-06-18 12:03:29 +01:00
Forcecore
07a2ee5eab Engineer repair activity can be queued 2017-06-18 12:03:29 +01:00
Forcecore
568d7efdb1 ExternalCaptures Type filter fix up 2017-06-18 12:37:59 +02:00
Paul Chote
4b4172f757 Make the Enter activity use the closest target position. 2017-06-17 21:18:28 +02:00
Paul Chote
995a3da43a Rename Enter.targetCenter to repathWhileMoving. 2017-06-17 21:18:28 +02:00
rob-v
b0f1059df2 Remove unnecessary PostBuildEvent from D2k project 2017-06-17 20:17:31 +02:00
Paul Chote
f0ffb4e8d9 Remove leftover target references.
Fixes a warning generated by `xbuild`.
2017-06-17 20:17:31 +02:00
Paul Chote
3db15beeb9 Fix compatibility with msbuild/csc on non-windows. 2017-06-17 20:17:31 +02:00
Forcecore
728162e688 GCOnDeploy's ValidTerrain() takes location parameter
Fixes ##13394.

Possible use: AI's future deploy planning when the actor isn't actually
there yet. Also used in my mod for Slave Miner's deploy planning
2017-06-17 19:00:07 +02:00
reaperrr
f98e7656da Make TS GDI Juggernaut attack the target center
Instead of closest targetable position/offset.
2017-06-15 01:32:37 +02:00
reaperrr
c20d02fd2e Make TD artillery actors attack the target center
Instead of closest targetable position/offset.
Applies to:
-Artillery
-Rocket Launcher (MLRS)
2017-06-15 01:32:37 +02:00
reaperrr
26e6d86821 Make RA artillery actors attack the target center
Instead of closest targetable position/offset.
Applies to:
-Artillery
-Cruiser
-Missile Sub
2017-06-15 01:32:37 +02:00
reaperrr
7eab278711 Adapt tracking projectiles to support targeting CenterPosition
Instead of closest targetable position.
2017-06-15 01:32:37 +02:00
reaperrr
da7433a95f Add plumbing for targeting of target center instead of closest targetable position
Note: Projectiles that can track their target need minor additional changes, but for InstantHit (which already implemented support for this) and unguided projectiles (Bullet, GravityBomb) this commit is already sufficient.
2017-06-15 01:32:37 +02:00
Paul Chote
9c9a23be86 Make Frames and Limbs private. 2017-06-14 18:56:06 +02:00
Paul Chote
2683b2507e Fix remaining voxel references in Game. 2017-06-14 18:56:06 +02:00
Paul Chote
6ca0208694 Rename VoxelPreview to ModelPreview. 2017-06-14 18:56:06 +02:00
Paul Chote
736e70df78 Rename VoxelRenderable to ModelRenderable. 2017-06-14 18:56:06 +02:00
Paul Chote
17089f2aee Rename VoxelSequences to ModelSequences. 2017-06-14 18:56:06 +02:00
Paul Chote
34810756c2 Move Voxel code to Mods.Cnc. 2017-06-14 18:56:06 +02:00
Paul Chote
dc4c3fd546 Rename VoxelRenderer to ModelRenderer. 2017-06-14 18:56:06 +02:00
Paul Chote
4f42778d26 Rename VoxelAnimation to ModelAnimation. 2017-06-14 18:56:06 +02:00
Paul Chote
e1cd00c1dd Add backend plumbing for model loaders. 2017-06-14 18:56:06 +02:00
reaperrr
086fc88e3e Increased ZOffset of TD explosions
To make sure they always play on top of actors.
2017-06-14 18:28:20 +02:00
reaperrr
35e131bac7 Give TD base buildings custom hit shapes 2017-06-14 18:28:20 +02:00
reaperrr
b219214426 Give TD civilian and tech buildings custom shapes 2017-06-14 18:28:20 +02:00
reaperrr
d1790229a9 Add hit-shape defaults to TD
Plus some resulting cleanup of defaults.yaml.
2017-06-14 18:28:20 +02:00
reaperrr
600478603c Fix TD civ field husk footprint
Players should not be able to build on it.
2017-06-14 18:28:20 +02:00
Mustafa Alperen Seki
4187a69904 Remove afld and hpad from Rush AI's Production: list 2017-06-14 18:26:18 +02:00
Paul Chote
90778bc8a8 Fix queued move orders on Chrono Tank. 2017-06-12 19:38:18 -05:00
Paul Chote
242f33c2ba Implement RA command bar. 2017-06-12 19:38:18 -05:00
Paul Chote
2923c9907f Fix minor issues with TD command bar. 2017-06-12 19:38:18 -05:00
reaperrr
d52313ab18 Rename WithAttackAnimation.BodyName to just .Body
Shorter and more consistent with Armament.Turret, WithTurretedAttackAnimation.Turret, WithSpriteBarrel.Armament etc.
2017-06-12 19:01:10 -05:00
reaperrr
fef388834e Throw yaml exception if WithAttackAnimation has no assigned sprite body
...or too many assigned bodies.

Also, further simplify WithAttackAnimation code.
2017-06-12 19:01:10 -05:00
reaperrr
5fb468922e Make WithAttackAnimation conditional 2017-06-12 19:01:10 -05:00
reaperrr
2e70b6931b Refactor WithAttackAnimation
- made trait compatible with actors that have more than one sprite body or enable/disable sprite bodies via conditions
- added check for running attack anim and prevent aim/reload sequences from overriding it
- added caching of whether trait has either aim or reload sequence, to avoid some string.IsNullOrEmpty look-ups every tick
2017-06-12 19:01:10 -05:00
rob-v
8276b17570 Fix Sound memory leak (OutOfMemoryException), remove Music caching to free memory 2017-06-12 18:33:53 -05:00
RoosterDragon
2def72a078 Clear previous effects data when generating a new sync report. 2017-06-12 18:25:35 -05:00
Paul Chote
2e801a55ce Update ts AutoTarget definitions. 2017-06-11 17:14:21 -05:00
Paul Chote
52b08a769d Update d2k AutoTarget definitions. 2017-06-11 17:14:21 -05:00
Paul Chote
d7f9c2f852 Update cnc AutoTarget definitions. 2017-06-11 17:14:21 -05:00
Paul Chote
b613b1b2e0 Update RA AutoTarget definitions. 2017-06-11 17:14:21 -05:00
Paul Chote
716343732f Add AutoTargetPriority trait for smarter AutoTarget logic. 2017-06-11 17:14:21 -05:00
reaperrr
ab8bc53ed8 Replace doneDamage bool in TeslaZap with DamageDuration
Allows it to deal continous damage via a single projectile.
2017-06-11 23:28:17 +02:00
reaperrr
6ff31786cb Refactor TeslaZap targeting
- made it target closest targetable position, instead of CenterPosition
- made target tracking optional (enabled by default)
- made tracking independent from whether damage has already been dealt
- cache target position and update it in Tick only if tracking
2017-06-11 23:28:17 +02:00
reaperrr
c474b77d79 Remove unused 'initialized' bool from TeslaZap
It was never set to 'true', and doing so would break Duration > 1, so it's better to just remove it.
2017-06-11 23:28:17 +02:00
reaperrr
2704f3bcd5 Minor TeslaZap cleanup
Renaming timeUntilRemove to ticksUntilRemove makes it more clear and allows to drop the comment.
2017-06-11 23:28:17 +02:00
reaperrr
16e260e69f Increase ZOffset of RA explosions
To make sure they play on top of actors.
2017-06-10 11:38:04 +01:00
reaperrr
7cadbcb8f6 Set custom hit shapes for civilian buildings 2017-06-10 11:38:04 +01:00
reaperrr
07e6708b88 Align RA base building hitshapes with their sprites 2017-06-10 11:38:04 +01:00
reaperrr
7ba276c0c1 Add building hitshape defaults to RA
And do some cleanup.
Intentionally omitted uncommon shapes that only appear once or twice.
2017-06-10 11:38:04 +01:00
C. Helmig
3b626e5ff7 Fixes tile error in #13047. See comment Item in #12868. 2017-06-07 18:54:39 +02:00
C. Helmig
452aed0a97 Multiple passability changes to replicate original game behavior. (= Items comments on #12868 )
Fix the passability of some bridge tiles
2017-06-07 18:54:39 +02:00
abcdefg30
5d40ed3e32 Move tiles into correct category. 2017-06-07 18:54:39 +02:00
abcdefg30
8494200321 Renamed and reordered Categories - uniform naming, similar categories adjacent to one another, most used to top. 2017-06-07 18:54:39 +02:00
Paul Chote
83c4c842ee Update to latest osx launcher package. 2017-06-06 22:08:08 +02:00
reaperrr
423ea555b3 Fix RA bridge crash 2017-06-06 22:04:00 +02:00
reaperrr
4af31be6bd Fix TD bridge crash 2017-06-06 22:04:00 +02:00
Paul Chote
ff9bddbf21 Add unit command bar to TD. 2017-06-06 08:53:54 -06:00
Paul Chote
52f1ab0969 Add backend code for unit command bar. 2017-06-06 08:53:54 -06:00
Paul Chote
f1eb96b273 Add DisableKeyRepeat flag to ButtonWidget. 2017-06-06 08:53:54 -06:00
Paul Chote
854dd75282 Add ButtonTooltipWithDescHighlightLogic.
Highlights TooltipDesc characters inside {}.
2017-06-06 08:53:54 -06:00
Paul Chote
8f2a933ba8 Add support for button tooltip descriptions. 2017-06-06 08:53:54 -06:00
Paul Chote
ce233a6cca Reduce edge scrolling threshold and polish cursor hotspots. 2017-06-06 08:53:54 -06:00
Paul Chote
94fba3521a Add ForceModifiersOrderGenerator for force move/attack and queueing. 2017-06-06 08:53:54 -06:00
Paul Chote
8dfb7d8bbc Add Selection.Hash for tracking selection changes. 2017-06-06 08:53:54 -06:00
Paul Chote
e8d6d63707 Add IIssueDeployOrder. 2017-06-06 08:53:54 -06:00
Paul Chote
533b2f9ad7 Flip tooltips above the cursor at the bottom of the screen. 2017-06-06 08:53:54 -06:00
Mustafa Alperen Seki
46d0157c2e Add Harkonnen 4 2017-06-05 22:32:49 +02:00
reaperrr
3507ad2f87 Give D2k structures footprint hit-shapes 2017-06-05 14:22:47 +02:00
reaperrr
e2647e8a60 Move down D2k High-tech factory sprite
This better aligns its visuals with the footprint, hit-shape and targetable positions.
2017-06-05 14:22:47 +02:00
reaperrr
6a212eea53 Make attacking actors/turrets face the targeted position 2017-06-05 14:22:47 +02:00
reaperrr
7acc6dacbc Fix armaments/projectiles to aim at closest Target.Positions
Instead of CenterPosition.
TargetablePositions were already used for targeting/attack decisions, but not armaments/projectiles.
2017-06-05 14:22:47 +02:00
Markus Hartung
73577e3a7e Add myself to authors 2017-06-04 17:11:44 +02:00
Markus Hartung
2a0b3b39ea INotifyCreated.Created now calls base properly 2017-06-04 17:11:44 +02:00
Markus Hartung
f7ddb969c6 Change so Attack* calls Created on base class 2017-06-04 17:11:44 +02:00
abcdefg30
40e8c5136d Fix the close enough check in Repair.cs 2017-06-04 15:35:40 +02:00
Paul Chote
abdcf90c30 Ship VERSION with binary releases. 2017-06-04 13:21:27 +02:00
Paul Chote
36d7b5131e Use ContentInstallerMod in MainMenuLogic. 2017-06-04 13:21:27 +02:00
Paul Chote
f79a3a8d03 Use engine version in crash logs. 2017-06-04 13:21:27 +02:00
Paul Chote
f7db7e3308 Use engine version for master server queries. 2017-06-04 13:21:27 +02:00
Paul Chote
49f0e35bd7 Add engine VERSION file. 2017-06-04 13:21:27 +02:00
reaperrr
82758a8bef Add TargetableOffsets to HitShape
And remove ITargetablePositions from Building.
Also, added UseFootprintOffsets to replicate the old Building behavior for easier setup of TargetablePositions for buildings.
2017-06-04 00:07:08 +02:00
reaperrr
7fd0a3aa58 Lint check and yaml enforcement for HitShape
Now that Health no longer provides a HitShape, actors with Health need at
least one HitShape trait.
2017-06-04 00:07:08 +02:00
reaperrr
7f81de2f8a Upgrade rule for Health.Shape to HitShape.Type 2017-06-04 00:07:08 +02:00
reaperrr
43b55ae333 Move Shape from Health to new HitShape trait
Renamed Shape to Type
2017-06-04 00:07:08 +02:00
reaperrr
c7c6cf864c Fix inconsistent rules in preparation of HitShape refactor
- TD C17 and A10 are not targetable and therefore technically invulnerable, so we should remove Health and Armor
- D2k ^carryall.colorpicker and TS ^mmch.colorpicker shouldn't have Health
- TS crash sites are supposed to be indestructible map deco as per original (they had "Immune=yes")
2017-06-04 00:07:08 +02:00
Mustafa Alperen Seki
61afa096e3 Add 8PLAY6 2017-06-03 16:17:34 +02:00
Mustafa Alperen Seki
aa9c00367b Add 8PLAY2 2017-06-03 16:14:52 +02:00
Oliver Brakmann
677904c682 Hide tooltips for unoccupied spawnpoints in the replay browser 2017-06-03 15:56:27 +02:00
rob-v
fc0495ac27 Fix keys scrolling stuck (+ some function double calls) 2017-06-01 23:07:25 +02:00
Mustafa Alperen Seki
f4988356a0 Add 8PLAY4 2017-06-01 20:28:48 +02:00
Mustafa Alperen Seki
8bcc2b30d9 Add 8PLAY1 2017-06-01 20:14:59 +02:00
Andre Mohren
96ca3baff8 Fixed PNGLoader crash with palette containing less than 256 colors. 2017-05-31 20:34:09 +02:00
Oliver Brakmann
a869dacdc4 Remove tooltips from map preview in MP server browser 2017-05-30 22:30:31 +01:00
rob-v
ada5b6d0e5 Add Unit stance hotkeys, remove Cycle Stance hotkey 2017-05-30 21:16:31 +02:00
Andre Mohren
d080a47cbf Allow load screens to override StartGame. 2017-05-30 18:15:28 +02:00
atlimit8
afa5a7772d Split ConditionByStance in AutoTarget 2017-05-29 20:41:10 +01:00
atlimit8
cadfbe8a29 Grant condition by unit stance 2017-05-29 20:41:10 +01:00
reaperrr
5834d7615b Fix Rectangle OuterRadius
Rectangle shapes always assumed that either top-left or bottom-right would have the largest distance from actor center, which is wrong, because depending on the position of the shape, top-right or bottom-left can be the furthest away corner as well, potentially resulting in a too small OuterRadius.
2017-05-29 07:41:20 -05:00
reaperrr
bc5eb66088 Add OuterRadius debug overlay to Rectangle and Capsule
Circle obviously doesn't need it now (might change with the introduction of offsets, but we can still add it when that happens).
2017-05-29 07:41:20 -05:00
reaperrr
8d69d26542 Add debug overlay for custom TargetPositions 2017-05-29 07:41:20 -05:00
reaperrr
479795f494 Fix D2k repair pad footprint
To match the original.
2017-05-29 07:41:20 -05:00
rob-v
45041bde14 Dispose-stop Beacon on closing server browser 2017-05-29 13:28:39 +01:00
rob-v
9a9920e4af Catch and ignore BeaconLib errors 2017-05-29 13:28:39 +01:00
abcdefg30
e1b7fc2617 Replace the removed SupplyTruck trait in disable-player-experience.yaml 2017-05-29 07:15:57 -05:00
Paul Chote
45b13dabfb Explicitly implement interfaces in AttackBase. 2017-05-29 06:27:19 -05:00
Paul Chote
34844e87a3 Replace Lazy trait lookups with INotifyCreated. 2017-05-29 06:27:19 -05:00
Paul Chote
69587a2128 Move InstallShieldPackage to Mods.Common. 2017-05-29 12:41:28 +02:00
Paul Chote
e5222f95f6 Remove ambiguity from FileSystem references. 2017-05-29 12:41:28 +02:00
Paul Chote
ba7290cc2c Move classic-mod package loaders and support files to Mods.Cnc. 2017-05-29 12:41:28 +02:00
Paul Chote
28fdb71163 Remove mod chooser reference from music installation prompt. 2017-05-29 12:33:20 +02:00
Paul Chote
8321d1f3e3 Remove legacy FileSystem.OpenPackage(string, IReadOnlyPackage). 2017-05-29 12:27:24 +02:00
Paul Chote
df40d38b91 Rework read/write zip file loading/saving. 2017-05-29 12:20:32 +02:00
evgeniysergeev
c06df1ed21 make IsCloseEnoughToBase function virtual 2017-05-29 11:50:56 +02:00
abcdefg30
aecfff905d Throw a more detailed error message when creating invalid frozen actors 2017-05-28 14:02:18 +02:00
abcdefg30
2a3139dc39 Add a IAutoSelctionSizeInfo trait interface 2017-05-28 14:02:18 +02:00
Mustafa Alperen Seki
767fd5438e Add Ordos 3b 2017-05-28 13:49:08 +02:00
Paul Chote
a43ec158fa Update error messages. 2017-05-27 13:03:47 +02:00
Paul Chote
7f3f36885a Fix bogus variable names in widget widths. 2017-05-27 13:00:00 +02:00
Paul Chote
29d827079e Fix "game" chat tab mouseover not working from globalchat login tab. 2017-05-27 13:00:00 +02:00
Paul Chote
b104f8baa2 Improve handling of unknown error codes. 2017-05-27 12:43:25 +02:00
Glenn Martin Jensen
e8b2a12714 Add support for blacklist response
Adds support for the new blacklist response in servernames
2017-05-27 12:43:25 +02:00
Paul Chote
0ddc4360fe Remove unused MiniYaml DictFromFile. 2017-05-26 23:02:25 -05:00
Paul Chote
c6816cd33f Persist unknown settings.yaml entries across load/save. 2017-05-26 23:02:25 -05:00
Paul Chote
b1ac1d06e3 Catch and ignore exceptions while loading map previews. 2017-05-26 23:41:30 +02:00
abcdefg30
1f93029e51 Always make sure to be on the host actor when repairing 2017-05-26 22:53:03 +02:00
Jean-Rémy Buchs
2e0d7d0e79 Add KillCargo and FlashScreen to PortableChrono 2017-05-26 10:31:59 +02:00
Paul Chote
2e7de2874d Fix cloak sounds playing on build for initially cloaked actors. 2017-05-24 16:30:04 +02:00
Mustafa Alperen Seki
5dd6aa7a3a Add Ordos 3a 2017-05-20 13:30:41 +02:00
abcdefg30
5e40a5b683 Remove the effect from MissionColt 2017-05-20 11:28:14 +02:00
abcdefg30
ddba9b2efd Remove outdated values and replace Bullet by InstantHit in allies05a 2017-05-20 11:28:14 +02:00
abcdefg30
7ea40482e2 Fix the Colt sometimes shooting even after Tanya was released 2017-05-20 11:28:14 +02:00
abcdefg30
cc6191554a Remove the hacky MissionColt actor from allies05a 2017-05-20 11:28:14 +02:00
abcdefg30
550256373a Replace Camera.Truk by using ValidStances on RevealsShroud 2017-05-20 11:28:14 +02:00
abcdefg30
434ea9ca88 Throw a lint error or an exception when no player owns the world 2017-05-20 11:02:00 +02:00
abcdefg30
ac4fef6630 Don't close the console window when OpenRA closes 2017-05-20 10:55:09 +02:00
abcdefg30
61659d0d32 Add support for using launch-game.cmd with parameters 2017-05-20 10:55:09 +02:00
Paul Chote
b74141666b Implement a workaround for the mono 5.0 cursor enumerator bug. 2017-05-19 14:31:00 +02:00
rob-v
3258d89651 Fix map parameter warning as error from PR 13233 2017-05-17 22:58:56 +02:00
rob-v
127ef8bb27 LobbyLogic, ReplayBrowserLogic Map property changed to map field 2017-05-14 21:06:16 +01:00
rob-v
a26210f914 Replays with MapPreview (like in Lobby) 2017-05-14 21:06:16 +01:00
rob-v
0e3cc1ad28 (Lobby)MapPreviewLogic refactoring 2017-05-14 21:06:16 +01:00
rob-v
ffc3f6e0d0 LAN games discovery 2017-05-14 22:01:25 +02:00
rob-v
b2e6a0484b Fix Selecting a map resets player color 2017-05-14 14:00:45 +01:00
reaperrr
d95bb4152a Add Firestorm Juggernaut to TS 2017-05-14 14:41:20 +02:00
rob-v
224bda6de5 Fix Player slot when changing map 2017-05-14 13:19:18 +02:00
reaperrr
d8edcb1bad Fix TS Nod artillery turret / barrel / weapon offsets 2017-05-14 11:52:42 +01:00
Paul Chote
d45870ca23 Allow fixed barrel pitches to be defined in yaml. 2017-05-14 11:52:42 +01:00
Paul Chote
430429f337 Fix WRot FieldLoader parsing. 2017-05-14 11:52:42 +01:00
reaperrr
b8c251cf41 Add StartBurstReport to WeaponInfo
The FS Juggernaut firing sound already contains 3 shots, so without this, players would hear a total of 9(!) shots per salvo.
2017-05-14 11:49:38 +01:00
reaperrr
d502b296bb Upgrade rule for DeployAnimation removal 2017-05-14 00:22:26 -05:00
reaperrr
aa8d9f5dda Fix GrantConditionOnDeploy to support multiple sprite bodies 2017-05-14 00:22:26 -05:00
reaperrr
6f19379a2b Make WithMoveAnimation multi-WithSpriteBody-compatible 2017-05-14 00:22:26 -05:00
reaperrr
3b798897be Add Name ID field to WithSpriteBody 2017-05-14 00:22:26 -05:00
rob-v
48abb7372b Remove ChatSettings.NickName, use PlayerName always as default 2017-05-13 11:40:47 -07:00
reaperrr
5b8c313d55 Remove lint rule for victim scan radii
They're now calculated automatically to use the most sensible value by default. Only people who know what they're doing or fool around will use custom values, and in that case a lint rule might actually just annoy people.
2017-05-13 11:15:38 -07:00
reaperrr
96d629cefd Upgrade rule for victim scan radii changes
The game/engine now calculates the best values automatically and the field names have changed, so instead of renaming, we can just remove them under the assumption that only modders who really know what they're doing will ever use the override.
2017-05-13 11:15:38 -07:00
reaperrr
d04c6275da Make warheads use the the most sensible victim scan radius
By default, but allow custom overrides.
2017-05-13 11:15:38 -07:00
reaperrr
033268a7ba Make projectiles use most sensible blocker scan radius
By default, but allow custom overrides.
2017-05-13 11:15:38 -07:00
reaperrr
9f9d1f9e5f Added helper utility for finding best hit-shape scan radius 2017-05-13 11:15:38 -07:00
reaperrr
d92d9f86fc Add IBlocksProjectilesInfo interface 2017-05-13 11:15:38 -07:00
Zimmermann Gyula
0d2d17d2fb Fix the AI acting the same at game restart. 2017-05-13 19:08:20 +01:00
reaperrr
db85fff7c0 Remove TS infantry hit-shape height
We should either implement this for all non-blocker actors at once, or not at all. By now we have walls/gates as examples for vertical shape height, so for now there's no reason to leave this on infantry.
2017-05-13 10:51:41 -07:00
reaperrr
91c65f1e9c Adapt blocking height of TS walls etc.
to WDist rescaling.

Also, make wall hit-shape height match blocking height and tweak it to
approximate original TS behaviour as much as possible (Tick Tanks could
shoot over them, but only from certain angles/distances).
2017-05-13 10:51:41 -07:00
reaperrr
ccda89f268 Refactor Shape.Rectangle.RotateToIsometry
And fixes TS wall and gate shapes.
2017-05-13 10:51:41 -07:00
C. Helmig
b11af3bcb5 D2k editor: Moved all appropriate tiles into Cliff-Type-Changer and replaced Sand-Smooth with Cliff-Ends category. 2017-05-13 10:48:37 -07:00
reaperrr
97ec200dcf Merge pull request #13282 from pchote/osx-fullscreen
Work around resolution issues in (legacy) Fullscreen on OSX.
2017-05-13 15:51:10 +02:00
Paul Chote
42232f4a55 Work around resolution issues in (legacy) Fullscreen on OSX. 2017-05-13 00:02:29 +01:00
reaperrr
cf65bb6e41 Merge pull request #13203 from reaperrr/ts-balance-fixes
Fix some wrong TS unit stats
2017-05-12 15:30:39 +02:00
reaperrr
5e736527b7 Merge pull request #13223 from pchote/mod-package-loaders
Unhardcode mod package loaders
2017-05-12 14:04:58 +02:00
reaperrr
2a0cfa5c43 Merge pull request #13278 from reaperrr/disable-win-dpi
Disable DPI scaling on Windows by default
2017-05-12 01:11:15 +02:00
reaperrr
f0c6e5e855 Disable DPI scaling on WIndows by default 2017-05-11 20:09:13 +02:00
abcdefg30
618ac5838a Merge pull request #13215 from pchote/packaging-simplification
Overhaul packaging scripts
2017-05-10 16:34:01 +02:00
atlimit8
55de4a59d0 Merge pull request #13247 from pchote/widget-evaluator-expressions
Replaced legacy Evaluator with IntegerExpressions.
2017-05-08 21:19:52 -05:00
atlimit8
4a80c37507 Merge pull request #13253 from pchote/rescale-isometric-world-coords
Rescaled isometric world coordinates to measure 1024 along the cell axes.
2017-05-08 20:59:51 -05:00
reaperrr
e94ef1658f Merge pull request #13156 from MustaphaTR/d2k-harkonnen-3b
D2K - Add Harkonnen Mission 3b
2017-05-07 16:53:26 +02:00
Paul Chote
552cf83951 Fix missile characteristics. 2017-05-07 13:49:50 +01:00
Paul Chote
fc29438748 Fix grenade speed. 2017-05-07 13:49:44 +01:00
Paul Chote
d2973801e4 Update TS LocalOffsets for new coordinate system. 2017-05-07 13:47:12 +01:00
Paul Chote
cf09b99ed8 Adjust TS subcell positions for new coordinate system. 2017-05-07 13:45:30 +01:00
Paul Chote
cdf2df58a0 Define RectangularIsometric world coordinate scale along the cell axis. 2017-05-07 13:45:30 +01:00
Paul Chote
5dcb840f9f Fix WithHarvesterOffset.LocalOffset name. 2017-05-07 13:44:47 +01:00
Paul Chote
a3f7641b68 Move D2kSoundResources to Mods.D2k dll. 2017-05-07 13:25:43 +01:00
Paul Chote
0222ea675c Implement mod-defined package loaders. 2017-05-07 13:25:38 +01:00
Paul Chote
9b4f602cca Remove unused leftover oramod loading code. 2017-05-07 13:25:04 +01:00
Paul Chote
248c12827e Resolve assembly paths before loading the FileSystem. 2017-05-07 13:25:03 +01:00
Paul Chote
f0d7a6caca Move GetLoaders to ObjectCreator. 2017-05-07 13:25:03 +01:00
reaperrr
74437ed56c Merge pull request #13178 from rob-v/ReturnHeliToNearestBase
Helis return to nearest base like Planes
2017-05-07 13:16:40 +02:00
reaperrr
1194f14cfe Merge pull request #13232 from rob-v/NumberAIPlayers
Number AI players
2017-05-07 13:09:20 +02:00
reaperrr
e9926fdc28 Merge pull request #13248 from pchote/detect-key-repeat
Prevent repeated keys from toggling observer shroud selector.
2017-05-07 13:03:34 +02:00
Paul Chote
e6ec071ceb Merge pull request #13093 from rob-v/ServicePadMoveToRallyPoint
Fix Service Depot Rally point path finding
2017-05-07 08:48:47 +01:00
Paul Chote
d787429a2e Merge pull request #12996 from atlimit8/RemoveIDisable-part2
Remove IDisable - part 2
2017-05-07 08:38:09 +01:00
atlimit8
e01c79be06 Added rule upgrade notice for support powers' PauseOnCondition. 2017-05-06 17:19:43 -05:00
atlimit8
431f06cd49 Convert support powers from actor disabled to pausable-conditional. 2017-05-06 17:19:43 -05:00
atlimit8
9a1ba31753 Added upgrade rule for PauseOnLowPower removal & AffectedByPowerOutage condition granting. 2017-05-06 17:19:43 -05:00
atlimit8
700b117122 Convert WithRepairAnimation from disable to conditional. 2017-05-06 17:19:43 -05:00
atlimit8
5fd4b3a1bd Convert WithRearmAnimation from disable to conditional. 2017-05-06 17:19:42 -05:00
atlimit8
b0706e7cd0 Removes actor disabled support from WithIdleAnimation. 2017-05-06 17:19:42 -05:00
atlimit8
0dfdea1826 Convert AffectedByPowerOutage from disabler to conditional condition granter. 2017-05-06 17:19:42 -05:00
atlimit8
61b84e0c5a Added ts power outage WithIdleOverlay polish. 2017-05-06 17:19:42 -05:00
atlimit8
64a2b9de55 WithRepairOverlay into pausable-conditional trait EMP disabled polish. 2017-05-06 17:19:42 -05:00
atlimit8
1c5427c86f Convert WithIdleOverlay from actor disabled to pausable-conditional. 2017-05-06 17:19:42 -05:00
atlimit8
11933c7e2c Added /poweroutage dev command. 2017-05-06 17:19:39 -05:00
rob-v
fb1d8d780f Fix Service Depot Rally point path finding (+rename ignoredActor) 2017-05-06 19:49:40 +02:00
Paul Chote
c867687d9a Prevent repeated keys from toggling observer shroud selector. 2017-05-06 14:13:12 +01:00
Paul Chote
fff2f097d0 Add KeyInput.IsRepeat. 2017-05-06 14:10:24 +01:00
Paul Chote
cd0898236d Replace legacy Evaluator with IntegerExpressions. 2017-05-06 13:50:30 +01:00
reaperrr
669cf01d80 Merge pull request #13224 from daVoodooShuffle/fix-13153
Cleaned Up Chrome Expression Whitespacing
2017-05-06 14:44:40 +02:00
Paul Chote
9be5ef2bd5 Merge pull request #13214 from GraionDilach/expand-disguise
Expose the drop-disguise-when-attacking aspect to yaml.
2017-05-06 12:00:02 +01:00
daVoodooShuffle
53bf52149c Closes #13153
Modified all expressions to contain a space on either side

Only effects the YAML files that contain config variables:

X:
Y:
Width:
Height:
2017-05-06 15:26:41 +10:00
reaperrr
22d8167d49 Merge pull request #13162 from pchote/tunnel-enter-cursor
Implement "Enter Tunnel" cursor
2017-05-05 23:47:57 +02:00
reaperrr
f5ddea305a Merge pull request #13217 from pchote/jumpjet-death
Fix jumpjet flying death animations
2017-05-05 13:11:17 +02:00
Zimmermann Gyula
81b79a1b29 Expose the drop-disguise-when-attacking aspect to yaml.
Also adds Damaged for more usecases.
2017-05-05 07:58:14 +02:00
atlimit8
4ec0089250 Merge pull request #13219 from GraionDilach/fix-rangemodifier-regression
Fix RangeMultiplier regression.
2017-05-04 20:10:13 -05:00
reaperrr
ea29cce3cf Merge pull request #13002 from rob-v/LobbyOptionsEditableByHost
Host can change Team and Spawn of any player. #12936
2017-05-04 19:15:01 +02:00
reaperrr
c4e79a11a8 Merge pull request #12919 from obrakmann/transform-refactor
Refactor Transform to make use of child activities
2017-05-04 18:55:41 +02:00
rob-v
1ff11d4115 Number AI players 2017-05-03 19:33:04 +02:00
Zimmermann Gyula
c48cf51190 Fix RangeMultiplier regression. 2017-05-01 14:47:17 +02:00
Paul Chote
21a10f84a5 Fix jumpjet flying death animations. 2017-05-01 11:43:18 +01:00
Paul Chote
7a7b668f2b Merge pull request #12999 from reaperrr/RevealOnDeath
Add RevealOnDeath trait
2017-05-01 11:17:18 +01:00
reaperrr
dcf31f356d Merge pull request #13211 from pchote/d2k-hires-logo
Add new d2k mod logo
2017-05-01 12:02:07 +02:00
reaperrr
dbe4b670d0 Make D2k structures reveal shroud on death 2017-05-01 11:57:12 +02:00
Paul Chote
5a273700bf Merge pull request #13204 from IceReaper/reloading-sound
Added ReloadSound and ReloadSoundDelay to weapon declarations.
2017-05-01 00:05:19 +01:00
Andre Mohren
d68bc48ba5 Added ReloadSound and ReloadSoundDelay to weapon declarations. 2017-04-30 22:43:32 +02:00
reaperrr
437f9a7930 Merge pull request #12955 from atlimit8/RemoveIDisable-part1
Remove IDisable - part 1
2017-04-30 21:21:12 +02:00
Oliver Brakmann
f9913db5e8 Make Transform use child activities 2017-04-30 19:40:14 +01:00
Oliver Brakmann
f9951f76ca Allow cancelling an activity without aborting the entire queue 2017-04-30 19:07:50 +01:00
atlimit8
166063337e Make Repair activity halt if RepairsUnit is paused or abort if disabled. 2017-04-30 09:59:03 -05:00
atlimit8
6075569659 Make RepairsUnits pausable-conditional 2017-04-30 09:48:02 -05:00
atlimit8
748afad45e Added PausableConditionalTrait abstract trait 2017-04-30 09:47:28 -05:00
atlimit8
18eddf4a70 Convert ProximityExternalCondition from disable-able to conditional. 2017-04-30 09:46:56 -05:00
atlimit8
770efd710b Remove DisabledOverlay using WithColoredOverlay & remove IDisable from Husk 2017-04-30 09:46:21 -05:00
Paul Chote
705d77501b Add new high resolution D2K mod logo. 2017-04-30 13:38:12 +01:00
Paul Chote
696b48b7bf Overhaul the packaging scripts:
- Ingame mod versions now always match the package version
- Adds macOS compatibility
- Removes trait and lua api docs pending future overhaul
- Individual platform packages can be compiled directly
- Improved error checking
- Removes unnecessary redundancy and indirection
2017-04-30 13:26:36 +01:00
Paul Chote
3111b2cf9b Merge pull request #13129 from pchote/osx-packaging
Update OSX packaging for per-mod launchers.
2017-04-30 13:23:42 +01:00
Paul Chote
e0adbe652e Merge pull request #13138 from pchote/deb-packaging
Update Linux packaging for per-mod launchers.
2017-04-30 13:21:39 +01:00
reaperrr
1349dfb670 Merge pull request #13210 from pchote/polish-deployers
Polish TS deployer animations
2017-04-30 12:14:40 +02:00
reaperrr
d5740efda8 Merge pull request #13186 from rob-v/TakeScreenshotInDialogs
Take screenshot in dialogs #13184
2017-04-30 11:53:13 +02:00
rob-v
382fefebfe Take screenshot in dialogs #13184 2017-04-30 10:17:55 +02:00
Paul Chote
1871715699 Implement "Enter Tunnel" cursor. 2017-04-29 15:58:42 +01:00
Paul Chote
10734f2877 Reenable and polish broken bridge in Sunstroke. 2017-04-29 15:50:16 +01:00
Paul Chote
43ff56eea9 Fix tunnel top definitions. 2017-04-29 15:50:16 +01:00
Taryn Hill
12f2fc3410 Merge pull request #13175 from rob-v/GlobalChat
Enhance - unify global chat (with lobby chat)
2017-04-29 09:28:34 -05:00
atlimit8
cb6e4b9926 Merge pull request #13202 from reaperrr/UpgradeRejectsOrders
Add Reject field to RejectsOrders for blacklisting orders.
2017-04-29 08:51:34 -05:00
Paul Chote
69ca9ffaba Set the default voxel Scale to match the original game. 2017-04-29 13:21:13 +01:00
Paul Chote
4e6af29bb8 Match LPST pre/post deploy sizes and offsets. 2017-04-29 12:21:30 +01:00
Paul Chote
993f4ee6da Match TTNK pre/post deploy sizes and offsets. 2017-04-29 12:21:10 +01:00
reaperrr
53aaa28a71 Remove bogus Turreted from TS amphib APC 2017-04-29 13:13:53 +02:00
reaperrr
0c6911bd2f Fix Mobile Sensor Array sight ranges to match original 2017-04-29 13:13:23 +02:00
reaperrr
398956b690 Add support for multiple RejectsOrders traits per actor 2017-04-29 12:56:30 +02:00
atlimit8
4917c6e453 Merge pull request #12924 from reaperrr/fix-tunnel-atk
Prevent units in tunnels/underground from attacking
2017-04-29 00:25:23 -05:00
reaperrr
9759fce9d7 Fix TS MCV stats to match original 2017-04-27 21:33:37 +02:00
reaperrr
2d2d869b5a Fix TS engineer health to match original 2017-04-27 21:18:48 +02:00
reaperrr
965a73fc53 Fix TS infantry sight range
In original TS, E1 had 5, E2 and E3 had 7.
2017-04-27 21:18:23 +02:00
reaperrr
0a484b424e Fix TS infantry move speed
E3 speed in original was 4.
JumpJet ground speed in original was 5.
2017-04-27 21:17:06 +02:00
reaperrr
1fae993593 Prevent attacking while in tunnel/underground 2017-04-27 17:50:02 +02:00
Paul Chote
bc38cb3cc2 Package OSX launchers in a disk image. 2017-04-26 22:17:27 +01:00
Paul Chote
74bbde751f Create separate OSX launchers for each mod. 2017-04-26 22:17:26 +01:00
Paul Chote
60bc114e39 Merge pull request #13133 from pchote/windows-packaging
Update Windows packaging for per-mod launchers.
2017-04-26 22:12:05 +01:00
Paul Chote
c8af9168c9 Improve general installer quality:
- Remove uninstaller and readme start menu links
  (they are explicitly discouraged by best practices)
- Explicitly declare installer execution level
- Define additional control panel metadata
2017-04-26 22:00:42 +01:00
Paul Chote
2c1b8da7fd Merge pull request #13191 from Enverex/patch-1
Correct make install command for Linux
2017-04-26 21:58:17 +01:00
reaperrr
539ed67527 Merge pull request #13190 from pchote/object-weirdness
Fix ObjectCreator assembly resolving on Windows.
2017-04-26 21:29:33 +02:00
atlimit8
2ae40e7eb4 Merge pull request #13181 from pchote/repair-cursor-flash
Fix repair cursor visual feedback target.
2017-04-25 16:52:10 -05:00
reaperrr
61a1cc18e1 Merge pull request #13195 from atlimit8/ActorExts-AppearsFriendlyTo-simplification
ActorExts.AppearsFriendlyTo Simplification
2017-04-25 23:29:37 +02:00
atlimit8
6aaa7fa042 ActorExts.AppearsFriendlyTo simplification 2017-04-25 15:53:50 -05:00
Paul Chote
a01b3f88fc Remove unused ObjectCreator constructor. 2017-04-25 21:49:37 +01:00
Paul Chote
8dd50c0421 Keep ObjectCreator ResolveAssembly override bound until disposal. 2017-04-25 21:49:37 +01:00
Benjamin Hodgetts
8abf5ce372 Correct make install command
No-longer "install-all".
2017-04-25 12:08:13 +01:00
reaperrr
a9676235db Add custom DeathTypes/DamageTypes support to RevealOnDeath 2017-04-24 19:12:31 +02:00
reaperrr
7dddc7fc44 Make FallToEarth kill the actor instead of disposing it 2017-04-24 19:12:31 +02:00
reaperrr
6045ad2ecf Make D2k units reveal shroud on destruction
For 4 seconds.
2017-04-24 19:12:31 +02:00
reaperrr
4bfd306cc2 Add RevealOnDeath trait
Allows revealing shroud on actor death.
2017-04-24 19:12:31 +02:00
Paul Chote
d9800d4e2b Fix repair cursor visual feedback target. 2017-04-24 08:52:48 +01:00
atlimit8
99f3f37afe Merge pull request #13104 from rob-v/RepairNavalUnitsWithRepairCursor
Naval units (RepairableNear) units repairable using Repair cursor
2017-04-23 22:05:46 -05:00
atlimit8
fe03929e6b Merge pull request #13174 from reaperrr/ts-floater
Add Tiberium Floater to TS
2017-04-23 21:38:27 -05:00
reaperrr
e8f16b1b75 Merge pull request #13150 from rob-v/SaveMapError
Show 'Failed to save map' error message in dialog box
2017-04-23 15:29:10 +02:00
reaperrr
9ce110f6d9 Merge pull request #12971 from rob-v/LobbyResetingPlayerName
Global chat name is reset when connecting
2017-04-23 15:11:24 +02:00
reaperrr
2dc528899e Add Tib Floaters to Sunstroke 2017-04-23 15:00:33 +02:00
reaperrr
f3f443d904 Add FS Tiberium Floater to TS
For better compatibility with FS maps, and more variety for mappers.
2017-04-23 15:00:31 +02:00
rob-v
bd025873cf Host can change Team and Spawn of any player. #12936 2017-04-23 12:06:44 +02:00
atlimit8
172161b9fe Merge pull request #13180 from GraionDilach/make-ps1-gamemonitor
Remove the bitrot GameMonitor StyleCop check.
2017-04-22 22:46:01 -05:00
atlimit8
7a7197216c Merge pull request #13025 from pchote/laser-fence
Implement TS Laser Fences
2017-04-22 19:41:36 -05:00
Paul Chote
fcbdb147ed Update build icon order. 2017-04-23 00:44:11 +01:00
Paul Chote
0ddb631117 Add TS Laser Fences. 2017-04-23 00:44:11 +01:00
Paul Chote
64896eb73d Add EnergyWall trait. 2017-04-23 00:44:11 +01:00
Paul Chote
a83c0f96dd Add GrantConditionOnLineBuildDirection trait. 2017-04-23 00:44:10 +01:00
Paul Chote
f8af51643d Add LineBuildSegmentExternalCondition. 2017-04-23 00:44:10 +01:00
Paul Chote
a8bb03aa34 Draw TS line-build cell previews with increased translucency. 2017-04-23 00:44:10 +01:00
Paul Chote
227b80d6c2 Add support for removing segments when parent nodes are removed. 2017-04-23 00:44:10 +01:00
Paul Chote
304e3ef9f9 Distinguish between line build nodes and segments. 2017-04-23 00:44:09 +01:00
Paul Chote
62603b324d Add support for granting a condition while the make animation plays. 2017-04-23 00:44:09 +01:00
Paul Chote
2b9b9bb984 Fix powerdown indicator position. 2017-04-23 00:44:09 +01:00
Paul Chote
227655f9aa Fix wall artwork interaction with conditions. 2017-04-23 00:44:09 +01:00
Paul Chote
ac53bc502e Remove bogus Requires<HealthInfo> from GrantConditionOnDisabled. 2017-04-23 00:44:08 +01:00
Zimmermann Gyula
2ca6721027 Remove the bitrot GameMonitor StyleCop check. 2017-04-22 23:17:39 +02:00
atlimit8
6744cec239 Merge pull request #13172 from pchote/mod-metadata-cleanup
Remove metadata that was only used by the mod chooser.
2017-04-22 15:57:53 -05:00
rob-v
1206205d17 Enhance - unify global chat (with lobby chat) 2017-04-22 20:25:20 +02:00
reaperrr
ac1d45211d Merge pull request #13134 from atlimit8/NegMinusExpressionParsing
VariableExpression: whitespace/hyphen/binop parsing fix
2017-04-22 19:33:47 +02:00
reaperrr
e29c234ce9 Merge pull request #13164 from reaperrr/ts-arty-deploy
Migrate TS artillery deployment to condition system
2017-04-22 16:44:00 +02:00
reaperrr
863d477928 Merge pull request #13157 from atlimit8/RemoveDictionaryLoadUsings
Remove LoadUsing where FieldLoader.GetValue works for the dictionaries
2017-04-22 16:27:13 +02:00
reaperrr
9ca75d6c8d Merge pull request #13176 from pchote/fix-td-dialog-spam
Remove invalid Background widgets from TD map editor.
2017-04-22 16:15:35 +02:00
rob-v
df07d89f9e Helis return to nearest base like Planes 2017-04-22 15:53:05 +02:00
reaperrr
b53ac5df36 Merge pull request #13074 from atlimit8/IConditionConsumerProvider
Better Support for Multiple Condition Expressions in a Trait
2017-04-22 15:48:37 +02:00
atlimit8
d433473249 Replace IConditionConsumer w/ variable observers for multiple variable expressions for traits. 2017-04-22 08:36:18 -05:00
reaperrr
9f8e9426af Merge pull request #13005 from rob-v/LobbyMapTooltips
Added tooltip to Lobby Map title #12930 #12595
2017-04-22 15:31:34 +02:00
Paul Chote
2e751e937f Remove invalid Background widgets from TD map editor. 2017-04-22 14:17:33 +01:00
atlimit8
8a04156280 VariableExpression: require whitespace around bool/arithmetic binary operators. 2017-04-22 08:14:52 -05:00
rob-v
63de0bb910 Fix ignored 'Failed to save map' #13036 2017-04-22 14:44:06 +02:00
reaperrr
1e63013eb1 Add support for random sounds to AmbientSound 2017-04-22 14:36:55 +02:00
Paul Chote
9b93771dbc Remove metadata that was only used by the mod chooser. 2017-04-22 11:31:43 +01:00
Paul Chote
b24e681531 Create separate Linux launchers for each mod. 2017-04-21 20:18:05 +01:00
Paul Chote
62b0be9db8 Allow non-openra:// Launch.URI prefixes. 2017-04-21 20:18:05 +01:00
Paul Chote
07dc79ab19 Separate release/playtest/git installs. 2017-04-21 20:16:58 +01:00
Paul Chote
3e0f055a3c Create separate Windows launchers for each mod. 2017-04-21 20:16:58 +01:00
Paul Chote
b5523d6b3f Allow non-openra:// Launch.URI prefixes. 2017-04-21 20:16:58 +01:00
Paul Chote
4c990e48d7 Merge pull request #13166 from gdavegdave/bleed
Tweaked map Deterring Democracy to fix harvester stall
2017-04-21 18:52:16 +01:00
GDave
8dbeada0f7 Tweaked map Deterring Democracy to prevent harvester stalling to the immediate right of the lower-right green tree. 2017-04-21 18:40:40 +01:00
Oliver Brakmann
7f204b2dec Merge pull request #13049 from pchote/mod-content
Remove ingame mod chooser.
2017-04-21 19:16:49 +02:00
Paul Chote
9d248433c9 Fix linux packaging. 2017-04-21 18:02:20 +01:00
Paul Chote
84db123b93 Rename modchooser to modcontent. 2017-04-21 18:02:20 +01:00
Paul Chote
ff088323b5 Update --man-page utility command. 2017-04-21 18:02:20 +01:00
Paul Chote
ec42aed6bc Redirect mod chooser to content manager. 2017-04-21 18:02:20 +01:00
Paul Chote
688feea33b Require Game.Mod to be give an a launch arg to OpenRA.Game.exe. 2017-04-21 18:02:14 +01:00
Paul Chote
215aa6fa60 Remove support for loading mods from the support dir. 2017-04-21 17:55:15 +01:00
Paul Chote
e984c98565 Remove oramod package support. 2017-04-21 17:55:15 +01:00
Paul Chote
5d5fd7a0e8 Remove RequiredMods logic. 2017-04-21 17:55:15 +01:00
reaperrr
d9eb224c77 Move Tib Fiend and visc rules to critters.yaml 2017-04-21 17:39:25 +02:00
reaperrr
ec704b7e34 Move Tiberian Fiend and visceroid sequences to critters.yaml 2017-04-21 16:53:10 +02:00
Oliver Brakmann
43b9aa00d8 Merge pull request #13161 from reaperrr/mods-cnc-tweak
Unhardcode LightPaletteRotator properties
2017-04-21 15:26:04 +02:00
reaperrr
5e1cd5dff9 Disable automatic turret realign for deployed Tick Tank and Artillery 2017-04-21 12:41:18 +02:00
reaperrr
5789b73091 Convert TS Nod Artillery to condition system
Getting rid of legacy Transforms approach.
2017-04-21 12:41:18 +02:00
atlimit8
c23f248840 Merge pull request #13159 from pchote/return-to-ground
Force Mobile units to return to the ground layer when becoming idle.
2017-04-20 23:55:58 -05:00
reaperrr
4a8571161a Unhardcode LightPaletteRotator properties 2017-04-21 00:24:23 +02:00
atlimit8
3fbdde5317 Merge pull request #13160 from pchote/fix-tunnel-harvesting
Fix harvesters harvesting resources from underground.
2017-04-20 16:21:48 -05:00
reaperrr
04f8a85cc6 Make LightPaletteRotator interfaces explicit and add desc 2017-04-20 21:12:07 +02:00
Paul Chote
c5547ec20b Fix harvesters harvesting resources from underground. 2017-04-20 19:57:26 +01:00
reaperrr
bb9790c754 Move legacy map import commands into matching subfolder 2017-04-20 20:50:04 +02:00
Paul Chote
b373714da7 Force Mobile units to return to the ground layer when becoming idle. 2017-04-20 19:48:21 +01:00
reaperrr
60fccc1bc4 Merge pull request #12980 from abcdefg30/laysTerrain
Update the documentation of LaysTerrain
2017-04-20 20:10:14 +02:00
reaperrr
ebb6505190 Merge pull request #13106 from abcdefg30/spawnOffset
Add an Offset property to SpawnActorOnDeath
2017-04-20 17:53:33 +02:00
abcdefg30
57bdb1cff3 Update the documentation of LaysTerrain 2017-04-20 15:41:35 +02:00
atlimit8
b97162d9f1 Merge pull request #13110 from MartinCurwen/bleed
Multiple armament check fix in AttackGarrisoned
2017-04-19 12:05:35 -05:00
MartinCurwen
ea6e1fdd64 Multiple armament check fix in AttackGarrisoned 2017-04-19 17:40:14 +01:00
atlimit8
4767b91037 Remove LoadUsing where FieldLoader.GetValue works for the dictionaries 2017-04-19 09:51:06 -05:00
Mustafa Alperen Seki
c94eb2582b Add Harkonnen 3b 2017-04-19 16:46:42 +02:00
Oliver Brakmann
843ac85c92 Merge pull request #13000 from reaperrr/supply-to-cnc
Refactor SupplyTruck/AcceptsSupplies to *Cash traits
2017-04-18 23:38:29 +02:00
Oliver Brakmann
89c19e717f Merge pull request #13118 from MustaphaTR/d2k-harkonnen-3a
D2K - Add Harkonnen Mission 3a
2017-04-18 22:55:31 +02:00
atlimit8
2053aec5f9 Rename VariableExpression.OperandSides => VariableExpression.Sides 2017-04-18 15:22:04 -05:00
atlimit8
c34b947e43 VariableExpression: Restrict CharClass.Mixed to middle of identifiers 2017-04-18 15:15:21 -05:00
atlimit8
f9974624c8 VariableExpression: hyphen after digit lexing fix 2017-04-18 15:14:55 -05:00
reaperrr
225d26bfdb Add explicit Reject field to RejectsOrders 2017-04-18 20:23:00 +02:00
reaperrr
afc1f22c63 Merge pull request #13149 from pchote/defer-tunnel-orders
Require cancelled move orders to exit tunnels before completion.
2017-04-18 19:42:49 +02:00
reaperrr
9814083ac3 Rename DonateSupplies activity to DonateCash 2017-04-18 19:27:46 +02:00
reaperrr
80ec530e4c Refactor supply traits to *Cash traits
Adding 'Type' and 'Stances' support as well.
2017-04-18 19:27:46 +02:00
abcdefg30
361cbc34cc Merge pull request #13139 from AoAGeneral/AoATD
TD Flame infantry spread.
2017-04-18 17:10:27 +02:00
abcdefg30
7416cd0ac1 Add an Offset property to SpawnActorOnDeath 2017-04-18 17:09:25 +02:00
abcdefg30
23ba3cfcb6 Merge pull request #13050 from rob-v/DefeatedPlayersCanNotPauseGame
Lost players except Host can not pause game #12227
2017-04-18 17:00:04 +02:00
abcdefg30
8e6f6a3a52 Merge pull request #13007 from rob-v/ProductionStatisticsTooltip
Add tooltips to production statistics #12820
2017-04-18 16:55:05 +02:00
Oliver Brakmann
e164a6119d Merge pull request #13123 from SoScared/fix3maps
[RA] [Map Pool] Fix tiles on Countercross, Siberian Pass & Six Below Zero.
2017-04-18 16:29:26 +02:00
Paul Chote
0b0f8bc51e Require cancelled move orders to exit tunnels before completion. 2017-04-17 22:34:21 +01:00
Paul Chote
c6d8957307 Merge pull request #13080 from reaperrr/fix-ts-effectlighting
Make TS explosions + muzzle flashes unaffected by global lighting
2017-04-17 21:14:44 +01:00
rob-v
199e9847d1 Add tooltips to production statistics #12820 2017-04-17 21:51:23 +02:00
reaperrr
2548e62e31 Merge pull request #13148 from obrakmann/fix13147_fix-rtb-dead-dest-race
Check for dead destination airfield in ReturnToBase
2017-04-17 20:41:39 +02:00
Oliver Brakmann
b50f15c645 Check for dead destination helipad in HeliReturnToBase 2017-04-17 19:31:53 +02:00
Oliver Brakmann
ff8f204cac Check for dead destination airfield in ReturnToBase 2017-04-17 19:23:11 +02:00
Paul Chote
6df453f806 Merge pull request #13127 from obrakmann/fix13099_disableDpiScalingSetting
Add a setting to disable DPI scaling on Windows systems
2017-04-17 17:46:46 +01:00
Oliver Brakmann
3ec6754289 Merge pull request #13141 from pchote/mod-urls
Move web urls from user config to mod config.
2017-04-17 17:13:52 +02:00
Paul Chote
462ee48c60 Merge pull request #13119 from rob-v/DownloadPackageErrorLog
Add exception message to Download (Invalid archive) error #12985
2017-04-17 15:14:36 +01:00
Matthias Mailänder
37219ad67b Make Tiberian Sun railways passable by trains. 2017-04-17 15:11:33 +01:00
Matthias Mailänder
4480f49e0f Add ChangesTerrain. 2017-04-17 15:11:33 +01:00
reaperrr
1860b448b7 Merge pull request #13143 from reaperrr/icereap-bleed
Added WithTurretedAttackAnimation
2017-04-17 16:10:42 +02:00
Paul Chote
774a717c19 Merge pull request #13117 from abcdefg30/veteranOverlay
Fixed VeteranProductionIcons not being disabled when Prerequisites are removed
2017-04-17 14:47:32 +01:00
Andre Mohren
9b22f0e11a Support attack animation for turrets via new WithTurretedAttackAnimation trait. 2017-04-17 15:34:45 +02:00
reaperrr
1d3daa5e4d Merge pull request #13108 from atlimit8/ConditionsToVariables
ConditionExpression to (Boolean|Integer)Expression refactor
2017-04-17 14:52:21 +02:00
reaperrr
4c63c7bdd8 Merge pull request #13096 from rob-v/DisableEdgeScrollWhileStandardScroll
Fix/Disable Edge scroll while standard (middle mouse) scroll
2017-04-17 14:36:21 +02:00
Paul Chote
1722f42f83 Move web urls from user config to mod config. 2017-04-17 12:00:41 +01:00
AoAGeneral
ddc31825ec TD Flame infantry spread.
Increases the flame infantry attack spread from 341 to 468.

This allows the flame infantry to have a wider cone attack as the previous 10 damage increase helped. They still however lacked the wide attack spread needed on massive infantry assaults. Their attack spread matches that of grenadiers and a lot of armaments (Artillery) and being a frontal unit can use a slight increase to help with this.
Units going prone still takes three hits to kill infantry (two for e3 and anyone standing).
2017-04-16 14:13:12 -07:00
SoScared
7168912273 Fix tiles on Countercross, Siberian Pass, Sudden Death & Six Below Zero. 2017-04-15 19:50:12 +02:00
reaperrr
04f5937476 Merge pull request #13086 from kyrylo/winter-storm-update
mods/ra/maps: update Winter Storm
2017-04-15 13:45:24 +02:00
reaperrr
8c1ed0d39f Merge pull request #13102 from abcdefg30/06yak
Fix allies06a freezing when yaks try to attack camo pillboxes
2017-04-15 12:36:18 +02:00
Oliver Brakmann
0635f3636d Add a setting to disable DPI scaling on Windows systems 2017-04-14 23:23:14 +02:00
Oliver Brakmann
3cd7493664 Merge pull request #13095 from jrb0001/licenseheaders-lua
add GPLv3+ header to all lua scripts
2017-04-14 22:25:46 +02:00
Oliver Brakmann
63e4fbc5ad Merge pull request #12828 from Phrohdoh/util-engine-mod-search-paths
Utility and server: Get mod search paths from env MOD_SEARCH_PATHS
2017-04-14 21:59:09 +02:00
Paul Chote
9637e1b2c7 Merge pull request #13120 from MustaphaTR/update-openra-sln-for-lua-again
Add new lua files added with new D2K missions to OpenRA.sln (Again)
2017-04-14 14:54:56 +01:00
rob-v
ee91396984 Add exception to Archive extraction failed (Invalid archive) error ##12985 2017-04-13 20:44:03 +02:00
Mustafa Alperen Seki
cdf01cc25b Update OpenRA.sln for lua files again 2017-04-13 18:51:16 +02:00
abcdefg30
87a44023b2 Fixed VeteranProductionIcons not being disabled when Prerequisites are removed 2017-04-13 17:54:17 +02:00
Mustafa Alperen Seki
c170f658ff Add Harkonnen 3a 2017-04-13 17:53:01 +02:00
abcdefg30
81fe19ca4a Merge pull request #12966 from pchote/windows-launcher
Reorganize Windows game launcher to support per-mod launchers.
2017-04-13 15:34:10 +02:00
reaperrr
e043539805 Merge pull request #13056 from AoAGeneral/AoATD
TD Commando ScanRadius.
2017-04-12 20:39:36 +02:00
reaperrr
b0caa104f6 Merge pull request #13053 from MustaphaTR/ts-build-palette-orders
TS - Reorder the Cameos
2017-04-12 20:38:29 +02:00
reaperrr
e058eae706 Merge pull request #13063 from MustaphaTR/d2k-ordos-4
D2K - Add Ordos Mission 4
2017-04-12 20:30:25 +02:00
reaperrr
8e5fbfe227 Merge pull request #12785 from abcdefg30/atreides05
Add atreides05
2017-04-12 19:26:02 +02:00
reaperrr
fb4cb04934 Merge pull request #13066 from rob-v/MouseWheelZoomWithoutModifier
Mouse wheel zoom without modifier option
2017-04-12 19:20:28 +02:00
reaperrr
f33bf002ea Merge pull request #13109 from abcdefg30/clean
Fix the make.ps1 clean command not removing all files
2017-04-12 19:13:47 +02:00
reaperrr
882b5da20d Make TS explosions and muzzle flashes 'glow' on darker maps
The new effectglow palette is not affected by global lighting, making effects 'glow' at full light on darker maps.
Exception: pistol/rifle/machine gun piffs.
2017-04-12 19:11:24 +02:00
abcdefg30
39cdf65764 Fix the make.ps1 clean command not removing all files 2017-04-12 01:14:07 +02:00
atlimit8
6b18eb1993 Merge pull request #12977 from rob-v/RallyPointPrimaryBuilding
When changing rally point with ctrl also make primary
2017-04-11 18:05:16 -05:00
abcdefg30
035c4adeb0 Merge pull request #12909 from pchote/file-handlers
Remove oramod and orarep file type handlers from Windows and Linux.
2017-04-12 01:01:34 +02:00
rob-v
a11ff104a2 Lost players except Host can not pause game #12227 2017-04-11 21:40:59 +02:00
rob-v
9216427c2b RepairableNearUnitsWithRepairCursor #12361 2017-04-11 19:03:41 +02:00
abcdefg30
739653ce37 Merge pull request #13089 from rob-v/FixPreDamagedTilesHealth
Fix Pre-damaged bridge tiles visually transform to new #13076
2017-04-11 18:22:01 +02:00
Paul Chote
bbbf3b086b Add multi-resolution RA logo icon. 2017-04-11 17:17:47 +01:00
Paul Chote
2997f31bc3 Set OpenRA.Game.exe icon to match the mod. 2017-04-11 17:17:47 +01:00
Paul Chote
8e96d85d24 Allow runtime mod to be customized. 2017-04-11 17:15:22 +01:00
Paul Chote
31a91a0269 Allow FAQ URL to be customized. 2017-04-11 17:15:21 +01:00
Paul Chote
044a5e18ee Allow mod display name to be customized. 2017-04-11 17:15:21 +01:00
Paul Chote
005b4166cc Move Windows launcher compilation to packaging scripts. 2017-04-11 17:15:21 +01:00
Paul Chote
35249c1faf Remove windows icon from OpenRA.Game.exe. 2017-04-11 17:15:20 +01:00
Paul Chote
a853d431fc Remove long unneeded tools target. 2017-04-11 17:15:20 +01:00
abcdefg30
3808a1885e Merge pull request #12976 from rob-v/ConnectionFailedCustomMap
Connection Failed when trying to join custom map #12881
2017-04-11 13:15:23 +02:00
abcdefg30
e37667efb6 Merge pull request #12606 from reaperrr/forward-bombs2
Add forward movement support to GravityBomb
2017-04-11 13:07:15 +02:00
abcdefg30
60531c6eef Merge pull request #13088 from pchote/muzzle-fix
Fix duplicate muzzle rendering.
2017-04-11 12:58:47 +02:00
atlimit8
b0187dd646 Added (Boolean|Integer)Expression subclasses of VariableExpression 2017-04-11 02:52:54 -05:00
atlimit8
e73d3922dd Rename ConditionExpression => VariableExpression 2017-04-11 01:26:38 -05:00
Jean-Rémy Buchs
fc725c6c0c add GPLv3+ header to all lua scripts 2017-04-10 21:13:51 +02:00
rob-v
e87a96f2b8 Fix/Disable Edge scroll while standard (middle mouse) scroll 2017-04-10 19:56:53 +02:00
Kyrylo Silin
09c610e2cc mods/ra/maps: update Winter Storm
Map link: http://resource.openra.net/maps/20503/

Changes:

* Renamed from `Winter Storm 2` to `Winter Storm`
* Decorated the chain links near middle oil derricks
* Resized the map from 89x82 to 89x86 to add more sea tiles to the top
  and to the bottom
* Fixed broken tile near the ridge to the middle right
2017-04-10 10:32:21 +03:00
reaperrr
1fa8286f1e Merge pull request #13085 from kyrylo/tandem-update
mods/ra/maps: update Tandem
2017-04-10 00:31:28 +02:00
reaperrr
563d9abce9 Merge pull request #13083 from kyrylo/behind-the-veil-update
mods/ra/maps: update Behind the Veil
2017-04-10 00:22:28 +02:00
abcdefg30
14ece703ef Fix allies06a freezing when yaks try to attack camo pillboxes 2017-04-09 15:50:27 +02:00
Mustafa Alperen Seki
2ca3a1d120 Reorder the TS Cameos 2017-04-09 15:24:49 +02:00
rob-v
4b652aa894 Fix Pre-damaged bridge tiles visually transform to new when attacked #13076 2017-04-09 14:50:36 +02:00
atlimit8
c69a85a328 Merge pull request #12992 from pchote/launch-game-dot-sh
Overhaul launch-game.sh for OS X/Linux/POSIX
2017-04-09 07:13:14 -05:00
Paul Chote
b5068facdc Fix duplicate muzzle rendering. 2017-04-09 12:41:53 +01:00
Paul Chote
5c0674d695 Merge pull request #13048 from reaperrr/fix-ts-lights
Fix some TS building overlays
2017-04-09 11:45:04 +01:00
Paul Chote
77af9ca01d Overhaul launch-game.sh
- Adds macOS support
- Adds mod chooser dialog if zenity available
- Improved text-mode output when zenity not available.
2017-04-09 11:33:27 +01:00
Paul Chote
d7c710e5fc Remove oramod and orarep file type handlers. 2017-04-09 11:09:14 +01:00
Kyrylo Silin
2c678a240c mods/ra/maps: update Tandem
Map link: http://resource.openra.net/maps/20495/

Changes:

* Fixed some bad tiles (thanks to Frame Limiter)

  > Bad tile: 75,45
  > Road tiles: 98,59 , 50,12

* Changed author name from `Kyrylo` to `Kyrylo Silin`
2017-04-09 12:02:36 +03:00
Kyrylo Silin
6d84079a94 mods/ra/maps: update Behind The Veil
Map link: http://resource.openra.net/maps/20494/

Changes:

* Renamed from `Behind The Veil` to `Behind the Veil`
* Replaced chain link with walls in the middle to protect oil derricks
  from direct attacks
* Added barrels to the middle area. A middle oil derrick can be
  captured only from 2 spots (if barrels are not destroyed)
* Added barrels between side ridges
* Fixed some bad road tiles (thanks to Frame Limiter)
* Widen side passages to corner expansions by 1 cell
2017-04-09 11:36:22 +03:00
Oliver Brakmann
3f4f56d728 Merge pull request #13073 from atlimit8/fix-ConditionManager.GrantCondition-doc
Fix ConditionManager.GrantCondition doc
2017-04-08 23:38:17 +02:00
Oliver Brakmann
92bf1f43af Merge pull request #13079 from pchote/fix-carryall-crash
Fix crash when carryall cargo is killed on same tick as pickup.
2017-04-08 22:49:14 +02:00
Oliver Brakmann
59d6b14e06 Merge pull request #13069 from abcdefg30/mtmTran
Fix the extraction helicopter not showing up in Monster Tank Madness
2017-04-08 22:43:27 +02:00
Paul Chote
a82e835f87 Set sensible initial turret facings. 2017-04-08 21:30:38 +01:00
Oliver Brakmann
b9f0504380 Fix friendly monster tanks not revealing shroud in Monster Tank Madness 2017-04-08 20:55:40 +02:00
Paul Chote
043d7587a6 Fix crash when carryall cargo is killed on same tick as pickup. 2017-04-08 12:58:18 +01:00
atlimit8
8f2f54f92f Fix ConditionManager.GrantCondition doc 2017-04-06 22:05:16 -05:00
abcdefg30
8f50052a1c Remove a misplaced barrel 2017-04-05 22:27:39 +02:00
abcdefg30
009cbb74f5 Fix Oil Pumps spawning infantry on death 2017-04-05 22:19:55 +02:00
abcdefg30
d6cf3b35b6 Fix the explosions of the civilian buildings
- it looked weird when they spawned civilians
- other buildings on the map exploded with the wrong explosion
2017-04-05 22:16:37 +02:00
abcdefg30
e4d3712205 Set the initial cash to 0 2017-04-05 21:53:31 +02:00
abcdefg30
49c3dfe2fc Fix the extraction helicopter not showing up in Monster Tank Madness 2017-04-05 21:52:19 +02:00
Oliver Brakmann
737764a47a Merge pull request #13019 from gdavegdave/bleed
Update the official cnc/TD map pool
2017-04-05 21:25:25 +02:00
GDave
d6b9304fd8 Update the official cnc/TD map pool 2017-04-05 11:32:42 +01:00
rob-v
6217cfbcd2 Mouse wheel zoom without modifier option 2017-04-05 10:57:40 +02:00
Mustafa Alperen Seki
1c3276c935 Add Ordos 4 2017-04-05 09:19:17 +02:00
abcdefg30
96e2b4fe70 Add atreides-05 2017-04-04 23:23:44 +02:00
Taryn Hill
4d5f9e0de7 Server: Get mod search paths from env MOD_SEARCH_PATHS 2017-04-03 17:58:44 -05:00
abcdefg30
62a3099215 Merge pull request #13047 from MustaphaTR/d2k-ordos-2b
D2K - Add Ordos Mission 2b
2017-04-03 22:07:53 +02:00
Mustafa Alperen Seki
2c8b2c5c7d Add Ordos 2b 2017-04-03 19:57:24 +02:00
rob-v
ffb639bd7c Added tooltip to Lobby Map title #12930 #12595 2017-04-03 10:11:29 +02:00
atlimit8
1afdcfb749 Merge pull request #12906 from pchote/project-args
Allow specific mods to be launched from MD/XS >= 6.1 GUI.
2017-04-02 21:53:52 -05:00
atlimit8
ee260af064 Merge pull request #13021 from abcdefg30/idleActivity
FlyCircle and HeliFlyCircle count as idle activities.
2017-04-02 21:11:37 -05:00
Taryn Hill
d095ccf668 Utility: Get mod search paths from env MOD_SEARCH_PATHS 2017-04-02 18:49:03 -05:00
AoAGeneral
af85ca8f18 TD Commando ScanRadius. 2017-04-02 14:01:31 -07:00
abcdefg30
6b4700b24f Merge pull request #13045 from reaperrr/fix-ts-grenpal
Fix palette and disable false Report of TS Grenade
2017-04-02 22:32:31 +02:00
Oliver Brakmann
d33a0105a2 Merge pull request #13042 from AoAGeneral/AoATD
TD Artillery/MRLS Vision.
2017-04-02 22:00:59 +02:00
Oliver Brakmann
11f85a1a36 Merge pull request #13020 from abcdefg30/airHunt
Fixed aircraft not being able to hunt
2017-04-02 21:40:34 +02:00
rob-v
c3255e275c Connection Failed when trying to join custom map #12881 2017-04-02 16:26:13 +02:00
Paul Chote
8b9c363222 Merge pull request #12888 from jrb0001/bleed
Load debug symbols for mods if they are loaded from the filesystem
2017-04-02 14:56:17 +01:00
Oliver Brakmann
832ae3149d Merge pull request #13033 from pchote/launch-game-dot-cmd
Add a windows version of the launch-game script.
2017-04-01 19:36:02 +02:00
Oliver Brakmann
b492e1e891 Merge pull request #12973 from rob-v/SortPlayingGamesInLobby
Sort 'Playing' games in the lobby by play time. #12959
2017-04-01 19:20:01 +02:00
reaperrr
d9b3d0fd84 Fix TS helipad anim speed
Too slow on bleed compared to original, especially the GDI one.
2017-04-01 16:39:11 +02:00
reaperrr
8ee67a4438 Fix TS ConYard top lights anim speed
Way too slow on bleed compared to original
2017-04-01 16:35:04 +02:00
reaperrr
fd717041ae Fix TS factory/barracks lights
In TS,
-GDI Factory lights were all idle and didn't have a damaged state
-GDI Barracks lights were all idle, and flag anim played more slowly
-Hand of Nod lights were all idle
-Nod Factory lights were idle
2017-04-01 16:30:20 +02:00
reaperrr
7ba8a19862 Fix palette and disable false Report of TS Grenade 2017-04-01 15:06:09 +02:00
reaperrr
783eb1e9ea Merge pull request #13031 from FrameLimiter/patch-3
Fixed vision for aircraft husks under Gap
2017-04-01 14:22:08 +02:00
abcdefg30
0fa6c7ed3c Merge pull request #12993 from reaperrr/fix-ts-obsicon
Fix TS observer flag alignment
2017-04-01 13:28:36 +02:00
AoAGeneral
537184b65c TD Artillery/MRLS Vision.
This is changing the vision of Artillery and MRLS from 8c0 to 5c0.

The reason behind this is because we have scouting artillery and MRLS units that have a much larger vision range then infantry and the same vision as hummers and buggies. This turns into games where people build infantry and artillery/MRLS armies and march of death to the enemy. Its more counterable in 1v1 and 2v2 but team games of 3v3+ it becomes incredibly spammy of these units and hard to stop.
2017-03-31 15:04:32 -07:00
reaperrr
4f07a00994 Merge pull request #13038 from reaperrr/misc-cleanups-0317
Misc yaml style fixes (all mods)
2017-03-31 12:27:56 +02:00
reaperrr
df85ea222a TS yaml style fixes
To reduce upgrade rule 'noise' a little.
2017-03-31 11:23:44 +02:00
reaperrr
cf8db74d85 RA yaml style fixes
To reduce upgrade rule noise a little.
2017-03-31 11:23:42 +02:00
reaperrr
2172d91efb Add newline to TD shellmap's map.yaml
To avoid upgrade rule 'noise'.
2017-03-31 11:00:04 +02:00
reaperrr
4fdda9efd2 Remove wrong space and 2nd free line from d2k yamls 2017-03-31 10:55:01 +02:00
Paul Chote
ae7a7418eb Add a windows version of the launch-game script. 2017-03-29 21:09:13 +01:00
reaperrr
edc1753e22 Update GravityBomb velocity after position
Otherwise launch velocity would already be Velocity + Acceleration.
2017-03-29 19:30:55 +02:00
reaperrr
7fdbe10319 Upgrade rule for GravityBomb velocity/accel changes 2017-03-29 19:30:54 +02:00
reaperrr
e1e47e7e0d Tweak TS Orca bomb fall behavior 2017-03-29 19:30:52 +02:00
reaperrr
5b617cf6e5 Refactor GravityBomb velocity/acceleration 2017-03-29 19:30:51 +02:00
FrameLimiter
b59f1f39fe Fixed vision for aircraft husks under Gap. 2017-03-29 11:42:32 -04:00
reaperrr
aa3f21632c Merge pull request #12880 from MustaphaTR/d2k-ordos-2a
D2K - Add Ordos Mission 2a
2017-03-29 16:52:19 +02:00
atlimit8
4c32e23f89 Merge pull request #12634 from GraionDilach/bullet-airburst
Implement airburst support to Bullet.
2017-03-28 17:53:24 -05:00
reaperrr
bfc0f7f9e6 Merge pull request #12997 from SoScared/mapEnsioFix
[RA] [Map pool] Fix tile errors on various maps.
2017-03-28 22:39:29 +02:00
Mustafa Alperen Seki
7f68c38e72 Add Ordos 2a 2017-03-27 17:19:54 +02:00
abcdefg30
dac8a8e4f6 Merge pull request #13024 from MustaphaTR/d2k-remove-sonic-tank-immunity
D2K - Remove Sonic Tanks' immunity to other friendly Sonic Tanks.
2017-03-26 19:26:23 +02:00
Mustafa Alperen Seki
5ccfcb1cb9 Remove Sonic Tanks' immunity to other friendly sonic tanks. 2017-03-26 10:15:19 +02:00
SoScared
d2a0535442 fix tile errors on various maps 2017-03-25 15:36:03 +01:00
abcdefg30
ae111248f3 Have some activities count as idle activities 2017-03-24 18:06:10 +01:00
abcdefg30
4d335af9fc Fixed aircraft not being able to hunt 2017-03-24 17:40:11 +01:00
rob-v
bfcb37e1b7 When changing rally point also make primary building #12855 2017-03-22 16:41:30 +01:00
atlimit8
b6810f3dd3 Merge pull request #12986 from abcdefg30/withDesc
Expand the documentation of Reinforce(WithTransport)
2017-03-22 10:23:36 -05:00
abcdefg30
cc67f9328c Merge pull request #12974 from rob-v/IngameMessagePrefixes
Unify ingame message prefixes. #12923
2017-03-19 23:13:59 +01:00
atlimit8
ff998fd552 Merge pull request #12981 from abcdefg30/grantOwner
Fix GrantConditionOnPrerequisite not refreshing when the actor's owner changes.
2017-03-19 17:09:08 -05:00
abcdefg30
d819f3206e Merge pull request #12882 from abc013/ContrailFix
Fix contrail gets rendered between loading in and loading out position
2017-03-19 23:03:33 +01:00
atlimit8
a49227c494 Merge pull request #12862 from abcdefg30/captureCursor
Minor revision to CaptureOrderTargeter.
2017-03-19 10:54:22 -05:00
abc013
b7ca740155 Fix contrail gets rendered between loading in and loading out position 2017-03-19 09:25:39 +01:00
abcdefg30
aa99c3cd40 Merge pull request #12729 from Mailaender/sunstroke
Added Firestorm map Sunstroke
2017-03-19 03:01:05 +01:00
reaperrr
294259c726 Set up custom creeps on Sunstroke 2017-03-19 02:51:33 +01:00
reaperrr
44254472d5 Disable fixed palette for TS old base buildings 2017-03-19 02:51:33 +01:00
reaperrr
ee63835778 Fix allowed terrain types of veins 2017-03-19 02:51:33 +01:00
Matthias Mailänder
1291d1a53d Add the custom rules
sunrise effect and TW1 units.
2017-03-19 02:51:25 +01:00
Matthias Mailänder
49d26fd238 Outcomment high bridge huts and low bridge segments. 2017-03-19 02:34:29 +01:00
Matthias Mailänder
37101bf4f0 Import the Sunstroke map
http://www.ppmforums.com/viewtopic.php?t=15379
2017-03-19 02:34:28 +01:00
abcdefg30
e1dda2bf54 Fix GrantConditionOnPrerequisite not refreshing when the actor's owner changes 2017-03-19 02:30:45 +01:00
abcdefg30
b2b3390bc0 Move GrantConditionOnPrerequisite into the Conditions folder 2017-03-19 02:29:26 +01:00
abcdefg30
ceab7a222e Merge pull request #12902 from MustaphaTR/d2k-add-6PLAY3
D2K - Add Mauddib's Cave to map pool.
2017-03-19 02:18:49 +01:00
reaperrr
7a3bae33ea Fix TS observer flag position 2017-03-19 00:20:02 +01:00
abcdefg30
00d854f31b Merge pull request #12984 from MustaphaTR/ts-add-tech-levels
TS - Add Tech Levels
2017-03-18 22:49:01 +01:00
rob-v
bad2c1c2bf Unify ingame message prefixes. #12923
Unify ingame message prefixes. #12923
2017-03-18 21:46:30 +01:00
Mustafa Alperen Seki
66d50ba0b5 Add Tech Levels to Tiberian Sun 2017-03-18 20:08:44 +02:00
reaperrr
245ca7d996 Merge pull request #12989 from abcdefg30/onDoc
Add a note about EnemyWatcher being required for On(Player)Discovered
2017-03-18 18:25:11 +01:00
Mustafa Alperen Seki
0e345b465c Add 6PLAY3 2017-03-18 19:21:40 +02:00
abcdefg30
b295f36fa7 Merge pull request #12987 from reaperrr/fast-gamespeed
Add "Fast" game speed to all mods
2017-03-18 18:12:45 +01:00
abcdefg30
a36a77d637 Add a note about EnemyWatcher being required for On(Player)Discovered 2017-03-18 18:09:20 +01:00
abcdefg30
7bb8cbf867 Merge pull request #12901 from MustaphaTR/d2k-add-6PLAY2
D2K - Add Carthag to map pool.
2017-03-18 18:00:46 +01:00
abcdefg30
c19463f5b4 Merge pull request #12903 from MustaphaTR/d2k-add-6PLAY4
D2K - Add Thufir's Point to map pool.
2017-03-18 17:58:48 +01:00
abcdefg30
7491ede65a Merge pull request #12904 from MustaphaTR/d2k-add-6PLAY5
D2K - Add Leto's Erg to map pool.
2017-03-18 17:55:34 +01:00
abcdefg30
1abe93f25a Merge pull request #12900 from MustaphaTR/d2k-add-6PLAY1
D2K - Add Arakeen to map pool.
2017-03-18 17:51:22 +01:00
reaperrr
785e20e0f3 Add "Fast" game speed to all mods
Sitting smack in the middle between Default and "Faster", except for order delay (which is same as Faster to avoid rejected/dropped orders).
2017-03-18 17:45:02 +01:00
abcdefg30
6069a12973 Expand the documentation of Reinforce(WithTransport) 2017-03-18 16:40:35 +01:00
Zimmermann Gyula
902d2a0016 Implement airburst support to Bullet. 2017-03-18 15:05:06 +01:00
Mustafa Alperen Seki
31d5d048fe Add 6PLAY1 2017-03-18 15:23:46 +02:00
reaperrr
28e204a8ae Merge pull request #12982 from rob-v/MissionsDifficultyTough
Real tough guy difficulty doesn't fit the UI #12844
2017-03-18 14:23:43 +01:00
Mustafa Alperen Seki
8fd9f98180 Add 6PLAY2 2017-03-18 15:22:24 +02:00
Mustafa Alperen Seki
dd12d70ded Add 6PLAY4 2017-03-18 15:19:33 +02:00
Mustafa Alperen Seki
06f6a8646f Add 6PLAY5 2017-03-18 15:18:14 +02:00
reaperrr
02b82ae344 Merge pull request #12860 from abcdefg30/removeGroupProxy
Remove the dead ActorGroupProxy trait
2017-03-18 14:04:28 +01:00
reaperrr
d0e859cbeb Merge pull request #12784 from abcdefg30/d2kTiles
Add missing tiles to arrakis.yaml and fixed the map import
2017-03-18 13:58:12 +01:00
reaperrr
620ae45cb3 Merge pull request #12747 from atlimit8/Pluggable-Requirements
Prevent duplicate upgrades (plugs) to GDI Upgrade Center (Pluggable Requirements)
2017-03-18 13:55:30 +01:00
abcdefg30
880f90345e Add an upgrade rule 2017-03-18 13:42:49 +01:00
abcdefg30
5e923ff091 Remove the dead ActorGroupProxy trait 2017-03-18 13:40:05 +01:00
rob-v
d7684ee680 Real tough guy difficulty doesn't fit the UI #12844 2017-03-17 22:31:02 +01:00
abcdefg30
fbd62c242f Merge pull request #12969 from atlimit8/UncloakOnDamageSign
UncloakOn: Damage, Heal, SelfHeal split
2017-03-17 21:12:10 +01:00
C. Helmig
b331065b87 Add the missing d2k tiles for the MP maps 2017-03-17 20:00:25 +01:00
abcdefg30
80f4feeab3 Let the map importer account for duplicate tiles 2017-03-17 20:00:18 +01:00
abcdefg30
a6078b6e46 Add missing templates to arrakis.yaml 2017-03-17 19:58:32 +01:00
Jean-Rémy Buchs
fbd3a2efea Load debug symbols (.mdb on mono only; .pdb on .NET only) for mods if they are present 2017-03-16 17:22:59 +01:00
rob-v
f38c5f3380 Sort 'Playing' games in the lobby by play time. #12959 2017-03-16 17:17:35 +01:00
atlimit8
abad50d2b9 MiniYaml upgrade rule for UncloakOn: Damage => Damage, Heal, SelfHeal 2017-03-15 20:26:08 -05:00
atlimit8
cca7eda530 Restore CloakOn: Heal behavior in mods via MiniYaml changes. 2017-03-15 20:26:08 -05:00
atlimit8
d3e4720507 Added UncloakOn: SelfHeal (not overlapping with Heal). 2017-03-15 20:26:05 -05:00
atlimit8
aa8c434668 Make Repair activity host actor the attacker for repairs. 2017-03-15 20:25:12 -05:00
atlimit8
8e7de1a4fa Make UncloakOn Damage check sign with added Heal value for UncloakOn. 2017-03-15 20:25:08 -05:00
rob-v
e766c6f342 Global chat name is reset when connecting #12325
removed TrySetNickname(Game.Settings.Player.Name) in GlobalChat ctor overwriting Chat.Nickname. instead of removing, it could be replaced by TrySetNickname(Game.Settings.Chat.Nickname)
2017-03-15 23:53:43 +01:00
Paul Chote
34a37421f6 Allow specific mods to be launched from VS/MD gui. 2017-03-15 22:01:01 +00:00
abcdefg30
eb77c57ac3 Merge pull request #12968 from SoScared/DualColdFrontReverse
[RA] Map Pool - Reverse alteration of Dual Cold Front
2017-03-15 22:16:08 +01:00
abcdefg30
bbc08627ac Merge pull request #12970 from SoScared/WallTweak
[RA] [Balance] Tweak price/production of S.Bags/Fence/Walls
2017-03-15 22:00:48 +01:00
Paul Chote
67144fe66b Merge pull request #12842 from abc013/Allies06SubFix
Allies 06a: Make the AI only build submarines if the player has a shipyard
2017-03-15 20:12:18 +00:00
Paul Chote
395d31b249 Merge pull request #12967 from SoScared/ReverseFriendlyMines
Reverse making friendly units aware of friendly mines.
2017-03-15 19:58:57 +00:00
SoScared
e0985162a0 Double price/production of S.Bags/Fence/Walls 2017-03-15 16:55:29 +01:00
SoScared
681dcc81a1 Reverse alteration of Dual Cold Front 2017-03-15 00:26:16 +01:00
SoScared
33bcdb10ba Reverse making friendly units aware of friendly mines. 2017-03-14 20:46:19 +01:00
abc013
046427beea Polished the mission objectives in allies06a 2017-03-14 19:29:40 +01:00
abc013
db4554acec Make the AI only build submarines if the player has a shipyard 2017-03-14 17:31:03 +01:00
abcdefg30
3aeddbf9bd Merge pull request #12953 from MustaphaTR/d2k-add-stealth-detection-to-turrets
D2K - Make defences detect Cloak
2017-03-14 15:48:56 +01:00
reaperrr
4c32803c16 Merge pull request #12945 from MustaphaTR/add-noozes-1-tile-cliffs
RA/TD - Add 1 Tile Cliffs by Nooze
2017-03-13 19:59:51 +01:00
Mustafa Alperen Seki
4f0e317371 Add Nooze's 1 Tile Cliffs to TD 2017-03-13 17:20:05 +02:00
Mustafa Alperen Seki
ab6b7c8551 Add Nooze's 1 Tile Cliffs to RA 2017-03-13 17:19:46 +02:00
reaperrr
d138a05baf Merge pull request #12946 from pchote/fix-serverquery-crash
Fix crash when master server query returns unexpected data.
2017-03-12 18:44:06 +01:00
Mustafa Alperen Seki
dcf1cfe118 Make defences detect cloak. 2017-03-12 16:04:51 +02:00
atlimit8
fbc850a73f Prevent duplicate upgrades (plugs) to GDI Upgrade Center 2017-03-12 03:43:42 -05:00
atlimit8
08a71795d1 PluggableInfo.Requirements entry overrides in-use check now to allow swapping. 2017-03-12 03:43:42 -05:00
atlimit8
daf4eb812c Added ConditionExpression Requirements for plugs to Pluggable 2017-03-12 03:43:35 -05:00
Oliver Brakmann
63ee126898 Merge pull request #12947 from pchote/fix-obelisk-targeting
Fix obelisk targeting.
2017-03-11 22:28:42 +01:00
reaperrr
0847cb9d31 Merge pull request #12951 from SoScared/fixGapEffect_vs_Airplanes
Fix RevealsShroud@GAPGEN vs MiG/YAK
2017-03-11 17:58:20 +01:00
SoScared
daeba01bc1 fixed RevealsShroud@GAPGEN vs MiG/YAK 2017-03-11 13:44:44 +01:00
Paul Chote
c45634ed8d Merge pull request #12941 from forcecore/ai_ref_placement
HackyAI now builds refinery near ore.
2017-03-11 12:40:48 +00:00
Paul Chote
f3cfe24e11 Merge pull request #12942 from SoScared/mapswap5
[RA] Add/remove official maps 5.
2017-03-11 11:56:47 +00:00
Paul Chote
a3030aa074 Merge pull request #12933 from SoScared/mapswap4
[RA] Add/remove official maps 4.
2017-03-11 11:41:48 +00:00
reaperrr
d86ff6696a Merge pull request #12887 from MustaphaTR/ra-make-turkish-flag-outline-blue
Change Turkish Flag outline to Blue
2017-03-10 22:19:43 +01:00
reaperrr
da2330a116 Merge pull request #12935 from pchote/td-map-tweaks
Update TD playtest maps
2017-03-10 21:22:57 +01:00
Paul Chote
4d2563cc11 Remove unnecessary AttackTesla : AttackOmni subclass. 2017-03-10 19:42:18 +00:00
Paul Chote
a9cfbd9ad7 Fix Obelisk not dropping targets when they move out of range. 2017-03-10 19:42:15 +00:00
Paul Chote
00b1bc7cd2 Fix crash when master server query returns unexpected data. 2017-03-10 18:38:35 +00:00
SoScared
2f48e67e6d final 6p plus map pool alteration 2017-03-09 18:24:31 +01:00
Forcecore
7588d6708b HackyAI now builds refinery near ore. 2017-03-09 09:42:56 -06:00
abcdefg30
5e737980fe Merge pull request #12910 from pchote/fix-bogus-enumeration-issue
Fix spurious warnings when the support mods dir doesn't exist.
2017-03-09 09:19:55 +01:00
SoScared
73698c2ecb final 2-4 player map alteration 2017-03-08 23:51:03 +01:00
Paul Chote
f6b11bb662 Remove TD map Vectors of Battle (10p). 2017-03-08 22:06:16 +00:00
Paul Chote
e055db94ab Update TD map Order of Battle. 2017-03-08 22:05:50 +00:00
Paul Chote
82d5979eb1 Update TD map Axis of Advance. 2017-03-08 22:05:39 +00:00
Oliver Brakmann
3499325f23 Merge pull request #12921 from reaperrr/ts-economy
Fix TS economy to match original
2017-03-08 22:19:30 +01:00
Oliver Brakmann
439a4a70d4 Merge pull request #12908 from reaperrr/polish-poseidon
Polish Morbid Aimless Poseidon
2017-03-08 22:03:44 +01:00
Jean-Rémy Buchs
28cd480225 Load debug symbols (.mdb on mono only; .pdb) for mods if they are present 2017-03-08 20:11:41 +01:00
Jean-Rémy Buchs
f999001caf Load debug symbols (.mdb on mono only; .pdb) for mods if they are present 2017-03-07 18:30:08 +01:00
abcdefg30
c87e1c789a Merge pull request #12920 from reaperrr/fix-spy-atk
Fix RA Spy attack sequence
2017-03-06 22:40:35 +01:00
reaperrr
386e5b3772 Limit TS AI silos to 2
The up to 4 refineries already provide a total of 8000 credits storage, 2 silos for additional 3000 should be more than the AI will likely ever need.
2017-03-06 04:00:38 +01:00
reaperrr
1d636082a3 Fix TS harvester load, unload and movement speed
Matching original.
2017-03-06 03:55:22 +01:00
reaperrr
a40639c559 Fix TS tiberium values
25 for green, 40 for blue (Vinifera). Alternate blue tib (Aboreus) with value 30 might be added later.
2017-03-06 03:54:25 +01:00
reaperrr
062eef37f4 Fix TS silo storage pip color 2017-03-06 03:52:59 +01:00
reaperrr
d7a49daae8 Fix TS refinery storage capacity to match original 2017-03-06 03:52:37 +01:00
reaperrr
e57fd37697 Fix RA Spy attack sequence 2017-03-06 02:30:48 +01:00
Paul Chote
407ecbc397 Fix spurious warnings when the support mods dir doesn't exist. 2017-03-05 19:13:07 +00:00
reaperrr
e25cb2914f Polish Morbid Aimless Poseidon
A lot of the cliffs, in particular "north-facing" ones, only reptitively used a single variant, and in some cases the one that should only be used for the "left ending" of a cliff. I fixed the latter and added variation to the former cases.
2017-03-05 17:07:11 +01:00
reaperrr
120efcedaa Merge pull request #12859 from abcdefg30/supportPrereqs
Fix support powers not being enabled by cheats
2017-03-05 16:27:43 +01:00
reaperrr
efcaa86db6 Merge pull request #12889 from Mailaender/bye
Removed myself from the active developer list
2017-03-05 15:32:14 +01:00
abcdefg30
5d220e3e6b Merge pull request #12891 from pchote/register-mods-first-time
Add the current mod to the external mods database on launch.
2017-03-04 18:51:43 +01:00
Paul Chote
1dddb43bd6 Add the current mod to the external mods database on launch. 2017-03-04 17:43:48 +00:00
abcdefg30
72ad76d807 Merge pull request #12892 from pchote/fix-makefile
Fix makefile install rule.
2017-03-04 18:40:11 +01:00
Jean-Rémy Buchs
a0598d2b9c Load debug symbols (.mdb .pdb) for mods if they are present 2017-03-04 17:37:40 +01:00
Paul Chote
f6c607c461 Fix makefile install rule. 2017-03-04 16:10:03 +00:00
Oliver Brakmann
8d2531f4d5 Merge pull request #12885 from pchote/fix-nsfremen-warning
Fix lint warnings on nsfremen.
2017-03-04 15:59:06 +01:00
abcdefg30
c765915c57 Merge pull request #12886 from pchote/fix-transform-exploit
Fix invalid Transform location exploit.
2017-03-04 15:54:46 +01:00
Jean-Rémy Buchs
19616c059c Load debug symbols for mods if they are present 2017-03-04 14:20:16 +01:00
Matthias Mailänder
06c7dad50e Move myself to previous developers. 2017-03-04 12:56:34 +01:00
Jean-Rémy Buchs
d3491c2979 Load debug symbols for mods if they are loaded from the filesystem 2017-03-04 12:38:07 +01:00
Mustafa Alperen Seki
7ad63bd3c7 Change Turkish Flag outline to Blue. 2017-03-04 08:54:18 +02:00
Paul Chote
e98c2eef68 Fix invalid Transform location exploit. 2017-03-04 00:17:38 +00:00
Paul Chote
f3f3e361d3 Fix lint warnings on nsfremen. 2017-03-03 22:55:56 +00:00
Paul Chote
6fbd6bcb4c Merge pull request #12681 from MustaphaTR/ra-make-infiltrates-upgradeable
Make Infiltrates Upgradeable
2017-03-03 22:52:21 +00:00
Mustafa Alperen Seki
fd595660ec Add condition support to Infiltrates. 2017-03-03 22:40:20 +00:00
Paul Chote
2e605bb6cb Merge pull request #12759 from forcecore/cloak_unhardcoding
Unhardcode disableCloak on critical HP (#12741)
2017-03-03 22:31:37 +00:00
Paul Chote
6aa2f962b1 Merge pull request #12769 from abcdefg30/luaTile
Add a lua function to query the terrain type of a cell
2017-03-03 22:19:58 +00:00
Paul Chote
1811e17a5f Merge pull request #12841 from ltem/d2k-fix-lights
Fix welding lights of Dune 2000 structures
2017-03-03 22:17:28 +00:00
Paul Chote
e7382760ef Merge pull request #12875 from abc013/DisguiseTooltipFix
Rename DisguiseToolTip to DisguiseTooltip
2017-03-03 22:00:29 +00:00
Paul Chote
b31451483a Merge pull request #12867 from SoScared/mapswap3
[RA] Add/remove official maps 3.
2017-03-03 21:55:36 +00:00
Paul Chote
c08efb9831 Merge pull request #12818 from reaperrr/fix-td-mission-prereqs
Fix that some buildings are incorrectly available in TD missions
2017-03-03 21:51:11 +00:00
Paul Chote
365df03c40 Merge pull request #12869 from MustaphaTR/new-lua-files-on-openra-sln
Add new lua files added with new D2K missions to OpenRA.sln
2017-03-03 21:37:41 +00:00
Paul Chote
77534c2d10 Merge pull request #12863 from abcdefg30/ignoreTargetUpgrades
Make AutoTargetIgnore upgradeable
2017-03-03 21:27:38 +00:00
reaperrr
5e4fa5b311 Merge pull request #12798 from dtluna/bleed
Official Map Pool Overhaul for TD
2017-03-03 19:45:33 +01:00
dtluna
d00f3af90c Official map pool overhaul for TD 2017-03-03 18:23:33 +03:00
reaperrr
808b457086 Merge pull request #12832 from MustaphaTR/d2k-harkonnen2b
D2K - Add Harkonnen Mission 2b
2017-03-03 15:42:16 +01:00
abc013
423744451b Rename DisguiseToolTip to DisguiseTooltip 2017-03-03 15:21:33 +01:00
reaperrr
ef6e038d1b Fix prerequisites of GDI 3 and GDI 5
Guard Tower and walls should not yet be buildable at this point
2017-03-03 14:43:27 +01:00
reaperrr
132872488f Fix prerequisites in both Nod 3 missions
Disables chainlink fences and sandbags.
2017-03-03 14:42:26 +01:00
reaperrr
43731526fb Fix prerequisites in GDI 1 and GDI 2
Makes sandbags and chainlink fence unbuildable.
2017-03-03 14:40:18 +01:00
Mustafa Alperen Seki
ed5e624527 Add Harkonnen2b 2017-03-01 20:52:09 +02:00
Mustafa Alperen Seki
59c71ebea5 Add new lua files to OpenRA.sln. 2017-03-01 19:45:41 +02:00
SoScared
0a17a8671f add new revision for behind the veil and northwest passage 2017-02-28 21:58:36 +01:00
reaperrr
cc3b46b580 Merge pull request #12808 from reaperrr/d2k-revealonfire
Enable enemy reveal when attacking friendly units in D2k
2017-02-27 21:29:52 +01:00
reaperrr
e06e19e39f Merge pull request #12826 from MustaphaTR/d2k-fix-carryall-owner-change
Fix that Carryalls still pick units changed their owner
2017-02-27 21:14:46 +01:00
reaperrr
cbd693c89f Merge pull request #12693 from abcdefg30/invalidContains
Give a proper error when a file is not found
2017-02-27 19:55:57 +01:00
abcdefg30
586dd98eb4 Merge pull request #12838 from pchote/revert-td-ref-sell-refund
Restore sell value of TD refinery.
2017-02-27 11:05:32 +01:00
abcdefg30
c833f3857f Remove DOME.IGNORE from soviet-05 2017-02-27 00:36:00 +01:00
abcdefg30
700d141c24 Make AutoTargetIgnore upgradeable 2017-02-27 00:36:00 +01:00
abcdefg30
8b7797326a Revise CaptureOrderTargeter a tiny bit 2017-02-27 00:28:18 +01:00
reaperrr
870c82e727 Merge pull request #12816 from abc013/d2kAdjustAirStrike
Adjust the drop-position of the air strike in D2k
2017-02-26 15:34:51 +01:00
Matthias Mailänder
e897d1e8fa Merge pull request #12848 from pchote/starport-anim-polish
Hide the starport animation from highlights and when not playing.
2017-02-26 11:37:00 +01:00
reaperrr
4c02112cc6 Tweak Ornithopter bombs
In the original,
- they were slower
- didn't accelerate
- had a shadow
- were dropped at lower rate
- played EXPLSML4.WAV

compared to bleed.
2017-02-25 21:14:43 +01:00
reaperrr
447269c020 Tweak D2k aircraft altitudes
The Frigate and Ornithopter were flying too low compared to the original.
2017-02-25 21:03:53 +01:00
abc013
a73e7e6103 Adjust the drop-position of the air strike in D2k 2017-02-25 21:03:53 +01:00
abcdefg30
e318c028ba Fix support powers not being enabled by cheats 2017-02-25 16:57:30 +01:00
ltem
46165f8d00 Added a condition so that the dish animation of the outpost won't be active if the structure is server damaged 2017-02-25 15:28:57 +01:00
ltem
35494b2abd Fix welding lights of Dune 2000 structures
- Fixed starport lights
- Fixed offsets and welding lights of light factory
- Fixed welding lights of high tech factory
- Fixed offsets and welding lights of heavy factory
2017-02-25 13:37:12 +01:00
reaperrr
d2ad2a1b15 Merge pull request #12837 from pchote/negative-int-negation
Make ConditionExpression ! return false for negative numbers.
2017-02-25 12:21:34 +01:00
Paul Chote
f221dd721a Hide the starport animation from highlights and when not playing. 2017-02-25 10:43:00 +00:00
forcecore
0483708487 Rename uncloaking conditions from uncloak to cloak-force-disabled
Descriptive condition name is better.
2017-02-24 20:56:52 -06:00
forcecore
53e7cf0ef1 Rules updated to unhardcode cloak diable on criticalHP
Rules updated for CNC mod (uncloak on critical HP)

STNK, stealth crate are affected

Rules updated for D2K mod (uncloak on critical HP)

Saboteur, fremen, stealth raider affected

Rules updated for RA mod (uncloak on critical HP)

Affects
Hijacker, sniper, sub, msub, hbox, stnk.
Mines are not affected, they are not exactly "stealth".
Hijackers and snipers aren't machines and should be able to hide
themselves even when they are wounded but for least surprise to
players, uncloaking stays as well.

Rules updated for TS mod (uncloak on critical HP)

Only affects STNK.
Things that are cloak generators will stay cloaked even when critical
HP! The cloak generation mechanism is by the cloak generator!
2017-02-24 20:55:06 -06:00
forcecore
28ce32d8fa damageDisabled removed from Cloak.cs (#12741)
To unhard code uncloak behavior getting disabled by the unit's critical HP.
2017-02-24 20:53:42 -06:00
Paul Chote
d6d166ee36 Restore sell value of TD refinery. 2017-02-23 22:24:27 +00:00
Paul Chote
e0ca38b878 Merge pull request #12694 from RoosterDragon/fixup-network
Fix thread-safety and dispose issues in NetworkConnection.
2017-02-23 21:04:56 +00:00
Paul Chote
1c97effbc9 Make ConditionExpression ! return false for negative numbers.
This brings it in line with C/C++ behaviour.
2017-02-23 20:23:40 +00:00
Paul Chote
22e2deee21 Merge pull request #12719 from atlimit8/ConditionExpression_with_counting
BooleanExpression => ConditionExpression with integer values for token count comparisons
2017-02-23 19:16:19 +00:00
abcdefg30
5636326dc6 Merge pull request #12811 from MustaphaTR/d2k-harkonnen2a
D2K - Add Harkonnen Mission 2a
2017-02-22 21:22:42 +01:00
Mustafa Alperen Seki
3e0b138a7e Add Harkonnen2a 2017-02-22 20:25:46 +02:00
atlimit8
47804e5fab Improve Upgrader for Upgrades => Condition expressions 2017-02-22 08:54:52 -06:00
atlimit8
67dcbd1b2c ConditionExpression: added bool constants 2017-02-22 08:54:52 -06:00
atlimit8
f605756351 ConditionExpression: Add arithmetic operations 2017-02-22 08:54:52 -06:00
atlimit8
725cc7c084 Removed StackedCondition trait 2017-02-22 08:54:52 -06:00
atlimit8
ac4f73b178 ConditionExpression: Add relation operators 2017-02-22 08:54:52 -06:00
atlimit8
bbea7642fc ConditionExpression: setup operator precedences 2017-02-22 08:54:51 -06:00
atlimit8
0fc2008f10 Added delegate creation & evaluation to ConditionExpression 2017-02-22 08:54:51 -06:00
atlimit8
d752e10799 ConditionExpression: Run syntax checks while lexing 2017-02-22 08:54:51 -06:00
atlimit8
8e6436d71c ConditionExpression: move lexing to Token class. 2017-02-22 08:54:51 -06:00
atlimit8
4537c3c7d0 ConditionExpression: reorganize tokenizer 2017-02-22 08:54:51 -06:00
atlimit8
6e393f99cb ConditionExpression: Replaced Token sub-classing with TokenTypeInfo data. 2017-02-22 08:54:51 -06:00
atlimit8
828b13a11e ConditionExpress: added TokenTypeInfo table 2017-02-22 08:54:51 -06:00
atlimit8
f9e47cd0ca ConditionExpression: Added CharClass enum for tokenizing 2017-02-22 08:54:51 -06:00
atlimit8
c70442b15e Use switch statement for operator tokenization. 2017-02-22 08:54:51 -06:00
atlimit8
73895d07e2 Numeric constants for ConditionExpression 2017-02-22 08:54:50 -06:00
atlimit8
65725efd04 Make ConditionExpression use counts. 2017-02-22 08:54:50 -06:00
atlimit8
d83dae5587 Rename BooleanExpression => ConditionExpression 2017-02-22 08:54:50 -06:00
Mustafa Alperen Seki
bf0c4f7e1a Fix that Carryalls still pick owner changed units 2017-02-21 18:04:53 +02:00
RoosterDragon
aa3024f1f8 Fix thread-safety and dispose issues in NetworkConnection.
- Calling Close() on a TcpClient is documented to also close the underlying sockets and streams for us. This means we can avoid also calling socket.Client.Close() and generating exceptions on mono.
- TcpClient is not thread-safe. However the NetworkStream returned by GetStream() is thread-safe for a single reader/single writer scenario. If we create and dispose the client on the calling thread, and pass the NetworkStream into the thread we spawn for reading, then we can avoid thread-safety issues incurred by trying to Close() the connection from another thread.
- The clean shutdown means we don't need to make the dodgy Thread.Abort() call as it will end normally, and that means we don't need a finalizer to ensure the thread is killed off.
- Refactor how receivedPackets work in EchoConnection to avoid lock(this).
- Mark connectionState and clientId as volatile since they are set from another thread.
2017-02-21 14:10:06 +00:00
reaperrr
3e2431971c Make worms reveal shroud when swallowing friendly units 2017-02-20 20:13:17 +01:00
reaperrr
6ebdac1d30 Remove bogus Buildable trait from D2k sandworm 2017-02-20 20:13:13 +01:00
reaperrr
492efcc9cd Enable RevealOnFire in D2k 2017-02-20 20:13:11 +01:00
reaperrr
79c95364fb Merge pull request #12801 from reaperrr/td-shadows
Add shadows to TD projectiles and fix Napalm bombs
2017-02-20 19:58:22 +01:00
reaperrr
0f3250f9b0 Merge pull request #12782 from abcdefg30/paraCrash
Fix airstrikes and paratroopers crashing missions
2017-02-19 19:32:06 +01:00
abcdefg30
4a14b13002 Fix missing sequences on the airstrike.proxy in cnc 2017-02-19 17:52:40 +01:00
abcdefg30
b6bc08ac25 Move airstrike.proxy to the shared campaign maprules 2017-02-19 17:50:48 +01:00
abcdefg30
4d0ac8bd14 Fix the powerproxy actors of ra missing sequences 2017-02-19 17:47:07 +01:00
abcdefg30
aa73b19ee2 Give an proper error when a file is not found 2017-02-19 17:35:22 +01:00
abcdefg30
ad5a9a85f9 Merge pull request #12804 from pchote/remove-deprecated-apis
Remove deprecated Lua APIs / upgrade rules
2017-02-19 17:25:59 +01:00
reaperrr
1dc42cf5be Merge pull request #12743 from abcdefg30/atreides04
Add Atreides04
2017-02-19 16:42:57 +01:00
abcdefg30
6b99469113 Add atreides-04 2017-02-19 16:31:26 +01:00
reaperrr
3b92c21844 Merge pull request #12796 from pchote/external-conditions-rework
Add support for per-source and total external condition caps.
2017-02-19 15:44:53 +01:00
Paul Chote
1eb5be4d4c Add StringComparison.Ordinal to StartsWith. 2017-02-19 14:19:04 +00:00
Paul Chote
c47c13a14b Remove legacy upgrade rules. 2017-02-19 14:19:04 +00:00
Paul Chote
78a3dcae85 Remove deprecated Lua APIs. 2017-02-19 14:10:39 +00:00
reaperrr
2a65251324 Use MISSILE image for Mobile SAM projectile
Fixes #12803.
2017-02-19 14:22:28 +01:00
reaperrr
2f74c766fc Fix TD Napalm bombs hitting ground instantly 2017-02-19 14:22:26 +01:00
reaperrr
5be90ab368 Enable shadows on visible TD projectiles 2017-02-19 14:22:24 +01:00
reaperrr
8d870ab585 Remove redundancy from some TD missiles
These values are inherited from ^MissileWeapon.
2017-02-19 14:22:20 +01:00
reaperrr
45076eaaa4 Merge pull request #12795 from pchote/settings-restart
Use external mod switching plumbing to restart after settings changes.
2017-02-19 13:57:05 +01:00
reaperrr
ce76b28cbf Merge pull request #12745 from SoScared/mapswap1
[RA] Add/remove official maps.
2017-02-19 12:45:33 +01:00
reaperrr
f184be945b Merge pull request #12779 from MustaphaTR/d2k-harkonnen-1b
D2K - Add Harkonnen Mission 1b
2017-02-19 12:32:33 +01:00
Paul Chote
e229ca1812 Merge pull request #12790 from Phrohdoh/fix-12789
Throw an InvalidOperationException when a mod manifest references a bogus package
2017-02-18 23:12:59 +00:00
Taryn Hill
38304bc57b Throw an InvalidOperationException when a mod manifest references a bogus package
Bogus packages are packages that:
  * Cannot be located on disk
  * Are of an unsupported format
2017-02-18 16:55:26 -06:00
Paul Chote
11df0216e5 Remove legacy restart behaviour. 2017-02-18 22:37:47 +00:00
Paul Chote
073a00a2f4 Use mod switching for settings menu restart. 2017-02-18 22:37:47 +00:00
Paul Chote
500da07565 Fix mod switching failing when launchArgs is null. 2017-02-18 22:37:47 +00:00
SoScared
dcbeb08cf5 mapswap1 2017-02-18 21:24:52 +01:00
abcdefg30
b0cf90e95b Merge pull request #12767 from SoScared/mapswap2
[RA] Add/remove official maps 2.
2017-02-18 21:09:02 +01:00
abcdefg30
1c4b5cf0c8 Merge pull request #12786 from Phrohdoh/nuget-quiet
Cut down on the amount of output generated by dependency fetching scripts
2017-02-18 21:01:21 +01:00
Paul Chote
da5a725458 Add support for per-source and total external condition caps. 2017-02-18 19:10:22 +00:00
abcdefg30
fe632c5ba4 Merge pull request #12793 from pchote/fix-utility-modlist
Fix utility mod listing.
2017-02-18 20:08:24 +01:00
Paul Chote
f19df7b509 Merge pull request #12770 from reaperrr/polish-d2k-weapons
Polish D2k weapons and add wall explosion
2017-02-17 22:04:16 +00:00
Paul Chote
ba8d17e670 Merge pull request #12783 from MustaphaTR/d2k-fix-tile-99-100
D2K - Fix tiles 99 and 100
2017-02-17 21:56:17 +00:00
Paul Chote
bc158e3240 Merge pull request #12778 from FrameLimiter/patch-2
GAP & SAM power up/down sounds.
2017-02-17 21:43:27 +00:00
Paul Chote
00b7b14f2e Fix utility mod listing. 2017-02-17 20:53:17 +00:00
Taryn Hill
eaf55a864c Merge pull request #12638 from pchote/engineargs
Add engine plumbing to support externally developed mods.
2017-02-16 20:58:41 -06:00
abcdefg30
34736717ad Merge pull request #12765 from pchote/mod-cleanup
Clean up stale metadata registrations.
2017-02-16 22:48:00 +01:00
Taryn Hill
9329ee4780 Cut down on the amount of output generated by dependency fetching scripts 2017-02-15 21:14:09 -06:00
abcdefg30
54b0cdac38 Add the Fremen as faction to d2k 2017-02-15 21:47:04 +01:00
SoScared
c8a8e29d28 Add/Alter/Remove some maps 2017-02-15 21:04:20 +01:00
Mustafa Alperen Seki
05cf09f9ac Fix tiles 99 and 100 2017-02-15 18:57:20 +02:00
reaperrr
ab161c0a24 Merge pull request #12781 from MustaphaTR/d2k-fix-195
D2K - Fix tile 195
2017-02-15 17:53:25 +01:00
Mustafa Alperen Seki
3eb03e0743 Fix tile 195 2017-02-15 16:48:49 +02:00
Mustafa Alperen Seki
a3a5ba03b0 Add Harkonnen1b 2017-02-14 17:55:20 +02:00
FrameLimiter
1a5fee9048 GAP & SAM power up/down sounds.
The Gap Generator & SAM Site are both missing the power on/off sound effects.
2017-02-14 10:27:27 -05:00
reaperrr
2dcd920af5 Fix D2k wall armor type
TibEd said 'none', but that can't be true, as in the original anti-tank weapons are far more effective versus walls than machine guns, so I decided to just use the wall armor type.
2017-02-14 01:56:26 +01:00
reaperrr
8dd66b41c2 Fix D2k Wall debris count and types
Two debris, of which one is large, matches the original.
Also made max range match weapon range.
2017-02-14 01:56:24 +01:00
reaperrr
6cd6cedd2c Tweak D2k debris
- Enabled shadow
- reduced maximum speed
- considerably increased 'launch angle'
- increased bounce count to 3 and toned down BounceRangeModifier
- reduced TrailInterval to 1 for Debris2
- removed explosion sounds to a) match original and b) make them less annoying
- fixed debris explosion animations to match original
- used different trail anim for Debris2 and Debris3
2017-02-14 01:56:22 +01:00
reaperrr
de6d45f9e5 Fix BlendMode of previously unused D2k trails 2017-02-14 01:56:21 +01:00
reaperrr
9b34aa4d6b Set up D2k wall explosion 2017-02-14 01:56:19 +01:00
reaperrr
eef4c9b627 Merge pull request #12755 from MustaphaTR/d2k-harkonnen-1a
D2K - Add Harkonnen Mission 1a
2017-02-13 23:49:35 +01:00
abcdefg30
b23df65adb Merge pull request #12750 from MustaphaTR/d2k-atreides2-AI+tile-fixes
D2K - Fix Tiles errors in Atreides Mission 2s and add production/repair for their AIs.
2017-02-13 21:02:31 +01:00
Mustafa Alperen Seki
000ae29cb6 Fix Tiles errors in Atr2s and add AI production/repair for them. 2017-02-13 20:27:29 +01:00
reaperrr
74fa80491d Merge pull request #12751 from abcdefg30/d2kSequences
Fix missing sequences in all mods
2017-02-13 19:58:41 +01:00
abcdefg30
eeebcd6468 Merge pull request #12669 from Phrohdoh/make-core-builds-deps
Don't require a manual 'make dependencies' by default
2017-02-13 19:47:15 +01:00
reaperrr
6745cf402d Remove explosion sound from Fremen weapon 2017-02-12 22:50:29 +01:00
reaperrr
03a5e7ff4e Make Quad Rocket speed a multiple of 32 2017-02-12 22:28:55 +01:00
reaperrr
c4fc8f55bc Make D2k large missile speeds consistent 2017-02-12 22:27:52 +01:00
reaperrr
84dedd4237 Only play explosion sound for Missile Tank and Tower in D2k
But not on Bazooka and Quad's Rocket.
2017-02-12 22:27:09 +01:00
reaperrr
87d5a17a18 Fix explosion sound, speed and angle of D2k grenade 2017-02-12 22:13:09 +01:00
abcdefg30
603e7ca408 Add a lua function to query the terrain type of a cell 2017-02-12 21:05:48 +01:00
abcdefg30
4c9bae798a Add an upgrade rule 2017-02-12 21:01:47 +01:00
abcdefg30
5999a028ad Merge pull request #12739 from SoScared/balance_patch_core
[RA] Balance changes for next playtest/release.
2017-02-12 20:49:40 +01:00
reaperrr
f95ec2b11f Merge pull request #12684 from abcdefg30/proneOffset
Fix the ProneOffsets of TakeCover
2017-02-12 20:31:08 +01:00
Paul Chote
d6a793fa7d Merge pull request #12758 from reaperrr/fix-d2k-weapons
Fix D2k weapons
2017-02-12 19:02:27 +00:00
Paul Chote
9516a6af69 Fix game server compatibility check. 2017-02-12 18:48:03 +00:00
Paul Chote
54f4e996fb Clean up stale metadata registrations. 2017-02-12 18:40:19 +00:00
Paul Chote
4a1bf43a74 Merge pull request #12763 from reaperrr/cncdll-to-common
Change target location for Mods.Cnc to mods/common
2017-02-12 18:25:59 +00:00
abcdefg30
3650072eca Visceroids aren't buildable 2017-02-12 18:34:34 +01:00
abcdefg30
d3000c7570 Fix missing sequences in TS 2017-02-12 18:34:34 +01:00
abcdefg30
c65f310d2b Fix missing sequences in d2k 2017-02-12 18:34:33 +01:00
abcdefg30
a4a9e46e2d Change the default value for the sequence definitions on SupportPower.cs 2017-02-12 18:34:33 +01:00
reaperrr
686b21c044 Change target location for Mods.Cnc to mods/common 2017-02-12 18:02:15 +01:00
abcdefg30
a3aab6f051 Merge pull request #12757 from reaperrr/merge-ra-into-cnc
Merge Mods.RA into Mods.Cnc
2017-02-12 17:47:41 +01:00
abcdefg30
c09fa25257 Merge pull request #12762 from reaperrr/common-ui
Move RA chrome yamls to common
2017-02-12 17:37:47 +01:00
reaperrr
996f7ba5cf Merge pull request #12730 from abcdefg30/aircraftCrate
Fix GiveUnitCrateAction and SpawnMPUnits being limited to MobileInfo
2017-02-12 17:27:24 +01:00
Paul Chote
b2ed96f887 Merge pull request #12748 from reaperrr/fix-ra-sounds
Fix RA 25mm and DepthCharge playing sounds
2017-02-12 15:47:35 +00:00
reaperrr
66f1cc69d8 Move D2k/TS ingame-observer.yaml to common 2017-02-12 16:45:19 +01:00
reaperrr
5e465ff965 Remove RA reference from d2k 2017-02-12 16:45:17 +01:00
reaperrr
6f9f630fdc Move RA chrome yamls to common 2017-02-12 16:45:15 +01:00
reaperrr
b7125852b5 Remove d2k dependency from TS UI 2017-02-12 15:17:36 +01:00
Paul Chote
2af03da825 Add Engine.ModSearchPaths argument. 2017-02-12 13:21:11 +00:00
Paul Chote
7d758202c5 Rework mod searching/enumeration. 2017-02-12 13:21:11 +00:00
Paul Chote
9b6afd3c37 Unhardcode modchooser mod for content installation. 2017-02-12 13:21:11 +00:00
Paul Chote
657ba90ae3 Add Engine.DefaultMod argument to override modchooser fallback. 2017-02-12 13:21:10 +00:00
reaperrr
0c44a49722 Merge pull request #12600 from pchote/externalmods
Add support for switching to mods from other engine installations.
2017-02-12 13:18:53 +01:00
reaperrr
cdf2a1e87d Merge pull request #12649 from obrakmann/more-sysinfo-stuff
More sysinfo stuff
2017-02-12 12:48:37 +01:00
reaperrr
a5f4d6031c Merge pull request #12749 from MustaphaTR/d2k-add-new-tiles
Add new tiles that will be in Harkonnen Missions 1 and 2
2017-02-12 12:35:12 +01:00
reaperrr
0f7c53dac0 Fix DepthCharge hit explosion
The splash anim + h2obomb2.aud should always play, regardless of whether a submarine was hit.
2017-02-12 01:59:45 +01:00
reaperrr
3ff045f711 Merge pull request #12731 from abcdefg30/oldBase
Minor removal of rules duplication in ts yaml
2017-02-12 01:49:47 +01:00
reaperrr
0c3a786d10 Merge Mods.RA into Mods.Cnc 2017-02-12 01:33:22 +01:00
reaperrr
194a386a66 Remove unused Heal weapon from D2k 2017-02-12 01:25:47 +01:00
reaperrr
be6aaa0da5 Use InstantHit projectile for d2k BloomExplosion 2017-02-12 01:24:16 +01:00
reaperrr
0176fa5ff3 Remove redundant Blockable from DevBullet 2017-02-12 01:23:42 +01:00
reaperrr
69eaa16726 Make D2k machine guns unblockable and instant hits
To match original.
2017-02-12 01:20:03 +01:00
Paul Chote
51973cd798 Tweak 64 bit wording to match the two entries above it. 2017-02-11 19:36:14 +00:00
Paul Chote
3f9062692b Add window scale to sysinfo. 2017-02-11 19:36:14 +00:00
Oliver Brakmann
a0b911d498 Add sysinfo version to sysinfo query 2017-02-11 19:36:14 +00:00
Oliver Brakmann
54278ae8f3 Add window size to sysinfo query 2017-02-11 19:36:14 +00:00
SoScared
e26b0495ad balance batch 1 2017-02-11 19:20:18 +01:00
reaperrr
cdfa3fddf8 Move ParatroopersPower and para scripting to Mods.Common 2017-02-11 19:02:06 +01:00
abcdefg30
6df7038454 Merge pull request #12746 from ltem/d2k-trike-offset
Quickfix for Trike armament offset
2017-02-11 18:29:16 +01:00
Mustafa Alperen Seki
ad96fbb382 Add Harkonnen1a 2017-02-11 19:24:38 +02:00
ltem
677df8d4da Quickfix for Trike offset + Adding Height parameter to wall's
BlockProjectiles
2017-02-11 18:17:33 +01:00
abcdefg30
5fee23019f Merge pull request #12732 from MustaphaTR/d2k-ordos-1b
D2K - Add Ordos Mission 1b
2017-02-11 18:06:20 +01:00
abcdefg30
6e419d8ee0 Merge pull request #12737 from SoScared/le_shadows
[RA] Add shadow to projectiles, alter armament offsets of Chrono Tank, Phase Transport
2017-02-11 18:03:05 +01:00
abcdefg30
b26b7b9f46 Merge pull request #12702 from Mailaender/maxmind.db-2.1.2
Drop dependency on Maxmind.GeoIP and Newtonsoft.Json
2017-02-11 17:50:35 +01:00
Paul Chote
f2e6601e07 Remove legacy MP lobby mod and replay switching logic. 2017-02-11 16:45:18 +00:00
Paul Chote
69a869fe43 Pass Engine.LaunchPath from OSX launcher. 2017-02-11 16:45:18 +00:00
abcdefg30
584d76c771 Merge pull request #12675 from FrameLimiter/bleed
Restores tank traps to the map editor.
2017-02-11 17:39:22 +01:00
abcdefg30
c93585e3f2 Merge pull request #12697 from pchote/attack-charge
Implement new charge attack logic for TD/TS obelisks.
2017-02-11 17:35:08 +01:00
FrameLimiter
615c76402f Restores tank traps to the map editor.
Tank Traps are missing from the editor because they inherit "^Rock:" from the default.yaml which requires the tileset DESERT.
Tank Traps are a TEMPERAT tileset item.
2017-02-11 17:30:52 +01:00
Paul Chote
8385207fba Pass Engine.LaunchPath from linux launchers. 2017-02-11 16:21:35 +00:00
Paul Chote
2f7446e9fc Pass Engine.LaunchPath from windows launcher. 2017-02-11 16:21:35 +00:00
Paul Chote
2da4e87b94 Implement new server-connection mod switching logic. 2017-02-11 16:21:34 +00:00
Paul Chote
4d982f00e4 Add 32px icons for default mods. 2017-02-11 16:21:34 +00:00
Paul Chote
25a0d5be5b Load icons for installed mods. 2017-02-11 16:21:34 +00:00
Paul Chote
328bae550c Implement external mod registration and launching. 2017-02-11 16:21:34 +00:00
Paul Chote
a52ea71c62 Add AttackCharges trait for TD and TS obelisks. 2017-02-11 16:19:58 +00:00
Paul Chote
f219d40aa1 Improve support for overlapping sounds. 2017-02-11 16:19:58 +00:00
Paul Chote
53d7988ad1 Fix WithColoredOverlay upgrade rule. 2017-02-11 16:19:58 +00:00
Paul Chote
a8d46adb2d Rename tesla attack logic and move to Mods.Cnc. 2017-02-11 16:19:58 +00:00
abcdefg30
8ad37e6e0d Remove Buildable from unbuildable civilian structures 2017-02-11 15:28:52 +01:00
abcdefg30
7247350780 Remove cloak from ^OldBase 2017-02-11 15:21:01 +01:00
abcdefg30
1b4b146308 Reduce duplication by introducing ^OldBase 2017-02-11 15:21:00 +01:00
abcdefg30
6376e1fd22 Remove unnecessary Tooltip and Buildable definitions from ^CivBuilding 2017-02-11 15:21:00 +01:00
Mustafa Alperen Seki
db08535231 Add new tiles that will be in Harkonnen Missions 2017-02-11 16:11:47 +02:00
reaperrr
8fd3a68c42 Fix RA 25mm and DepthCharge playing sounds
25mm explosions and DepthCharge Report should be silent.
2017-02-11 14:06:57 +01:00
SoScared
99603eb607 ballistic shadows attempt 1 2017-02-11 12:09:48 +01:00
abcdefg30
ba69bfe494 Merge pull request #12705 from pchote/tweak-killself
Fix KillsSelf trait.
2017-02-10 19:06:20 +01:00
abcdefg30
307f722ef0 Merge pull request #12696 from pchote/fix-preview-rendering
Fix BGRA channel count.
2017-02-10 12:13:15 +01:00
abcdefg30
ce97b3a3a2 Fix IPositionableInfo not inheriting IOccupySpaceInfo 2017-02-09 22:04:33 +01:00
abcdefg30
e53724b1de Fix SpawnMPUnits being limited to MobileInfo 2017-02-09 22:04:33 +01:00
abcdefg30
a385835939 Fix GiveUnitCrateAction being limited to MobileInfo 2017-02-09 22:04:32 +01:00
abcdefg30
ac9c8b93a2 Merge pull request #12633 from reaperrr/slim-ra-weapons
Slim down RA weapon yamls via inheritance
2017-02-09 21:57:39 +01:00
Mustafa Alperen Seki
66ddae1818 Add Ordos 1b 2017-02-09 18:03:49 +02:00
Matthias Mailänder
01357c4f59 Merge pull request #12664 from MustaphaTR/d2k-ordos-1a
D2K - Add Ordos Mission 1a
2017-02-09 09:42:48 +01:00
reaperrr
c1e4a162fe Merge pull request #12710 from pchote/spectator-sort
Sort servers with spectators above empty servers.
2017-02-08 23:16:39 +01:00
reaperrr
fce404f6d9 Rename RA largecaliber.yaml to ballistics.yaml 2017-02-08 23:06:01 +01:00
reaperrr
36d725130a Streamlined RA missiles.yaml 2017-02-08 23:05:59 +01:00
reaperrr
7251572eb6 Streamlined RA explosions.yaml 2017-02-08 23:05:55 +01:00
reaperrr
b645780ba3 Streamlined RA other.yaml 2017-02-08 23:05:52 +01:00
reaperrr
d8a26838c2 Streamlined RA largecaliber.yaml 2017-02-08 23:05:48 +01:00
reaperrr
4c5be8d1d6 Streamlined RA smallcaliber.yaml 2017-02-08 23:05:44 +01:00
abcdefg30
dd15bbeb6d Fix the prone sequences of weedguy 2017-02-08 20:14:17 +01:00
abcdefg30
55dd61ebe5 Fix the ProneOffsets of TakeCover 2017-02-08 20:14:02 +01:00
reaperrr
c61a7b4131 Merge pull request #12709 from pchote/spicebloom-spurt
Play spicebloom spurt animation on each growth step.
2017-02-08 15:37:16 +01:00
Matthias Mailänder
5372d87521 Merge pull request #12677 from pchote/fix-player-drop
Fix player drop handling.
2017-02-08 09:01:58 +01:00
Matthias Mailänder
bad3a645a3 Merge pull request #12713 from pchote/fix-paused-weather-scroll
Fix weather particle positions when scrolling while paused.
2017-02-08 08:39:36 +01:00
Paul Chote
f6b65c98e4 Fix PBOG voxel rendering. 2017-02-07 10:05:06 +00:00
reaperrr
c3eab17112 Merge pull request #12712 from pchote/fix-nudge-moveflash
Don't show a move flash effect when PBOG nudges a unit.
2017-02-06 20:13:28 +01:00
reaperrr
263a13b34c Merge pull request #12690 from SoScared/gapvalues
[RA] GAP effect entry values.
2017-02-06 19:58:00 +01:00
reaperrr
01d869b467 Merge pull request #12711 from pchote/unload-cloak
Fix crash when unloading cargo from units with multiple cloaks.
2017-02-06 19:51:38 +01:00
reaperrr
5458f459b1 Merge pull request #12688 from MustaphaTR/d2k-fix-some-more-tiles
D2K - Fix tiles 58, 365, 366 and 368
2017-02-06 19:45:00 +01:00
reaperrr
f12fba141c Merge pull request #12708 from pchote/spicebloom-spawn
Remove SpawnActor from SpiceBloom.
2017-02-06 19:41:15 +01:00
abcdefg30
b751afbf78 Merge pull request #12692 from reaperrr/ts-debris
Refactor TS debris to work more like in the original
2017-02-05 22:59:19 +01:00
Paul Chote
609e0d0f3e Fix weather particle positions when scrolling while paused. 2017-02-05 18:50:31 +00:00
Paul Chote
9ab59ff614 Don't show a move flash effect when PBOG nudges a unit. 2017-02-05 18:40:22 +00:00
Paul Chote
7a22de268d Fix crash when unloading cargo from units with multiple cloaks. 2017-02-05 17:52:19 +00:00
Paul Chote
0c334c8ba0 Sort servers with spectators above empty servers. 2017-02-05 14:55:22 +00:00
Paul Chote
cc3c618d60 Play spurt animation on each growth step. 2017-02-05 13:28:00 +00:00
Paul Chote
847a00e938 Remove SpawnActor from SpiceBloom. 2017-02-05 12:32:42 +00:00
reaperrr
e1c1379622 Merge pull request #12691 from abcdefg30/tanyaCrush
Make Tanya uncrushable in missions
2017-02-05 13:14:07 +01:00
Paul Chote
2496ce3527 Set default delay to 0. 2017-02-05 11:37:01 +00:00
Paul Chote
1518da1062 Fix KillSelf behaviour for out-of-world actors. 2017-02-05 11:37:01 +00:00
Matthias Mailänder
13263f7bb2 Drop Maxmind.GeoIP and Newtonsoft.Json dependencies 2017-02-05 11:54:22 +01:00
reaperrr
3e1d0074b8 Tweak TS building debris spawns 2017-02-05 02:15:10 +01:00
reaperrr
e25f7948a8 Fix TS debris to behave more like in the original 2017-02-05 02:15:09 +01:00
Paul Chote
956ea5197b Fix BGRA channel count. 2017-02-04 17:05:00 +00:00
Paul Chote
b71d4ba7a3 Remove lag-drop frame workaround. 2017-02-04 16:35:55 +00:00
Paul Chote
07c9c9ee8c Only update MostRecentFrame if the frame is the most recent.
This fixes it being reset to 0 after an immediate order
and not being set before dispatching (which may use it).
2017-02-04 16:35:51 +00:00
Paul Chote
b018c3d837 Merge pull request #12350 from reaperrr/rem-spicebloom-DelAct
Merge SpiceBloom RespawnDelay & GrowthDelay into Lifetime
2017-02-04 16:22:39 +00:00
abcdefg30
6e3a7ba5ec Make Tanya uncrushable in missions 2017-02-04 15:27:37 +01:00
reaperrr
261e0cd7aa Move debris to otherweapons.yaml 2017-02-04 14:48:34 +01:00
reaperrr
226e2f7fa4 Merge pull request #12640 from reaperrr/ts-weapon-inherit2
Slim & tweak TS weapons - part 2
2017-02-04 14:40:27 +01:00
SoScared
ce7c1679d9 GAP effect entry values 2017-02-04 13:26:59 +01:00
reaperrr
484dd20f28 Merge pull request #12683 from abcdefg30/AAOffset
Fix the LocalOffset of the AA Gun
2017-02-04 12:48:01 +01:00
reaperrr
cfbc465040 Make spicebloom.spawnpoint more visible in editor 2017-02-04 12:31:22 +01:00
reaperrr
8fd83e5134 Fix spice bloom and spice bloom spawner health radii 2017-02-04 12:31:20 +01:00
reaperrr
76f8fe02e2 Refactor SpiceBloom
- Remove SpiceBloom.RespawnDelay

It is basically redundant (giving the spice bloom spawner a longer
self-kill delay at yaml level has the same effect) and uses the savegame-blocking DelayedAction, so just removing it is the cleanest solution.

- Rename SpiceBloom GrowthDelay to Lifetime

- Refactor spicebloom.spawnpoint to not use SpiceBloom trait and make it visible in editor with corresponding tooltip.
2017-02-04 12:31:19 +01:00
reaperrr
0a53a2022e Make SpiceBloom interfaces explicit 2017-02-04 12:31:17 +01:00
reaperrr
977cc0e367 Add Delay field to KillsSelf 2017-02-04 12:31:15 +01:00
reaperrr
e23a866979 Move RandomDelay from AmbientSound to Util 2017-02-04 12:31:11 +01:00
Mustafa Alperen Seki
fcba36cd31 Fix Tiles 58, 365, 366 and 368 2017-02-04 10:12:55 +02:00
abcdefg30
a413cc81ea Merge pull request #12605 from reaperrr/ts-weapon-inheritance
Introduce TargetDamageWarhead + some TS weapon fixes
2017-02-04 00:59:14 +01:00
abcdefg30
e1121e6cbe Fix the muzzle sequence offset of the AA Gun (set it to 0,0) 2017-02-04 00:26:16 +01:00
abcdefg30
d31227793e Fix the LocalOffset of the AA Gun 2017-02-03 23:51:19 +01:00
Paul Chote
958d1cd365 Merge pull request #12671 from abc013/renameUpgradeOverlay
Changed 'UpgradeOverlay' to 'WithColoredOverlay'
2017-02-03 22:14:58 +00:00
abcdefg30
3cffbe7d1e Merge pull request #12672 from pchote/fix-ambient-sound
Fix and improve AmbientSound trait
2017-02-03 23:10:28 +01:00
Paul Chote
647ee841b4 Overhaul AmbientSound trait. 2017-02-03 22:01:12 +00:00
Paul Chote
a880562b4b Add support for moving ISounds after creation. 2017-02-03 21:59:32 +00:00
Paul Chote
61050e77f6 Fix PlayLooped ignoring world position. 2017-02-03 21:59:32 +00:00
abcdefg30
0074eb5202 Merge pull request #12678 from reaperrr/merge-ts-into-cnc
Merge Mods.TS into Mods.Cnc
2017-02-03 22:55:52 +01:00
abc013
851c8e6075 Changed 'UpgradeOverlay' to 'WithColoredOverlay' 2017-02-03 18:09:56 +01:00
reaperrr
dfe14b0994 Merge pull request #12666 from Phrohdoh/damagedbyterrain-respect-tunnels
TS DamagedByTerrain and ^DamagedByVeins: Don't damage actors in tunnels
2017-02-03 09:53:11 +01:00
reaperrr
a006b02240 Merge pull request #12657 from pchote/skip-stacked-levels
Support skipping stacked condition levels.
2017-02-03 09:47:21 +01:00
reaperrr
709e2a26e1 Merge Mods.TS into Mods.Cnc 2017-02-02 21:20:31 +01:00
reaperrr
940cf67da4 Merge pull request #12653 from MustaphaTR/d2k-fix-618
D2K - Fix tiles 251, 306, 435 and 618
2017-02-02 20:52:25 +01:00
reaperrr
db04234062 Remove dead code from AnimatedBeacon
This was simply forgotten to be removed by https://github.com/OpenRA/OpenRA/pull/12309
2017-02-02 19:44:30 +01:00
reaperrr
2ee47ff5cf Fix Falloff and Spread of TS missiles 2017-02-02 19:32:16 +01:00
reaperrr
2ff745672c Use inheritance in TS smallguns.yaml
- using InstantHit projectile with default Blockable: false is intentional (matches original)
- default Spread and Falloff changes are intentional
- removing AA-capability from HarpyClaw is intentional
- adding 'piff' to Sniper is intentional
- Spread change to Sniper is intentional
2017-02-02 19:32:15 +01:00
reaperrr
715d88f86b Fix RPGTower prone damage 2017-02-02 19:32:11 +01:00
reaperrr
c90f573b77 Move up RPGTower weapon for more consistent order 2017-02-02 19:32:09 +01:00
reaperrr
797465e613 Use inheritance in TS ballisticweapons.yaml
Notes:
- adding alpha transparency to explosions is intentional
- making 120mm not blockable is intentional
- implicitly changing LaunchAngle of RPGTower to 75 is intentional
- Spread changes to 155mm and Grenade are intentional
- Falloff changes are intentional
- Prone70Percent on Grenade is intentional
2017-02-02 19:32:07 +01:00
reaperrr
30690fbb68 Use Inheritance in TS energyweapons.yaml
Notes:
- changing Proton smudge from MediumScorch to SmallScorch is intentional
- InfDeath on LtRail was bit-rot
- RangeLimit on Proton was bit-rot
- Gave CyCannon a higher RangeLimit for easier hits on moving targets
2017-02-02 19:32:06 +01:00
Mustafa Alperen Seki
d85526d5d2 Fix tiles 251, 306, 435 and 618. 2017-02-02 08:26:59 +02:00
Matthias Mailänder
cb1f42db83 Merge pull request #12670 from reaperrr/prodTabs-to-common
Move ProductionTabsLogic to Mods.Common
2017-02-01 21:58:44 +01:00
RoosterDragon
87040a3cf5 Merge pull request #12643 from pchote/battlefield-control
Replace "Debug" prefix with "Battlefield Control" for gameplay notifications.
2017-02-01 19:18:47 +00:00
reaperrr
76f961e39e Move ProductionTabsLogic to Mods.Common 2017-02-01 19:58:21 +01:00
RoosterDragon
cf2336793a Merge pull request #12318 from cjshmyr/fix-12271
ScrollPanelWidget - Fix frame end task race condition
2017-02-01 18:56:42 +00:00
Taryn Hill
be8c7827a7 Don't require a manual 'make dependencies' by default 2017-02-01 11:14:01 -06:00
Taryn Hill
77a709a325 Merge pull request #12667 from glenlife/patch-1
Update AUTHORS
2017-02-01 09:23:28 -06:00
Glen
16a9db905b Update AUTHORS
(changed username)
2017-01-31 21:10:32 -06:00
reaperrr
77c96db768 Merge pull request #12647 from abcdefg30/mercFlag
Fix the mercenary faction having no valid flag
2017-01-31 20:01:03 +01:00
Taryn Hill
225619efe8 TS: Don't harm flying jumpjets via DamagedByTerrain 2017-01-31 10:35:50 -06:00
Taryn Hill
82f44b00d2 Add TunnelCondition to ^Visceroid's Mobile trait 2017-01-31 10:31:12 -06:00
Taryn Hill
5a13ea3366 TS' ^DamagedByVeins: Disable LeavesTrails if inside of a tunnel 2017-01-31 09:36:18 -06:00
Taryn Hill
4bd6bb0b21 TS: Don't heal actors on tiberium if they are in a tunnel 2017-01-31 09:36:01 -06:00
Taryn Hill
7eab7dfad9 TS: Do not do terrain/vein damage to actors inside of tunnels 2017-01-31 08:46:09 -06:00
Taryn Hill
1fe317dd57 Fix a typo in MobileInfo 2017-01-31 08:46:08 -06:00
abcdefg30
ed39e512dd Merge pull request #12655 from MustaphaTR/d2k-thumper-voice
D2K - Change Thumper's Voice to normal Inf. Voice
2017-01-31 15:12:37 +01:00
abcdefg30
1567ff2ab7 Merge pull request #12660 from ltem/fix-identation
Fixes an error of pr 12658
2017-01-31 15:03:23 +01:00
Mustafa Alperen Seki
c1817005ab Change Thumper's Voice to normal Inf. Voice 2017-01-31 09:31:27 +02:00
Mustafa Alperen Seki
f585b94b4c Add Ordos 1a 2017-01-31 08:58:14 +02:00
RoosterDragon
aca9d60128 Merge pull request #12577 from pchote/movement-layers
Implement tunnels, elevated bridges, jumpjet and subterranean units.
2017-01-30 21:38:09 +00:00
ltem
b8ec633514 Fixes an error of pr 12658 2017-01-30 22:26:00 +01:00
reaperrr
e2b0c5bce4 Return empty Enumerable immediately in InstantHit
...rather than allocating a compiler generated enumerable via 'yield'.
2017-01-30 21:22:12 +01:00
reaperrr
c057acba7a Use TargetDamage for D2k WormJaw 2017-01-30 21:22:11 +01:00
reaperrr
416857c6ea Various misc TS weapon fixes
- Falloff of FireballLauncher and Bomb now more like in TS
- Spread of FireballLauncher now matches TS
- Spread of Bomb is now closer to TS (behaviour not entirely identical, because Spread was cell-based and had a ceiling at ~1.5 cells away from impact cell).
- Bomb now destroys Tiberium like in TS
- Visceroid now uses TargetDamage warhead to damage target directly
- Veins now use TargetDamage warhead to damage target directly
2017-01-30 21:22:09 +01:00
reaperrr
ce5c11d4f0 Use inheritance and TargetDamageWH for TS heal weapons 2017-01-30 21:22:07 +01:00
reaperrr
a8f7b0e2de Add TargetDamageWarhead
Only deals damage to the actor that was targeted by the carrying
projectile.

Currently only supported by InstantHit projectile.
2017-01-30 21:22:06 +01:00
reaperrr
090c015b27 Pass InstantHit target directly if inaccuracy is zero
This is required to make the TargetDamage warhead deal damage only to a specific target.
2017-01-30 21:22:04 +01:00
reaperrr
e2419f4faa Merge pull request #12654 from MustaphaTR/d2k-engineer-passenger-color
D2K - Remove PipType from Engineer and Thumper
2017-01-30 20:31:37 +01:00
reaperrr
ee33fb3254 Merge pull request #12658 from ltem/d2k-additional-faction-description
D2K faction specific information
2017-01-30 20:29:32 +01:00
ltem
ea9141270f Added additional faction specific information 2017-01-30 20:18:54 +01:00
abcdefg30
f5a8afa506 Merge pull request #12644 from MustaphaTR/d2k-fremen-desc
D2K - Some description work
2017-01-30 20:04:48 +01:00
Paul Chote
47a013e6c2 Support empty strings to skip condition levels. 2017-01-30 18:22:44 +00:00
Paul Chote
27cd31879f Add FieldLoader.AllowEmptyEntries attribute. 2017-01-30 18:22:44 +00:00
Mustafa Alperen Seki
ed2d98b275 Edit some D2K descriptions 2017-01-30 17:18:10 +02:00
Mustafa Alperen Seki
bc96efa3fa Remove PipType from Engineer and Thumper 2017-01-30 15:26:11 +02:00
abcdefg30
8b9f6f8e4e Update the chrome definitions of the smuggler, fremen and worm flags 2017-01-29 22:10:27 +01:00
abcdefg30
8afec71032 Add a definition for the mercenary flag to chrome.yaml 2017-01-29 22:09:30 +01:00
MustaphaTR
4c86475581 Add a new flag for the mercenary faction 2017-01-29 22:05:15 +01:00
Paul Chote
e1f7e5dac9 Replace "Debug" prefix with "Battlefield Control" for mute messages. 2017-01-29 18:59:57 +00:00
Paul Chote
f09b41b8b8 Replace "Debug" prefix with "Battlefield Control" for selection messages. 2017-01-29 18:59:57 +00:00
Paul Chote
7f694d2740 Replace "Debug" prefix with "Battlefield Control" for stance messages. 2017-01-29 18:59:57 +00:00
Paul Chote
aa0e65d425 Add SuppressNotifications flag for scripted maps. 2017-01-29 18:59:57 +00:00
Paul Chote
7a1d1092bd Replace "Debug" prefix with "Battlefield Control" for win/loss messages. 2017-01-29 18:59:56 +00:00
Paul Chote
22fad046a0 Fix units warping to 0,0 when doing a 180 degree turn. 2017-01-29 18:58:35 +00:00
Paul Chote
85630501e1 Work around lint test limitations. 2017-01-29 18:58:35 +00:00
Paul Chote
38bd88e874 Hook up elevated bridges in Drawbridges. 2017-01-29 18:58:35 +00:00
Paul Chote
c00af2a85b Hook up tunnels and elevated bridges in "A River Runs Near It". 2017-01-29 18:58:35 +00:00
Paul Chote
6f9a32ec3f Hook up bridges on Tread Lightly. 2017-01-29 18:58:34 +00:00
Paul Chote
d79b2c0869 Hook up tunnels on Hot Springs. 2017-01-29 18:58:34 +00:00
Paul Chote
4f41b6e9ce Implement elevated bridge placeholders. 2017-01-29 18:58:34 +00:00
Paul Chote
5c77c0dc28 Implement jumpjets. 2017-01-29 18:58:34 +00:00
Paul Chote
572c1cb89f Implement subterranean units. 2017-01-29 18:58:33 +00:00
Paul Chote
bb5f25e0dc Disable actor sight while inside tunnels. 2017-01-29 18:58:33 +00:00
Paul Chote
41213ad2d1 Implement tunnels. 2017-01-29 18:58:33 +00:00
Paul Chote
38ea7dbc5a Fix units climbing tunnel faces. 2017-01-29 18:58:33 +00:00
Paul Chote
2bd5a392d1 Add plumbing for custom movement layers. 2017-01-29 18:58:33 +00:00
Paul Chote
695a572dc3 Move ActorMap to mod code. 2017-01-29 18:57:36 +00:00
Paul Chote
a518f07e25 Remove CPos.Max/Min. 2017-01-29 18:57:36 +00:00
Paul Chote
171e558c0a Remove damaged bridge artwork from random tile selection. 2017-01-29 18:57:36 +00:00
Paul Chote
ba9927d34e Add Condition support to WithDeathAnimation / DeathSounds. 2017-01-29 18:57:36 +00:00
Paul Chote
7249ca7f88 Add cell height display to map editor. 2017-01-29 18:57:35 +00:00
Paul Chote
544e40ecab Fix CliffBackImpassibilityLayer trait name. 2017-01-29 18:57:35 +00:00
Oliver Brakmann
fe7736cee8 Merge pull request #12646 from pchote/asset-error
Simplify asset browser error message display.
2017-01-29 19:47:07 +01:00
Oliver Brakmann
3011cea11d Merge pull request #12641 from MustaphaTR/d2k-fix-mercenary-hfac-offset
D2K - Fix Mercenary Heavy Factory offset
2017-01-29 19:40:33 +01:00
Curtis Shmyr
33e1a6b2dd Fix frame end task race condition in ScrollPanelWidget 2017-01-29 17:49:40 +00:00
Matthias Mailänder
ab771f3171 Merge pull request #12645 from pchote/harvester-cost
Unhardcode harvester queue behaviour parameters.
2017-01-29 18:46:27 +01:00
Paul Chote
9a1efbc08b Simplify asset browser error message display. 2017-01-29 17:34:36 +00:00
Paul Chote
875d215662 Unhardcode harvester queue behaviour parameters. 2017-01-29 17:20:28 +00:00
Paul Chote
213b3dad2c Merge pull request #12293 from abcdefg30/swallowNull
Fix null being passed through the INotifyAttack interface
2017-01-29 16:32:35 +00:00
Mustafa Alperen Seki
81b1373db0 Fix Mercenary Heavy Factory offset 2017-01-29 18:28:49 +02:00
reaperrr
9d7413ab3d Merge pull request #12461 from obrakmann/activities-pt2
Activities re-write, part 2 - Child and composite activities
2017-01-29 16:02:21 +01:00
reaperrr
3e0db5cd2a Merge pull request #12623 from MustaphaTR/d2k-reorder-yaml
D2K - Reorder rule files on mod.yaml
2017-01-29 15:26:11 +01:00
reaperrr
86771c1ff2 Use Inheritance in TS explosions.yaml
Notes:
- reduced explosion Spread is intentional (in TS, HE had a Spread step of 6 pixels)
- Falloff changes are intentional (in original TS, damage was halved every Spread step)
- effective damage reduction of UnitExplode is intentional (only grenadiers dealt heavy area damage, which isn't implemented yet)
2017-01-29 14:53:28 +01:00
abcdefg30
48cee8c426 Disable the SpreadDamageWarhead of WormJaw 2017-01-29 11:08:31 +01:00
abcdefg30
19549a9068 Fix null being passed through the INotifyAttack interface 2017-01-29 11:07:20 +01:00
reaperrr
892825aeb9 Merge pull request #12599 from RoosterDragon/allocs
Reduce ongoing allocations
2017-01-27 17:52:30 +01:00
abcdefg30
0f11926305 Merge pull request #12625 from pchote/fix-timed-conditions
Fix timed external conditions being rejected instead of reset.
2017-01-27 13:53:00 +01:00
abcdefg30
9240d53228 Merge pull request #12615 from pchote/fix-yaml-merging-again
Fix yaml merging (again).
2017-01-27 13:39:49 +01:00
Paul Chote
255214e77c Fix timed external conditions being rejected instead of reset. 2017-01-26 22:52:26 +00:00
Paul Chote
33210ad818 Merge pull request #12631 from drscream/fix/liblua-lookup-smartos
Lookup for liblua in /opt/local/lib
2017-01-26 22:47:46 +00:00
abcdefg30
77663ba2d6 Merge pull request #12624 from pchote/fix-ref-sell
Only remove resources when a silo/refinery is killed.
2017-01-26 18:16:50 +01:00
abcdefg30
5496c9be00 Merge pull request #12627 from GraionDilach/veins-fix
Fix vein attack animation moving along with target.
2017-01-26 18:15:55 +01:00
Paul Chote
5377d70f92 Style fixes. 2017-01-26 17:27:13 +01:00
abcdefg30
5ff47162ec Merge pull request #12513 from reaperrr/cnc-warhead-saving
Some minor TD weapon yamls restructuring
2017-01-26 17:22:00 +01:00
Thomas Merkel
b4cdf18367 Lookup for liblua in /opt/local/lib which is required to work on SmartOS with pkgsrc
We need to lookup also for liblua at /opt/local/lib which is used as PREFIX in pkgsrc on SmartOS.
2017-01-26 13:17:06 +01:00
Zimmermann Gyula
cc71582419 Fix vein attack animation moving along with target. 2017-01-26 11:01:36 +01:00
Zimmermann Gyula
8e9370054d Add a disable option to LeavesTrails->StartDelay via negative values. 2017-01-26 11:01:35 +01:00
Paul Chote
3b4f515e2a Only remove resources when a silo/refinery is killed. 2017-01-25 20:07:15 +00:00
RoosterDragon
6a0b993fa2 Remove attackBases member from AutoTarget.
We can use the activeAttackBases member everywhere.
2017-01-25 18:29:33 +00:00
reaperrr
2760829353 Rename TD largecaliber.yaml to ballistics.yaml
Mostly because Grenade was added to it.
2017-01-25 18:57:58 +01:00
reaperrr
5f6a350d41 Make TD Chemspray inherit ^FlameWeapon
Results in a small reduction of yaml lines and makes it easier to make
across-the-board changes in the future.
2017-01-25 18:50:43 +01:00
reaperrr
7496bfff7c Move TD TiberiumExplosion to explosions.yaml 2017-01-25 18:50:42 +01:00
abcdefg30
248d9df3ab Merge pull request #12622 from MustaphaTR/d2k-ai-building
D2K - Some AI Fixes
2017-01-25 15:50:18 +01:00
abcdefg30
2eb8718938 Merge pull request #12618 from MustaphaTR/d2k-ai-fremen
D2K - Make AI able to use Fremen SW.
2017-01-25 15:45:26 +01:00
Mustafa Alperen Seki
ec4f79f372 Reorder D2K rule files on mod.yaml
This effects the order on map editor.
2017-01-25 11:33:18 +02:00
Mustafa Alperen Seki
86180adc13 Some AI fixes and reorder Structures on AI.yaml 2017-01-25 11:20:56 +02:00
Paul Chote
b803034cef Resolve yaml removals in weapon definitions. 2017-01-24 22:19:17 +00:00
abcdefg30
f6c66c4f63 Merge pull request #12598 from MustaphaTR/d2k-str-repair-and-damage
D2K - Fix Low Repair and Terrain Damage.
2017-01-24 20:05:45 +01:00
abcdefg30
68dd2b57fc Merge pull request #12621 from MustaphaTR/d2k-debris-bounce
D2K - Add bouncing to Debris.
2017-01-24 20:03:28 +01:00
abcdefg30
f3e58056fa Merge pull request #12614 from reaperrr/prep-slim-ra-weapons4-other
Prepare RA weapons for inheritance part 4 - other weapons
2017-01-24 16:45:13 +01:00
abcdefg30
83d6100c18 Merge pull request #12619 from MustaphaTR/d2k-orni-target-types2
D2K - Remove the unused "TargetTypes: Air" from ornithopter
2017-01-24 15:49:01 +01:00
abcdefg30
b053da6e63 Merge pull request #12520 from reaperrr/prep-slim-ra-weapons
Prepare for slimming RA weapon yamls Part 1 - explosions
2017-01-24 15:47:17 +01:00
Mustafa Alperen Seki
4601331f7f Add bouncing to D2K Debris. 2017-01-24 15:04:29 +02:00
Mustafa Alperen Seki
5c24512735 Make D2K AI able to use Fremen SW. 2017-01-24 14:13:54 +02:00
Mustafa Alperen Seki
61b0d46155 Remove unused "TargetTypes: Air" from ornithopter 2017-01-24 12:33:20 +02:00
abcdefg30
274cf14c6f Merge pull request #12613 from reaperrr/prep-slim-ra-weapons3-misl
Prepare RA weapons for inheritance part 3 - Missiles
2017-01-23 23:01:17 +01:00
abcdefg30
8910a8aec5 Merge pull request #12612 from reaperrr/prep-slim-ra-weapons2-small
Prepare RA weapons for inheritance part 2 - small arms
2017-01-23 22:59:48 +01:00
Paul Chote
2be8cedddf Add StringComparison arguments to StartsWith. 2017-01-23 20:22:46 +00:00
reaperrr
9f9bda9634 Move FLAK weapons up in RA smallcaliber.yaml 2017-01-23 21:19:28 +01:00
reaperrr
decf2150a7 Move RA Colt45 down inside smallcaliber.yaml 2017-01-23 21:19:27 +01:00
reaperrr
58a79162f5 Remove watersplash from RA Napalm bombs
They are rarely used anyway, and this allows the weapon to make use of inheritance more easily later on.
2017-01-23 21:17:20 +01:00
reaperrr
b57411b0f6 Move RA Grenade and DepthCharge to largecaliber.yaml 2017-01-23 21:17:18 +01:00
reaperrr
ce41a037ee Move APTusk up in RA missiles.yaml 2017-01-23 21:14:53 +01:00
reaperrr
319d53990a Move SubMissiles down in RA missiles.yaml 2017-01-23 21:14:51 +01:00
reaperrr
3c2fe1e1a7 RA missile warhead naming fixes
To make inheritance easier later on.
2017-01-23 21:14:50 +01:00
reaperrr
6fe223ba0e Streamline cosmetic RA building explosions 2017-01-23 21:11:00 +01:00
reaperrr
12b9c97f0b Rename and in a few cases move around warheads in RA explosions.yaml
To make inheriting easier down the road.
2017-01-23 21:11:00 +01:00
reaperrr
e75e6ce614 Move nuke explosions to end of RA explosions.yaml 2017-01-23 21:11:00 +01:00
reaperrr
9d62c1a1d6 Merge pull request #12610 from obrakmann/sysinfo-64bit
Add OS bitness to sysinfo query
2017-01-23 20:49:50 +01:00
Paul Chote
f4bcf79e7c Merge pull request #12524 from paulvt/deb-packaging-lintian-clean
Debian packaging lintian clean
2017-01-23 18:20:10 +00:00
abcdefg30
d165523072 Merge pull request #12608 from MustaphaTR/d2k-crate-terrain-types
D2K - Add more tile types to possible places Crates can spawn
2017-01-23 13:49:31 +01:00
Mustafa Alperen Seki
695b6e5c9a Add Transition, Spice and Concrete to Crate's TerrainTypes 2017-01-23 07:53:08 +02:00
Oliver Brakmann
53c037aa53 Add OS bitness to sysinfo query 2017-01-22 21:36:32 +01:00
Oliver Brakmann
6177855e20 Merge pull request #12607 from MustaphaTR/d2k-fix-carryall-on-concrete
D2K - Fix Carryalls can't land on Concrete
2017-01-22 21:07:11 +01:00
Oliver Brakmann
9993a235a7 Convert ResupplyAircraft into a CompositeActivity 2017-01-22 20:42:19 +01:00
Oliver Brakmann
9b0780e87c Make FlyAttack use child activities 2017-01-22 20:41:41 +01:00
Oliver Brakmann
e49b3d6458 Adjust existing activities for changed NextActivity semantics
To make sure existing checks against NextActivity don't check the parent activity by mistake
2017-01-22 20:41:37 +01:00
Paul van Tilburg
17617334dd Nothing should have group writable permissions
These might occur due to difference in umask values.
2017-01-22 20:41:19 +01:00
Oliver Brakmann
4105f9ed22 Add a debugging helper to print the activity tree 2017-01-22 20:39:43 +01:00
Oliver Brakmann
581640c4d4 Add a 'Canceled' activity state 2017-01-22 20:39:40 +01:00
Oliver Brakmann
660124156f Add built-in support for child and composite activities 2017-01-22 20:39:17 +01:00
Mustafa Alperen Seki
bcee1fafd8 Add "Concrete" to Carryall's "LandableTerrainTypes:" 2017-01-22 20:31:59 +02:00
abcdefg30
e489211434 Merge pull request #12481 from reaperrr/rem-runafterdelay
Remove Game.RunAfterDelay from SwallowActor
2017-01-22 17:54:16 +01:00
reaperrr
d05d7a6944 Remove Game.RunAfterDelay from SwallowActor
RunAfterDelay might be potentially problematic for savegame support.
2017-01-22 17:41:55 +01:00
reaperrr
42df24a18a Introduce MapNotificationEffect 2017-01-22 17:41:55 +01:00
reaperrr
c470e04988 Merge pull request #12566 from reaperrr/ts-weapons-misc1
Various minor TS weapon cleanups
2017-01-22 16:40:41 +01:00
reaperrr
e4fd10e46b Merge pull request #12603 from reaperrr/fix-d2k-spicebloom-spawns
Fix spicebloom spawns on all older D2k maps
2017-01-22 16:38:23 +01:00
reaperrr
d435cbc0c2 Fix Ion Cannon targeting to allow shooting at water 2017-01-22 12:30:38 +01:00
reaperrr
489fb91f26 Remove TS bombsandgrenades.yaml and move its weapons elsewhere
Grenade and RPGTower weapon to ballisticweapons.yaml, Bomb to otherweapons.yaml
2017-01-22 12:30:38 +01:00
reaperrr
68e45f7c67 Rename TS largeguns.yaml to ballisticweapons.yaml 2017-01-22 12:27:48 +01:00
reaperrr
a41cfc50a8 Enable water splash for TS AA missile
On the unlikely off chance that the missile might fall into water.
2017-01-22 12:27:48 +01:00
reaperrr
bbff2b3fd4 Remove unnecessary smudge warhead removals
The smudge WH code now exits early when exploding above ground, so this is no longer necessary.
Also renamed the default smudge WH identifier since the number is (currently) no longer correct and not necessary, either.
2017-01-22 12:27:48 +01:00
reaperrr
2036ed55d7 Remove air-only explosions from TS missiles
The original didn't differentiate, and the audiovisual contrast is also a bit too strong (and the air explosion sound was a bit annoying).
2017-01-22 12:27:48 +01:00
reaperrr
a9d8cd58c5 Replace pre-placed spiceblooms with spawners on all D2k maps
Spice Blooms are not supposed to grow on cells occupied with spice, so it's better to use the spicebloom.spawnpoint actor instead as most of them are placed on cells initially covered by spice.
2017-01-22 12:10:38 +01:00
reaperrr
c80072e7f3 Minor d2k yaml style fixes 2017-01-22 12:10:36 +01:00
abcdefg30
b5944fe1a7 Merge pull request #12515 from reaperrr/slim-d2k-weapons
Slim down D2k weapon yamls
2017-01-22 00:06:43 +01:00
abcdefg30
d8c154a772 Merge pull request #12546 from Mailaender/sdl2-2.0.5
Updated Windows SDL2 to version 2.0.5
2017-01-21 23:46:47 +01:00
Oliver Brakmann
c5cf787b84 Merge pull request #12501 from pchote/osx-retina
Add HiDPI support for OSX/Windows/Linux
2017-01-21 22:54:15 +01:00
Oliver Brakmann
145fd2eed0 Merge pull request #12571 from reaperrr/bullet-bounce
Implement bullet bouncing logic
2017-01-21 22:06:23 +01:00
Oliver Brakmann
05475d752a Merge pull request #12503 from pchote/radarjammer
Migrate ProvidesRadar from IDisable to conditions.
2017-01-21 20:55:37 +01:00
Oliver Brakmann
e5dda218ea Merge pull request #12540 from reaperrr/takeovers/minelayer-merge
Merge RA minelayers
2017-01-21 19:51:29 +01:00
Oliver Brakmann
0dfbd46b1f Let activities know when they are being run for the first or last time 2017-01-21 18:37:00 +01:00
Paul Chote
85053d8d59 Merge pull request #12601 from obrakmann/activities-pt1.5
Rename existing activity states
2017-01-21 17:32:18 +00:00
Paul Chote
1f44e91746 Migrate ProvidesRadar to conditions and remove JamsRadar. 2017-01-21 17:24:54 +00:00
Paul Chote
18d2454306 Pixel double hardware cursors on non-OSX. 2017-01-21 11:00:00 +00:00
Paul Chote
fb451fb203 Add an OPENRA_DISPLAY_SCALE environment variable for linux. 2017-01-21 11:00:00 +00:00
Paul Chote
87b894ad8e Add support for the windows DPI scaling. 2017-01-21 11:00:00 +00:00
Paul Chote
5e7c816257 Add support for font scaling. 2017-01-21 10:59:59 +00:00
Paul Chote
6599aeb035 Add support for retina displays on OSX. 2017-01-21 10:59:59 +00:00
Paul Chote
951ce92fcc Update to new OSX launcher snapshot. 2017-01-21 10:59:59 +00:00
Paul Chote
75c2b117d0 Update to new SDL2-CS snapshot. 2017-01-21 10:59:59 +00:00
reaperrr
bb972fa46d Merge pull request #12591 from MustaphaTR/d2k-map-tsimpo
D2K - Add Tsimpo to map pool.
2017-01-21 11:05:55 +01:00
reaperrr
67e225f12d Merge pull request #12590 from MustaphaTR/d2k-map-sietch-tabr
D2K - Add Sietch Tabr to map pool.
2017-01-21 11:05:36 +01:00
reaperrr
71dcc11e57 Merge pull request #12589 from MustaphaTR/d2k-map-habbanya-erg
D2K - Add Habbanya Erg to map pool.
2017-01-21 11:05:20 +01:00
reaperrr
a19cecd34e Merge pull request #12588 from MustaphaTR/d2k-map-habbanya-ridge
D2K - Add Habbanya Ridge to map pool.
2017-01-21 11:05:01 +01:00
Oliver Brakmann
683d3e747b Rename existing activity states 2017-01-20 22:16:25 +01:00
Mustafa Alperen Seki
9ab2d2d763 Added D2K map Sietch Tabr 2017-01-20 13:42:28 +02:00
Mustafa Alperen Seki
39a9ff318f Add D2K map Habbanya Ridge 2017-01-20 12:18:28 +02:00
reaperrr
42a8c83aad Make disc Grenade work like in original TS 2017-01-20 00:55:02 +01:00
reaperrr
2f0b1a16d0 Upgrade Bullet bounce logic with target checking 2017-01-20 00:55:00 +01:00
reaperrr
bf47affd2e Add bounce logic to Bullet
Allows Bullet projectiles to bounce off ground.
2017-01-20 00:54:59 +01:00
reaperrr
9dab3d57f4 Remove explosion sound from D2k gun turret weapon
It was soundless in the original, and the sound is a bit annoying, too.
2017-01-19 22:48:14 +01:00
reaperrr
c67735626c Slim down D2k CrateNuke via inheritance 2017-01-19 22:43:30 +01:00
reaperrr
983047f78a Slim down D2k missile weapons via inheritance 2017-01-19 22:43:30 +01:00
reaperrr
dc4073009d Slim down D2k miniguns via inheritance 2017-01-19 22:43:30 +01:00
reaperrr
b1aa1bc2c1 Slim down D2k cannon weapons via inheritance 2017-01-19 22:43:30 +01:00
reaperrr
6d56d3485b Slim down D2k Debris weapons via inheritance 2017-01-19 22:43:30 +01:00
reaperrr
fe7d785216 Merge pull request #12581 from MustaphaTR/d2k-crate
D2K - Changed Give Unit Crate Powerups a bit
2017-01-19 21:45:28 +01:00
RoosterDragon
867ad0fb32 Merge pull request #12572 from GraionDilach/experience-modifiers
Implement experience multipliers.
2017-01-19 20:42:48 +00:00
RoosterDragon
2428b967bf Cache coloring delegate in AppearsOnRadar.RadarSignatureCells. 2017-01-19 20:23:53 +00:00
RoosterDragon
9c59d7e255 Avoid delegate allocation in AutoTarget.
Extract a common method for deciding if an attack should happen, and avoid LINQ inside this method.
2017-01-19 20:23:52 +00:00
RoosterDragon
d1cc546f8d Avoid delegate allocation in RotationPaletteEffect.
Use a loop to perform the same check instead.
2017-01-19 20:23:50 +00:00
RoosterDragon
2239d6c88e Cache activeAttackBases query in AutoTarget. 2017-01-19 20:23:49 +00:00
RoosterDragon
a6af65f380 Avoid allocations in SelectionDecorations when we have nothing to draw.
Return an empty enumerable immediately rather than allocating a compiler generated enumerable via 'yield'. We can defer allocating these until we actually need to draw them.

Also, cache the trait lookup.
2017-01-19 20:23:48 +00:00
RoosterDragon
fbf6f45b11 Avoid boxing Booleans when dumping sync traits.
We can return the resulting strings directly.
2017-01-19 20:23:47 +00:00
Mustafa Alperen Seki
22043f4d57 Set "DamagedByTerrain"'s "Damage:" and "RepairStep" to 50. 2017-01-19 20:49:34 +02:00
Pavel Penev
9816052262 Merge pull request #12597 from Micr0Bit/patch-2
Update AUTHORS
2017-01-19 20:14:17 +02:00
Paul Chote
5f582a71b1 Merge pull request #12567 from reaperrr/fix-ts-critters
Fix TS critters
2017-01-18 21:04:45 +00:00
reaperrr
eec7333f45 Remove veterancy from Tiberian Fiend
Matches original game as well.
2017-01-18 21:58:07 +01:00
reaperrr
36920f2279 Fix adult visceroid armor type
As per original rules.ini.
2017-01-18 21:58:07 +01:00
reaperrr
676bb41bef Give adult visceroid a larger target scan radius 2017-01-18 21:58:07 +01:00
reaperrr
13faf5c54c Fix TS Tib Fiend and adult visceroid sight range
Otherwise they won't attack with shroud enabled!
2017-01-18 21:58:07 +01:00
reaperrr
5d410ee72e Fix critter owner on shipping maps 2017-01-18 21:58:07 +01:00
reaperrr
2da1304522 Fix large TS visceroid attack and enable attack animation
Unfortunately the animation sprite starts at an unusual facing, so we have to work around that by manually fixing the order. Using Combine is easier than listing a whopping 40 frames in the correct order.
2017-01-18 21:58:07 +01:00
reaperrr
b19d4c0f80 Fix and tweak TS critter wander delays
The property name has bit-rotted, and the values of the Tiberian Fiend were too low/short, resulting in too much hectic activity.
2017-01-18 21:56:36 +01:00
reaperrr
4206bdf491 Slightly tweak default TS infantry selection box 2017-01-18 21:56:36 +01:00
reaperrr
cef80b6c17 Fix Tiberian Fiend selection box 2017-01-18 21:56:36 +01:00
Micr0Bit
06c9494e2c Update AUTHORS 2017-01-18 21:35:25 +01:00
reaperrr
ac18ab5f3a Merge pull request #12557 from GraionDilach/reveal-on-fire
Implement reveal-on-fire.
2017-01-18 21:32:44 +01:00
reaperrr
da30dfc93d Merge pull request #12583 from MustaphaTR/d2k-sardaukar-tech-level
D2K - Change tech level of Sardaukar to medium
2017-01-18 20:44:19 +01:00
reaperrr
68a72a61bc Merge pull request #12565 from FrameLimiter/patch-1
Fixes Spy detection for Spies.
2017-01-18 12:28:14 +01:00
reaperrr
a8ca251e25 Move TD Grenade to largecaliber.yaml
This is more about making maintenance a little easier than logic. The file might get renamed to 'ballistic.yaml' at some point, though.
2017-01-17 22:31:56 +01:00
reaperrr
a9f1f371d8 Move TD Vulcan up for more consistent order 2017-01-17 22:31:55 +01:00
reaperrr
59619a4e0d Merge pull request #12568 from elena-v2/d2k-no-starport-toggle
Remove CanPowerDown from starports
2017-01-17 22:07:07 +01:00
reaperrr
e2fcbb1ad4 Merge pull request #12593 from MustaphaTR/d2k-fix-tile-443
D2K - Fix tile 443
2017-01-17 22:02:34 +01:00
Zimmermann Gyula
4bce601db2 Implement reveal-on-fire. 2017-01-17 18:59:07 +01:00
Mustafa Alperen Seki
8304807c1b Fix tile 443. 2017-01-16 18:35:19 +02:00
Mustafa Alperen Seki
2ab1659422 Add D2K map Habbanya Erg 2017-01-16 16:08:03 +02:00
Mustafa Alperen Seki
9bd65908b4 Add D2K map Tsimpo 2017-01-16 16:00:57 +02:00
abcdefg30
9a202015b0 Merge pull request #12584 from MustaphaTR/d2k-importer-spacebloom
D2K - Make map importer use spicebloom.spawnpoint instead of spicebloom
2017-01-15 22:14:53 +01:00
Zimmermann Gyula
1544f24663 Implement experience multipliers. 2017-01-15 20:33:26 +01:00
Mustafa Alperen Seki
a1d349ee38 Make map importer use spicebloom.spawnpoint instead of spicebloom 2017-01-15 20:17:50 +02:00
Mustafa Alperen Seki
4cf9fad639 Change tech level of Sardaukar to medium. 2017-01-15 20:15:08 +02:00
reaperrr
5ceee1d6fb Merge pull request #12562 from AoAGeneral/AoATD
TD Aircraft Speeds.
2017-01-15 14:16:31 +01:00
Mustafa Alperen Seki
fceab8b248 Changed D2K Give Unit Crate Powerups a bit 2017-01-15 13:40:29 +02:00
elena-v2
003772a7bf Remove CanPowerDown/RequiresPower from starports
Starports are production facilities and the ability to toggle their power
status conflicts with the expected behaviour from other official OpenRA
mods.
2017-01-12 10:47:20 -08:00
FrameLimiter
ef917588e4 Fixes Spy detection for Spies. 2017-01-11 14:13:00 -05:00
reaperrr
f72614f14f Merge pull request #12563 from FrameLimiter/bleed
RedEye Minimum Range.
2017-01-11 19:26:06 +01:00
reaperrr
e50a95002f Merge pull request #12561 from MustaphaTR/d2k-turret-capture-fix
D2K - Fix that Turrets are capturable.
2017-01-11 19:18:12 +01:00
FrameLimiter
9e2a1c01cd RedEye Minimum Range.
Fixes #12123
2017-01-10 17:56:15 -05:00
AoAGeneral
67117b1481 TD Aircraft Speeds.
Balancing out some of the small things that makes a big difference with the aircraft. Listings below:

Chinook:

Mobile speed increased from 140 to 150.

This is increasing because a number of vehicles catch up to these. (Bikes, APCs, buggies, humvees.)

Increasing the movement of this unit will help to outrun the APCs and other projectiles a little quicker. It also helps to compensate for travel distances. These units are only used in early game because of the enemies lack of AA. Increasing the speed will help their longevity.


Apache mobile speed decreased from 186 to 180.

This is done to prevent these units from chase killing Orcas as their machinegun fire is on point hits with minimal damage. HP remains the same (Orca 90 Apache 125). Orca being lighter in HP allows it to move more quickly while the apache can soak more damage. In air vs air battles the apache tends to win due to their guns vs slow missile fire.


Both Orca and Apache turnspeed increased from 4 to 7.

This is increased on both units because they take a full second before they are able to aim at targets leaving them stationary and taking hits. Increasing this speeds allows them to be what they are ment to be as hit and strike crafts. The turning speed also allows them to hit targets more effectively on the move.
2017-01-10 14:23:30 -08:00
Mustafa Alperen Seki
aea195dade Fix D2K Turrets are capturable. 2017-01-10 10:31:54 +02:00
reaperrr
e4f6fad7d2 Merge pull request #12547 from ltem/d2k-extended-upgradetooltips
D2k extended upgradetooltips
2017-01-08 21:03:49 +01:00
ltem
b1a1464505 Added Tooltip to (Large) Concrete Slab; Renamed IX Lab -> IX Research Center 2017-01-08 16:05:14 +01:00
Oliver Brakmann
bd3639e81d Merge pull request #12358 from reaperrr/cashtrickler-upgrade
Add upgrade support to CashTrickler and split off GivesCashOnCapture
2017-01-08 14:12:01 +01:00
reaperrr
8699d0fca3 Safeguard CashTrickler negative values
By making sure to never remove more cash than the player has.
2017-01-08 13:53:19 +01:00
reaperrr
7dcda5db30 CashTrickler style fixes and Period -> Interval rename 2017-01-08 13:53:17 +01:00
Zimmermann Gyula
bc1e2a7058 Revamp CashTrickler.
Added upgrade support.
Decoupled the capture bonus to a separate trait.
2017-01-08 13:53:16 +01:00
reaperrr
c76cc984dc Merge pull request #12548 from reaperrr/fix-d2k-trike-muzzle
Add InstantHit projectile and fix Trike/Raider muzzle flashes
2017-01-08 12:24:49 +01:00
Oliver Brakmann
023087d7c4 Merge pull request #12552 from abc013/betterNaval
Changed the Naval AI to build Service Depots
2017-01-07 20:08:50 +01:00
Oliver Brakmann
439b4b18cf Merge pull request #12550 from reaperrr/fix-ur-dates
Fix upgrade rule dates
2017-01-07 20:08:02 +01:00
reaperrr
b77b67e560 Fix Trike/Raider muzzle flashes
Armament requires a projectile to fire.
2017-01-07 15:12:20 +01:00
reaperrr
adfe78fca5 Add simple, invisible instant-hit projectile
For melee attacks, machine guns and so on.
2017-01-07 15:12:16 +01:00
abc013
0f1146a067 Changed the Naval AI to build Service Depots 2017-01-07 14:07:08 +01:00
reaperrr
4a6e378390 Fix upgrade rule dates
They were merged after prep was split off.
2017-01-07 13:20:22 +01:00
ltem
10ed0cb62f Enhancements for the upgrade-tooltips 2017-01-06 20:59:54 +01:00
ltem
8a07910627 Small format fix for combat tank tooltip 2017-01-06 20:59:54 +01:00
ltem
8887de5b55 Renamend Thumper -> Thumper Infantry 2017-01-06 20:59:54 +01:00
reaperrr
2b92daa955 Merge pull request #12322 from abc013/allies-06a
Added allies-06a to the Red Alert mod
2017-01-06 12:54:17 +01:00
abc013
52b7fc0329 Added allies-06a to the Red Alert mod 2017-01-06 12:42:20 +01:00
reaperrr
8f685ee849 Use FactionImages to give RA mine faction-specific appearance 2017-01-06 12:35:49 +01:00
reaperrr
3afbf8384b Merge pull request #12536 from AoAGeneral/AoATDGDNiceMeme
TD Balance Changes. NME.
2017-01-06 11:50:33 +01:00
Matthias Mailänder
d4079d1bd1 Update Windows SDL2 to version 2.0.5 2017-01-05 21:26:45 +01:00
Paul van Tilburg
55a17f6153 Add comments to the overrides; drop the missing manpage override
The missing openra-server manpage warning should not be overriden,
as the manpage should be there. (See also: #12525).
2017-01-05 20:38:35 +01:00
AoAGeneral
8266c96a38 Add detection to temple of Nod.
(Nice to have detection then stealthers sneaking by it)

artillery minimum range increase from 2c896 to 3c0.

mammoth tank HP increase from 800 to 870.
(Dies by medium tank spams and e3 a little to easily from recent changes. With a longer build time they fall prey to mass numbers.)

ion time increase from 3:00 to 4:30.
(Ion strikes go off a little to fast. Mammoth armies take about 2:00 to build back up. By the time base attacks happen close to 3:00)

nuke timer from 5 to 6.
(Because the nuke damage has been buffed)

nuke damage spread from 2c512 to 5c512.
(Nuke damage spread was to weak. Barely killing a power plant where it lands just a few cells away from base hit)

nuke spread damage increased from 100 to 110. (First spread modifier)
(See line above)

a10 timer increased from 3:30 to 4:00.
(Timer increased because they were going off a little to fast still. These planes kill infantry builds as it is.)

MSAM HP from 120 to 180.
(To weak vs air. Missiles drain takes a few seconds to reload and then sniped within that time. Specially since dedicated AA)

Commando weapon range increased from 6c0 to 8c0.
(They had the same range as e3 and minigunners were able to close distances on them extremely fast. Take note they shoot farther then their vision range.)

Commando weapon projectile speed increased from 1c682 to 5c682.
(This was super annoying. You fire a shot and the infantry doesn't die because bullet travel to slow. Increased this fixed the problem.)

Commando price increase from 1000 to 2000.
(Extremely cheap when buffed. Increased price to match their power.)

Commando build time increased from 24 to 32. (2000 Build duration)
(Build time a little to fast. Compensates this with multiple barracks.)

Husks interval timer increased from 2 to 6.
(Husks blow up to fast to capture anything. Kept on low timer to prevent vehicle block. Only possible way is to have an engineer in an APC ready. Which Nod is unable to have APCs.)

Bike damage increase from 30 to 31.
(HP changes on harvs, structures, and mammoth. A very small change leading to a decent buff. Granting a 2 damage increase with constant hits)

Chem damage vs none reduced from 100 to 70.
(Chems performing a little to well by themselves. Having mixed units is a better solution. IE: My recent flame tank chem trooper mix)

Chem damage vs armor increased from 50 to 75.
(Chems performed a little to weak vs armor. Doing less damage then infantry and getting squashed by medium tanks and light tanks. This will make players think twice about squashing tactics. Also more damage vs armored defenses.)

Grenadier accuracy reduced from 213 to 813. (Makes them miss a lot more).
(Grenadiers were to accurate and unable to kill infantry packs. Looking at CNC95 and RA in ORA they miss their targets as well. Having them miss spreads their AoE damage and able to take out infantry packs. Players maye want to think of spreading infantry when fighting grenadiers)

Flamer damage vs armor reduced from 20 to 10. (Flame infantry)
(To much damage to APCs and light tanks)

Flamer damage vs none increased from 100 to 110. (Flame infantry.)
(Made them stronger vs infantry to balance out vs chems. Makes them a strong viable choice.)

Harv build timer increase from 24 to 27. (1680 build timer)
(Harv spamming is like a disease. Its gotten to strong to quickly. Increasing their timer slightly also increases other viable builds.)

Harvester HP increase from 600 to 625.
(Both medium tanks and bikes doing a little to much damage. Compensates slightly for build timer)

Refinery power reduced from 50 to 40.
(Offers more build choices. Opening barracks becomes stronger then going strip/factory all the time. Both openings strong strats just requires scouting.)

Refinery sell no longer refunds.
(Includes with the harv spamming. Gave 250 back which counted towards buggy/bike money. IE: PP > Ref > Strip (Strip makes 2-3 buggies 2 bikes then a harv) > Ref (Sell ref gain harv) > Strip (Because power only 30) > PP

Refinery tiberium hold reduced from 2000 to 700.
(This has had no impact to force people to build silos. But it opts people to protect refineries rather then "Lost a ref. Meh. Got 3 others.". Losing a ref now loses earned money. If it holds money. Also prevents sell trick to save power.)

Silo hold increase from 2000 to 3000.
(Compensate for Refinery. Also has extra HP now. See below.)

AGT HP from 600 to 550.
(Way to strong when it came to units coming to these in mass amounts. Also hard for artillery units to shell due to small box size and HP pool.)

Light Tank price reduced from 700 to 650.
(700 was a bit to high. 650 seems to hit the right spot but left build time as is. 0:17)

Visceroid spawn reduce from 10 to 5.
(This was a weird one. Infantry dieing in tiberium was at a good spot. But for some reason when chems kill infantry it would create 2-3 visceroids. Then those visceroids would create 2-3 at a time. RNG issue so was reduced.)

Increase all building HP by 100.
(Help balance vs medium tanks, bikes, light tanks, chems, grenadiers, air units, and stealth tanks.)

Gun turret HP increase from 400 to 410.
(This is taking baby steps. I want them a little tougher vs medium tanks but not at the point of RA style. Same logic as obrakmann taking baby steps with MCV.)

Starting units adjusted.
(This created a big problem in competitive scenes. Having early units is good to prevent infantry rushes. But starting with a bike/apc while your opponent starts with a hummer/buggy is to off balancing.)

MCV build time decreased from 1:36 to 1:00. (3750)
(Price unchanged. Takes a little to long in team games and some 1v1 scenarios to get one built. Also now drains money faster to compensate)

Engineer HP increase from 25 to 30.
(Dies a little to quick hummers/buggies. Same kill time as minigunner (If takes a hit while standing)

APC HP increase from 210 to 215.
(These are dieing a little to fast and weak vs certian units. IE: buggies/hummers and bikes. Tested vs light tanks and more optimal. Baby steps.)

APC Damage vs light decreased from 105 to 100.
(I don't want them killing bikes to fast now that they are cheaper.)

APC cost decreased from 600 to 550.
(APCs for infantry builds as GDI was waaaaay to expensive. Having a slightly faster build timer of 0:14 instead of 0:15 will help too. Helps to withstand early onslaught of Nod. Keep note bikes still 0:12 timer)

(Created new Sam weapon Dragon from RA e3 AA. Reason: Shared weapon with AGT.)

Samsite range increased from 8c0 to 12c0.
(Dedicated AA. Keep note: Longer range = longer time to kill a unit and able to escape. Closer it is the faster air units die.)

Samsite spread damage decreased from 682 to 128.
(To much AoE damage)

Samsite range limit increased from 9c614 to 15co.
(Missiles would die out within its own range circle.)

Samsite reveal shroud decreased from 8c0 to 6c0.
(Prevents the RA logic of build an AA in front of your base and all good. You need units/structures to make good use of its range.)

Samsite now fires two shots at a time.
(Increases damage and intuitive to home base of CNC95.)

Recon Bike HP decreased from 120 to 110.
(Takes to long to kill these units when vs minigunners and light vehicle types. APCs taking to long to kill these.)

Airstrip/Weapon Factory power increased from 30 to 50.
(Increased like a disease. Nod players going with an extremely fast 4 strip build without com center. GDI maxing at 3 factories with non stop vehicles. Infantry became to weak.)

Communication Center power increased from 40 to 50.
(See above.)

APC movement speed increased from 128 to 132.
(A little to slow vs light tanks and dealing with buggies. Buggies being faster still they are able to get a few extra shots off. Provides better base entry.)

MRLS range reduced from 12c0 to 11c0.
(Out ranging Nod artillery. Extremely accurate as is and to strong vs several units. Shorter range allows faster vehicles to reach them better.)

MRLS damage vs none reduced from 35 to 25.
(To much damage vs infantry. Specially to e3.)

Obelisk power reduced from 150 to 90.
(Having to build an adv power plant after each Obelisk is put up is insane. Two Obelisk = 180 now and adv power plant is 200.)
2017-01-04 10:57:29 -08:00
Oliver Brakmann
27d45f890e Merge pull request #12533 from reaperrr/fix-air-smudges
Fix air explosions leaving smudges
2017-01-03 21:56:17 +01:00
roundowl
508038e3f3 Merges minelayers into single unit placing AT mines
AP minelayer is removed, AT minelayer is made generic and available to both factions. BuildPaletteOrder is pushed up to remove gap.
I didn't remove AP mine from weapons and explosions, because graphics are still there and may be used in future.
2017-01-03 19:54:08 +01:00
reaperrr
5e8a7e8147 Merge pull request #12535 from reaperrr/takeovers/11505fix
Add Stance check for engineer repair
2017-01-03 18:37:32 +01:00
reaperrr
51b05f2d88 Merge pull request #12534 from reaperrr/takeovers/d2kMenu
Tidied up d2k building build menu icon order
2017-01-03 18:34:06 +01:00
entropai
57e5bbb448 Stance modification for engineer repair 2017-01-02 19:36:00 +01:00
C. Helmig
f79e9a23f9 Removed unnecessary conyard prerequisites 2017-01-02 19:18:31 +01:00
abcdefg30
4bf53541f4 Tiedied the d2k building build menu icon order up 2017-01-02 19:17:08 +01:00
reaperrr
7e3e950b5d Fix air explosions leaving smudges
LeaveSmudgeWarhead now only spawns smudges if the explosion happened at or below a certein altitude.
2017-01-01 17:14:31 +01:00
Oliver Brakmann
285e9a8030 Merge pull request #12531 from Phrohdoh/happy-new-year-2017
Happy New Year 2017, everyone!
2017-01-01 15:30:33 +01:00
Taryn Hill
43317e0f5d Update copyright notice year to 2017 2016-12-31 23:46:13 -06:00
reaperrr
ab914b610b Merge pull request #11686 from Mailaender/zbstudio-lua-api
Added API and auto-complete description generator for ZeroBrane Studio
2016-12-31 12:00:04 +01:00
Paul van Tilburg
2dd6376a39 Leave the openra-server man page out for now; add an lintian override
See also issue #12525.
2016-12-30 15:56:57 +01:00
Paul van Tilburg
84c5a72986 Fix the issues with filenames for the md5sums
Lintian reported missing md5sums for all files under usr/ and reported the
existence of md5sums for all files under /usr that we're not in the
package.
2016-12-30 14:40:36 +01:00
Paul van Tilburg
41dfaaf564 Add a lintian override for the font duplication
This will probably never be fixed and the override is there to document
that this is ignored explicitly.
2016-12-30 14:39:21 +01:00
Paul van Tilburg
2ae5dba961 Fix up the changelog
Just use a dummy changelog entry about the release and fix
a syntax error in the entry footer.

The changelog should not contain the contents of Changelog.md as this
results in an unparsable Debian changelog.  The game's changelog is already
available as CHANGELOG.html in /usr/share/doc/openra.
2016-12-30 14:37:03 +01:00
Paul van Tilburg
0210711fad Create a link for the OpenRA server manpage; compress the normal one
The command-line arguments of the openra-server executable are the
same as for openra.
2016-12-30 14:35:56 +01:00
Paul van Tilburg
53c67bc8c2 Fix permissions of the DLL files and game executables
The DLL files should not be exectable, nor should the game executables
be writeable by the group.
2016-12-30 14:34:34 +01:00
Paul van Tilburg
c614c7e730 Fix empty paragraph in description; remove article from short description 2016-12-30 14:32:25 +01:00
reaperrr
5d9ad47a67 Merge pull request #12511 from abcdefg30/onAllMTMsRemoved
Fix a potential crash in Monster Tank Madness
2016-12-28 22:36:15 +01:00
reaperrr
bdb4d642ab Merge pull request #12505 from obrakmann/fix-open.nat-nuget-borkage
Work around Open.Nat installation by nuget failing randomly
2016-12-28 21:01:30 +01:00
reaperrr
faa2862207 Merge pull request #12491 from pchote/force-dotnet
Abort installation if .NET 4.5 isn't installed.
2016-12-28 20:51:43 +01:00
Oliver Brakmann
137359a097 Merge pull request #12355 from reaperrr/rem-nuke-DelAct
Remove DelayedAction from NukePower
2016-12-28 18:56:33 +01:00
reaperrr
f6924d740e Add RevealGeneratedShroud toggle to NukePower
To give modders a choice.
2016-12-28 18:45:50 +01:00
reaperrr
e582ba759f NukePower CameraActor removal upgrade rule 2016-12-28 18:45:49 +01:00
reaperrr
ec5c3a710d NukePower description style fixes 2016-12-28 18:45:47 +01:00
reaperrr
079908d238 Make NukePower use RevealShroudEffect instead of camera actor
Additionally, remove the DelayedAction and let the beacon remove itself
instead.
2016-12-28 18:45:45 +01:00
reaperrr
79add6113c Add RevealShroudEffect
This allows support powers etc. to reveal shroud for customizable amount
of ticks and after customizable delay, instead of spawning camera actors.
2016-12-28 18:45:44 +01:00
reaperrr
1a0f72d2b0 Merge pull request #12484 from pchote/installer-fixes
Fix asset installation on 32 bit windows and with original RA CDs.
2016-12-28 16:53:15 +01:00
reaperrr
72ae03ff81 Merge pull request #12508 from Mailaender/ts-map-forest-fires
Added Tiberian Sun map Forest Fires
2016-12-28 15:31:51 +01:00
reaperrr
aa53553cdf Add BeaconDelay to SupportPower 2016-12-27 17:13:54 +01:00
reaperrr
871576b300 Add delay and full duration support to beacons
Previously, support power beacons were hardcoded to unlimited duration and
then cleaned up directly by the support power. This is problematic if we
want the beacon to remove itself after a certain delay, though.
2016-12-27 17:13:53 +01:00
abcdefg30
846731ef20 Fix a potential crash in Monster Tank Madness 2016-12-27 01:13:16 +01:00
Matthias Mailänder
538047c263 Add Tiberian Sun map Forest Fires. 2016-12-25 06:11:55 +01:00
Oliver Brakmann
86785d5aba Work around Open.Nat installation by nuget failing randomly 2016-12-24 18:42:20 +01:00
Oliver Brakmann
d21b805012 Merge pull request #12497 from pchote/condition-manager
Complete Upgrades -> Condition transition.
2016-12-24 13:43:15 +01:00
Oliver Brakmann
8977a5651f Merge pull request #12499 from RoosterDragon/sound-dispose
Dispose some sound streams
2016-12-24 13:26:51 +01:00
Paul Chote
2322d40395 Renamed Upgrades directory to Conditions. 2016-12-23 23:29:40 +00:00
Paul Chote
268ed016ab Rename UpgradableTrait to ConditionalTrait. 2016-12-23 23:28:34 +00:00
RoosterDragon
226c0a050a Dispose some sound streams. 2016-12-23 19:37:17 +00:00
Oliver Brakmann
53bd29351b Merge pull request #12470 from SoScared/AlliedDefenseNerf
[RA] [Balance] Allied Defensive Structures - Increase Cost & Production Time.
2016-12-23 17:32:17 +01:00
Paul Chote
d0270ab866 Rename comments and documentation. 2016-12-23 15:17:02 +00:00
Paul Chote
152ae13cea Rename SelectUpgradeTarget. 2016-12-23 15:14:36 +00:00
Paul Chote
c8afbb16ba Rename prerequisite watcher key prefix. 2016-12-23 15:13:20 +00:00
Paul Chote
9e70c3f497 Rename GrantUpgradeOnValidDamageState. 2016-12-23 15:11:07 +00:00
Paul Chote
0cf60456a5 Remove upgrade shim code. 2016-12-23 15:09:08 +00:00
Paul Chote
15b465c1e2 Change DeployToUpgrade order to GrantConditionOnDeploy. 2016-12-23 15:07:35 +00:00
Paul Chote
cb9178364f Change upgradeAvailable to instancesEnabled in SupportPowerManager. 2016-12-23 15:06:22 +00:00
Paul Chote
f360c10569 Rename ConditionManager variables. 2016-12-23 15:02:52 +00:00
Paul Chote
dcad5c3f7c Rename UpgradeManager to ConditionManager. 2016-12-23 14:57:56 +00:00
Oliver Brakmann
0e56185195 Merge pull request #12488 from draculus/installation
Fixed Open.Nat directory name case
2016-12-23 15:33:54 +01:00
Oliver Brakmann
189c25431b Merge pull request #12158 from reaperrr/areabeam-tracking
Add AreaBeam target tracking
2016-12-23 14:44:11 +01:00
Oliver Brakmann
f15a81282e Merge pull request #12477 from pchote/conditions-lint
Add a conditions lint rule + other rules fixes.
2016-12-23 14:27:22 +01:00
Oliver Brakmann
f35c83e977 Merge pull request #12465 from pchote/shellmap-overhaul
Rework shellmap UX.
2016-12-23 13:57:37 +01:00
Paul Chote
03236927e5 Replace TD shellmap with a fixed background. 2016-12-23 11:34:23 +00:00
Paul Chote
a16344d347 Remove "Show Shellmap" setting. 2016-12-23 11:34:23 +00:00
Paul Chote
55f76c02d6 Disable world sounds when the ingame menu is open. 2016-12-23 11:34:23 +00:00
Paul Chote
443c3ee72d Disable sound on the shell maps. 2016-12-23 11:34:23 +00:00
Paul Chote
9ddfdc45b3 Introduce SoundType enum. 2016-12-23 11:34:23 +00:00
Paul Chote
f787f275db Add actor conditions lint rule. 2016-12-23 11:31:06 +00:00
Paul Chote
2d8db8ddd2 Fix GALITE conditions. 2016-12-23 11:29:24 +00:00
Paul Chote
2e8479b9a2 Split out and reset crate stat modifier bonuses. 2016-12-23 11:29:24 +00:00
Paul Chote
72f61ed95c Start reorganising TS Inherits. 2016-12-23 11:29:24 +00:00
Paul Chote
72589ae967 Fix TS aircraft conditions. 2016-12-23 11:29:24 +00:00
Paul Chote
4a179e4824 Remove ^EmpDisableMobile inherit. 2016-12-23 11:29:24 +00:00
Paul Chote
a6f25438c3 Remove bogus ExternalConditions from fort-lonestar. 2016-12-23 11:29:24 +00:00
Paul Chote
5979819d9b Work around RA experience inherits. 2016-12-23 11:29:24 +00:00
Paul Chote
0145bfc0c0 Work around RA aircraft inherits. 2016-12-23 11:29:24 +00:00
Paul Chote
623842d699 Fix RA aircraft conditions. 2016-12-23 11:29:24 +00:00
Paul Chote
b5390cb23c Split out ^AcceptsCloakCrate template. 2016-12-23 11:29:24 +00:00
Paul Chote
a4227757b6 Move ^GainsExperience inherit to the actors. 2016-12-23 11:29:24 +00:00
Paul Chote
59013a581c Remove unused airborne condition from TD aircraft. 2016-12-23 11:29:24 +00:00
Paul Chote
024cc3db7e Prepare condition attributes for new lint rule. 2016-12-23 11:29:24 +00:00
Oliver Brakmann
28182ddc36 Merge pull request #12467 from SoScared/nukemoretrees
[RA] Increase Nuke Damage vs Trees
2016-12-21 21:57:10 +01:00
Oliver Brakmann
fd03031bd3 Merge pull request #12179 from abcdefg30/startCrash
Log an error when no cells are available to spawn starting units
2016-12-21 21:22:25 +01:00
Oliver Brakmann
67d10aa5bb Merge pull request #12485 from pchote/remove-ai-capturing
[bleed] Remove AI capturing from TD and RA, and AIs using mechanics and medics in RA
2016-12-21 21:17:23 +01:00
Oliver Brakmann
05c2081143 Merge pull request #12458 from pchote/map-top-targetability
Reduce aircraft not being targetable at the north edge of the map.
2016-12-21 21:14:19 +01:00
abcdefg30
deb082c91e Log an error when no cells are available to spawn starting units 2016-12-19 22:43:45 +01:00
Paul Chote
2ed7e1a0e3 Abort installation if .NET 4.5 isn't installed. 2016-12-19 18:35:23 +00:00
abcdefg30
7513707b8d Merge pull request #12457 from abc013/specchat
Added Replays are showing team chats
2016-12-19 00:07:21 +01:00
reaperrr
19dbcc9886 Merge pull request #12405 from reaperrr/slim-cnc-weapon-yamls
Shrink TD weapon yamls by using inheritance
2016-12-18 19:08:24 +01:00
reaperrr
74f7827187 Merge pull request #12486 from pchote/fix-minelayer-ordergenerator
Avoid querying traits from dead minelayers.
2016-12-18 18:25:32 +01:00
reaperrr
1f626e239b Improve TD largecaliber.yaml order 2016-12-18 18:21:34 +01:00
Paul Chote
d6a7a57ee3 Merge pull request #12429 from reaperrr/firestorm-installation
Add TS Firestorm installation
2016-12-18 15:07:10 +00:00
Paul Chote
5d5e559a8a Merge pull request #12305 from reaperrr/gps-remove-delayedaction
Replace DelayedAction in GpsWatcher with Tick-based solution
2016-12-18 14:13:48 +00:00
Pavel Kačer
0d9f95dc67 Additionally fixed the get() line for Open.Nat 2016-12-18 14:21:07 +01:00
Pavel Kačer
6d9d7cf341 Fixed Open.Nat directory name case 2016-12-18 13:50:32 +01:00
Paul Chote
1abd3a2d6e Add support for the original RA95 CDs. 2016-12-18 00:26:50 +00:00
Paul Chote
e30ca88797 Add support for hashing partial IDFiles. 2016-12-18 00:26:50 +00:00
Paul Chote
f8d0dcad4f Fix SourceType.Install on 32 bit windows. 2016-12-18 00:26:49 +00:00
Paul Chote
d3db66a8af Support multiple registry path prefixes. 2016-12-18 00:26:48 +00:00
Paul Chote
40419bc8ea Avoid querying traits from dead minelayers. 2016-12-17 21:10:11 +00:00
Oliver Brakmann
7e6488c522 Remove AI capturing from TD and RA 2016-12-17 20:53:31 +00:00
Oliver Brakmann
d340f864ec Remove medics and mechanics from RA AIs 2016-12-17 20:53:25 +00:00
reaperrr
4e891751e4 Add TS+FS quick install 2016-12-17 15:59:44 +01:00
reaperrr
993129d679 Add FS map and menu music to FS music package 2016-12-17 15:59:40 +01:00
Guido L
d7b8445d39 Add Map "Drawbridges" 2016-12-17 15:59:38 +01:00
Guido L
e10b1b1166 Add the Firestorm Tileset 2016-12-17 15:59:37 +01:00
Guido L
d70faefc98 Add the Firestorm Trees 2016-12-17 15:59:35 +01:00
Guido L
3dca7fcaa4 Add the Metadata for the Installer 2016-12-17 15:59:33 +01:00
reaperrr
9abfce97fa Rename LaserZap.TracksTarget to TrackTarget
And fix engineVersion of older Duration upgrade rule.
2016-12-17 15:28:28 +01:00
reaperrr
4d738d8fb9 Enable target tracking on TS SonicZap 2016-12-17 15:28:26 +01:00
reaperrr
046f857409 Add target tracking support to AreaBeam
Closes #10181.
2016-12-17 15:28:25 +01:00
Paul Chote
f46a3e2d16 Merge pull request #12377 from Phrohdoh/actor-sequences
Rework resolved MiniYaml outputting utility commands
2016-12-17 12:50:00 +00:00
Paul Chote
aeceb87b6f Merge pull request #12437 from GraionDilach/strapping-missiles
Allow the missile to snap at the target at reach.
2016-12-17 12:41:48 +00:00
Taryn Hill
213e5532f5 Completely rewrite miniyaml tree outputting utility commands
Rename --actor-yaml to --resolved-rules <actor name>
Implement --resolved-sequences <image name>
Implement --resolved-weapons <weapon name>
2016-12-17 06:33:49 -06:00
reaperrr
9acdff1c50 Slim down TD missiles.yaml via inheritance 2016-12-16 21:04:15 +01:00
reaperrr
f30f47de4f Slim down TD other.yaml via inheritance 2016-12-16 21:00:39 +01:00
reaperrr
189ade3001 Slim down TD explosions.yaml via inheritance 2016-12-16 21:00:37 +01:00
reaperrr
90b87bc32c Slim down TD smallcaliber.yaml via inheritance 2016-12-16 21:00:33 +01:00
reaperrr
6e83a3b550 Slim down TD largecaliber.yaml via inheritance 2016-12-16 20:30:36 +01:00
reaperrr
1ed21f3756 Remove unused 105mm and HonestJohn weapons 2016-12-16 20:27:23 +01:00
Paul Chote
83564ecc60 Nudge aircraft back inside the map. 2016-12-16 11:24:17 +00:00
reaperrr
ddb22ec2bd Merge pull request #12452 from GraionDilach/ai-vs-allowmultiple-sp
Fix AI superweapon usage.
2016-12-16 00:32:38 +01:00
reaperrr
f0dd19116f Merge pull request #12469 from SoScared/rename0
[RA] Rename Shipyard and Transport Helicopter
2016-12-14 14:10:38 +01:00
SoScared
69ad1c9e81 Allied defensive structures - increase cost & production time 2016-12-14 00:35:38 +01:00
abcdefg30
0929636b39 Merge pull request #12462 from pchote/condition-granters
Upgrades overhaul part 4d: Other condition granters
2016-12-13 22:28:44 +01:00
Paul Chote
39c2b76c51 Convert DisableOnUpgrade to conditions. 2016-12-13 19:30:42 +00:00
Paul Chote
736d66d2c2 Convert GainsExperience to conditions. 2016-12-13 19:30:42 +00:00
Paul Chote
f4e0b91e04 Convert DeployToUpgrade to conditions. 2016-12-13 19:30:41 +00:00
Paul Chote
1ef3e246d1 Convert GlobalUpgradable to conditions. 2016-12-13 19:30:41 +00:00
Paul Chote
b5ee30345b Convert Pluggable to conditions. 2016-12-13 19:30:40 +00:00
Paul Chote
5719e62c2c Convert AttackSwallow to conditions. 2016-12-13 19:30:40 +00:00
Paul Chote
29d7d42638 Convert UpgradeOnTerrain to conditions. 2016-12-13 19:30:40 +00:00
Paul Chote
f9791bbc1d Convert UpgradeOnMovement to conditions. 2016-12-13 19:30:39 +00:00
Paul Chote
b9bc6eba16 Convert UpgradeOnDamageState to conditions. 2016-12-13 19:30:39 +00:00
Paul Chote
e0583af663 Convert PrimaryBuilding to conditions. 2016-12-13 19:30:39 +00:00
Paul Chote
bcb3d52eb0 Convert Parachutable to conditions. 2016-12-13 19:30:38 +00:00
Paul Chote
a846e484c7 Convert Disguise to conditions. 2016-12-13 19:30:38 +00:00
Paul Chote
04637a305a Convert Cloak to conditions. 2016-12-13 19:30:37 +00:00
Paul Chote
60cd12874e Convert Aircraft to conditions. 2016-12-13 19:30:37 +00:00
abcdefg30
2fcb266e13 Merge pull request #12451 from pchote/cargo-conditions
Upgrades overhaul part 4c: Cargo and Passenger
2016-12-13 16:19:14 +01:00
Paul Chote
f14d770363 Add Cargo.LoadedCondition. 2016-12-12 19:43:58 +00:00
Paul Chote
45af024b15 Convert Cargo to conditions. 2016-12-12 19:43:57 +00:00
reaperrr
ea46199cab Merge pull request #12449 from pchote/uan-conditions
Upgrades overhaul part 4b: UpgradeActorsNear -> ProximityExternalCondition
2016-12-12 20:39:53 +01:00
Paul Chote
32f0d570bf Rework UpgradeActorsNear -> ProximityExternalCondition. 2016-12-12 14:28:54 +00:00
SoScared
e5a3da9df8 Rename to Chinook & Naval Yard. 2016-12-11 20:49:05 +01:00
Oliver Brakmann
5eaaff45ad Merge pull request #12448 from pchote/lua-conditions
Upgrades overhaul part 4a: Lua API
2016-12-11 20:23:59 +01:00
SoScared
d314b22203 nukemoretrees 2016-12-11 19:21:41 +01:00
Paul Chote
f4f2030b29 Port scripts to new api. 2016-12-11 00:40:17 +00:00
Paul Chote
ea7ad2e337 Migrate lua upgrades to conditions. 2016-12-11 00:40:14 +00:00
Oliver Brakmann
37394b6269 Merge pull request #12411 from pchote/fix-multiplesight-crash
Fix crash when actors with multiple RevealsShroud target a dead frozen actor.
2016-12-10 20:56:08 +01:00
Oliver Brakmann
ff65ec8a37 Merge pull request #12338 from reaperrr/explodes-footprint
Add footprint support to Explodes, remove WithBuildingExplosion
2016-12-10 20:17:15 +01:00
reaperrr
4e92311a59 Trigger RA GPS reveal from sat missile effect instead of DelayedAction 2016-12-10 15:41:14 +01:00
reaperrr
20439975d7 Disable Explodes trait on TS bridge huts
They would fail Lint otherwise, because they have no Health trait.
2016-12-10 14:20:11 +01:00
reaperrr
b7f746d711 Remove WithBuildingExplosion
Explodes can now do the same and then some, and WBE uses a DelayedAction
which blocks savegames.
2016-12-10 13:47:51 +01:00
reaperrr
4f2c360cb9 Use Explodes instead of WithBuildingExplosion in D2k 2016-12-10 13:45:12 +01:00
reaperrr
bccc127645 Use Explodes instead of WithBuildingExplosion in TD 2016-12-10 13:45:12 +01:00
reaperrr
eb34621ce8 Use Explodes instead of WithBuildingExplosion in RA 2016-12-10 13:45:12 +01:00
reaperrr
5046855a7d Use Explodes instead of WithBuildingExplosion in TS
Additionally, make Refinery and Tib Silo spawn tiberium on destruction unless empty.
2016-12-10 13:45:12 +01:00
reaperrr
a0934418cf Add support for footprint explosions to Explodes 2016-12-10 13:45:12 +01:00
reaperrr
2d194b077d Make some Explodes property descs a bit more precise 2016-12-10 13:45:12 +01:00
reaperrr
1b3884de23 Make Explodes implement interfaces explicitly 2016-12-10 13:45:12 +01:00
reaperrr
d9d1fe2e73 Move VisibilityType enum to TraitsInterfaces
VisibilityTypes are used by several other traits as well, so it makes more sense to move it to a common, shared location.
2016-12-10 13:45:12 +01:00
Paul Chote
1da4d97240 Merge pull request #12430 from pchote/ts-bridge-rendering
Implement TS ground-level bridges.
2016-12-10 12:01:44 +00:00
Paul Chote
73a0f470c8 Implement TS bridge rendering. 2016-12-10 11:52:05 +00:00
Paul Chote
842e004ec5 Add a RenderSprites.UnnormalizeSequence helper. 2016-12-10 11:52:05 +00:00
Paul Chote
0d769383e2 Add playable category back to A River Runs Near. 2016-12-10 11:52:04 +00:00
Paul Chote
69e3c538d9 Implement ground-level bridge destruction and repair. 2016-12-10 11:52:04 +00:00
Paul Chote
1101218962 Fix TS goldwrench cursor. 2016-12-10 11:36:41 +00:00
Paul Chote
f91307f4be Rename LowBridge to GroundLevelBridge. 2016-12-10 11:36:40 +00:00
Paul Chote
0bc087f7bd Rename BridgeLayer to LegacyBridgeLayer. 2016-12-10 11:36:39 +00:00
Paul Chote
a5549d3944 Rename BridgeHut to LegacyBridgeHut. 2016-12-10 11:35:29 +00:00
Paul Chote
e2322c9c53 Merge pull request #12406 from pchote/external-conditions
Upgrades overhaul part 3: Timed, external, and stacked conditions.
2016-12-09 23:45:14 +00:00
Oliver Brakmann
4b61a52b3a Merge pull request #12434 from reaperrr/mcv-spawn-facing
Make MP start units facings customizable
2016-12-09 21:43:52 +01:00
Oliver Brakmann
b4f6b25941 Merge pull request #12459 from pchote/fix-server-exploit
Reset server slots and reenable spectators when the last player quits.
2016-12-09 21:34:50 +01:00
Oliver Brakmann
8027503832 Merge pull request #12460 from pchote/remove-server-timeout
Remove broken and disabled by default Server.TimeOut setting.
2016-12-09 21:27:12 +01:00
Oliver Brakmann
8babf2b0ca Merge pull request #12290 from abc013/UnCloakOnDamage
[D2k] Added the 'Damage' UncloakType to several units
2016-12-09 19:35:45 +01:00
abc013
a403699367 Added Replays are showing team chats 2016-12-09 19:32:11 +01:00
Paul Chote
1153cd2f7c Reset slot configuration when all players leave a dedicated server. 2016-12-08 21:06:24 +00:00
Paul Chote
5188a08c81 Remove broken and disabled by default Server.TimeOut setting. 2016-12-08 20:49:28 +00:00
Paul Chote
7a9174e7fc Fix aircraft defaults. 2016-12-08 18:23:25 +00:00
Paul Chote
fd1d030cb0 Add GroundPosition support to HiddenUnder(Shroud|Fog). 2016-12-08 18:16:30 +00:00
Paul Chote
35780cadd0 Fix missing base method call in Carryable. 2016-12-06 17:21:15 +00:00
Paul Chote
da6fd74881 Add support for stacked condition bonuses. 2016-12-06 17:21:14 +00:00
Paul Chote
34a94e16f6 Update TD rules. 2016-12-06 17:21:14 +00:00
Paul Chote
149705942c Update RA rules. 2016-12-06 17:21:14 +00:00
Paul Chote
e166cd3222 Update TS rules. 2016-12-06 17:21:14 +00:00
Paul Chote
ac4f89ce51 Add upgrade rules. 2016-12-06 17:21:13 +00:00
Paul Chote
60e45b9eb7 Extract RenameNodeKey helper. 2016-12-06 17:21:13 +00:00
Paul Chote
6e29dfecfe Port GrantUpgradeCrateAction to GrantExternalConditionCrateAction. 2016-12-06 17:21:13 +00:00
Paul Chote
764401be10 Port GrantUpgradeWarhead to GrantExternalConditionWarhead. 2016-12-06 17:21:13 +00:00
Paul Chote
f274522083 Port GrantUpgradePower to GrantExternalConditionPower. 2016-12-06 17:21:12 +00:00
Paul Chote
6f5c4cf969 Rename TimedUpgradeBar to TimedConditionBar. 2016-12-06 17:21:12 +00:00
Paul Chote
a692c1e761 Rework timed conditions. 2016-12-06 17:21:12 +00:00
Paul Chote
f934a4e2b7 Add an external condition whitelist. 2016-12-06 17:21:12 +00:00
Paul Chote
983a24199a Remove notmobile condition from TS. 2016-12-06 17:21:12 +00:00
reaperrr
7827d50e99 Merge pull request #12441 from qwIvan/patch-1
mipsel architecture support
2016-12-05 21:17:33 +01:00
Zimmermann Gyula
35b1949a61 Use MPos during AI coarse support power targeting. 2016-12-05 15:08:00 +01:00
Zimmermann Gyula
f927d54db7 Fix AI unable to activate AllowMultiple support powers. 2016-12-05 15:08:00 +01:00
reaperrr
a8f3172c6b Merge pull request #12396 from pchote/conditions-fix-carryalls
Upgrades overhaul part2: GrantCondition and Carryall fixes.
2016-12-03 16:51:49 +01:00
Paul Chote
fe8f2acd62 Remove hardcoded default carryable conditions. 2016-12-01 20:48:24 +00:00
Paul Chote
02e7b1ebfb Fix Carryall interaction with sensor array and tick tanks. 2016-11-30 19:24:44 +00:00
Paul Chote
966fad7af3 Add upgrade rules and update d2k. 2016-11-30 19:24:44 +00:00
Paul Chote
81113e07a6 Remove WithDecorationCarryable. 2016-11-30 19:24:43 +00:00
Paul Chote
2dc70146c8 Replace Upgrades with Conditions in Carryable. 2016-11-30 19:24:43 +00:00
Paul Chote
dc7fa14992 Add GrantCondition trait. 2016-11-30 19:24:43 +00:00
reaperrr
848cf19ba8 Merge pull request #12381 from pchote/upgrade-conditions
Upgrades overhaul part 1: EnabledCondition
2016-11-30 19:42:34 +01:00
qwIvan
9397a1b599 mipsel support 2016-11-30 15:59:52 +08:00
Paul Chote
6150d25105 Merge pull request #12367 from Phrohdoh/makefile-mono-msg
Add message to fixheader.exe target if Mono isn't installed
2016-11-29 07:45:11 +00:00
Zimmermann Gyula
bf810cd934 Enable missile snapping in TS. 2016-11-28 17:14:43 +01:00
Zimmermann Gyula
51db12467d Allow the missile to snap at the target at reach. 2016-11-28 17:14:30 +01:00
reaperrr
5a8df27096 Make MP start units facing customizable
There might be modders or mappers who prefer different initial facing settings than the hardcoded ones.
2016-11-27 18:40:25 +01:00
reaperrr
c45c51f95d Merge pull request #12431 from pchote/heightmap-cliff-blocking
Add CliffBackImpassabilityLayer to TS.
2016-11-27 13:52:04 +01:00
reaperrr
d170841a93 Merge pull request #12432 from pchote/fix-classic-aircraft-reveal
Make RA and TD aircraft reveal shroud from the point on the ground below them.
2016-11-27 13:31:28 +01:00
Paul Chote
5d0ce81eb0 Make RA/TD aircraft sight relative to ground-based position. 2016-11-26 21:19:37 +00:00
Paul Chote
b1f99dd601 Add GroundPosition VisibilityType. 2016-11-26 21:10:44 +00:00
Paul Chote
ef8a7a535d Fix string comparison in CheckRevealFootprint. 2016-11-26 21:10:28 +00:00
Paul Chote
7e428d2c91 Add CliffBackImpassabilityLayer to TS. 2016-11-26 20:56:18 +00:00
reaperrr
68ee776b77 Merge pull request #12339 from abc013/medicmechfix
Fixed Mechanic and Medic can heal enemy units
2016-11-26 17:06:46 +01:00
Paul Chote
653f4cfdbd Merge pull request #12426 from reaperrr/bleed-style-hotfix
ReplayMetadata style fix
2016-11-25 12:08:19 +00:00
reaperrr
07312f8c62 ReplayMetadata style fix 2016-11-25 12:35:16 +01:00
reaperrr
2708117bfe Merge pull request #12357 from pchote/fix-invalid-replay-crash
Ignore invalid replay files instead of crashing.
2016-11-25 12:07:16 +01:00
reaperrr
807d0af851 Merge pull request #12425 from pchote/fix-shroud-crash
Fix missing array bounds check in Shroud.IsExplored.
2016-11-25 12:03:15 +01:00
abcdefg30
878ba2e817 Merge pull request #12398 from pchote/shroud-edge-fail
Fix shroud rendering outside the map cordon.
2016-11-24 22:34:58 +01:00
Paul Chote
ff94dd914a Fix missing array bounds check in Shroud.IsExplored. 2016-11-24 19:07:18 +00:00
RoosterDragon
c244fbb4d3 Merge pull request #12393 from Phrohdoh/sound-loaders
Fix enumeration in Sound::LoadSound to use the ISoundLoader[] param
2016-11-23 20:05:33 +00:00
abcdefg30
0fc45b8c70 Merge pull request #12348 from abc013/120mm
Fixed the 120mm bullet not harming infantry
2016-11-23 15:12:35 +01:00
Paul Chote
1506a3c26f Fix crash with multiple RevealsShrouds targeting dead frozen actor. 2016-11-21 22:33:35 +00:00
Paul Chote
0ba0470390 Remove upgrades lint check. 2016-11-20 13:55:47 +00:00
Paul Chote
3f0b33992c Rewrite UpgradeManager implementation to suit conditions. 2016-11-20 13:55:47 +00:00
Paul Chote
05187f5828 Remove legacy UpgradeTypes consumer code. 2016-11-20 13:38:41 +00:00
Matthias Mailänder
ef25d4cd56 API and auto-complete description generator for ZeroBrane Studio 2016-11-20 06:37:16 +01:00
Paul Chote
a266dc6639 Fix shroud rendering outside the map cordon. 2016-11-19 18:10:12 +00:00
Paul Chote
9ceb3813e6 Manually port TD veterancy to conditions. 2016-11-19 17:19:28 +00:00
Paul Chote
bee7f14ae5 Update TD rules. 2016-11-19 17:19:28 +00:00
Paul Chote
2fb1875fd7 Manually port D2k veterancy to conditions. 2016-11-19 17:19:28 +00:00
Paul Chote
56fa3db051 Update D2K rules and shellmap. 2016-11-19 17:19:27 +00:00
Paul Chote
4bd1921f88 Manually port RA veterancy and shellmap to conditions. 2016-11-19 17:19:27 +00:00
Paul Chote
4ed7725e20 Update RA rules. 2016-11-19 17:19:27 +00:00
Paul Chote
326cc0bf5b Add upgrade rule for migrating UpgradeTypes to RequiresCondition. 2016-11-19 17:19:27 +00:00
Paul Chote
12d31cd09e Replace UpgradeTypes -> RequiresCondition across TS. 2016-11-19 17:19:26 +00:00
Paul Chote
5fbdd78f41 Add an RequiresCondition field to UpgradeableMultiplierTrait. 2016-11-19 17:19:26 +00:00
Paul Chote
5192c27199 Add an RequiresCondition field to UpgradeableTrait. 2016-11-19 17:19:26 +00:00
Paul Chote
1cc7944437 Add FieldLoader and linter support for BooleanExpression. 2016-11-19 17:19:25 +00:00
Paul Chote
23f4ae5027 Replace UpgradeMinEnabledLevel checks with an EnabledByDefault shim. 2016-11-19 17:19:25 +00:00
Rob Wilkinson
e337048a97 Fixes issue with rocket soldiers wandering
Fixes #12368
2016-11-19 17:13:17 +00:00
Taryn Hill
51dd79261f Fix enumeration in Sound::LoadSound to use the ISoundLoader[] param 2016-11-18 20:23:15 -06:00
reaperrr
c4b5b745ef Merge pull request #12307 from pchote/passive-visibility
Add plumbing for improved RA gap generator behaviour.
2016-11-18 14:34:35 +01:00
reaperrr
56fdfb1ec8 Merge pull request #12370 from pchote/heightmap-shroud-reveal
Implement heightmap-visibility blocking
2016-11-18 14:23:53 +01:00
reaperrr
f550c3b762 Merge pull request #12315 from obrakmann/activities-pt1
Activities re-write, part 1 (aka the boring bits)
2016-11-18 13:52:06 +01:00
reaperrr
026ab9e2d7 Merge pull request #12302 from Jiyuu/modifyingpowershell
Restructuring make script
2016-11-18 13:33:28 +01:00
reaperrr
43b495b19f Merge pull request #12337 from roundowl/patch-2
Make friendly units aware of friendly mines
2016-11-18 13:02:30 +01:00
abcdefg30
c12cfbcc18 Merge pull request #12374 from reaperrr/fix-ts-depot
Fix TS service depot depth sorting
2016-11-17 21:53:08 +01:00
Taryn Hill
bf994b35b0 Add message to fixheader.exe target if Mono isn't installed 2016-11-17 12:49:01 -06:00
reaperrr
d8d7c0c0f7 Merge pull request #12352 from abc013/EmitCivs
Let civilian buildings spawn civilians on death
2016-11-16 19:08:00 +01:00
Taryn Hill
be0798999d Merge pull request #12378 from pchote/boolexpr
Add a boolean expression parser
2016-11-16 09:39:47 -06:00
Paul Chote
cc34f8e557 Add a boolean expression parser. 2016-11-15 21:45:00 +00:00
Oliver Brakmann
fd22b19183 Use consistent spelling of 'interrupt[a|i]ble' 2016-11-13 15:50:22 +01:00
Paul Chote
06b9741807 Reveal the top tiles of cliffs too. 2016-11-13 12:31:21 +00:00
reaperrr
0479b7ffb5 Merge pull request #12341 from reaperrr/no-overlay-delayedaction
Remove hardcoded buildComplete delay in some overlays
2016-11-13 13:24:42 +01:00
reaperrr
0c78527ae8 Merge pull request #12354 from pchote/fix-smudge-out-of-bounds
Add map bounds checks to TerrainSpriteLayer and SmudgeLayer.
2016-11-13 13:08:51 +01:00
Taryn Hill
40fcd21e5f Merge pull request #12369 from pchote/ts-development-prompt
Add an introduction dialog for non-{DEV_VERSION} TS builds.
2016-11-12 20:12:33 -06:00
abc013
e4354ce08c Added SpawnActorOnDeath: Civilians to ^CivBuilding 2016-11-12 14:45:49 +01:00
reaperrr
29355129d2 Fix TS service depot depth sorting 2016-11-12 12:56:37 +01:00
Paul Chote
d68c705512 Block actor sight above cliffs. 2016-11-11 17:46:53 +00:00
Paul Chote
988778fe1f Add an introduction dialog for non-{DEV_VERSION} TS builds. 2016-11-11 17:03:18 +00:00
Paul Chote
b6809c97f2 Add a CellLayer with the height of each projected cell. 2016-11-11 16:44:12 +00:00
abcdefg30
e7e17a0f5a Merge pull request #12323 from pchote/fix-dedicated-upnp-crash
Fix dedicated server crash with AllowPortForward.
2016-11-11 15:18:37 +01:00
Paul Chote
bbe4864921 Fix dedicated server crash with AllowPortForward. 2016-11-11 13:06:00 +00:00
Paul Chote
ab344b390d Ignore invalid replay files instead of crashing. 2016-11-11 13:00:58 +00:00
reaperrr
7ba0c22346 Merge pull request #12096 from pchote/game-timer-tooltip
Show replay percentage as a tooltip.
2016-11-06 16:59:07 +01:00
Paul Chote
983d8ac39e Add passive visibility type. 2016-11-06 15:40:22 +00:00
Paul Chote
fdac5a6d8a Rework internal shroud plumbing. 2016-11-06 15:40:22 +00:00
Paul Chote
7a4d7989fe Merge pull request #12347 from tohava/del_delayedaction_in_weaponinfo
Remove DelayedAction from WeaponInfo
2016-11-05 18:16:19 +00:00
Paul Chote
77e0c579ba Merge pull request #12287 from reaperrr/interface-cleanups03
Third round of interface moving, making explicit and cleanup
2016-11-05 18:02:39 +00:00
reaperrr
162fef3da1 Fix style nit 2016-11-05 18:54:41 +01:00
Paul Chote
e187b985fe Prevent smudges from spawning in bogus cells. 2016-11-05 17:45:27 +00:00
Paul Chote
4db93f70c7 Add a cell sanity check to TerrainSpriteLayer. 2016-11-05 17:44:02 +00:00
abc013
f9d4308161 Fixed the 120mm bullet not harming infantry 2016-11-04 09:09:25 +01:00
Ori Bar
fabe799907 Remove DelayedAction from WeaponInfo and replace it with the more serialization friendly DelayedImpact 2016-11-04 02:24:43 +02:00
Jiyuu
dbea8d9515 Restructuring the make script & making the "all" command fetch dependencies as well 2016-11-03 22:49:19 +02:00
roundowl
194caa0163 Makes friendly units aware of mines
Added BlockFriendly boolean into Mine trait parameters. If set to true, friendly units vulnerable to mines will route around tiles with friendly mines in them.
2016-11-03 23:07:57 +03:00
reaperrr
e8027a6fdf Remove hardcoded buildComplete delay in some overlays
There certainly was and possibly still is some issue this was trying to
work around, but unless it's a deal-breaker, we should rather try to fix that
issue directly instead of keeping some uncommented magical work-around.
2016-11-02 22:01:45 +01:00
reaperrr
8cda0dd360 Merge pull request #12332 from abc013/NineLivesAuthor
Changed the Author of 'Nine Lives' to PizzaAtomica
2016-11-02 20:56:40 +01:00
reaperrr
8c15aa2ce4 Merge pull request #12331 from abc013/BeThVeFix
Fixed tiling error on the map 'Behind the Veil'
2016-11-02 20:50:29 +01:00
abc013
d9ff07e835 Fixed Mechanic and Medic can heal enemy units 2016-11-01 21:38:53 +01:00
abc013
1d39ce8739 Change the Author of 'Nine Lives' to PizzaAtomica 2016-11-01 12:51:12 +01:00
abc013
c1eced55bf Fixed tiling error on the map 'Behind the Veil' 2016-11-01 12:41:56 +01:00
reaperrr
03fd591a00 Remove some unused usings 2016-10-31 21:12:41 +01:00
Oliver Brakmann
2c66ee8c13 Add native support for uninterruptible activities
This pattern occurs a few times throughout the code, so it makes sense to bake it into the Activity class itself.
2016-10-31 18:46:27 +01:00
Oliver Brakmann
3e9bf7aa4d Turn Actor.GetCurrentActivity into a property 2016-10-31 18:46:27 +01:00
reaperrr
ad6ea52bff Make IPowerModifier require explicit implementation
Plus some 'collateral' explicit implementations on the affected traits.
2016-10-30 20:22:16 +01:00
reaperrr
2d0560dcb7 Make RangeModifier interfaces require explicit implementation 2016-10-30 20:22:16 +01:00
reaperrr
02f14f0761 Make IInaccuracyModifier require explicit implementation 2016-10-30 20:22:16 +01:00
reaperrr
80d9241bbe Make IReloadModifier require explicit implementation 2016-10-30 20:22:16 +01:00
reaperrr
fc2f006ec1 Make IFirepowerModifier require explicit implementation 2016-10-30 20:22:16 +01:00
reaperrr
4af7134115 Require explicit ISpeedModifier implementation
Plus misc "collateral" explicit interfaces.
2016-10-30 20:22:16 +01:00
reaperrr
97c2c24e8d Require explicit implementation of IDamageModifier 2016-10-30 20:22:16 +01:00
reaperrr
f8077dc113 Move combat modifier interfaces (damage, speed etc.) to mod code 2016-10-30 20:22:16 +01:00
reaperrr
9dfddaf5d9 Move IRenderInfantrySequenceModifier to mod code and require explicit...
implementation.
2016-10-30 20:22:16 +01:00
Paul Chote
6b29d70520 Merge pull request #12284 from reaperrr/interface-cleanups02
More explicit interface cleanups
2016-10-30 18:40:43 +00:00
reaperrr
3fca63e9a2 Make Armament implement interfaces explicitly 2016-10-30 19:17:45 +01:00
reaperrr
ce52bc9d7b Some more misc explicit interface implementations
'Fallout' from working on other things.
2016-10-30 19:17:41 +01:00
reaperrr
61779bf02a Make WithSpriteTurret ITick implementation explicit 2016-10-30 19:17:39 +01:00
abcdefg30
89187d1557 Merge pull request #12309 from reaperrr/DelayedAction-riddance2
Get rid of DelayedAction in Beacons and PlaceBuilding
2016-10-30 18:05:46 +01:00
abcdefg30
2125799e3a Merge pull request #12308 from reaperrr/refactor-shroud-traits
Refactor Shroud and shroud-modifying traits
2016-10-30 17:55:59 +01:00
Paul Chote
1829011393 Merge pull request #12317 from cjshmyr/lua-wpos-subtract-error
Fix Lua error message for WPos subtraction
2016-10-30 14:51:38 +00:00
Curtis Shmyr
b1bea831de Fix Lua error message for WPos subtraction 2016-10-29 13:56:01 -06:00
Paul Chote
04dbda6dcd Merge pull request #12274 from abcdefg30/bodyPreview
Fully support unhardcoded sequences in the voxel render traits
2016-10-29 14:53:47 +01:00
Paul Chote
c62870cc30 Merge pull request #12004 from reaperrr/projectile-cleanup2
More projectile property streamlining and cleanups
2016-10-29 14:21:29 +01:00
reaperrr
2d69f1104f Replace DelayedAction with Tick-based solution in PlaceBuilding 2016-10-26 20:54:51 +02:00
Oliver Brakmann
443d35f240 Merge pull request #11984 from reaperrr/upgradable-tooltip
Make Tooltip upgradable
2016-10-26 20:48:19 +02:00
reaperrr
101cc65876 Replace DelayedAction in Beacon effects with Tick-based solution 2016-10-26 20:17:24 +02:00
Oliver Brakmann
a6cde32a00 Merge pull request #12285 from abcdefg30/bloodyBye
Remove Bloody Delta from the ra map pool
2016-10-26 20:16:24 +02:00
reaperrr
cafd50ef43 Make RevealsShroud and CreatesShroud use stances
Instead of hardcoded (!)IsAlliedWith checks.
2016-10-26 19:18:15 +02:00
reaperrr
6b5e7b8c12 Make AffectsShroud and derivatives upgradable 2016-10-25 16:09:55 +02:00
reaperrr
a7e64bd8d8 Make AffectsShroud use explicit interfaces 2016-10-25 16:09:53 +02:00
reaperrr
0aefd87485 Make Shroud object- instead of actor-based 2016-10-25 16:09:52 +02:00
Paul Chote
5635c61007 Merge pull request #12301 from RobotCaleb/patch-1
Update CONTRIBUTING.md
2016-10-24 21:03:41 +01:00
Caleb Anderson
64e6fb666b Update CONTRIBUTING.md
Fixed single-character typo. 'youself' -> 'yourself'
2016-10-24 13:49:51 -06:00
reaperrr
5da3716110 Merge pull request #12001 from MustaphaTR/d2k-new-shellmap
Add New Shellmap to D2K
2016-10-23 18:52:32 +02:00
abcdefg30
8bd265ac42 Merge pull request #12224 from reaperrr/ts-polish05
TS polishing pass: More depth sorting fixes
2016-10-23 18:49:07 +02:00
reaperrr
efa6ad64f7 Remove now-redundant TooltipInfo check 2016-10-23 18:42:36 +02:00
reaperrr
5e8849abd1 Fix TS crate effect depth sorting 2016-10-23 18:21:21 +02:00
reaperrr
a7e3bfb95c Fix Tiberium veins and vein attack depth sorting 2016-10-23 18:21:21 +02:00
reaperrr
35a84546fb Fix Titan muzzle depth sorting 2016-10-23 18:19:05 +02:00
reaperrr
3c698d3d68 Fix Tick Tank muzzle depth sorting and offset 2016-10-23 18:19:05 +02:00
reaperrr
829f612a04 Fix Nod Buggy muzzle depth sorting 2016-10-23 18:19:05 +02:00
reaperrr
11ba90c690 Fix Vulcan Tower muzzle depth sorting 2016-10-23 18:19:05 +02:00
reaperrr
f8a410204d Fix Harpy rotor depth sorting 2016-10-23 18:19:05 +02:00
Paul Chote
4777161417 Merge pull request #11886 from reaperrr/UpgradeOnMovement
Add UpgradeOnMovement trait
2016-10-23 17:12:23 +01:00
abcdefg30
f53dc80d70 Merge pull request #12292 from pchote/fix-cargo-capture
Prevent mod-code from manpulating actor owners directly.
2016-10-23 18:06:51 +02:00
Paul Chote
a3f1287acf Merge pull request #12135 from reaperrr/ts-misc04
TS polishing pass: More depth sorting and starting units
2016-10-23 17:06:28 +01:00
reaperrr
677fcefb34 Fix deployed sensor array depth sorting and snow sprite 2016-10-23 17:04:30 +02:00
reaperrr
11d2ee80dc Upgrade tooltip when Mobile Sensor Array is deployed 2016-10-23 16:16:26 +02:00
reaperrr
00c0161513 Show internal name instead of crashing when buildable actor has no tooltip
But throw a lint error instead.
2016-10-23 14:59:22 +02:00
reaperrr
4f1e7435c2 Update tooltip when Tick Tank is deployed 2016-10-23 14:59:20 +02:00
reaperrr
074bb78cbd Made Tooltip trait upgradable 2016-10-23 14:59:18 +02:00
Paul Chote
10b5d8a06b Show replay percentage as a tooltip. 2016-10-23 13:29:06 +01:00
Mustafa Alperen Seki
de74af93d0 Add new shellmap to D2K 2016-10-23 14:22:10 +02:00
abcdefg30
39f2949e09 Merge pull request #12291 from abc013/Winter-Storm-Fix
Fixed some tiling errors in the map 'Winter Storm'
2016-10-23 13:29:07 +02:00
reaperrr
0fcc07cb7b Add UpgradeOnMovement trait
This provides upgrades when an actor is moving. To avoid 'hiccups' for ground units, air units are considered moving as soon as they are airborne.
2016-10-23 13:23:04 +02:00
Paul Chote
635fc9e1e2 Prevent mod code from changing Actor.Owner directly. 2016-10-23 12:21:03 +01:00
Paul Chote
8d688ab5f3 Use ChangeOwner on captured cargo. 2016-10-23 12:20:25 +01:00
abc013
c87f3fab92 Added the 'Damage' UncloakType to several units 2016-10-23 12:43:31 +02:00
abc013
f9dbfc05ca Fixed some tiling errors in the map 'Winter Storm' 2016-10-23 11:33:18 +02:00
reaperrr
146c07ac5c Merge pull request #12112 from abcdefg30/luaFlash
Add support for applying a target flash to actors through lua
2016-10-22 22:53:38 +02:00
reaperrr
165c1295dd Merge pull request #12234 from abcdefg30/AISell
Let the Lonestar AI use the new Sell function instead of Destroy
2016-10-22 22:36:27 +02:00
abcdefg30
1a99e716de Merge pull request #12258 from reaperrr/move-icon
Move production icon sequence from Tooltip to Buildable
2016-10-22 21:10:32 +02:00
reaperrr
192f2358b9 Merge pull request #12156 from cjshmyr/lua-cpos-subtract
Support subtraction of two CPos in Lua
2016-10-22 20:57:07 +02:00
reaperrr
5ac6c51162 Remove Buildable from RA gates
The description is only visible on the production palette, and to be buildable gates would first need an icon, which they currently don't have.
2016-10-22 20:37:13 +02:00
reaperrr
0350b8c8f2 Remove Buildable from TD Bio Lab
It isn't supposed to be buildable so the description is never seen in-game anyway.
2016-10-22 20:37:11 +02:00
reaperrr
5b5b064981 Move production icon sequence from Tooltip to Buildable 2016-10-22 20:37:09 +02:00
Paul Chote
01d212e16d Merge pull request #12182 from Mailaender/mono-4.6.1
Updated to Mono version 4.6.1
2016-10-22 19:33:50 +01:00
abcdefg30
1592769419 Merge pull request #12155 from reaperrr/fix-spritebarrel-preview
Fixes sprite barrels ignoring turret/actor orientation in previews
2016-10-22 20:02:30 +02:00
abcdefg30
1b62aa5ccc Merge pull request #12148 from pchote/fix-wall-glitch
Prevent TickRender from running before the world's first Tick.
2016-10-22 19:55:11 +02:00
abcdefg30
d5ed7b5588 Merge pull request #12223 from reaperrr/ts-polish06
Add sprite placeholder for TS ClusterMissile
2016-10-22 19:47:54 +02:00
abcdefg30
86220bb9f9 Merge pull request #12134 from reaperrr/ts-missiles
TS polishing pass: Overhauled missiles.yaml
2016-10-22 19:42:48 +02:00
abcdefg30
42559f2358 Merge pull request #12133 from reaperrr/ts-misc02
TS polishing pass: Ion Cannon, z-sorting, offsets, explosions
2016-10-22 19:32:01 +02:00
abcdefg30
f1e63bbc08 Remove Bloody Delta from the ra map pool 2016-10-22 19:08:38 +02:00
reaperrr
77a134da91 Move INotifyDamageStateChanged to mod code and require explicit implementation 2016-10-22 18:21:52 +02:00
reaperrr
7955aeb1c3 Implement INotifyDamageStateChanged explicitly in WithSpriteBody 2016-10-22 18:21:52 +02:00
reaperrr
a6b09342bc Make INotifyBuildComplete require explicit implementation 2016-10-22 18:21:52 +02:00
reaperrr
d9ecba7b60 Make INotifyInfiltrated require explicit implementation 2016-10-22 18:21:52 +02:00
reaperrr
0f02a6ba7c Merge pull request #12268 from reaperrr/interface-cleanups01
Several internal interface cleanups
2016-10-22 18:14:55 +02:00
reaperrr
f6388c198d Sync less bullet aspects
`length` is calculated from `pos` and `target` which are both synced.
`SourceActor`, `ticks` and `smokeTicks` work no different from `Missile`, where they're not synced, either.
2016-10-22 18:00:38 +02:00
reaperrr
efd54f1c65 Add lint check for invalid projectile angles
Emits error if
- angle exceeds 255 or -255
- minimum launch angle exceeds maximum launch angle
2016-10-22 18:00:36 +02:00
reaperrr
20cd2aa4ab Rename Bullet Angle to LaunchAngle 2016-10-22 17:57:32 +02:00
reaperrr
8ba9afdb16 Cache Missile LaunchAngles in constructor
To have one central place for the info look-ups. Makes it a little easier to rename the properties or merge them into a single Angle[] property.
2016-10-22 17:57:32 +02:00
reaperrr
0b7fdc411b Cache Missile speed infos in constructor
The primary reason is to have one central location for the look-ups, so we'll only have to change up to 3 lines if we rename or merge the speed properties.
2016-10-22 17:57:32 +02:00
reaperrr
1ffb151a38 Merge pull request #12162 from abcdefg30/heliHost
Fix HeliReturnToBase not exposing an host actor parameter
2016-10-22 15:58:06 +02:00
reaperrr
271cdcf8a8 Resize TS starting forces
-changed light starting forces to be equally balanced
-slightly increased medium starting forces
-moderately increased heavy starting forces
2016-10-22 03:08:41 +02:00
reaperrr
67d5df9da5 Fix TS snow civ buildings depth sorting 2016-10-22 03:08:40 +02:00
reaperrr
41dc76ef06 Fix Kodiak, Montauk, hospital & deployed ICBM depth sorting 2016-10-22 03:08:38 +02:00
reaperrr
e5fcf1d5f6 Fine-tune depth-sorting and offsets of temperate 4x2 TS civ buildings 2016-10-22 03:02:47 +02:00
reaperrr
c3946d9371 Fix depth sorting and offset of several civilian structures 2016-10-22 01:05:37 +02:00
reaperrr
a04915403f Fix TS spawnpoint, waypoint and camera depth sorting
Makes them visible in editor.
2016-10-22 01:05:37 +02:00
reaperrr
ab2669c565 Merge pull request #12275 from abcdefg30/passengers
Fix the search for alternative transports not caring about passenger types
2016-10-22 00:24:48 +02:00
abcdefg30
cb49583d82 Fix the search for alternative transports not caring about passenger types 2016-10-21 13:25:12 +02:00
abcdefg30
618cd91cc7 Merge pull request #12174 from tysonliddell/techFix
Replaced civillians with Technicians when building sold
2016-10-21 09:14:00 +02:00
abcdefg30
d176e16dd6 Merge pull request #12218 from SoScared/dualcoldfront
[RA] Remove rogue ore spots on Dual Cold Front
2016-10-21 09:07:40 +02:00
abcdefg30
82f3599b73 Merge pull request #12191 from abc013/mapfix
Fixed tiling errors in the map "doubles"
2016-10-21 09:05:07 +02:00
abcdefg30
6364e542ed Merge pull request #12249 from SoScared/mappie
RA map Pie Of Animosity - Fix map author name + ore mine visibility tweak
2016-10-21 09:01:54 +02:00
abcdefg30
713b970f24 Fully support unhardcoded sequences in the voxel render traits 2016-10-21 08:59:15 +02:00
reaperrr
16cf96b982 Merge pull request #12136 from LipkeGu/fix-lint-weiredness
[Lint] Report when Maps contains invalid custom rules.
2016-10-21 01:23:14 +02:00
reaperrr
72374279f0 Move interfaces that have no ties to the engine to mod code 2016-10-20 20:31:40 +02:00
reaperrr
7235835280 Move ImpactType to Common.Warhead 2016-10-20 20:31:38 +02:00
reaperrr
0eb8def2b8 Move Cargo interfaces to TraitsInterfaces 2016-10-20 20:31:37 +02:00
reaperrr
437e142031 Reservable style fixes 2016-10-20 20:31:35 +02:00
reaperrr
61284d73dd Make interface implementations explicit where possible in traits that implement INotifySold 2016-10-20 19:02:30 +02:00
reaperrr
22dcb1c66f Move INotifySold to Common and require explicit implementation 2016-10-20 19:02:28 +02:00
reaperrr
b8c04a0887 Move INotifyBlockingMove to Common and require explicit implementation 2016-10-20 18:58:40 +02:00
reaperrr
df0021eeed Move check for explicit interface violations to the top
The interface violation check is fast, so it doesn't really delay the rest, while you don't have to wait for all other code checks to finish to check for violations.
2016-10-20 18:57:06 +02:00
Oliver Brakmann
6eade2dd3f Merge pull request #12261 from pchote/fix-server-gamespeed
Fix player joins resetting the server timestep.
2016-10-19 21:04:54 +02:00
reaperrr
d3a833a2e7 Merge pull request #12260 from pchote/fix-gps-desync
Fix a desync in GpsDot.IsTargetableBy.
2016-10-19 19:11:35 +02:00
Paul Chote
3d8cee3110 Fix player joins resetting the server timestep. 2016-10-18 23:50:46 +01:00
Paul Chote
83027c28d7 Fix a desync in GpsDot.IsTargetableBy.
World.ShroudExplores depends on RenderPlayer,
which makes it completely bogus for this purpose.
2016-10-18 22:12:13 +01:00
RoosterDragon
482285dde0 Merge pull request #12221 from entropai/bleed
Reverted build dirs in CSPROJ and removed the unneeded Afterbuild
2016-10-18 17:55:22 +01:00
SoScared
073cfeb200 fix map author name plus ore mine visibility tweak 2016-10-17 06:05:31 +02:00
Paul Chote
cba704dbcc Merge pull request #12171 from cjshmyr/minelayer-cloak-delay
Fix AP/AT mines being visible under fog
2016-10-16 05:25:12 +01:00
Tyson Liddell
5b620eeda5 Replaced civillians with technicians when ^ScienceBuilding sold 2016-10-16 14:46:03 +11:00
Tyson Liddell
f12a434a99 Added engineers to units produced when contruction yard sold 2016-10-16 14:46:03 +11:00
Tyson Liddell
8e0df586a2 Replaced civillians with Technicians when building sold and removed engineers from default sale of building 2016-10-16 14:46:02 +11:00
Paul Chote
dba5c2b432 Merge pull request #12141 from tysonliddell/bleed
Move production description from Tooltip to Buildable.
2016-10-16 04:39:45 +01:00
Tyson Liddell
90baf2871b Added Buildable Description to D2K construction yard 2016-10-16 12:10:22 +11:00
Tyson Liddell
8a760fedf2 Yaml files updated with Description moved from Tooltip to Buildable 2016-10-16 12:10:07 +11:00
Tyson Liddell
aeb1e07823 Moved production description from Tooltip to Buildable 2016-10-16 12:03:42 +11:00
abcdefg30
9bd23fa990 Let the Lonestar AI use the new Sell function instead of Destroy 2016-10-15 20:02:26 +02:00
Paul Chote
e9d2da948e Merge pull request #12189 from SoScared/MSubAATweak
Tweak SubMissileAA towards more traditional AA.
2016-10-15 15:56:41 +01:00
Paul Chote
eabd881ca3 Merge pull request #12129 from reaperrr/aircraft-ismoving
Change Aircraft.IsMoving to be true only when moving horizontally
2016-10-15 15:07:41 +01:00
reaperrr
7da3ecbb80 Merge pull request #12216 from MustaphaTR/ra-ai-changes2
RA - Some AI Improvements 2
2016-10-15 13:50:27 +02:00
abcdefg30
da591a9030 Merge pull request #11974 from abc013/SecondWeaponAnimation
Add support for multiple fire animations in WithInfantryBody
2016-10-15 12:49:41 +02:00
reaperrr
9b77732360 Merge pull request #12172 from abcdefg30/d2kLock
Fix the d2k protected lobby icon being off
2016-10-15 12:37:13 +02:00
abcdefg30
4199108910 Merge pull request #12220 from obrakmann/fix-yak-in-evacuation
Fix yak attack in Evacuation
2016-10-15 12:01:49 +02:00
Oliver Brakmann
0dc5090f0b Fix yak attacks in Evacuation 2016-10-14 19:21:31 +02:00
reaperrr
208a31470f Merge pull request #12160 from abcdefg30/hboxYak
Fix yaks trying to attack invalid targets
2016-10-14 18:55:37 +02:00
reaperrr
f9122c4a40 Merge pull request #12214 from RoosterDragon/mcv-build
Make sure AI can deploy an MCV when it lacks a base.
2016-10-14 18:23:27 +02:00
reaperrr
d1effe192d Merge pull request #12219 from pchote/fix-old-d2k-disc
Add support for an older/alternative d2k release.
2016-10-14 18:10:11 +02:00
reaperrr
302aaeaac9 Add sprite placeholder for TS ClusterMissile
Extracted from crate animation.
2016-10-14 17:05:30 +02:00
abc013
268dcd7d41 changed AttackSequence to DefaultAttackSequence 2016-10-14 14:53:02 +02:00
entropai
20c2b41f00 Reverted build dirs in CSPROJ and removed the unneeded Afterbuild section 2016-10-14 00:53:21 +03:00
Oliver Brakmann
ec939cbeda Merge pull request #12198 from abcdefg30/hijack
Fix soviet units not stopping to hunt after being captured in Exodus
2016-10-13 20:40:06 +02:00
Oliver Brakmann
09ba78a1c1 Merge pull request #12217 from abcdefg30/chinookHusk
Fix transport husks revealing more/less than the normal actor
2016-10-13 19:35:14 +02:00
Paul Chote
4f52d42380 Add support for an older/alternative d2k release. 2016-10-13 17:49:44 +01:00
SoScared
a17b1df3ba remove ore spots 2016-10-13 00:40:56 +02:00
abcdefg30
bf3441f5d6 Fix transport husks revealing more/less than the normal actor 2016-10-12 17:02:54 +02:00
Mustafa Alperen Seki
a2933808cc Make Rush AI don't build Helipad/Airfield 2016-10-12 14:43:36 +02:00
Mustafa Alperen Seki
c53a1cb0bc Limit Barracks counts for Naval AI. 2016-10-12 14:43:09 +02:00
Mustafa Alperen Seki
6bbca7ef0e Make AI Build Gap Generator 2016-10-12 14:42:24 +02:00
RoosterDragon
eb3f8c945c Make sure AI can deploy an MCV when it lacks a base. 2016-10-11 20:42:15 +01:00
abcdefg30
bfef8694a1 Add support for applying a target flash to actors through lua 2016-10-11 11:05:40 +02:00
Paul Chote
f66883c925 Merge pull request #11973 from Phrohdoh/csproj-afterbuild-targets
Fix AfterBuild tasks in csprojs
2016-10-11 02:51:47 +01:00
reaperrr
f82a40141e Merge pull request #12175 from abcdefg30/d2kChrome
Remove duplicated chrome yaml files from d2k
2016-10-09 22:32:02 +02:00
abcdefg30
d828e709d6 Fix soviet units not attack moving to their rally points
and remove unnecessary (duplicated) code from the tick function
(the call to IdleHunt inside SpawnSovietUnits is enough)
2016-10-09 22:05:41 +02:00
abcdefg30
97b8d68a12 Merge pull request #12193 from RoosterDragon/vs
Allow VS2015 to format solution file.
2016-10-09 19:32:15 +02:00
SoScared
d2147adb0d move AA towards traditional 2016-10-09 18:19:06 +02:00
RoosterDragon
0d2416b67a Allow VS2015 to format solution file. 2016-10-09 16:18:16 +01:00
reaperrr
22a90c546f Merge pull request #12161 from abcdefg30/uncloakDamage
Fix UncloakOn: Damage only working when the damage state changes
2016-10-09 16:21:21 +02:00
Oliver Brakmann
d0493bb10c Merge pull request #12068 from reaperrr/laser-features1
Add several features to LaserZap
2016-10-09 15:24:55 +02:00
reaperrr
64e1b1dbdb Sanitize TS Obelisk charge delay
This makes the Obelisk fire right at the end of the charge animation and sound.
2016-10-09 15:04:46 +02:00
reaperrr
e69ad1cb2d Add support for being blockable to LaserZap 2016-10-09 15:04:45 +02:00
reaperrr
2a00a606d2 Add support for inaccuracy to LaserZap 2016-10-09 15:04:43 +02:00
reaperrr
38b10511c3 Allow disabling target-tracking of lasers
This is necessary for features like inaccuracy.
2016-10-09 15:04:41 +02:00
reaperrr
76dc4eafd1 Enable secondary laser beam glow for Obelisks and Laser Turrets in TS 2016-10-09 15:04:40 +02:00
reaperrr
6b3c3cd127 Add SecondaryBeam to LaserZap for TS-like laser glow effect 2016-10-09 15:04:38 +02:00
reaperrr
a98818ef47 Rename LaserZap.BeamDuration to Duration 2016-10-09 15:04:36 +02:00
reaperrr
dba41a3ad1 Merge pull request #12168 from pchote/fix-range-circles
Work around an initialisation order conflict in RenderRangeCircle.
2016-10-09 14:13:03 +02:00
abc013
e0ea898845 Fixed tiling errors in the map "doubles" 2016-10-09 13:53:00 +02:00
Oliver Brakmann
ffe7c96a37 Merge pull request #12052 from clemty/minustwofix
TD: Minus Two: terrain fix, replace temperat trees with desert trees
2016-10-09 13:45:01 +02:00
Oliver Brakmann
e291334351 Merge pull request #12044 from Mailaender/oars
Added Open Age Ratings Service metadata
2016-10-09 13:25:41 +02:00
Oliver Brakmann
1eea3982a9 Merge pull request #12138 from LipkeGu/FixHeader-LAA
FixHeader: Add support for "/LargeAddressAware"
2016-10-09 13:06:17 +02:00
abcdefg30
648f06af0f Fix soviet units not stopping to hunt after being captured in Exodus 2016-10-08 21:11:24 +02:00
abcdefg30
a9ae36b691 Make HIJACKER unbuildable in the Evacuation mission
We don't allow building Mechanics as well
2016-10-08 21:07:26 +02:00
Oliver Brakmann
420bf21660 Merge pull request #12169 from pchote/fix-badr-healthbars
Fix non-selectable support actor health bars.
2016-10-08 15:31:37 +02:00
abcdefg30
7ca5f31b61 Merge pull request #12167 from RoosterDragon/devices-marshalling
Marshal results in QueryDevices correctly
2016-10-07 16:14:05 +02:00
Oliver Brakmann
11c30e7cb0 Merge pull request #12144 from abcdefg30/shroudText
Fix floating text showing up beneath shroud
2016-10-06 21:29:56 +02:00
Matthias Mailänder
9c34488cba Update to Mono version 4.6.1 2016-10-06 06:23:42 +02:00
abcdefg30
90e6a69152 Rename the airfield parameter to destination 2016-10-05 16:05:56 +02:00
abcdefg30
8282dc95b1 Remove duplicated chrome yaml files from d2k 2016-10-04 15:12:40 +02:00
abcdefg30
a37bba8dea Fix the d2k color and hue picker lobby icon being off 2016-10-04 14:59:27 +02:00
abcdefg30
ca413fa9fd Fix the d2k lobby spawn points being off 2016-10-04 14:44:32 +02:00
Guido Lipke
ab8c35123b [Lint] Report when Maps contains invalid custom rules.
Report when Maps contains invalid custom rules.
2016-10-04 14:39:21 +02:00
abcdefg30
028720df9f Fix the d2k protected lobby icon being off 2016-10-04 11:00:43 +02:00
abcdefg30
47968aabdc Fix yaks trying to attack invalid targets 2016-10-04 10:04:59 +02:00
abcdefg30
5d2a6ff2e7 Add a CanTarget method to lua 2016-10-04 10:02:18 +02:00
abcdefg30
3ac6739a8d Target.FromActor never returns a TargetType.FrozenActor 2016-10-04 10:00:01 +02:00
Curtis Shmyr
c7af6069b9 Gives ^Mine HiddenUnderFog and 0 initial cloak delay 2016-10-03 19:47:44 -06:00
Paul Chote
de856f8c1a Fix non-selectable support actor health bars. 2016-10-04 01:43:15 +01:00
Paul Chote
4ed78e1ff6 Work around an initialisation order conflict. 2016-10-04 01:13:32 +01:00
RoosterDragon
c79ccab1ba Marshal results in QueryDevices correctly. 2016-10-03 21:47:42 +01:00
Matthias Mailänder
098f2c63b8 Add Open Age Ratings Service metadata. 2016-10-03 18:14:35 +02:00
abcdefg30
c7feed2b19 Merge pull request #12151 from pchote/sha1
Extract a common SHA1 helper.
2016-10-03 16:22:14 +02:00
abcdefg30
55143ced87 Fix HeliReturnToBase not exposing an host actor parameter 2016-10-03 14:56:52 +02:00
abcdefg30
d57c476eaa Fix UncloakOn: Damage only working when the damage state changes 2016-10-03 14:35:38 +02:00
abcdefg30
5acbe91221 Merge pull request #12152 from pchote/fix-lineendings
Fix line endings in LobbyLogic.
2016-10-03 13:23:41 +02:00
Curtis Shmyr
f0697d6396 Support subtraction of two CPos in Lua 2016-10-02 16:22:50 -06:00
reaperrr
9458818073 Fix sprite barrels ignoring turret/actor orientation in previews
Affects color picker, map editor and transport via TS carryall or TD landing craft.
2016-10-02 21:19:18 +02:00
reaperrr
16d4ee0034 Move IsMovingVertically to IMove
- avoids an Aircraft trait look-up in #11886
- potentially useful for future additional locomotors (jumpjet), custom locomotors in external mods, possibly future updates to default ground locomotor (Mobile) with regard to behavior on slopes
2016-10-02 20:27:03 +02:00
reaperrr
8ecf158b62 Merge pull request #12153 from pchote/game-tidy
Minor Game style fixes.
2016-10-02 18:11:10 +02:00
Paul Chote
9e8b18e7be Extract a common SHA1 helper. 2016-10-02 12:53:41 +01:00
Paul Chote
1a83b5c0c0 Remove unnecessary using. 2016-10-02 12:48:26 +01:00
Paul Chote
45214b2c22 Remove unnecessary Game. references in Game. 2016-10-02 12:48:25 +01:00
Paul Chote
95c3276b06 Fix line endings in LobbyLogic. 2016-10-02 11:54:14 +01:00
Paul Chote
31bdb1495d Prevent TickRender from running before the world's first Tick. 2016-10-02 00:46:20 +01:00
abcdefg30
fbebb6d851 Fix floating text showing up beneath shroud 2016-10-01 22:36:25 +02:00
Oliver Brakmann
0d54f2994f Merge pull request #12086 from pchote/fake-spy-infiltration
Fix spy infiltration cursor giving away fake buildings.
2016-10-01 20:20:44 +02:00
Guido L
86ac94bf32 FixHeader: Add support for "/LargeAddressAware" 2016-10-01 01:25:23 +02:00
abc013
78305ca7d6 Fix the secondary weapon of e3 being named "primary" 2016-09-30 22:18:17 +02:00
abc013
ebb1c45786 Added an AttackSequences property to WithInfantryBody 2016-09-30 22:18:16 +02:00
Oliver Brakmann
45f779e9c0 Merge pull request #11991 from abcdefg30/ion
Fix the IonCannonPower not playing all launch sounds
2016-09-30 17:02:27 +02:00
Oliver Brakmann
df8175d9fb Merge pull request #12092 from LipkeGu/installer-fix-typo-ts
[Installer] TS: Fix EOF and Typo
2016-09-30 16:23:32 +02:00
abcdefg30
279be831ff Merge pull request #12116 from obrakmann/fix11925_log-unknown-orders
Log unknown orders instead of crashing with an NIE
2016-09-30 16:11:55 +02:00
Oliver Brakmann
65b919a7ae Merge pull request #12062 from abc013/VoxelShadows
Added a flag ShowShadow in WithVoxelBarrel, WithVoxelBody, …
2016-09-30 16:04:30 +02:00
Oliver Brakmann
8a86e046ca Merge pull request #12104 from reaperrr/fix-TS-stop
Add missing UnitCommand widget to TS
2016-09-30 15:53:36 +02:00
reaperrr
457dc647f6 Reduce TS missile.yaml footprint and tweak flight behavior to be much closer to original
- much lower launch speed and maximum speed
- much higher launch angle and cruise altitude, doubled vertical rate of turn to make up for it
- increased RangeLimit, especially for AA-only missiles
- fixed Bike warhead Spread to match other missiles
- fixed SAm site missile explosion to match original
- fixed damage warheads of AA-only missile to be valid against ground as well (to avoid not damaging aircraft that just landed after the missile was launched)
2016-09-30 05:53:11 +02:00
reaperrr
effeddda14 Fix TS Bazooka infantry and Bike firing offsets 2016-09-30 04:11:08 +02:00
reaperrr
40c2aaa1c6 Fix Z-sorting of several effects in TS 2016-09-30 03:11:29 +02:00
reaperrr
09baf2c119 Change large TS explosions to use alpha transparency 2016-09-30 03:10:51 +02:00
reaperrr
fc17297a39 Fix Cyborg Commando weapon explosion to match original 2016-09-30 03:10:14 +02:00
reaperrr
b9da5d5f81 Fix Tick Tank and Titan gun explosions to match original 2016-09-30 02:36:58 +02:00
reaperrr
345bc9e17e Fix palette, Z-sorting and sound of TS Ion Cannon 2016-09-30 02:15:12 +02:00
reaperrr
8c67a32dd9 Set Ion Cannon ChargeTime to its original value 2016-09-30 02:13:10 +02:00
reaperrr
805e78a672 Add static alpha effect palettes to TS for 25, 50 and 75% alpha 2016-09-30 02:12:25 +02:00
Paul Chote
c781061300 Allow spys to infiltrate fake structures in RA. 2016-09-29 23:17:11 +01:00
Paul Chote
abf837a934 Add InfiltrateForDecoration trait. 2016-09-29 22:58:00 +01:00
reaperrr
4b8700bb97 Remove work-around for aircraft from WithMoveAnimation 2016-09-29 22:55:52 +02:00
reaperrr
9cf916e8b6 Change Aircraft.IsMoving to only return true when moving horizontally
Additionally added IsMovingVertically for potential edge cases where vertical movement needs to be considered.
2016-09-29 22:16:24 +02:00
reaperrr
6571f926fb Aircraft.ReserveSpawnBuilding style fixes 2016-09-29 21:21:34 +02:00
reaperrr
888d7c638f Move Aircraft.firstTick above constructor 2016-09-29 21:16:30 +02:00
reaperrr
678f9563f6 Merge pull request #12103 from pchote/resource-tooltip
Add tooltips to map resources.
2016-09-29 18:36:00 +02:00
reaperrr
11728df14e Merge pull request #12106 from SoScared/MSubAA
[RA] AA Missile Sub + Tweak
2016-09-28 13:29:23 +02:00
Jonas A. Lind
83d4cc15f3 Changed MSUB Description
Simplified initial text and fixed strong/weak vs.
2016-09-28 04:26:30 +02:00
Oliver Brakmann
d1ef1ed1ba Log unknown orders instead of crashing with an NIE 2016-09-26 20:39:01 +02:00
Oliver Brakmann
bea2b5cc91 Merge pull request #12102 from pchote/more-resupply-tweaks
Tweak aircraft resupply behaviour.
2016-09-26 19:03:46 +02:00
Paul Chote
34b10dcb77 Hack around the Lua API. 2016-09-26 17:48:25 +01:00
Oliver Brakmann
ae6b82a677 Merge pull request #12107 from pchote/fix-atan-overflow
Fix integer overflows in Wangle.ArcTan.
2016-09-26 18:35:54 +02:00
reaperrr
98de6330e8 Merge pull request #11928 from abcdefg30/stand3
Rename stand3 to liedown
2016-09-26 16:32:07 +02:00
abcdefg30
26b5d28920 Drop the -0 suffix of all standup sequences 2016-09-26 15:36:18 +02:00
abcdefg30
27d5af5497 Rename stand3 to liedown 2016-09-26 15:32:18 +02:00
abcdefg30
0ea9170021 Merge pull request #12110 from reaperrr/fix-laserzap
Fix LaserZap not being removed if HitAnim is not defined
2016-09-26 14:50:43 +02:00
abcdefg30
5f9c2a17e9 Merge pull request #12098 from Phrohdoh/ab-err-label
Display error in Asset Browser instead of crashing
2016-09-26 13:15:26 +02:00
reaperrr
d080770828 Fix LaserZap not being removed if HitAnim is not defined
This avoids degrading performance over time as well as an (albeit unlikely) OutOfMemoryException.
2016-09-26 01:36:02 +02:00
Taryn Hill
b5a08fd123 Display an error label instead of crashing in the Asset Browser 2016-09-25 15:53:40 -05:00
Paul Chote
b680a97d2c Fix integer overflows in Wangle.ArcTan. 2016-09-25 21:24:34 +01:00
reaperrr
ba02bf43b2 Merge pull request #12040 from SoScared/solidchanges
Add RA balance changes to the next playtest/release.
2016-09-25 21:56:46 +02:00
SoScared
cba38816ee AA Missile Sub + Tweak 2016-09-25 21:48:01 +02:00
reaperrr
f93779977f Add UnitCommand widget to TS
Fixes units ignoring Stop command.
2016-09-25 20:30:56 +02:00
Paul Chote
365bd5b9bd Rename ResourceType trait fields for consistency. 2016-09-25 17:04:18 +01:00
Paul Chote
fdc6ea4564 Add trait descriptions to ResourceType. 2016-09-25 17:04:17 +01:00
Paul Chote
404d8235c8 Show a tooltip over map resources. 2016-09-25 17:04:17 +01:00
Paul Chote
74602474e3 Change shroud tooltip to match the original games. 2016-09-25 17:04:16 +01:00
Paul Chote
3487d6bad5 Change aircraft default to move to rally point after resupplying. 2016-09-25 15:57:18 +01:00
Paul Chote
ea65ac542e Add AbortOnResupply property to cancel aircraft activities on resupply. 2016-09-25 15:57:17 +01:00
Paul Chote
6eafaeecf6 Remove unnecessarily queued ResupplyAircraft activity. 2016-09-25 15:57:17 +01:00
Paul Chote
eeaa461311 Avoid landing-dances when issuing mixed full/empty aircraft RTB orders. 2016-09-25 15:57:16 +01:00
Paul Chote
2d00a24855 Merge pull request #12100 from Mailaender/mono-4.6
Updated Mono to version 4.6.0
2016-09-25 15:17:50 +01:00
Matthias Mailänder
87fd196cca Update Mono to version 4.6.0 2016-09-25 08:01:23 +02:00
SoScared
f73d8481a7 Camo Pillbox HP 450 2016-09-25 00:44:34 +02:00
SoScared
a5aecf1da4 Mammoth Tank speed 50 2016-09-25 00:43:18 +02:00
reaperrr
0ffde88aad Merge pull request #12094 from pchote/work-around-smudge-desync
Use CosmeticRandom for picking smudge type.
2016-09-24 20:47:55 +02:00
reaperrr
8f2657ec75 Merge pull request #11982 from obrakmann/fix11979-helicopter-reservations
Fix helicopter reservations
2016-09-24 20:24:35 +02:00
Paul Chote
cd99e78501 Use CosmeticRandom for picking smudge type. 2016-09-24 14:00:36 +01:00
Guido L
fbd362b1a4 Fix EOF and Typo 2016-09-24 13:37:13 +02:00
reaperrr
b7dd321550 Merge pull request #11993 from pchote/missiondata
Report mission briefings in the mp lobby.
2016-09-23 22:50:59 +02:00
reaperrr
d762e54e2a Merge pull request #12070 from abcdefg30/chevrons
Render WithDecoration above shroud
2016-09-23 21:32:50 +02:00
Paul Chote
923cde7d21 Report mission briefings in the mp lobby. 2016-09-23 19:51:07 +01:00
RoosterDragon
1dd7f3e890 Merge pull request #12084 from obrakmann/fix12078_ai-production-snafu
Fix AI still producing units with captured factories in Nod missions
2016-09-23 19:40:39 +01:00
RoosterDragon
1993ee25b8 Merge pull request #12085 from pchote/repair-range-check
Add a range check to Repair.
2016-09-23 18:56:24 +01:00
RoosterDragon
4d6f70f973 Merge pull request #12026 from obrakmann/fix11986-mp-mission-joining
Fix kicking players joining servers hosting a map with non-default rules
2016-09-23 18:45:28 +01:00
RoosterDragon
149a10c6b1 Merge pull request #12079 from pchote/fix-control-groups
Fix sprite control group decoration position.
2016-09-23 18:32:44 +01:00
Paul Chote
df98260e1a Merge pull request #12021 from abcdefg30/radarSpec
Fix spectators not being able to issue commands in TD
2016-09-22 17:51:15 +01:00
abcdefg30
b21cf1fdb2 Render WithDecoration above shroud 2016-09-22 14:33:35 +02:00
Paul Chote
323ed98a15 Add a range check to Repair. 2016-09-21 18:25:23 +01:00
Oliver Brakmann
fca4534525 Fix AI still producing units with captured factories in Nod missions 2016-09-21 18:58:19 +02:00
Oliver Brakmann
90e3912bcd Merge pull request #12076 from pchote/fix-orphaned-pings
Clean up ClientPings when a player drops from the server.
2016-09-21 18:17:26 +02:00
Oliver Brakmann
8e764441dc Merge pull request #12071 from abcdefg30/noBeacons
Fix beacons not being cancelable
2016-09-21 18:12:50 +02:00
Oliver Brakmann
e108305f4e Merge pull request #12074 from RoosterDragon/runtime-long
Change Game.RunTime to a long to prevent overflow
2016-09-21 18:07:52 +02:00
Oliver Brakmann
92ec538208 Merge pull request #12077 from pchote/crashlog-dates
Include dates in crash/sync log filenames.
2016-09-21 17:54:06 +02:00
Oliver Brakmann
b53874fc8e Merge pull request #12075 from pchote/fix-grey-ping-of-death
Read data from *all* connections to the server.
2016-09-21 17:45:59 +02:00
Oliver Brakmann
999ddab5a4 Merge pull request #12080 from pchote/fix-d2k-crown
Fix d2k lobby admin icon.
2016-09-21 17:11:33 +02:00
Paul Chote
94de961175 Converting dates to string using the InvariantCulture. 2016-09-21 14:52:05 +01:00
Paul Chote
fb876b8b83 Fix d2k lobby admin icon. 2016-09-21 14:41:48 +01:00
Paul Chote
5e974b4959 Fix control group decoration position. 2016-09-21 14:39:44 +01:00
Paul Chote
bfa0c008eb Restore missing GameUid. 2016-09-21 05:09:16 +01:00
Paul Chote
b44d1be554 Timestamp syncreport and exception log files. 2016-09-21 04:57:13 +01:00
Paul Chote
c1e1ee0938 Merge pull request #12066 from chrisforbes/preview-server-crash-fix-bleed
server: Fix server getting wedged after map query with bad minimap
2016-09-21 04:05:59 +01:00
Paul Chote
709bd5b441 Clean up ClientPings when a player drops from the server. 2016-09-20 21:13:07 +01:00
Paul Chote
093053fd93 Read data from *all* connections to the server. 2016-09-20 20:55:52 +01:00
RoosterDragon
2ffea5db54 Change Game.RunTime to a long to prevent overflow. 2016-09-20 19:06:10 +01:00
Oliver Brakmann
57ceda3025 Merge pull request #11926 from abc013/JamsRadarStances
Added diplomatic stances to JamsRadar
2016-09-20 19:24:57 +02:00
Oliver Brakmann
e6b0557420 Merge pull request #12067 from reaperrr/add-UP
Add UnknownProgrammer to AUTHORS
2016-09-20 19:24:03 +02:00
Oliver Brakmann
5e96be5743 Merge pull request #12007 from RoosterDragon/mix-file-all
Allow MixFile to support all stream types
2016-09-20 19:18:35 +02:00
abcdefg30
9142452922 Fix beacons not being cancelable 2016-09-20 18:11:25 +02:00
reaperrr
5463176fa3 Adapt LaserZap Color description and Args structure
To match AreaBeam.
2016-09-20 17:25:28 +02:00
reaperrr
7f5dadd420 Add UnknownProgrammer to AUTHORS 2016-09-20 15:24:40 +02:00
abc013
b9d1f373fe Added a flag ShowShadow in WithVoxelBarrel, WithVoxelBody, WithVoxelTurret, WithVoxelUnloadBody and WithVoxelWalkerBody 2016-09-20 13:34:05 +02:00
abc013
353e61378a Added diplomatic stances to JamsRadar 2016-09-20 13:08:42 +02:00
Paul Chote
095b093f39 Merge pull request #12046 from obrakmann/fix11996_spy-exodus-crash
Fix crashing when a spy's "real" owner gets changed
2016-09-20 09:15:20 +01:00
Chris Forbes
5b793e0455 server: Fix server getting wedged after map query with bad minimap
If the mapserver returned an unusable minimap blob, we'd end up dropping
the resulting exceptions on the floor, and committing a completely broken
MapPreview, which would then blow up the tail end of the map change
process, and all future ValidateClient calls after players join (which
itself was handled by kicking the player and logging some noise of dubious
value).

Adjusts exception handling in a number of places to log the exception
rather than dropping it on the floor, and makes the mapserver response
parsing tolerant of bogus minimap blobs -- in this case, we'd rather just
have no minimap.

Candidate for stable, as it fixes a bug present in the current release and
the current playtest series.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
2016-09-20 19:28:31 +12:00
RoosterDragon
e65c73785e Allow MixFile to support all stream types again, not just FileStream. 2016-09-20 07:41:31 +01:00
Oliver Brakmann
8fabd6cff1 Merge pull request #11932 from Mailaender/sharpfont-4.0.1
Updated SharpFont to version 4.0.1
2016-09-19 22:19:24 +02:00
Oliver Brakmann
4e76d9cc0b Merge pull request #11909 from pchote/colormap-depth
Use the MATLAB Jet colormap for displaying depth data.
2016-09-19 21:25:08 +02:00
Oliver Brakmann
55e35d7be9 Merge pull request #12056 from Mailaender/keep-syncreport.log-fix
Fixed a crash when no sync report is available
2016-09-19 20:01:52 +02:00
Matthias Mailänder
56fa1ab0e3 Fix a crash when no sync report is available. 2016-09-18 17:43:22 +02:00
reaperrr
af125d64df Merge pull request #12014 from RoosterDragon/better-oom-logs
Improve out-of-memory logging
2016-09-18 16:38:24 +02:00
reaperrr
b10cf35972 Merge pull request #12051 from obrakmann/fix12035-selling-airfield-during-rearm-lockage
Fix locking an airfield that is rearming aircraft while being sold
2016-09-18 16:15:46 +02:00
Oliver Brakmann
b1f36b0122 Merge pull request #12041 from abcdefg30/musicReset
Fix the music resetting from time to time
2016-09-18 15:57:17 +02:00
reaperrr
e53180fdbc Merge pull request #12036 from obrakmann/fix12031-close-chat-in-replays
Fix not being able to close the chat window in replays
2016-09-18 15:28:28 +02:00
reaperrr
32e54cd30c Merge pull request #12038 from pchote/fix-readfailure-crash
Don't crash if a replay can't be read.
2016-09-18 15:22:38 +02:00
clemty
6a3a195614 Replaces temperat trees with desert trees 2016-09-18 15:01:37 +02:00
abcdefg30
05899b5b0e Split a UnitCommandWidget from WorldCommandWidget 2016-09-18 14:55:59 +02:00
abcdefg30
e511faa2ea Fix spectators not being able to issue commands in TD 2016-09-18 14:55:58 +02:00
Oliver Brakmann
a4a726c19a Remove workarounds for ownership change breakage from 'Infiltration' 2016-09-18 14:27:18 +02:00
Oliver Brakmann
d099aa0d46 Fix crashing when a spy's "real" owner gets changed 2016-09-18 14:27:18 +02:00
Oliver Brakmann
88a4f73bdc Add advisory upgrade rule for WithRearmAnimation 2016-09-18 14:20:58 +02:00
reaperrr
1079adcf2b Merge pull request #12027 from pchote/fix-cwd-crash
Fix crash when launching from a different directory than the game binary.
2016-09-18 14:15:45 +02:00
reaperrr
d3de132dbb Merge pull request #11916 from pchote/fix-heightmap-aistrike
Account for terrain height in AttackBomber.
2016-09-18 13:52:40 +02:00
Oliver Brakmann
b598e31d4b Add WithRearmAnimation to buildings that need it 2016-09-18 13:48:17 +02:00
Oliver Brakmann
ab8c1403a8 Fix locking an airfield that is rearming aircraft while being sold 2016-09-18 13:48:17 +02:00
reaperrr
b820f421c0 Merge pull request #11821 from UnknownProgrammer/patch-1
Fix for System Overflow exception
2016-09-18 13:12:59 +02:00
Oliver Brakmann
f1bdcca91d Merge pull request #12050 from pchote/rename-pseudofullscreen
Give window modes human-friendly names.
2016-09-18 12:32:08 +02:00
reaperrr
2de7a4956d Merge pull request #11975 from alercah/metrics-fix
Move most UI metrics to common.
2016-09-18 12:30:26 +02:00
Paul Chote
9063e44f9b Improve error message. 2016-09-18 11:24:32 +01:00
reaperrr
ec7a236dbd Merge pull request #11950 from Mailaender/lowbridge-polish
Fixed building placement on Tiberian Sun low bridges
2016-09-18 12:19:15 +02:00
Paul Chote
4077446d27 Give window modes human-friendly names.
* Fullscreen -> Fullscreen (Legacy)
* Pseudo-fullscreen -> Fullscreen
2016-09-18 11:16:50 +01:00
Matthias Mailänder
72764c2473 Don't show broken bridges on the radar. 2016-09-18 10:07:56 +02:00
Matthias Mailänder
c7667f42b2 Disallow building placement on bridges and fix radar color. 2016-09-18 10:07:51 +02:00
Matthias Mailänder
fd068c3f9f Require the Terrain to be set for RadarColorFromTerrain. 2016-09-18 10:07:51 +02:00
abcdefg30
16776e8a97 Fix the music resetting from time to time 2016-09-17 19:43:09 +02:00
Oliver Brakmann
f5c015f51a Merge pull request #12030 from pchote/fix-tfd-detection
Work around incorrect mono drive detection under OSX.
2016-09-17 18:22:27 +02:00
Oliver Brakmann
aa68e9bfca Fix not being able to close the chat window in replays 2016-09-17 15:05:00 +02:00
reaperrr
6d3ae5fcfe Merge pull request #12029 from pchote/fix-check-yaml
Fix explicit oramap path lint checking.
2016-09-17 14:09:11 +02:00
Paul Chote
099492a52f Don't crash if a replay can't be read. 2016-09-16 18:30:19 +01:00
Paul Chote
7b4ddfcd63 Merge pull request #12037 from obrakmann/fix11971_rename-disable-experience-yaml
Remove 'campaign-' prefix from disable-experience.yaml files
2016-09-16 17:31:51 +01:00
Oliver Brakmann
47a24e7ad4 Remove 'campaign-' prefix from disable-experience.yaml files 2016-09-16 18:27:20 +02:00
RoosterDragon
696d783a67 Improve out-of-memory logging with more details.
Also ensure that when OpenGL gives an out-of-memory error, we throw an OutOfMemoryException so the improved logging is triggered here too.
2016-09-16 07:35:08 +01:00
Oliver Brakmann
852d947764 Fix setting MayYieldReservation when there is no reservation 2016-09-15 21:10:47 +02:00
Paul Chote
af0249f2ae Merge pull request #12015 from RoosterDragon/better-exceptions
Improve some exception types
2016-09-15 19:31:48 +01:00
Paul Chote
aab91cb37e Work around incorrect mono behaviour under OSX. 2016-09-14 21:48:40 +01:00
Paul Chote
8a1987eb5c Fix explicit oramap path lint checking. 2016-09-14 21:25:44 +01:00
Oliver Brakmann
082ccfe5d6 Fix kicking players joining servers hosting a map with non-default rules
Specifically, rules that remove traits which implement ILobbyOptions
2016-09-14 22:04:40 +02:00
Paul Chote
632b277a0e Other misc fixes in Platform. 2016-09-14 20:55:33 +01:00
Paul Chote
1eac43fa6d Fix string comparison cultures in Platform. 2016-09-14 20:54:48 +01:00
Paul Chote
6deb49e095 Resolve a bare "." to the game install path. 2016-09-14 19:44:57 +01:00
Oliver Brakmann
634faa31de Merge pull request #12023 from abcdefg30/disabledC17
Remove duplicated "Prerequisites: ~disabled" fields from the TD campaign
2016-09-13 19:25:17 +02:00
abcdefg30
961a6d2650 Remove duplicated "Prerequisites: ~disabled" fields from the TD campaign 2016-09-13 14:22:10 +02:00
abcdefg30
348249119a Play all IonCannonPower launch sounds using the new helper method 2016-09-12 23:33:47 +02:00
abcdefg30
41bc3b20ba Add a new OnFireSound property to IonCannonPower
This replaces the hacky use of LaunchSound
2016-09-12 23:33:37 +02:00
abcdefg30
b6dc30ca93 Add support for playing the weapon report of the ion cannon 2016-09-12 23:28:25 +02:00
Oliver Brakmann
9fbda6b598 Fix helicopters not taking off when their target got covered by shroud 2016-09-12 23:01:16 +02:00
Oliver Brakmann
bd3c6c1c6b Merge pull request #11989 from abcdefg30/launchDetection
Fix the support power SpeechNotifications not being played to the correct player
2016-09-12 19:12:28 +02:00
abcdefg30
e80e84aeba Merge pull request #12003 from MustaphaTR/d2k-fix-sardaukar-prerequisite
D2K - Fix Sardaukar's prerequisite
2016-09-12 15:33:46 +02:00
abcdefg30
620e005cfd Create a PlayLaunchSounds method in SupportPower.cs 2016-09-12 14:47:54 +02:00
abcdefg30
08d84c5b90 Fix the support power SpeechNotifications not being played to the correct player 2016-09-12 14:42:45 +02:00
reaperrr
ed8b62a7fc Merge pull request #11904 from pchote/depthbuffer-part-two
Enable per-pixel depth calculations in TS
2016-09-12 02:06:41 +02:00
RoosterDragon
9f1c872340 Improve some exception types. 2016-09-11 15:14:44 +01:00
Oliver Brakmann
adc968db76 Merge pull request #11992 from abcdefg30/LZRange
Remove bogus LZRange field and unnecessary ParaDrop definition
2016-09-09 21:35:19 +02:00
Oliver Brakmann
a10fd29253 Merge pull request #11985 from Mailaender/keep-syncreport.log
Fixed game restart deleting the syncreport.log
2016-09-09 21:31:22 +02:00
Oliver Brakmann
b6aac234d4 Merge pull request #11970 from pchote/fix-observer-stats-scroll
Fix bogus observer stats graph positioning.
2016-09-09 21:15:25 +02:00
Mustafa Alperen Seki
48090c7ab8 Fix Sardaukar's prerequisite 2016-09-09 16:48:46 +02:00
reaperrr
1988990c7a Merge pull request #11990 from abcdefg30/margins
Remove the TopBottomSpacing from the score screen player list
2016-09-09 12:11:38 +02:00
reaperrr
b7f35cb5e2 Merge pull request #11912 from Mailaender/laser-transparency
Fixed transparency for LaserZap
2016-09-08 19:14:37 +02:00
abcdefg30
db4869812b Merge pull request #11994 from clemty/gdi07fixes
gdi07 map yaml polish
2016-09-07 23:50:40 +02:00
abcdefg30
fe91629d25 Remove a bogus LZRange field together with an unnecessary ParaDrop definition 2016-09-07 23:38:00 +02:00
clemty
b2e319663e gdi07 map yaml polish 2016-09-07 00:33:06 +02:00
abcdefg30
d5e6c1f427 Remove the TopBottomSpacing from the score screen player list 2016-09-06 14:21:11 +02:00
Taryn Hill
a1216f8197 Remove pdb files in make.ps1's clean target 2016-09-05 16:37:44 -05:00
Taryn Hill
b3f8e8f87b Game csproj: Use MSBuild tasks instead of shelling out 2016-09-05 16:35:43 -05:00
Taryn Hill
7433ca5380 Change OpenRA.Game's output path to bin\$(Configuration) 2016-09-05 16:35:43 -05:00
Taryn Hill
cacb2a304a TS csproj: Use MSBuild tasks instead of shelling out 2016-09-05 16:35:43 -05:00
Taryn Hill
1cfe9ed512 Common csproj: Use MSBuild tasks instead of shelling out 2016-09-05 16:35:43 -05:00
Taryn Hill
5308a25ab9 D2k csproj: Use MSBuild tasks instead of shelling out 2016-09-05 16:35:42 -05:00
Taryn Hill
69c919943f CnC csproj: Use MSBuild tasks instead of shelling out 2016-09-05 16:35:42 -05:00
Taryn Hill
7049b89288 RA csproj: Use MSBuild tasks instead of shelling out 2016-09-05 16:35:42 -05:00
Taryn Hill
f054892c8a Add mods/*/*.pdb to gitignore 2016-09-05 16:35:42 -05:00
abcdefg30
3849b91e8f Merge pull request #11983 from abc013/JamsMissilesFix
Fixed enemy missiles not being deflected by Radar Jammers
2016-09-05 22:18:18 +02:00
Matthias Mailänder
66f4db93c1 Only save a syncreport.log when a desync occurs. 2016-09-05 21:59:50 +02:00
Oliver Brakmann
daa1f16e98 Prevent an infinite loop when planes go out of ammo and all airfields are gone 2016-09-05 19:59:01 +02:00
abc013
464eae8bc4 Fixed enemy missiles not being deflected by Radar Jammers 2016-09-05 19:52:13 +02:00
Alexis Hunt
ef8b672f51 Move most UI metrics to common.
This reduces the odds that a third-party mod will crash due to missing
one of them. Eliminates ra2#291.
2016-09-05 13:38:40 -04:00
Oliver Brakmann
351c231693 Use the yield reservation logic for helicopters as well. Oops. 2016-09-05 19:24:26 +02:00
Oliver Brakmann
fb1f8c4e01 Remove brain-dead logic from TakeOff
1. TakeOff's Tick() method never checks itself whether it is canceled
2. If NextActivity is null, TakeOff is the only activity on the queue
3. Takeoff canceling the queue then just cancels itself, with no effect at all

4. If Takeoff however is running as an inner activity, it will cancel the complete main queue, wrecking all sorts of havoc
2016-09-05 19:20:51 +02:00
Paul Chote
3197345fc3 Fix bogus observer stats graph positioning. 2016-09-04 19:31:04 +01:00
UnknownProgrammer
65fe88daef used clamp instead of Math.Min/Math.Max construct
clarified naming
restored comments
removed blank line
2016-09-03 15:27:04 +02:00
Matthias Mailänder
d1ff40bcca Update SharpFont to version 4.0.1 2016-09-01 07:21:19 +02:00
Paul Chote
4a1f66569b Account for terrain height in AttackBomber. 2016-08-29 10:37:27 +01:00
Paul Chote
074edc9d50 Fix missing cabhut shadow. 2016-08-28 18:49:25 +01:00
Paul Chote
75c6cf7c75 Fix tree depth offsets. 2016-08-28 18:46:21 +01:00
Paul Chote
0727cd46b5 Fix crate depth offset. 2016-08-28 16:28:29 +01:00
Paul Chote
d1b7d0e0fb Use the MATLAB Jet colormap for displaying depth data. 2016-08-28 11:52:16 +01:00
Matthias Mailänder
e9eefcbc1b Add transparency to the Nod laser turret beam. 2016-08-28 12:41:02 +02:00
Matthias Mailänder
fc7e149401 The color definition changed to hex notation. 2016-08-28 12:23:40 +02:00
Matthias Mailänder
e4491a7957 Remove hard-coded LaserZap transparency. 2016-08-28 12:22:45 +02:00
Paul Chote
2c564d133e Enable depth buffer in TS. 2016-08-27 19:14:00 +01:00
Paul Chote
103e8075f2 Fix building EMP overlay depth offsets. 2016-08-27 19:14:00 +01:00
Paul Chote
66fbc0dfc4 Fix vehicle EMP overlay depth offset. 2016-08-27 19:13:59 +01:00
Paul Chote
8b6a355850 Fix tick tank depth offsets. 2016-08-27 19:13:59 +01:00
Paul Chote
a2239b5d46 Fix titan depth offsets. 2016-08-27 19:13:59 +01:00
Paul Chote
31351d825c Fix tunnel top depth metadata. 2016-08-27 19:13:59 +01:00
Paul Chote
f0adbac5a0 Fix infantry depth metadata. 2016-08-27 19:13:59 +01:00
Paul Chote
baf5a8ebe2 Fix explosion depth metadata. 2016-08-27 19:13:59 +01:00
Paul Chote
4e5c1deb5d Fix harvester harvest animation. 2016-08-27 19:13:58 +01:00
Paul Chote
1ff1435953 Set Offset on wake and resources. 2016-08-27 19:13:58 +01:00
Paul Chote
b52a81210e Set ZRamp on overlays. 2016-08-27 19:13:58 +01:00
Paul Chote
b066b88281 Set ZRamp on craters. 2016-08-27 19:13:58 +01:00
UnknownProgrammer
333e8bae42 Fix for System Overflow exception
caused by casting a greater than int.MaxValue decimal to int. Fix limits offset to int.MaxValue respectively int.MinValue.
2016-08-15 22:52:12 +02:00
2287 changed files with 108644 additions and 36182 deletions

16
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,16 @@
Thank you for your contribution to OpenRA!
Please be aware that we do not have enough project maintainers to match the rate of contributions, so it may take several days before somebody is able to respond to your Pull Request.
You can help speed up the review process by following a few steps:
* Make sure that you have read and understand the OpenRA Coding Standard (see https://github.com/OpenRA/OpenRA/wiki/Coding-Standard).
* Write quality commit messages (see https://chris.beams.io/posts/git-commit/).
* Only commit changes that directly relate to your Pull Request. Use your Git interface to unstage any unrelated changes to project files, line endings, whitespace, or other files.
* Review the code diff view below to double check that your changes satisfy the above three points.
* Use the `make test` and `make check` commands to check for (and fix!) any issues that are reported by our automated tests.
* If you are changing shared mod or engine code, make sure that you have tested your changes in all four default mods.
* Respond to review comments as soon as you reasonably can. Reviewers will usually prioritize Pull Requests that are still fresh in their minds. Make sure to leave a comment when you push new changes, otherwise GitHub does not automatically notify reviewers!
* Leave a polite comment asking for reviews if a week or more has passed without feedback.
If you need any help you can ask in the #openra IRC channel on freenode (most active during European evenings).

7
.gitignore vendored
View File

@@ -11,6 +11,7 @@ obj
*.CodeAnalysisLog.xml
*.lastcodeanalysissucceeded
_ReSharper.*/
/.vs
# movies
*.vqa
@@ -21,6 +22,7 @@ _ReSharper.*/
# binaries
mods/*/*.dll
mods/*/*.mdb
mods/*/*.pdb
/*.dll
/*.dll.config
/*.so
@@ -60,7 +62,9 @@ OpenRA.Launcher.Mac/OpenRA.xcodeproj/*.mode1v3
# auto-generated documentation
DOCUMENTATION.md
WEAPONS.md
Lua-API.md
Settings.md
*.html
openra.6
@@ -78,3 +82,6 @@ StyleCopViolations.xml
# Support directory
/Support
# IntelliJ files
.idea

View File

@@ -2,7 +2,7 @@
# see travis-ci.org for details
language: csharp
mono: 4.4.2
mono: 4.6.1
# http://docs.travis-ci.com/user/migrating-from-legacy
sudo: false
@@ -19,6 +19,11 @@ addons:
- nsis-common
- dpkg
- markdown
- zlib1g-dev
- libbz2-dev
- cmake
- genisoimage
- fakeroot
# Environment variables
env:
@@ -39,7 +44,7 @@ script:
# Automatically update the trait documentation and Lua API
after_success:
- test $TRAVIS_PULL_REQUEST == "false" && make docs && cd packaging && ./update-wiki.sh $TRAVIS_BRANCH; cd ..
- test $TRAVIS_PULL_REQUEST == "false" && cd packaging && ./update-wiki.sh $TRAVIS_BRANCH; cd ..
# Only watch the development branch and tagged release.
branches:
@@ -72,7 +77,8 @@ deploy:
secure: "g/LU11f+mjqv+lj0sR1UliHwogXL4ofJUwoG5Dbqlvdf5UTLWytw/OWSCv8RGyuh10miyWeaoqHh1cn2C1IFhUEqN1sSeKKKOWOTvJ2FR5mzi9uH3d/MOBzG5icQ7Qh0fZ1YPz5RaJJhYu6bmfvA/1gD49GoaX2kxQL4J5cEBgg="
file:
- build/OpenRA-${TRAVIS_TAG}.exe
- build/OpenRA-${TRAVIS_TAG}.zip
- build/OpenRA-${TRAVIS_TAG}.dmg
- build/OpenRA-${TRAVIS_TAG}-source.tar.bz2
- build/openra_${DOTVERSION}_all.deb
skip_cleanup: true
on:

20
AUTHORS
View File

@@ -5,10 +5,8 @@ The OpenRA developers are:
* Chris Forbes (chrisf)
* Igor Popov (ihptru)
* Lukas Franke (abcdefg30)
* Matthias Mailänder (Mailaender)
* Oliver Brakmann (obrakmann)
* Paul Chote (pchote)
* Pavel Penev (penev92)
* Reaperrr
* Tom Roostan (RoosterDragon)
@@ -17,8 +15,10 @@ Previous developers included:
* Caleb Anderson (RobotCaleb)
* Curtis Shmyr (hamb)
* Daniel Hernandez (Mancano)
* Matthias Mailänder (Mailaender)
* Megan Bowra-Dean (beedee)
* Mike Bundy (kehaar)
* Pavel Penev (penev92)
* Robert Pepperell (ytinasni)
* ScottNZ
@@ -59,7 +59,7 @@ Also thanks to:
* Florian Wiesbauer (FiveAces)
* Frank Razenberg (zzattack)
* Gareth Needham (Ripley`)
* Glen Anderson (GlenAnderson)
* Glen Anderson (GlenLife)
* Glenn Martin Jensen (Baxxster)
* Gordon Martin (Happy0)
* Guido Lipke (LipkeGu)
@@ -69,12 +69,14 @@ Also thanks to:
* Ian T. Jacobsen (Smilex)
* Imago
* Iran
* Ishan Bhargava (ishantheperson)
* Jacob Dufault (jacobdufault)
* James Dunne (jsd)
* James Gilbert (DSUK)
* Jan-Willem Buurlage (jwbuurlage)
* Jason (atlimit8)
* Jeff Harris (jeff_1amstudios)
* Jefri Sevkin (Arular)
* Jes
* Joakim Lindberg (booom3)
* John Turner (whinis)
@@ -89,6 +91,7 @@ Also thanks to:
* Lesueur Benjamin (Valkirie)
* Maarten Meuris (Nyerguds)
* Mark Olson (markolson)
* Markus Hartung (hartmark)
* Matija Hustic (matija-hustic)
* Matthew Gatland (mgatland)
* Matthew Uzzell (MUzzell)
@@ -96,7 +99,9 @@ Also thanks to:
* Max621
* Max Ugrumov (katzsmile)
* Michael Rätzel
* Michael Silber (frühstück)
* Michael Sztolcman (s1w_)
* Muh
* Mustafa Alperen Seki (MustaphaTR)
* Neil Shivkar (havok13888)
* Nooze
@@ -107,8 +112,9 @@ Also thanks to:
* Paul Dovydaitis (pdovy)
* Pavlos Touboulidis (pav)
* Pedro Ferreira Ramos (bateramos)
* Peter Amrehn (jongleur1983)
* Pizzaoverhead
* Piët Delport (pjdelport)
* Pi Delport (pjdelport)
* Psydev
* Raphael Vogt (TheRaffy, Yellow)
* Raymond Bedrossian (Squiggles211)
@@ -127,6 +133,7 @@ Also thanks to:
* Tirili
* Tristan Keating (Kilkakon)
* Tristan Mühlbacher (MicroBit)
* UnknownProgrammer
* Vladimir Komarov (VrKomarov)
* Wuschel
@@ -166,9 +173,8 @@ under the MIT license.
Using ICSharpCode.SharpZipLib initially by Mike
Krueger and distributed under the GNU GPL terms.
Using SmartIrc4Net developed by Mirco Bauer
distributed under the LGPL version 2.1 or later.
Using rix0rrr.BeaconLib developed by Rico Huijbers
distributed under MIT License.
Finally, special thanks goes to the original teams
at Westwood Studios and EA for creating the classic

76
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by private-messaging a project team member (users with a + in front
of their name) via our IRC channel (#openra on freenode
[webchat](http://webchat.freenode.net/?channels=openra)). All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

View File

@@ -17,7 +17,7 @@
Please `git rebase` to the latest revision of the bleed branch.
Don't forget to add youself to [AUTHORS](https://github.com/OpenRA/OpenRA/blob/bleed/AUTHORS).
Don't forget to add yourself to [AUTHORS](https://github.com/OpenRA/OpenRA/blob/bleed/AUTHORS).
Please propose a [CHANGELOG](https://github.com/OpenRA/OpenRA/wiki/CHANGELOG) entry in the pull-request comments.

View File

@@ -14,7 +14,7 @@ Windows
* [OpenAL](http://kcat.strangesoft.net/openal.html) (included)
* [liblua 5.1](http://luabinaries.sourceforge.net/download.html) (included)
You need to fetch the thirdparty dependencies using [NuGet](http://www.nuget.org) and place them at the appropriate places by typing `make dependencies` in a command terminal.
You need to fetch the thirdparty dependencies and place them at the appropriate places by typing `make dependencies` in a command terminal.
To compile OpenRA, open the `OpenRA.sln` solution in the main folder, build it from the command-line with MSBuild or use the Makefile analogue command `make all` scripted in PowerShell syntax.
@@ -23,18 +23,17 @@ Run the game with `OpenRA.Game.exe Game.Mod=ra` for Red Alert or `OpenRA.Game.ex
Linux
=====
Use `make dependencies` to map the native libraries to your system, fetch the remaining CLI dependencies using [NuGet](http://www.nuget.org) and place them at the appropriate places.
Use `make dependencies` to map the native libraries to your system and fetch the remaining CLI dependencies to place them at the appropriate places.
To compile OpenRA, run `make all` from the command line.
Run with either `launch-game.sh` or `mono --debug OpenRA.Game.exe`.
Type `sudo make install-all` for system wide installation. Run `make install-linux-shortcuts` to get startup scripts, icons and desktop files. You can then run from the `openra` shortcut.
Type `sudo make install` for system wide installation. Run `make install-linux-shortcuts` to get startup scripts, icons and desktop files. You can then run from the `openra` shortcut.
Debian/Ubuntu
-------------
* nuget
* mono-devel
* libfreetype6
* libopenal1
@@ -47,22 +46,15 @@ Debian/Ubuntu
openSUSE
--------
* mono-devel
* nuget
* openal
* freetype2
* SDL2
* lua51
* xdg-utils
* zenity
* curl
```
sudo zypper in mono-devel openal-soft freetype2 SDL2 lua51 xdg-utils zenity curl
```
Gentoo
------
* dev-lang/mono
* dev-dotnet/libgdiplus
* dev-dotnet/nuget
* media-libs/freetype:2
* media-libs/libsdl2
* media-libs/openal

320
Makefile
View File

@@ -3,9 +3,6 @@
# to compile, run:
# make [DEBUG=false]
#
# to compile with development tools, run:
# make all [DEBUG=false]
#
# to check unit tests (requires NUnit version >= 2.6), run:
# make nunit [NUNIT_CONSOLE=<path-to/nunit[2]-console>] [NUNIT_LIBS_PATH=<path-to-libs-dir>] [NUNIT_LIBS=<nunit-libs>]
# Use NUNIT_CONSOLE if nunit[3|2]-console was not downloaded by `make dependencies` nor is it in bin search paths
@@ -17,18 +14,16 @@
# 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
#
# to install with development tools, run:
# make [prefix=/foo] [bindir=/bar/bin] install-all
#
# to install Linux startup scripts, desktop files and icons:
# make install-linux-shortcuts [DEBUG=false]
#
# to install the engine and common mod files (omitting the default mods):
# make install-engine
# make install-common-mod-files
#
# to uninstall, run:
# make uninstall
#
@@ -44,9 +39,9 @@
#
SDK ?=
CSC = mcs $(SDK)
CSFLAGS = -nologo -warn:4 -codepage:utf8 -unsafe -warnaserror
CSFLAGS = -nologo -warn:4 -codepage:utf8 -langversion:5 -unsafe -warnaserror
DEFINE = TRACE
COMMON_LIBS = System.dll System.Core.dll System.Data.dll System.Data.DataSetExtensions.dll System.Drawing.dll System.Xml.dll thirdparty/download/ICSharpCode.SharpZipLib.dll thirdparty/download/FuzzyLogicLibrary.dll thirdparty/download/MaxMind.Db.dll thirdparty/download/MaxMind.GeoIP2.dll thirdparty/download/Eluant.dll thirdparty/download/SmarIrc4net.dll
COMMON_LIBS = System.dll System.Core.dll System.Data.dll System.Data.DataSetExtensions.dll System.Drawing.dll System.Xml.dll thirdparty/download/ICSharpCode.SharpZipLib.dll thirdparty/download/FuzzyLogicLibrary.dll thirdparty/download/MaxMind.Db.dll thirdparty/download/Eluant.dll thirdparty/download/rix0rrr.BeaconLib.dll
NUNIT_LIBS_PATH :=
NUNIT_LIBS := $(NUNIT_LIBS_PATH)nunit.framework.dll
@@ -88,7 +83,6 @@ INSTALL_DATA = $(INSTALL) -m644
# program targets
CORE = pdefault game utility server
TOOLS = gamemonitor
VERSION = $(shell git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || echo git-`git rev-parse --short HEAD`)
# dependencies
@@ -109,7 +103,6 @@ game_SRCS := $(shell find OpenRA.Game/ -iname '*.cs')
game_TARGET = OpenRA.Game.exe
game_KIND = winexe
game_LIBS = $(COMMON_LIBS) $(game_DEPS) thirdparty/download/SharpFont.dll thirdparty/download/Open.Nat.dll
game_FLAGS = -win32icon:OpenRA.Game/OpenRA.ico
PROGRAMS += game
game: $(game_TARGET)
@@ -127,7 +120,7 @@ mod_common_SRCS := $(shell find OpenRA.Mods.Common/ -iname '*.cs')
mod_common_TARGET = mods/common/OpenRA.Mods.Common.dll
mod_common_KIND = library
mod_common_DEPS = $(game_TARGET)
mod_common_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) thirdparty/download/StyleCop.dll thirdparty/download/StyleCop.CSharp.dll thirdparty/download/StyleCop.CSharp.Rules.dll
mod_common_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS)
PROGRAMS += mod_common
mod_common: $(mod_common_TARGET)
@@ -146,18 +139,9 @@ test_dll: $(test_dll_TARGET)
STD_MOD_LIBS = $(game_TARGET)
STD_MOD_DEPS = $(STD_MOD_LIBS)
# Red Alert
mod_ra_SRCS := $(shell find OpenRA.Mods.RA/ -iname '*.cs')
mod_ra_TARGET = mods/ra/OpenRA.Mods.RA.dll
mod_ra_KIND = library
mod_ra_DEPS = $(STD_MOD_DEPS) $(mod_common_TARGET)
mod_ra_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(mod_common_TARGET)
PROGRAMS += mod_ra
mod_ra: $(mod_ra_TARGET)
# Command and Conquer
mod_cnc_SRCS := $(shell find OpenRA.Mods.Cnc/ -iname '*.cs')
mod_cnc_TARGET = mods/cnc/OpenRA.Mods.Cnc.dll
mod_cnc_TARGET = mods/common/OpenRA.Mods.Cnc.dll
mod_cnc_KIND = library
mod_cnc_DEPS = $(STD_MOD_DEPS) $(mod_common_TARGET)
mod_cnc_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(mod_common_TARGET)
@@ -173,58 +157,40 @@ mod_d2k_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(mod_common_TARGET)
PROGRAMS += mod_d2k
mod_d2k: $(mod_d2k_TARGET)
# Tiberian Sun
mod_ts_SRCS := $(shell find OpenRA.Mods.TS/ -iname '*.cs')
mod_ts_TARGET = mods/ts/OpenRA.Mods.TS.dll
mod_ts_KIND = library
mod_ts_DEPS = $(STD_MOD_DEPS) $(mod_common_TARGET)
mod_ts_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(mod_common_TARGET)
PROGRAMS += mod_ts
mod_ts: $(mod_ts_TARGET)
check-scripts:
@echo
@echo "Checking for Lua syntax errors..."
@luac -p $(shell find mods/*/maps/* -iname '*.lua')
@luac -p $(shell find lua/* -iname '*.lua')
check: utility mods
@echo
@echo "Checking for code style violations in OpenRA.Game..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Game
@echo
@echo "Checking for code style violations in OpenRA.Platforms.Default..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Platforms.Default
@echo
@echo "Checking for code style violations in OpenRA.GameMonitor..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.GameMonitor
@echo
@echo "Checking for code style violations in OpenRA.Mods.Common..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Mods.Common
@echo
@echo "Checking for code style violations in OpenRA.Mods.RA..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Mods.RA
@echo
@echo "Checking for code style violations in OpenRA.Mods.Cnc..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Mods.Cnc
@echo
@echo "Checking for code style violations in OpenRA.Mods.D2k..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Mods.D2k
@echo
@echo "Checking for code style violations in OpenRA.Mods.TS..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Mods.TS
@echo
@echo "Checking for code style violations in OpenRA.Utility..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Utility
@echo
@echo "Checking for code style violations in OpenRA.Test..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Test
check: utility stylecheck mods
@echo
@echo "Checking for explicit interface violations..."
@mono --debug OpenRA.Utility.exe all --check-explicit-interfaces
@echo
@echo "Checking for code style violations in OpenRA.Game..."
@mono --debug OpenRA.StyleCheck.exe OpenRA.Game
@echo
@echo "Checking for code style violations in OpenRA.Platforms.Default..."
@mono --debug OpenRA.StyleCheck.exe OpenRA.Platforms.Default
@echo
@echo "Checking for code style violations in OpenRA.Mods.Common..."
@mono --debug OpenRA.StyleCheck.exe OpenRA.Mods.Common
@echo
@echo "Checking for code style violations in OpenRA.Mods.Cnc..."
@mono --debug OpenRA.StyleCheck.exe OpenRA.Mods.Cnc
@echo
@echo "Checking for code style violations in OpenRA.Mods.D2k..."
@mono --debug OpenRA.StyleCheck.exe OpenRA.Mods.D2k
@echo
@echo "Checking for code style violations in OpenRA.Utility..."
@mono --debug OpenRA.StyleCheck.exe OpenRA.Utility
@echo
@echo "Checking for code style violations in OpenRA.Test..."
@mono --debug OpenRA.StyleCheck.exe OpenRA.Test
@echo
@echo "Checking for code style violations in OpenRA.Server..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Server
@mono --debug OpenRA.StyleCheck.exe OpenRA.Server
NUNIT_CONSOLE := $(shell test -f thirdparty/download/nunit3-console.exe && echo mono thirdparty/download/nunit3-console.exe || \
which nunit3-console 2>/dev/null || which nunit2-console 2>/dev/null || which nunit-console 2>/dev/null)
@@ -262,16 +228,6 @@ test: utility mods
##### Launchers / Utilities #####
gamemonitor_SRCS := $(shell find OpenRA.GameMonitor/ -iname '*.cs')
gamemonitor_TARGET = OpenRA.exe
gamemonitor_KIND = winexe
gamemonitor_DEPS = $(game_TARGET)
gamemonitor_LIBS = $(COMMON_LIBS) $(gamemonitor_DEPS) System.Windows.Forms.dll
gamemonitor_FLAGS = -win32icon:OpenRA.Game/OpenRA.ico
PROGRAMS += gamemonitor
gamemonitor: $(gamemonitor_TARGET)
# Backend for the launcher apps - queries game/mod info and applies actions to an install
utility_SRCS := $(shell find OpenRA.Utility/ -iname '*.cs')
utility_TARGET = OpenRA.Utility.exe
utility_KIND = exe
@@ -280,6 +236,13 @@ utility_LIBS = $(COMMON_LIBS) $(utility_DEPS) thirdparty/download/ICSharpCode.Sh
PROGRAMS += utility
utility: $(utility_TARGET)
stylecheck_SRCS := $(shell find OpenRA.StyleCheck/ -iname '*.cs')
stylecheck_TARGET = OpenRA.StyleCheck.exe
stylecheck_KIND = exe
stylecheck_LIBS = thirdparty/download/StyleCop.dll thirdparty/download/StyleCop.CSharp.dll thirdparty/download/StyleCop.CSharp.Rules.dll
PROGRAMS += stylecheck
stylecheck: $(stylecheck_TARGET)
# Dedicated server
server_SRCS := $(shell find OpenRA.Server/ -iname '*.cs')
server_TARGET = OpenRA.Server.exe
@@ -291,6 +254,7 @@ server: $(server_TARGET)
# Patches binary headers to work around a mono bug
fixheader.exe: packaging/fixheader.cs
@command -v $(CSC) >/dev/null || (echo "Mono is not installed. Please install Mono from http://www.mono-project.com/download/ before building OpenRA."; exit 1)
@echo CSC fixheader.exe
@$(CSC) packaging/fixheader.cs $(CSFLAGS) -out:fixheader.exe -t:exe $(COMMON_LIBS:%=-r:%)
@@ -318,15 +282,11 @@ $(foreach prog,$(PROGRAMS),$(eval $(call BUILD_ASSEMBLY,$(prog))))
#
default: core
core: game platforms mods utility server
core: dependencies game platforms mods utility server
tools: gamemonitor
mods: mod_common mod_cnc mod_d2k
package: all-dependencies core tools docs version
mods: mod_common mod_ra mod_cnc mod_d2k mod_ts
all: dependencies core tools
all: dependencies core stylecheck
clean:
@-$(RM_F) *.exe *.dll *.dylib *.dll.config ./OpenRA*/*.dll ./OpenRA*/*.mdb *.mdb mods/**/*.dll mods/**/*.mdb *.resources
@@ -340,63 +300,49 @@ cli-dependencies:
@ $(CP_R) thirdparty/download/*.dll .
@ $(CP_R) thirdparty/download/*.dll.config .
linux-dependencies: cli-dependencies linux-native-dependencies
linux-dependencies: cli-dependencies geoip-dependencies linux-native-dependencies
linux-native-dependencies:
@./thirdparty/configure-native-deps.sh
windows-dependencies:
windows-dependencies: cli-dependencies geoip-dependencies
@./thirdparty/fetch-thirdparty-deps-windows.sh
osx-dependencies: cli-dependencies
osx-dependencies: cli-dependencies geoip-dependencies
@./thirdparty/fetch-thirdparty-deps-osx.sh
@ $(CP_R) thirdparty/download/osx/*.dylib .
@ $(CP_R) thirdparty/download/osx/*.dll.config .
dependencies: $(os-dependencies)
geoip-dependencies:
@./thirdparty/fetch-geoip-db.sh
@ $(CP) thirdparty/download/GeoLite2-Country.mmdb.gz .
all-dependencies: cli-dependencies windows-dependencies osx-dependencies
dependencies: $(os-dependencies)
version: mods/ra/mod.yaml mods/cnc/mod.yaml mods/d2k/mod.yaml mods/ts/mod.yaml mods/modchooser/mod.yaml mods/all/mod.yaml
all-dependencies: cli-dependencies windows-dependencies osx-dependencies geoip-dependencies
version: VERSION mods/ra/mod.yaml mods/cnc/mod.yaml mods/d2k/mod.yaml mods/ts/mod.yaml mods/modcontent/mod.yaml mods/all/mod.yaml
@echo "$(VERSION)" > VERSION
@for i in $? ; do \
awk '{sub("Version:.*$$","Version: $(VERSION)"); print $0}' $${i} > $${i}.tmp && \
awk '{sub("\tmodchooser:.*$$","\tmodchooser: $(VERSION)"); print $0}' $${i}.tmp > $${i}.tmp2 && \
awk '{sub("/[^/]*: User$$", "/$(VERSION): User"); print $0}' $${i}.tmp2 > $${i} && \
rm $${i}.tmp $${i}.tmp2; \
awk '{sub("/[^/]*: User$$", "/$(VERSION): User"); print $0}' $${i}.tmp > $${i} && \
rm $${i}.tmp; \
done
docs: utility mods version
@mono --debug OpenRA.Utility.exe all --docs > DOCUMENTATION.md
@mono --debug OpenRA.Utility.exe all --lua-docs > Lua-API.md
man-page: utility mods
@mono --debug OpenRA.Utility.exe all --man-page > openra.6
install: install-core
install-all: install-core install-tools
install: default install-core
install-linux-shortcuts: install-linux-scripts install-linux-icons install-linux-desktop
install-core: default
@-echo "Installing OpenRA to $(DATA_INSTALL_DIR)"
install-engine:
@-echo "Installing OpenRA engine to $(DATA_INSTALL_DIR)"
@$(INSTALL_DIR) "$(DATA_INSTALL_DIR)"
@$(INSTALL_PROGRAM) $(foreach prog,$(CORE),$($(prog)_TARGET)) "$(DATA_INSTALL_DIR)"
@$(INSTALL_DIR) "$(DATA_INSTALL_DIR)/mods"
@$(CP_R) mods/common "$(DATA_INSTALL_DIR)/mods/"
@$(INSTALL_PROGRAM) $(mod_common_TARGET) "$(DATA_INSTALL_DIR)/mods/common"
@$(CP_R) mods/cnc "$(DATA_INSTALL_DIR)/mods/"
@$(INSTALL_PROGRAM) $(mod_cnc_TARGET) "$(DATA_INSTALL_DIR)/mods/cnc"
@$(CP_R) mods/ra "$(DATA_INSTALL_DIR)/mods/"
@$(INSTALL_PROGRAM) $(mod_ra_TARGET) "$(DATA_INSTALL_DIR)/mods/ra"
@$(CP_R) mods/d2k "$(DATA_INSTALL_DIR)/mods/"
@$(INSTALL_PROGRAM) $(mod_d2k_TARGET) "$(DATA_INSTALL_DIR)/mods/d2k"
@$(CP_R) mods/modchooser "$(DATA_INSTALL_DIR)/mods/"
@$(INSTALL_DATA) "global mix database.dat" "$(DATA_INSTALL_DIR)/global mix database.dat"
@$(INSTALL_DATA) "GeoLite2-Country.mmdb.gz" "$(DATA_INSTALL_DIR)/GeoLite2-Country.mmdb.gz"
@$(INSTALL_DATA) VERSION "$(DATA_INSTALL_DIR)/VERSION"
@$(INSTALL_DATA) AUTHORS "$(DATA_INSTALL_DIR)/AUTHORS"
@$(INSTALL_DATA) COPYING "$(DATA_INSTALL_DIR)/COPYING"
@@ -411,18 +357,27 @@ install-core: default
@$(CP) SharpFont.dll.config "$(DATA_INSTALL_DIR)"
@$(INSTALL_PROGRAM) Open.Nat.dll "$(DATA_INSTALL_DIR)"
@$(INSTALL_PROGRAM) MaxMind.Db.dll "$(DATA_INSTALL_DIR)"
@$(INSTALL_PROGRAM) MaxMind.GeoIP2.dll "$(DATA_INSTALL_DIR)"
@$(INSTALL_PROGRAM) Newtonsoft.Json.dll "$(DATA_INSTALL_DIR)"
@$(INSTALL_PROGRAM) SmarIrc4net.dll "$(DATA_INSTALL_DIR)"
@$(INSTALL_PROGRAM) rix0rrr.BeaconLib.dll "$(DATA_INSTALL_DIR)"
ifneq ($(UNAME_S),Darwin)
install-common-mod-files:
@-echo "Installing OpenRA common mod files to $(DATA_INSTALL_DIR)"
@$(INSTALL_DIR) "$(DATA_INSTALL_DIR)/mods"
@$(CP_R) mods/common "$(DATA_INSTALL_DIR)/mods/"
@$(INSTALL_PROGRAM) $(mod_common_TARGET) "$(DATA_INSTALL_DIR)/mods/common"
@$(INSTALL_PROGRAM) $(mod_cnc_TARGET) "$(DATA_INSTALL_DIR)/mods/common"
@$(INSTALL_DATA) "global mix database.dat" "$(DATA_INSTALL_DIR)/global mix database.dat"
install-default-mods:
@-echo "Installing OpenRA default mods to $(DATA_INSTALL_DIR)"
@$(INSTALL_DIR) "$(DATA_INSTALL_DIR)/mods"
@$(CP_R) mods/cnc "$(DATA_INSTALL_DIR)/mods/"
@$(CP_R) mods/ra "$(DATA_INSTALL_DIR)/mods/"
@$(CP_R) mods/d2k "$(DATA_INSTALL_DIR)/mods/"
@$(INSTALL_PROGRAM) $(mod_d2k_TARGET) "$(DATA_INSTALL_DIR)/mods/d2k"
@$(CP_R) mods/modcontent "$(DATA_INSTALL_DIR)/mods/"
install-core: install-engine install-common-mod-files install-default-mods
@$(CP) *.sh "$(DATA_INSTALL_DIR)"
endif
install-tools: tools
@-echo "Installing OpenRA tools to $(DATA_INSTALL_DIR)"
@$(INSTALL_DIR) "$(DATA_INSTALL_DIR)"
@$(INSTALL_PROGRAM) $(foreach prog,$(TOOLS),$($(prog)_TARGET)) "$(DATA_INSTALL_DIR)"
install-linux-icons:
@$(INSTALL_DIR) "$(DESTDIR)$(datadir)/icons/"
@@ -430,69 +385,101 @@ install-linux-icons:
install-linux-desktop:
@$(INSTALL_DIR) "$(DESTDIR)$(datadir)/applications"
@$(INSTALL_DATA) packaging/linux/openra.desktop "$(DESTDIR)$(datadir)/applications"
@sed 's/{MOD}/ra/g' packaging/linux/openra.desktop.in | sed 's/{MODNAME}/Red Alert/g' > packaging/linux/openra-ra.desktop
@$(INSTALL_DATA) packaging/linux/openra-ra.desktop "$(DESTDIR)$(datadir)/applications"
@sed 's/{MOD}/cnc/g' packaging/linux/openra.desktop.in | sed 's/{MODNAME}/Tiberian Dawn/g' > packaging/linux/openra-cnc.desktop
@$(INSTALL_DATA) packaging/linux/openra-cnc.desktop "$(DESTDIR)$(datadir)/applications"
@sed 's/{MOD}/d2k/g' packaging/linux/openra.desktop.in | sed 's/{MODNAME}/Dune 2000/g' > packaging/linux/openra-d2k.desktop
@$(INSTALL_DATA) packaging/linux/openra-d2k.desktop "$(DESTDIR)$(datadir)/applications"
@-$(RM) packaging/linux/openra-ra.desktop packaging/linux/openra-cnc.desktop packaging/linux/openra-d2k.desktop
install-linux-mime:
@$(INSTALL_DIR) "$(DESTDIR)$(datadir)/mime/packages/"
@sed 's/{MOD}/ra/g' packaging/linux/openra-mimeinfo.xml.in | sed 's/{TAG}/$(VERSION)/g' > packaging/linux/openra-mimeinfo.xml
@$(INSTALL_DATA) packaging/linux/openra-mimeinfo.xml "$(DESTDIR)$(datadir)/mime/packages/openra.xml"
@$(INSTALL_DIR) "$(DESTDIR)$(datadir)/applications"
@$(INSTALL_DATA) packaging/linux/openra-join-servers.desktop "$(DESTDIR)$(datadir)/applications"
@$(INSTALL_DATA) packaging/linux/openra-replays.desktop "$(DESTDIR)$(datadir)/applications"
@$(INSTALL_DATA) packaging/linux/openra-launch-mod.desktop "$(DESTDIR)$(datadir)/applications"
@sed 's/{MOD}/ra/g' packaging/linux/openra-join-servers.desktop.in | sed 's/{MODNAME}/Red Alert/g' | sed 's/{TAG}/$(VERSION)/g' > packaging/linux/openra-ra-join-servers.desktop
@$(INSTALL_DATA) packaging/linux/openra-ra-join-servers.desktop "$(DESTDIR)$(datadir)/applications"
@sed 's/{MOD}/cnc/g' packaging/linux/openra-join-servers.desktop.in | sed 's/{MODNAME}/Tiberian Dawn/g' | sed 's/{TAG}/$(VERSION)/g' > packaging/linux/openra-cnc-join-servers.desktop
@$(INSTALL_DATA) packaging/linux/openra-cnc-join-servers.desktop "$(DESTDIR)$(datadir)/applications"
@sed 's/{MOD}/d2k/g' packaging/linux/openra-join-servers.desktop.in | sed 's/{MODNAME}/Dune 2000/g' | sed 's/{TAG}/$(VERSION)/g' > packaging/linux/openra-d2k-join-servers.desktop
@$(INSTALL_DATA) packaging/linux/openra-d2k-join-servers.desktop "$(DESTDIR)$(datadir)/applications"
@-$(RM) packaging/linux/openra-mimeinfo.xml packaging/linux/openra-ra-join-servers.desktop packaging/linux/openra-cnc-join-servers.desktop packaging/linux/openra-d2k-join-servers.desktop
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/"
@$(INSTALL_DATA) openra.6 "$(DESTDIR)$(mandir)/man6/"
install-linux-scripts:
@echo "#!/bin/sh" > openra
@echo 'cd "$(gameinstalldir)"' >> openra
ifeq ($(DEBUG), $(filter $(DEBUG),false no n off 0))
@echo 'mono OpenRA.Game.exe "$$@"' >> openra
@sed 's/{DEBUG}//' packaging/linux/openra.in | sed 's|{GAME_INSTALL_DIR}|$(gameinstalldir)|' | sed 's|{BIN_DIR}|$(bindir)|' > packaging/linux/openra.debug.in
@sed 's/{DEBUG}//' packaging/linux/openra-server.in | sed 's|{GAME_INSTALL_DIR}|$(gameinstalldir)|' | sed 's|{BIN_DIR}|$(bindir)|' > packaging/linux/openra-server.debug.in
else
@echo 'mono --debug OpenRA.Game.exe "$$@"' >> openra
endif
@echo 'if [ $$? != 0 -a $$? != 1 ]' >> openra
@echo 'then' >> openra
@echo 'ZENITY=`which zenity` || echo "OpenRA needs zenity installed to display a graphical error dialog. See ~/.openra. for log files."' >> openra
@echo '$$ZENITY --question --title "OpenRA" --text "OpenRA has encountered a fatal error.\nLog Files are available in ~/.openra." --ok-label "Quit" --cancel-label "View FAQ" || xdg-open https://github.com/OpenRA/OpenRA/wiki/FAQ' >> openra
@echo 'exit 1' >> openra
@echo 'fi' >> openra
@$(INSTALL_DIR) "$(BIN_INSTALL_DIR)"
@$(INSTALL_PROGRAM) -m +rx openra "$(BIN_INSTALL_DIR)"
@-$(RM) openra
@echo "#!/bin/sh" > openra-server
@echo 'cd "$(gameinstalldir)"' >> openra-server
ifeq ($(DEBUG), $(filter $(DEBUG),false no n off 0))
@echo 'mono OpenRA.Server.exe "$$@"' >> openra-server
else
@echo 'mono --debug OpenRA.Server.exe "$$@"' >> openra-server
@sed 's/{DEBUG}/--debug/' packaging/linux/openra.in | sed 's|{GAME_INSTALL_DIR}|$(gameinstalldir)|' | sed 's|{BIN_DIR}|$(bindir)|' > packaging/linux/openra.debug.in
@sed 's/{DEBUG}/--debug/' packaging/linux/openra-server.in | sed 's|{GAME_INSTALL_DIR}|$(gameinstalldir)|' | sed 's|{BIN_DIR}|$(bindir)|' > packaging/linux/openra-server.debug.in
endif
@sed 's/{MOD}/ra/g' packaging/linux/openra.debug.in | sed 's/{MODNAME}/Red Alert/g' > packaging/linux/openra-ra
@sed 's/{MOD}/cnc/g' packaging/linux/openra.debug.in | sed 's/{MODNAME}/Tiberian Dawn/g' > packaging/linux/openra-cnc
@sed 's/{MOD}/d2k/g' packaging/linux/openra.debug.in | sed 's/{MODNAME}/Dune 2000/g' > packaging/linux/openra-d2k
@$(INSTALL_DIR) "$(BIN_INSTALL_DIR)"
@$(INSTALL_PROGRAM) -m +rx openra-server "$(BIN_INSTALL_DIR)"
@-$(RM) openra-server
@$(INSTALL_PROGRAM) -m +rx packaging/linux/openra-ra "$(BIN_INSTALL_DIR)"
@$(INSTALL_PROGRAM) -m +rx packaging/linux/openra-cnc "$(BIN_INSTALL_DIR)"
@$(INSTALL_PROGRAM) -m +rx packaging/linux/openra-d2k "$(BIN_INSTALL_DIR)"
@-$(RM) packaging/linux/openra-ra packaging/linux/openra-cnc packaging/linux/openra-d2k packaging/linux/openra.debug.in
@sed 's/{MOD}/ra/g' packaging/linux/openra-server.debug.in | sed 's/{MODNAME}/Red Alert/g' > packaging/linux/openra-ra-server
@sed 's/{MOD}/cnc/g' packaging/linux/openra-server.debug.in | sed 's/{MODNAME}/Tiberian Dawn/g' > packaging/linux/openra-cnc-server
@sed 's/{MOD}/d2k/g' packaging/linux/openra-server.debug.in | sed 's/{MODNAME}/Dune 2000/g' > packaging/linux/openra-d2k-server
@$(INSTALL_DIR) "$(BIN_INSTALL_DIR)"
@$(INSTALL_PROGRAM) -m +rx packaging/linux/openra-ra-server "$(BIN_INSTALL_DIR)"
@$(INSTALL_PROGRAM) -m +rx packaging/linux/openra-cnc-server "$(BIN_INSTALL_DIR)"
@$(INSTALL_PROGRAM) -m +rx packaging/linux/openra-d2k-server "$(BIN_INSTALL_DIR)"
@-$(RM) packaging/linux/openra-ra-server packaging/linux/openra-cnc-server packaging/linux/openra-d2k-server packaging/linux/openra-server.debug.in
uninstall:
@-$(RM_R) "$(DATA_INSTALL_DIR)"
@-$(RM_F) "$(BIN_INSTALL_DIR)/openra"
@-$(RM_F) "$(BIN_INSTALL_DIR)/openra-server"
@-$(RM_F) "$(DESTDIR)$(datadir)/applications/openra.desktop"
@-$(RM_F) "$(DESTDIR)$(datadir)/applications/openra-join-servers.desktop"
@-$(RM_F) "$(DESTDIR)$(datadir)/applications/openra-launch-mod.desktop"
@-$(RM_F) "$(DESTDIR)$(datadir)/applications/openra-join-servers.desktop"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/16x16/apps/openra.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/32x32/apps/openra.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/48x48/apps/openra.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/64x64/apps/openra.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/128x128/apps/openra.png"
@-$(RM_F) "$(BIN_INSTALL_DIR)/openra-ra"
@-$(RM_F) "$(BIN_INSTALL_DIR)/openra-ra-server"
@-$(RM_F) "$(BIN_INSTALL_DIR)/openra-cnc"
@-$(RM_F) "$(BIN_INSTALL_DIR)/openra-cnc-server"
@-$(RM_F) "$(BIN_INSTALL_DIR)/openra-d2k"
@-$(RM_F) "$(BIN_INSTALL_DIR)/openra-d2k-server"
@-$(RM_F) "$(DESTDIR)$(datadir)/applications/openra-ra.desktop"
@-$(RM_F) "$(DESTDIR)$(datadir)/applications/openra-cnc.desktop"
@-$(RM_F) "$(DESTDIR)$(datadir)/applications/openra-d2k.desktop"
@-$(RM_F) "$(DESTDIR)$(datadir)/applications/openra-ra-join-servers.desktop"
@-$(RM_F) "$(DESTDIR)$(datadir)/applications/openra-cnc-join-servers.desktop"
@-$(RM_F) "$(DESTDIR)$(datadir)/applications/openra-d2k-join-servers.desktop"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/16x16/apps/openra-ra.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/32x32/apps/openra-ra.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/48x48/apps/openra-ra.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/64x64/apps/openra-ra.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/128x128/apps/openra-ra.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/16x16/apps/openra-cnc.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/32x32/apps/openra-cnc.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/48x48/apps/openra-cnc.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/64x64/apps/openra-cnc.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/128x128/apps/openra-cnc.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/16x16/apps/openra-d2k.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/32x32/apps/openra-d2k.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/48x48/apps/openra-d2k.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/64x64/apps/openra-d2k.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/icons/hicolor/128x128/apps/openra-d2k.png"
@-$(RM_F) "$(DESTDIR)$(datadir)/mime/packages/openra.xml"
@-$(RM_F) "$(DESTDIR)$(datadir)/appdata/openra.appdata.xml"
@-$(RM_F) "$(DESTDIR)$(mandir)/man6/openra.6"
@@ -501,9 +488,6 @@ help:
@echo 'to compile, run:'
@echo ' make [DEBUG=false]'
@echo
@echo 'to compile with development tools, run:'
@echo ' make all [DEBUG=false]'
@echo
@echo 'to check unit tests (requires NUnit version >= 2.6), run:'
@echo ' make nunit [NUNIT_CONSOLE=<path-to/nunit[3|2]-console>] [NUNIT_LIBS_PATH=<path-to-libs-dir>] [NUNIT_LIBS=<nunit-libs>]'
@echo ' Use NUNIT_CONSOLE if nunit[3|2]-console was not downloaded by `make dependencies` nor is it in bin search paths'
@@ -513,15 +497,9 @@ 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
@echo 'to install with development tools, run:'
@echo ' make [prefix=/foo] [bindir=/bar/bin] install-all'
@echo
@echo 'to install Linux startup scripts, desktop files and icons'
@echo ' make install-linux-shortcuts [DEBUG=false]'
@echo
@@ -540,4 +518,4 @@ help:
.SUFFIXES:
.PHONY: core tools package all mods clean distclean dependencies version $(PROGRAMS) nunit
.PHONY: core package all mods clean distclean dependencies version $(PROGRAMS) nunit

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -9,31 +9,256 @@
*/
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using OpenRA.Traits;
namespace OpenRA.Activities
{
public enum ActivityState { Queued, Active, Done, Canceled }
/*
* Activities are actions carried out by actors during each tick.
*
* Activities exist in a graph data structure built up amongst themselves. Each activity has a parent activity,
* optionally child activities, and usually a next activity. An actor's CurrentActivity is a pointer into that graph
* and moves through it as activities run.
*
* There are two kinds of activities, the base activity and composite activities. They differ in the way their children
* are run: while a base activity is responsible for running its children itself, a composite activity relies on the actor's
* activity-running code. Therefore, the actor's CurrentActivity stays on the base activity while it runs its children. With
* composite activities however, the CurrentActivity moves through the list of children as they run.
*
*
* Things to be aware of when writing activities:
*
* - Use "return NextActivity" at least once somewhere in the tick method.
* - Do not use "return new SomeActivity()" as that will break the graph. Queue the new activity and use "return NextActivity" instead.
* - Do not "reuse" (with "SequenceActivities", for example) activity objects that have already finished running.
* Queue a new instance instead.
* - Avoid calling actor.CancelActivity(). It is almost always a bug. Call activity.Cancel() instead.
* - A composite activity will run at least twice. The first time when it returns its children,
* the second time when its last child returns its Parent.
* - Do not return the Parent explicitly unless you have an extremly good reason. "return NextActivity"
* will do the right thing in all circumstances.
* - You do not need to care about the ChildActivity pointer advancing through the list of children,
* the activity code already takes care of that.
* - If you want to check whether there are any follow-up activities queued, check against "NextInQueue"
* in favour of "NextActivity" to avoid checking against the Parent activity.
*
*
* Guide when to use which kind of activity:
*
* - The activity does not have any children -> base activity
* - The activity needs to run preparatory steps during each tick before its children can be run -> base activity
* - The activity or the actor is left in a bogus state when one of the child activities is canceled -> base activity
* - The activity's children are self-contained and can run independently of the parent -> composite activity
* - The activity does not have any or little logic of its own, but is just composed of sub-steps -> composite activity
*/
public abstract class Activity
{
public Activity NextActivity { get; set; }
protected bool IsCanceled { get; private set; }
public ActivityState State { get; private set; }
/// <summary>
/// Returns the top-most activity *from the point of view of the calling activity*. Note that the root activity
/// can and likely will have next activities of its own, which would in turn be the root for their children.
/// </summary>
public Activity RootActivity
{
get
{
var p = this;
while (p.ParentActivity != null)
p = p.ParentActivity;
return p;
}
}
Activity parentActivity;
public Activity ParentActivity
{
get
{
return parentActivity;
}
protected set
{
parentActivity = value;
var next = NextInQueue;
if (next != null)
next.ParentActivity = parentActivity;
}
}
Activity childActivity;
protected Activity ChildActivity
{
get
{
return childActivity != null && childActivity.State < ActivityState.Done ? childActivity : null;
}
set
{
if (value == this || value == ParentActivity || value == NextInQueue)
childActivity = null;
else
{
childActivity = value;
if (childActivity != null)
childActivity.ParentActivity = this;
}
}
}
Activity nextActivity;
/// <summary>
/// The getter will return either the next activity or, if there is none, the parent one.
/// </summary>
public virtual Activity NextActivity
{
get
{
return nextActivity != null ? nextActivity : ParentActivity;
}
set
{
if (value == this || value == ParentActivity || (value != null && value.ParentActivity == this))
nextActivity = null;
else
{
nextActivity = value;
if (nextActivity != null)
nextActivity.ParentActivity = ParentActivity;
}
}
}
/// <summary>
/// The getter will return the next activity on the same level _only_, in contrast to NextActivity.
/// Use this to check whether there are any follow-up activities queued.
/// </summary>
public Activity NextInQueue
{
get { return nextActivity; }
set { NextActivity = value; }
}
public bool IsInterruptible { get; protected set; }
public bool IsCanceled { get { return State == ActivityState.Canceled; } }
public Activity()
{
IsInterruptible = true;
}
public Activity TickOuter(Actor self)
{
if (State == ActivityState.Done && Game.Settings.Debug.StrictActivityChecking)
throw new InvalidOperationException("Actor {0} attempted to tick activity {1} after it had already completed.".F(self, this.GetType()));
if (State == ActivityState.Queued)
{
OnFirstRun(self);
State = ActivityState.Active;
}
var ret = Tick(self);
if (ret == null || (ret != this && ret.ParentActivity != this))
{
// Make sure that the Parent's ChildActivity pointer is moved forwards as the child queue advances.
// The Child's ParentActivity will be set automatically during assignment.
if (ParentActivity != null && ParentActivity != ret)
ParentActivity.ChildActivity = ret;
if (State != ActivityState.Canceled)
State = ActivityState.Done;
OnLastRun(self);
}
return ret;
}
public abstract Activity Tick(Actor self);
public virtual void Cancel(Actor self)
/// <summary>
/// Runs once immediately before the first Tick() execution.
/// </summary>
protected virtual void OnFirstRun(Actor self) { }
/// <summary>
/// Runs once immediately after the last Tick() execution.
/// </summary>
protected virtual void OnLastRun(Actor self) { }
public virtual bool Cancel(Actor self, bool keepQueue = false)
{
IsCanceled = true;
NextActivity = null;
if (!IsInterruptible)
return false;
if (ChildActivity != null && !ChildActivity.Cancel(self))
return false;
if (!keepQueue)
NextActivity = null;
ChildActivity = null;
State = ActivityState.Canceled;
return true;
}
public virtual void Queue(Activity activity)
{
if (NextActivity != null)
NextActivity.Queue(activity);
if (NextInQueue != null)
NextInQueue.Queue(activity);
else
NextActivity = activity;
NextInQueue = activity;
}
public virtual void QueueChild(Activity activity)
{
if (ChildActivity != null)
ChildActivity.Queue(activity);
else
ChildActivity = activity;
}
/// <summary>
/// Prints the activity tree, starting from the root or optionally from a given origin.
///
/// Call this method from any place that's called during a tick, such as the Tick() method itself or
/// the Before(First|Last)Run() methods. The origin activity will be marked in the output.
/// </summary>
/// <param name="origin">Activity from which to start traversing, and which to mark. If null, mark the calling activity, and start traversal from the root.</param>
/// <param name="level">Initial level of indentation.</param>
protected void PrintActivityTree(Activity origin = null, int level = 0)
{
if (origin == null)
RootActivity.PrintActivityTree(this);
else
{
Console.Write(new string(' ', level * 2));
if (origin == this)
Console.Write("*");
Console.WriteLine(this.GetType().ToString().Split('.').Last());
if (ChildActivity != null)
ChildActivity.PrintActivityTree(origin, level + 1);
if (NextInQueue != null)
NextInQueue.PrintActivityTree(origin, level);
}
}
public virtual IEnumerable<Target> GetTargets(Actor self)
@@ -42,11 +267,34 @@ namespace OpenRA.Activities
}
}
/// <summary>
/// In contrast to the base activity class, which is responsible for running its children itself,
/// composite activities rely on the actor's activity-running logic for their children.
/// </summary>
public abstract class CompositeActivity : Activity
{
/// <summary>
/// The getter will return the first non-null value of either child, next or parent activity, in that order, or ultimately null.
/// </summary>
public override Activity NextActivity
{
get
{
if (ChildActivity != null)
return ChildActivity;
else if (NextInQueue != null)
return NextInQueue;
else
return ParentActivity;
}
}
}
public static class ActivityExts
{
public static IEnumerable<Target> GetTargetQueue(this Actor self)
{
return self.GetCurrentActivity()
return self.CurrentActivity
.Iterate(u => u.NextActivity)
.TakeWhile(u => u != null)
.SelectMany(u => u.GetTargets(self));

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -16,25 +16,18 @@ namespace OpenRA.Activities
public class CallFunc : Activity
{
public CallFunc(Action a) { this.a = a; }
public CallFunc(Action a, bool interruptable)
public CallFunc(Action a, bool interruptible)
{
this.a = a;
this.interruptable = interruptable;
IsInterruptible = interruptible;
}
Action a;
bool interruptable;
public override Activity Tick(Actor self)
{
if (a != null) a();
return NextActivity;
}
public override void Cancel(Actor self)
{
if (interruptable)
base.Cancel(self);
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -28,8 +28,9 @@ namespace OpenRA
internal struct SyncHash
{
public readonly ISync Trait;
public readonly int Hash;
public SyncHash(ISync trait, int hash) { Trait = trait; Hash = hash; }
readonly Func<object, int> hashFunction;
public SyncHash(ISync trait) { Trait = trait; hashFunction = Sync.GetHashFunction(trait); }
public int Hash() { return hashFunction(Trait); }
}
public readonly ActorInfo Info;
@@ -38,23 +39,20 @@ namespace OpenRA
public readonly uint ActorID;
public Player Owner { get; set; }
public Player Owner { get; internal set; }
public bool IsInWorld { get; internal set; }
public bool Disposed { get; private set; }
Activity currentActivity;
public Activity CurrentActivity { get; private set; }
public Group Group;
public int Generation;
public Rectangle Bounds { get; private set; }
public Rectangle VisualBounds { get; private set; }
public IEffectiveOwner EffectiveOwner { get; private set; }
public IOccupySpace OccupiesSpace { get; private set; }
public ITargetable[] Targetables { get; private set; }
public bool IsIdle { get { return currentActivity == null; } }
public bool IsIdle { get { return CurrentActivity == null; } }
public bool IsDead { get { return Disposed || (health != null && health.IsDead); } }
public CPos Location { get { return OccupiesSpace.TopLeft; } }
@@ -70,13 +68,13 @@ namespace OpenRA
}
}
internal IEnumerable<SyncHash> SyncHashes { get; private set; }
internal SyncHash[] SyncHashes { get; private set; }
readonly IFacing facing;
readonly IHealth health;
readonly IRenderModifier[] renderModifiers;
readonly IRender[] renders;
readonly IDisable[] disables;
readonly IMouseBounds[] mouseBounds;
readonly IVisibilityModifier[] visibilityModifiers;
readonly IDefaultVisibility defaultVisibility;
@@ -111,57 +109,23 @@ namespace OpenRA
// PERF: Cache all these traits as soon as the actor is created. This is a fairly cheap one-off cost per
// actor that allows us to provide some fast implementations of commonly used methods that are relied on by
// performance-sensitive parts of the core game engine, such as pathfinding, visibility and rendering.
Bounds = DetermineBounds();
VisualBounds = DetermineVisualBounds();
EffectiveOwner = TraitOrDefault<IEffectiveOwner>();
facing = TraitOrDefault<IFacing>();
health = TraitOrDefault<IHealth>();
renderModifiers = TraitsImplementing<IRenderModifier>().ToArray();
renders = TraitsImplementing<IRender>().ToArray();
disables = TraitsImplementing<IDisable>().ToArray();
mouseBounds = TraitsImplementing<IMouseBounds>().ToArray();
visibilityModifiers = TraitsImplementing<IVisibilityModifier>().ToArray();
defaultVisibility = Trait<IDefaultVisibility>();
Targetables = TraitsImplementing<ITargetable>().ToArray();
SyncHashes =
TraitsImplementing<ISync>()
.Select(sync => Pair.New(sync, Sync.GetHashFunction(sync)))
.ToArray()
.Select(pair => new SyncHash(pair.First, pair.Second(pair.First)));
}
Rectangle DetermineBounds()
{
var si = Info.TraitInfoOrDefault<SelectableInfo>();
var size = (si != null && si.Bounds != null) ? new int2(si.Bounds[0], si.Bounds[1]) :
TraitsImplementing<IAutoSelectionSize>().Select(x => x.SelectionSize(this)).FirstOrDefault();
var offset = -size / 2;
if (si != null && si.Bounds != null && si.Bounds.Length > 2)
offset += new int2(si.Bounds[2], si.Bounds[3]);
return new Rectangle(offset.X, offset.Y, size.X, size.Y);
}
Rectangle DetermineVisualBounds()
{
var sd = Info.TraitInfoOrDefault<ISelectionDecorationsInfo>();
if (sd == null || sd.SelectionBoxBounds == null)
return Bounds;
var size = new int2(sd.SelectionBoxBounds[0], sd.SelectionBoxBounds[1]);
var offset = -size / 2;
if (sd.SelectionBoxBounds.Length > 2)
offset += new int2(sd.SelectionBoxBounds[2], sd.SelectionBoxBounds[3]);
return new Rectangle(offset.X, offset.Y, size.X, size.Y);
SyncHashes = TraitsImplementing<ISync>().Select(sync => new SyncHash(sync)).ToArray();
}
public void Tick()
{
var wasIdle = IsIdle;
currentActivity = ActivityUtils.RunActivity(this, currentActivity);
CurrentActivity = ActivityUtils.RunActivity(this, CurrentActivity);
if (!wasIdle && IsIdle)
foreach (var n in TraitsImplementing<INotifyBecomingIdle>())
@@ -191,6 +155,35 @@ namespace OpenRA
yield return renderable;
}
public IEnumerable<Rectangle> ScreenBounds(WorldRenderer wr)
{
var bounds = Bounds(wr);
foreach (var modifier in renderModifiers)
bounds = modifier.ModifyScreenBounds(this, wr, bounds);
return bounds;
}
IEnumerable<Rectangle> Bounds(WorldRenderer wr)
{
// PERF: Avoid LINQ. See comments for Renderables
foreach (var render in renders)
foreach (var r in render.ScreenBounds(this, wr))
if (!r.IsEmpty)
yield return r;
}
public Rectangle MouseBounds(WorldRenderer wr)
{
foreach (var mb in mouseBounds)
{
var bounds = mb.MouseoverBounds(this, wr);
if (!bounds.IsEmpty)
return bounds;
}
return Rectangle.Empty;
}
public void QueueActivity(bool queued, Activity nextActivity)
{
if (!queued)
@@ -200,21 +193,18 @@ namespace OpenRA
public void QueueActivity(Activity nextActivity)
{
if (currentActivity == null)
currentActivity = nextActivity;
if (CurrentActivity == null)
CurrentActivity = nextActivity;
else
currentActivity.Queue(nextActivity);
CurrentActivity.RootActivity.Queue(nextActivity);
}
public void CancelActivity()
public bool CancelActivity()
{
if (currentActivity != null)
currentActivity.Cancel(this);
}
if (CurrentActivity != null)
return CurrentActivity.RootActivity.Cancel(this);
public Activity GetCurrentActivity()
{
return currentActivity;
return true;
}
public override int GetHashCode()
@@ -286,27 +276,33 @@ namespace OpenRA
// TODO: move elsewhere.
public void ChangeOwner(Player newOwner)
{
World.AddFrameEndTask(w =>
{
if (Disposed)
return;
World.AddFrameEndTask(_ => ChangeOwnerSync(newOwner));
}
var oldOwner = Owner;
var wasInWorld = IsInWorld;
/// <summary>
/// Change the actors owner without queuing a FrameEndTask.
/// This must only be called from inside an existing FrameEndTask.
/// </summary>
public void ChangeOwnerSync(Player newOwner)
{
if (Disposed)
return;
// momentarily remove from world so the ownership queries don't get confused
if (wasInWorld)
w.Remove(this);
var oldOwner = Owner;
var wasInWorld = IsInWorld;
Owner = newOwner;
Generation++;
// momentarily remove from world so the ownership queries don't get confused
if (wasInWorld)
World.Remove(this);
foreach (var t in TraitsImplementing<INotifyOwnerChanged>())
t.OnOwnerChanged(this, oldOwner, newOwner);
Owner = newOwner;
Generation++;
if (wasInWorld)
w.Add(this);
});
foreach (var t in TraitsImplementing<INotifyOwnerChanged>())
t.OnOwnerChanged(this, oldOwner, newOwner);
if (wasInWorld)
World.Add(this);
}
public DamageState GetDamageState()
@@ -333,15 +329,6 @@ namespace OpenRA
health.Kill(this, attacker);
}
public bool IsDisabled()
{
// PERF: Avoid LINQ.
foreach (var disable in disables)
if (disable.Disabled)
return true;
return false;
}
public bool CanBeViewedByPlayer(Player player)
{
// PERF: Avoid LINQ.

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -19,26 +19,25 @@ namespace OpenRA
public struct CPos : IScriptBindable, ILuaAdditionBinding, ILuaSubtractionBinding, ILuaEqualityBinding, ILuaTableBinding, IEquatable<CPos>
{
public readonly int X, Y;
public readonly byte Layer;
public CPos(int x, int y) { X = x; Y = y; }
public static readonly CPos Zero = new CPos(0, 0);
public CPos(int x, int y) { X = x; Y = y; Layer = 0; }
public CPos(int x, int y, byte layer) { X = x; Y = y; Layer = layer; }
public static readonly CPos Zero = new CPos(0, 0, 0);
public static explicit operator CPos(int2 a) { return new CPos(a.X, a.Y); }
public static CPos operator +(CVec a, CPos b) { return new CPos(a.X + b.X, a.Y + b.Y); }
public static CPos operator +(CPos a, CVec b) { return new CPos(a.X + b.X, a.Y + b.Y); }
public static CPos operator -(CPos a, CVec b) { return new CPos(a.X - b.X, a.Y - b.Y); }
public static CPos operator +(CVec a, CPos b) { return new CPos(a.X + b.X, a.Y + b.Y, b.Layer); }
public static CPos operator +(CPos a, CVec b) { return new CPos(a.X + b.X, a.Y + b.Y, a.Layer); }
public static CPos operator -(CPos a, CVec b) { return new CPos(a.X - b.X, a.Y - b.Y, a.Layer); }
public static CVec operator -(CPos a, CPos b) { return new CVec(a.X - b.X, a.Y - b.Y); }
public static bool operator ==(CPos me, CPos other) { return me.X == other.X && me.Y == other.Y; }
public static bool operator ==(CPos me, CPos other) { return me.X == other.X && me.Y == other.Y && me.Layer == other.Layer; }
public static bool operator !=(CPos me, CPos other) { return !(me == other); }
public static CPos Max(CPos a, CPos b) { return new CPos(Math.Max(a.X, b.X), Math.Max(a.Y, b.Y)); }
public static CPos Min(CPos a, CPos b) { return new CPos(Math.Min(a.X, b.X), Math.Min(a.Y, b.Y)); }
public override int GetHashCode() { return X.GetHashCode() ^ Y.GetHashCode() ^ Layer.GetHashCode(); }
public override int GetHashCode() { return X.GetHashCode() ^ Y.GetHashCode(); }
public bool Equals(CPos other) { return X == other.X && Y == other.Y; }
public bool Equals(CPos other) { return X == other.X && Y == other.Y && Layer == other.Layer; }
public override bool Equals(object obj) { return obj is CPos && Equals((CPos)obj); }
public override string ToString() { return X + "," + Y; }
@@ -83,11 +82,24 @@ namespace OpenRA
public LuaValue Subtract(LuaRuntime runtime, LuaValue left, LuaValue right)
{
CPos a;
CVec b;
if (!left.TryGetClrValue(out a) || !right.TryGetClrValue(out b))
throw new LuaException("Attempted to call CPos.Subtract(CPos, CVec) with invalid arguments ({0}, {1})".F(left.WrappedClrType().Name, right.WrappedClrType().Name));
var rightType = right.WrappedClrType();
if (!left.TryGetClrValue(out a))
throw new LuaException("Attempted to call CPos.Subtract(CPos, (CPos|CVec)) with invalid arguments ({0}, {1})".F(left.WrappedClrType().Name, rightType.Name));
return new LuaCustomClrObject(a - b);
if (rightType == typeof(CPos))
{
CPos b;
right.TryGetClrValue(out b);
return new LuaCustomClrObject(a - b);
}
else if (rightType == typeof(CVec))
{
CVec b;
right.TryGetClrValue(out b);
return new LuaCustomClrObject(a - b);
}
throw new LuaException("Attempted to call CPos.Subtract(CPos, (CPos|CVec)) with invalid arguments ({0}, {1})".F(left.WrappedClrType().Name, rightType.Name));
}
public LuaValue Equals(LuaRuntime runtime, LuaValue left, LuaValue right)
@@ -107,6 +119,7 @@ namespace OpenRA
{
case "X": return X;
case "Y": return Y;
case "Layer": return Layer;
default: throw new LuaException("CPos does not define a member '{0}'".F(key));
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

38
OpenRA.Game/CryptoUtil.cs Normal file
View File

@@ -0,0 +1,38 @@
#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.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace OpenRA
{
public static class CryptoUtil
{
public static string SHA1Hash(Stream data)
{
using (var csp = SHA1.Create())
return new string(csp.ComputeHash(data).SelectMany(a => a.ToString("x2")).ToArray());
}
public static string SHA1Hash(byte[] data)
{
using (var csp = SHA1.Create())
return new string(csp.ComputeHash(data).SelectMany(a => a.ToString("x2")).ToArray());
}
public static string SHA1Hash(string data)
{
return SHA1Hash(Encoding.UTF8.GetBytes(data));
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -0,0 +1,46 @@
#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 OpenRA.Graphics;
using OpenRA.Traits;
namespace OpenRA.Effects
{
public class DelayedImpact : IEffect
{
readonly Target target;
readonly Actor firedBy;
readonly IEnumerable<int> damageModifiers;
readonly IWarhead wh;
int delay;
public DelayedImpact(int delay, IWarhead wh, Target target, Actor firedBy, IEnumerable<int> damageModifiers)
{
this.wh = wh;
this.delay = delay;
this.target = target;
this.firedBy = firedBy;
this.damageModifiers = damageModifiers;
}
public void Tick(World world)
{
if (--delay <= 0)
world.AddFrameEndTask(w => { w.Remove(this); wh.DoImpact(target, firedBy, damageModifiers); });
}
public IEnumerable<IRenderable> Render(WorldRenderer wr) { yield break; }
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -20,5 +20,8 @@ namespace OpenRA.Effects
IEnumerable<IRenderable> Render(WorldRenderer r);
}
// Identifier interface for effects that are added to ScreenMap
public interface ISpatiallyPartitionable { }
public interface IEffectAboveShroud { IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr); }
}

244
OpenRA.Game/ExternalMods.cs Normal file
View File

@@ -0,0 +1,244 @@
#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;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using OpenRA.Graphics;
namespace OpenRA
{
[Flags]
enum ModRegistration { User = 1, System = 2 }
public class ExternalMod
{
public readonly string Id;
public readonly string Version;
public readonly string Title;
public readonly string LaunchPath;
public readonly string[] LaunchArgs;
public Sprite Icon { get; internal set; }
public static string MakeKey(Manifest mod) { return MakeKey(mod.Id, mod.Metadata.Version); }
public static string MakeKey(ExternalMod mod) { return MakeKey(mod.Id, mod.Version); }
public static string MakeKey(string modId, string modVersion) { return modId + "-" + modVersion; }
}
public class ExternalMods : IReadOnlyDictionary<string, ExternalMod>
{
readonly Dictionary<string, ExternalMod> mods = new Dictionary<string, ExternalMod>();
readonly SheetBuilder sheetBuilder;
public ExternalMods()
{
sheetBuilder = new SheetBuilder(SheetType.BGRA, 256);
// If the player has defined a local support directory (in the game directory)
// then this will override both the regular and system support dirs
var sources = new[] { Platform.SystemSupportDir, Platform.SupportDir };
foreach (var source in sources.Distinct())
{
var metadataPath = Path.Combine(source, "ModMetadata");
if (!Directory.Exists(metadataPath))
continue;
foreach (var path in Directory.GetFiles(metadataPath, "*.yaml"))
{
try
{
var yaml = MiniYaml.FromStream(File.OpenRead(path), path).First().Value;
LoadMod(yaml, path);
}
catch (Exception e)
{
Log.Write("debug", "Failed to parse mod metadata file '{0}'", path);
Log.Write("debug", e.ToString());
}
}
}
}
void LoadMod(MiniYaml yaml, string path = null, bool forceRegistration = false)
{
var mod = FieldLoader.Load<ExternalMod>(yaml);
var iconNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Icon");
if (iconNode != null && !string.IsNullOrEmpty(iconNode.Value.Value))
{
using (var stream = new MemoryStream(Convert.FromBase64String(iconNode.Value.Value)))
using (var bitmap = new Bitmap(stream))
mod.Icon = sheetBuilder.Add(bitmap);
}
// Avoid possibly overwriting a valid mod with an obviously bogus one
var key = ExternalMod.MakeKey(mod);
if ((forceRegistration || File.Exists(mod.LaunchPath)) && (path == null || Path.GetFileNameWithoutExtension(path) == key))
mods[key] = mod;
}
internal void Register(Manifest mod, string launchPath, ModRegistration registration)
{
if (mod.Metadata.Hidden)
return;
var iconData = "";
using (var stream = mod.Package.GetStream("icon.png"))
if (stream != null)
iconData = Convert.ToBase64String(stream.ReadAllBytes());
var key = ExternalMod.MakeKey(mod);
var yaml = new List<MiniYamlNode>()
{
new MiniYamlNode("Registration", new MiniYaml("", new List<MiniYamlNode>()
{
new MiniYamlNode("Id", mod.Id),
new MiniYamlNode("Version", mod.Metadata.Version),
new MiniYamlNode("Title", mod.Metadata.Title),
new MiniYamlNode("Icon", iconData),
new MiniYamlNode("LaunchPath", launchPath),
new MiniYamlNode("LaunchArgs", "Game.Mod=" + mod.Id)
}))
};
var sources = new List<string>();
if (registration.HasFlag(ModRegistration.System))
sources.Add(Platform.SystemSupportDir);
if (registration.HasFlag(ModRegistration.User))
sources.Add(Platform.SupportDir);
// Make sure the mod is available for this session, even if saving it fails
LoadMod(yaml.First().Value, forceRegistration: true);
foreach (var source in sources.Distinct())
{
var metadataPath = Path.Combine(source, "ModMetadata");
try
{
Directory.CreateDirectory(metadataPath);
File.WriteAllLines(Path.Combine(metadataPath, key + ".yaml"), yaml.ToLines(false).ToArray());
}
catch (Exception e)
{
Log.Write("debug", "Failed to register current mod metadata");
Log.Write("debug", e.ToString());
}
}
}
/// <summary>
/// Removes invalid mod registrations:
/// * LaunchPath no longer exists
/// * LaunchPath and mod id matches the active mod, but the version is different
/// * Filename doesn't match internal key
/// * Fails to parse as a mod registration
/// </summary>
internal void ClearInvalidRegistrations(ExternalMod activeMod, ModRegistration registration)
{
var sources = new List<string>();
if (registration.HasFlag(ModRegistration.System))
sources.Add(Platform.SystemSupportDir);
if (registration.HasFlag(ModRegistration.User))
sources.Add(Platform.SupportDir);
var activeModKey = ExternalMod.MakeKey(activeMod);
foreach (var source in sources.Distinct())
{
var metadataPath = Path.Combine(source, "ModMetadata");
if (!Directory.Exists(metadataPath))
continue;
foreach (var path in Directory.GetFiles(metadataPath, "*.yaml"))
{
string modKey = null;
try
{
var yaml = MiniYaml.FromStream(File.OpenRead(path), path).First().Value;
var m = FieldLoader.Load<ExternalMod>(yaml);
modKey = ExternalMod.MakeKey(m);
// Continue to the next entry if it is the active mod (even if the LaunchPath is bogus)
if (modKey == activeModKey)
continue;
// Continue to the next entry if this one is valid
if (File.Exists(m.LaunchPath) && Path.GetFileNameWithoutExtension(path) == modKey &&
!(activeMod != null && m.LaunchPath == activeMod.LaunchPath && m.Id == activeMod.Id && m.Version != activeMod.Version))
continue;
}
catch (Exception e)
{
Log.Write("debug", "Failed to parse mod metadata file '{0}'", path);
Log.Write("debug", e.ToString());
}
// Remove from the ingame mod switcher
if (Path.GetFileNameWithoutExtension(path) == modKey)
mods.Remove(modKey);
// Remove stale or corrupted metadata
try
{
File.Delete(path);
Log.Write("debug", "Removed invalid mod metadata file '{0}'", path);
}
catch (Exception e)
{
Log.Write("debug", "Failed to remove mod metadata file '{0}'", path);
Log.Write("debug", e.ToString());
}
}
}
}
internal void Unregister(Manifest mod, ModRegistration registration)
{
var sources = new List<string>();
if (registration.HasFlag(ModRegistration.System))
sources.Add(Platform.SystemSupportDir);
if (registration.HasFlag(ModRegistration.User))
sources.Add(Platform.SupportDir);
var key = ExternalMod.MakeKey(mod);
mods.Remove(key);
foreach (var source in sources.Distinct())
{
var path = Path.Combine(source, "ModMetadata", key + ".yaml");
try
{
if (File.Exists(path))
File.Delete(path);
}
catch (Exception e)
{
Log.Write("debug", "Failed to remove mod metadata file '{0}'", path);
Log.Write("debug", e.ToString());
}
}
}
public ExternalMod this[string key] { get { return mods[key]; } }
public int Count { get { return mods.Count; } }
public ICollection<string> Keys { get { return mods.Keys; } }
public ICollection<ExternalMod> Values { get { return mods.Values; } }
public bool ContainsKey(string key) { return mods.ContainsKey(key); }
public IEnumerator<KeyValuePair<string, ExternalMod>> GetEnumerator() { return mods.GetEnumerator(); }
public bool TryGetValue(string key, out ExternalMod value) { return mods.TryGetValue(key, out value); }
IEnumerator IEnumerable.GetEnumerator() { return mods.GetEnumerator(); }
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -494,14 +494,30 @@ namespace OpenRA
return long.TryParse(s, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out i);
}
public static bool IsTraitEnabled(this object trait)
public static bool IsTraitEnabled<T>(this T trait)
{
return trait as IDisabledTrait == null || !(trait as IDisabledTrait).IsTraitDisabled;
var disabledTrait = trait as IDisabledTrait;
return disabledTrait == null || !disabledTrait.IsTraitDisabled;
}
public static bool IsTraitEnabled<T>(T t)
public static T FirstEnabledTraitOrDefault<T>(this IEnumerable<T> ts)
{
return IsTraitEnabled(t as object);
// PERF: Avoid LINQ.
foreach (var t in ts)
if (t.IsTraitEnabled())
return t;
return default(T);
}
public static T FirstEnabledTraitOrDefault<T>(this T[] ts)
{
// PERF: Avoid LINQ.
foreach (var t in ts)
if (t.IsTraitEnabled())
return t;
return default(T);
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -15,12 +15,14 @@ using System.ComponentModel;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text.RegularExpressions;
using OpenRA.Graphics;
using OpenRA.Primitives;
using OpenRA.Support;
namespace OpenRA
{
@@ -69,6 +71,11 @@ namespace OpenRA
static readonly ConcurrentCache<MemberInfo, bool> MemberHasTranslateAttribute =
new ConcurrentCache<MemberInfo, bool>(member => member.HasAttribute<TranslateAttribute>());
static readonly ConcurrentCache<string, BooleanExpression> BooleanExpressionCache =
new ConcurrentCache<string, BooleanExpression>(expression => new BooleanExpression(expression));
static readonly ConcurrentCache<string, IntegerExpression> IntegerExpressionCache =
new ConcurrentCache<string, IntegerExpression>(expression => new IntegerExpression(expression));
static readonly object TranslationsLock = new object();
static Dictionary<string, string> translations;
@@ -271,6 +278,10 @@ namespace OpenRA
return InvalidValueAction(value, fieldType, fieldName);
}
else if (fieldType == typeof(HotkeyReference))
{
return Game.ModData.Hotkeys[value];
}
else if (fieldType == typeof(WDist))
{
WDist res;
@@ -347,7 +358,7 @@ namespace OpenRA
if (parts.Length == 3)
{
int rr, rp, ry;
if (Exts.TryParseIntegerInvariant(value, out rr) && Exts.TryParseIntegerInvariant(value, out rp) && Exts.TryParseIntegerInvariant(value, out ry))
if (Exts.TryParseIntegerInvariant(parts[0], out rr) && Exts.TryParseIntegerInvariant(parts[1], out rp) && Exts.TryParseIntegerInvariant(parts[2], out ry))
return new WRot(new WAngle(rr), new WAngle(rp), new WAngle(ry));
}
}
@@ -396,6 +407,38 @@ namespace OpenRA
return InvalidValueAction(value, fieldType, fieldName);
}
else if (fieldType == typeof(BooleanExpression))
{
if (value != null)
{
try
{
return BooleanExpressionCache[value];
}
catch (InvalidDataException e)
{
throw new YamlException(e.Message);
}
}
return InvalidValueAction(value, fieldType, fieldName);
}
else if (fieldType == typeof(IntegerExpression))
{
if (value != null)
{
try
{
return IntegerExpressionCache[value];
}
catch (InvalidDataException e)
{
throw new YamlException(e.Message);
}
}
return InvalidValueAction(value, fieldType, fieldName);
}
else if (fieldType.IsEnum)
{
try
@@ -437,7 +480,9 @@ namespace OpenRA
if (value == null)
return Array.CreateInstance(fieldType.GetElementType(), 0);
var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
var options = field != null && field.HasAttribute<AllowEmptyEntriesAttribute>() ?
StringSplitOptions.None : StringSplitOptions.RemoveEmptyEntries;
var parts = value.Split(new char[] { ',' }, options);
var ret = Array.CreateInstance(fieldType.GetElementType(), parts.Length);
for (var i = 0; i < parts.Length; i++)
@@ -661,6 +706,13 @@ namespace OpenRA
: base(true, true) { }
}
[AttributeUsage(AttributeTargets.Field)]
public sealed class AllowEmptyEntriesAttribute : SerializeAttribute
{
public AllowEmptyEntriesAttribute()
: base(allowEmptyEntries: true) { }
}
[AttributeUsage(AttributeTargets.Field)]
public sealed class LoadUsingAttribute : SerializeAttribute
{
@@ -684,11 +736,13 @@ namespace OpenRA
public bool FromYamlKey;
public bool DictionaryFromYamlKey;
public bool Required;
public bool AllowEmptyEntries;
public SerializeAttribute(bool serialize = true, bool required = false)
public SerializeAttribute(bool serialize = true, bool required = false, bool allowEmptyEntries = false)
{
Serialize = serialize;
Required = required;
AllowEmptyEntries = allowEmptyEntries;
}
internal Func<MiniYaml, object> GetLoader(Type type)

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -82,7 +82,7 @@ namespace OpenRA.FileFormats
case "PLTE":
{
palette = new Color[256];
for (var i = 0; i < 256; i++)
for (var i = 0; i < length / 3; i++)
{
var r = cr.ReadByte(); var g = cr.ReadByte(); var b = cr.ReadByte();
palette[i] = Color.FromArgb(r, g, b);
@@ -149,7 +149,7 @@ namespace OpenRA.FileFormats
{
var cp = temp.Palette;
for (var i = 0; i < 256; i++)
cp.Entries[i] = palette[i]; // finalize the palette.
cp.Entries[i] = palette[i]; // finalize the palette.
bitmap.Palette = cp;
return bitmap;
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -79,45 +79,27 @@ namespace OpenRA.FileFormats
public static ReplayMetadata Read(string path)
{
using (var fs = new FileStream(path, FileMode.Open))
return Read(fs, path);
}
static ReplayMetadata Read(FileStream fs, string path)
{
if (!fs.CanSeek)
return null;
if (fs.Length < 20)
return null;
try
{
fs.Seek(-(4 + 4), SeekOrigin.End);
var dataLength = fs.ReadInt32();
if (fs.ReadInt32() == MetaEndMarker)
using (var fs = new FileStream(path, FileMode.Open))
{
// go back by (end marker + length storage + data + version + start marker) bytes
fs.Seek(-(4 + 4 + dataLength + 4 + 4), SeekOrigin.Current);
try
if (!fs.CanSeek)
return null;
if (fs.Length < 20)
return null;
fs.Seek(-(4 + 4), SeekOrigin.End);
var dataLength = fs.ReadInt32();
if (fs.ReadInt32() == MetaEndMarker)
{
// Go back by (end marker + length storage + data + version + start marker) bytes
fs.Seek(-(4 + 4 + dataLength + 4 + 4), SeekOrigin.Current);
return new ReplayMetadata(fs, path);
}
catch (YamlException ex)
{
Log.Write("debug", ex.ToString());
}
catch (InvalidOperationException ex)
{
Log.Write("debug", ex.ToString());
}
catch (NotSupportedException ex)
{
Log.Write("debug", ex.ToString());
}
}
}
catch (IOException ex)
catch (Exception ex)
{
Log.Write("debug", ex.ToString());
}

View File

@@ -1,127 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using OpenRA.FileFormats;
using OpenRA.Primitives;
namespace OpenRA.FileSystem
{
public sealed class BagFile : IReadOnlyPackage
{
public string Name { get; private set; }
public IEnumerable<string> Contents { get { return index.Keys; } }
readonly Stream s;
readonly Dictionary<string, IdxEntry> index;
public BagFile(FileSystem context, string filename)
{
Name = filename;
// A bag file is always accompanied with an .idx counterpart
// For example: audio.bag requires the audio.idx file
var indexFilename = Path.ChangeExtension(filename, ".idx");
// Build the index and dispose the stream, it is no longer needed after this
List<IdxEntry> entries;
using (var indexStream = context.Open(indexFilename))
entries = new IdxReader(indexStream).Entries;
index = entries.ToDictionaryWithConflictLog(x => x.Filename,
"{0} (bag format)".F(filename),
null, x => "(offs={0}, len={1})".F(x.Offset, x.Length));
s = context.Open(filename);
}
public Stream GetStream(string filename)
{
IdxEntry entry;
if (!index.TryGetValue(filename, out entry))
return null;
s.Seek(entry.Offset, SeekOrigin.Begin);
var waveHeaderMemoryStream = new MemoryStream();
var channels = (entry.Flags & 1) > 0 ? 2 : 1;
if ((entry.Flags & 2) > 0)
{
// PCM
waveHeaderMemoryStream.Write(Encoding.ASCII.GetBytes("RIFF"));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(entry.Length + 36));
waveHeaderMemoryStream.Write(Encoding.ASCII.GetBytes("WAVE"));
waveHeaderMemoryStream.Write(Encoding.ASCII.GetBytes("fmt "));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(16));
waveHeaderMemoryStream.Write(BitConverter.GetBytes((short)1));
waveHeaderMemoryStream.Write(BitConverter.GetBytes((short)channels));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(entry.SampleRate));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(2 * channels * entry.SampleRate));
waveHeaderMemoryStream.Write(BitConverter.GetBytes((short)(2 * channels)));
waveHeaderMemoryStream.Write(BitConverter.GetBytes((short)16));
waveHeaderMemoryStream.Write(Encoding.ASCII.GetBytes("data"));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(entry.Length));
}
if ((entry.Flags & 8) > 0)
{
// IMA ADPCM
var samplesPerChunk = (2 * (entry.ChunkSize - 4)) + 1;
var bytesPerSec = (int)Math.Floor(((double)(2 * entry.ChunkSize) / samplesPerChunk) * ((double)entry.SampleRate / 2));
var chunkSize = entry.ChunkSize > entry.Length ? entry.Length : entry.ChunkSize;
waveHeaderMemoryStream.Write(Encoding.ASCII.GetBytes("RIFF"));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(entry.Length + 52));
waveHeaderMemoryStream.Write(Encoding.ASCII.GetBytes("WAVE"));
waveHeaderMemoryStream.Write(Encoding.ASCII.GetBytes("fmt "));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(20));
waveHeaderMemoryStream.Write(BitConverter.GetBytes((short)17));
waveHeaderMemoryStream.Write(BitConverter.GetBytes((short)channels));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(entry.SampleRate));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(bytesPerSec));
waveHeaderMemoryStream.Write(BitConverter.GetBytes((short)chunkSize));
waveHeaderMemoryStream.Write(BitConverter.GetBytes((short)4));
waveHeaderMemoryStream.Write(BitConverter.GetBytes((short)2));
waveHeaderMemoryStream.Write(BitConverter.GetBytes((short)samplesPerChunk));
waveHeaderMemoryStream.Write(Encoding.ASCII.GetBytes("fact"));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(4));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(4 * entry.Length));
waveHeaderMemoryStream.Write(Encoding.ASCII.GetBytes("data"));
waveHeaderMemoryStream.Write(BitConverter.GetBytes(entry.Length));
}
waveHeaderMemoryStream.Seek(0, SeekOrigin.Begin);
// Construct a merged stream
var mergedStream = new MergedStream(waveHeaderMemoryStream, s);
mergedStream.SetLength(waveHeaderMemoryStream.Length + entry.Length);
return mergedStream;
}
public bool Contains(string filename)
{
return index.ContainsKey(filename);
}
public void Dispose()
{
s.Dispose();
}
}
}

View File

@@ -1,105 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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.IO;
using System.Linq;
namespace OpenRA.FileSystem
{
public sealed class BigFile : IReadOnlyPackage
{
public string Name { get; private set; }
public IEnumerable<string> Contents { get { return index.Keys; } }
readonly Dictionary<string, Entry> index = new Dictionary<string, Entry>();
readonly Stream s;
public BigFile(FileSystem context, string filename)
{
Name = filename;
s = context.Open(filename);
try
{
if (s.ReadASCII(4) != "BIGF")
throw new InvalidDataException("Header is not BIGF");
// Total archive size.
s.ReadUInt32();
var entryCount = s.ReadUInt32();
if (BitConverter.IsLittleEndian)
entryCount = int2.Swap(entryCount);
// First entry offset? This is apparently bogus for EA's .big files
// and we don't have to try seeking there since the entries typically start next in EA's .big files.
s.ReadUInt32();
for (var i = 0; i < entryCount; i++)
{
var entry = new Entry(s);
index.Add(entry.Path, entry);
}
}
catch
{
Dispose();
throw;
}
}
class Entry
{
readonly Stream s;
readonly uint offset;
readonly uint size;
public readonly string Path;
public Entry(Stream s)
{
this.s = s;
offset = s.ReadUInt32();
size = s.ReadUInt32();
if (BitConverter.IsLittleEndian)
{
offset = int2.Swap(offset);
size = int2.Swap(size);
}
Path = s.ReadASCIIZ();
}
public Stream GetData()
{
s.Position = offset;
return new MemoryStream(s.ReadBytes((int)size));
}
}
public Stream GetStream(string filename)
{
return index[filename].GetData();
}
public bool Contains(string filename)
{
return index.ContainsKey(filename);
}
public void Dispose()
{
s.Dispose();
}
}
}

View File

@@ -1,81 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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.Collections.Generic;
using System.IO;
using OpenRA.Primitives;
namespace OpenRA.FileSystem
{
public sealed class D2kSoundResources : IReadOnlyPackage
{
struct Entry
{
public readonly uint Offset;
public readonly uint Length;
public Entry(uint offset, uint length)
{
Offset = offset;
Length = length;
}
}
public string Name { get; private set; }
public IEnumerable<string> Contents { get { return index.Keys; } }
readonly Stream s;
readonly Dictionary<string, Entry> index = new Dictionary<string, Entry>();
public D2kSoundResources(FileSystem context, string filename)
{
Name = filename;
s = context.Open(filename);
try
{
var headerLength = s.ReadUInt32();
while (s.Position < headerLength + 4)
{
var name = s.ReadASCIIZ();
var offset = s.ReadUInt32();
var length = s.ReadUInt32();
index.Add(name, new Entry(offset, length));
}
}
catch
{
Dispose();
throw;
}
}
public Stream GetStream(string filename)
{
Entry e;
if (!index.TryGetValue(filename, out e))
return null;
s.Seek(e.Offset, SeekOrigin.Begin);
return new MemoryStream(s.ReadBytes((int)e.Length));
}
public bool Contains(string filename)
{
return index.ContainsKey(filename);
}
public void Dispose()
{
s.Dispose();
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -34,82 +34,63 @@ namespace OpenRA.FileSystem
// Mod packages that should not be disposed
readonly List<IReadOnlyPackage> modPackages = new List<IReadOnlyPackage>();
readonly IReadOnlyDictionary<string, Manifest> installedMods;
readonly IPackageLoader[] packageLoaders;
Cache<string, List<IReadOnlyPackage>> fileIndex = new Cache<string, List<IReadOnlyPackage>>(_ => new List<IReadOnlyPackage>());
public FileSystem(IReadOnlyDictionary<string, Manifest> installedMods)
public FileSystem(IReadOnlyDictionary<string, Manifest> installedMods, IPackageLoader[] packageLoaders)
{
this.installedMods = installedMods;
this.packageLoaders = packageLoaders
.Append(new ZipFileLoader())
.ToArray();
}
public bool TryParsePackage(Stream stream, string filename, out IReadOnlyPackage package)
{
package = null;
foreach (var packageLoader in packageLoaders)
if (packageLoader.TryParsePackage(stream, filename, this, out package))
return true;
return false;
}
public IReadOnlyPackage OpenPackage(string filename)
{
if (filename.EndsWith(".mix", StringComparison.InvariantCultureIgnoreCase))
return new MixFile(this, filename);
if (filename.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase))
return new ZipFile(this, filename);
if (filename.EndsWith(".oramap", StringComparison.InvariantCultureIgnoreCase))
return new ZipFile(this, filename);
if (filename.EndsWith(".oramod", StringComparison.InvariantCultureIgnoreCase))
return new ZipFile(this, filename);
if (filename.EndsWith(".RS", StringComparison.InvariantCultureIgnoreCase))
return new D2kSoundResources(this, filename);
if (filename.EndsWith(".Z", StringComparison.InvariantCultureIgnoreCase))
return new InstallShieldPackage(this, filename);
if (filename.EndsWith(".PAK", StringComparison.InvariantCultureIgnoreCase))
return new PakFile(this, filename);
if (filename.EndsWith(".big", StringComparison.InvariantCultureIgnoreCase))
return new BigFile(this, filename);
if (filename.EndsWith(".bag", StringComparison.InvariantCultureIgnoreCase))
return new BagFile(this, filename);
// Raw directories are the easiest and one of the most common cases, so try these first
var resolvedPath = Platform.ResolvePath(filename);
if (!filename.Contains("|") && Directory.Exists(resolvedPath))
return new Folder(resolvedPath);
// Children of another package require special handling
IReadOnlyPackage parent;
string subPath = null;
if (TryGetPackageContaining(filename, out parent, out subPath))
return OpenPackage(subPath, parent);
return parent.OpenPackage(subPath, this);
return new Folder(Platform.ResolvePath(filename));
}
// Try and open it normally
IReadOnlyPackage package;
var stream = Open(filename);
if (TryParsePackage(stream, filename, out package))
return package;
public IReadOnlyPackage OpenPackage(string filename, IReadOnlyPackage parent)
{
// HACK: limit support to zip and folder until we generalize the PackageLoader support
if (filename.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase) ||
filename.EndsWith(".oramap", StringComparison.InvariantCultureIgnoreCase))
{
using (var s = parent.GetStream(filename))
return new ZipFile(s, filename, parent);
}
if (parent is ZipFile)
return new ZipFolder(this, (ZipFile)parent, filename, filename);
if (parent is ZipFolder)
{
var folder = (ZipFolder)parent;
return new ZipFolder(this, folder.Parent, folder.Name + "/" + filename, filename);
}
if (parent is Folder)
{
var subFolder = Platform.ResolvePath(Path.Combine(parent.Name, filename));
if (Directory.Exists(subFolder))
return new Folder(subFolder);
}
// No package loaders took ownership of the stream, so clean it up
stream.Dispose();
return null;
}
public void Mount(string name, string explicitName = null)
{
var optional = name.StartsWith("~");
var optional = name.StartsWith("~", StringComparison.Ordinal);
if (optional)
name = name.Substring(1);
try
{
IReadOnlyPackage package;
if (name.StartsWith("$"))
if (name.StartsWith("$", StringComparison.Ordinal))
{
name = name.Substring(1);
@@ -121,7 +102,11 @@ namespace OpenRA.FileSystem
modPackages.Add(package);
}
else
{
package = OpenPackage(name);
if (package == null)
throw new InvalidOperationException("Could not open package '{0}', file not found or its format is not supported.".F(name));
}
Mount(package, explicitName);
}
@@ -263,9 +248,15 @@ namespace OpenRA.FileSystem
if (s != null)
return true;
// The file should be in an explicit package (but we couldn't find it)
// Thus don't try to find it using the filename (which contains the invalid '|' char)
// This can be removed once the TODO below is resolved
if (explicitSplit > 0)
return false;
// Ask each package individually
// TODO: This fallback can be removed once the filesystem cleanups are complete
var package = mountedPackages.Keys.LastOrDefault(x => x.Contains(filename));
var package = mountedPackages.Keys.LastOrDefault(x => x.Contains(filename));
if (package != null)
{
s = package.GetStream(filename);
@@ -289,5 +280,40 @@ namespace OpenRA.FileSystem
return fileIndex.ContainsKey(filename);
}
/// <summary>
/// Resolves a filesystem for an assembly, accounting for explicit and mod mounts.
/// Assemblies must exist in the native OS file system (not inside an OpenRA-defined package).
/// </summary>
public static string ResolveAssemblyPath(string path, Manifest manifest, InstalledMods installedMods)
{
var explicitSplit = path.IndexOf('|');
if (explicitSplit > 0)
{
var parent = path.Substring(0, explicitSplit);
var filename = path.Substring(explicitSplit + 1);
var parentPath = manifest.Packages.FirstOrDefault(kv => kv.Value == parent).Key;
if (parentPath == null)
return null;
if (parentPath.StartsWith("$", StringComparison.Ordinal))
{
Manifest mod;
if (!installedMods.TryGetValue(parentPath.Substring(1), out mod))
return null;
if (!(mod.Package is Folder))
return null;
path = Path.Combine(mod.Package.Name, filename);
}
else
path = Path.Combine(parentPath, filename);
}
var resolvedPath = Platform.ResolvePath(path);
return File.Exists(resolvedPath) ? resolvedPath : null;
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -9,6 +9,7 @@
*/
#endregion
using System;
using System.Collections.Generic;
using System.IO;
@@ -47,7 +48,31 @@ namespace OpenRA.FileSystem
public bool Contains(string filename)
{
var combined = Path.Combine(path, filename);
return combined.StartsWith(path) && File.Exists(combined);
return combined.StartsWith(path, StringComparison.Ordinal) && File.Exists(combined);
}
public IReadOnlyPackage OpenPackage(string filename, FileSystem context)
{
var resolvedPath = Platform.ResolvePath(Path.Combine(Name, filename));
if (Directory.Exists(resolvedPath))
return new Folder(resolvedPath);
// Zip files loaded from Folders (and *only* from Folders) can be read-write
IReadWritePackage readWritePackage;
if (ZipFileLoader.TryParseReadWritePackage(resolvedPath, out readWritePackage))
return readWritePackage;
// Other package types can be loaded normally
IReadOnlyPackage package;
var s = GetStream(filename);
if (s == null)
return null;
if (context.TryParsePackage(s, filename, out package))
return package;
s.Dispose();
return null;
}
public void Update(string filename, byte[] contents)

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -15,12 +15,23 @@ using System.IO;
namespace OpenRA.FileSystem
{
public interface IPackageLoader
{
/// <summary>
/// Attempt to parse a stream as this type of package.
/// If successful, the loader is expected to take ownership of `s` and dispose it once done.
/// If unsuccessful, the loader is expected to return the stream position to where it started.
/// </summary>
bool TryParsePackage(Stream s, string filename, FileSystem context, out IReadOnlyPackage package);
}
public interface IReadOnlyPackage : IDisposable
{
string Name { get; }
IEnumerable<string> Contents { get; }
Stream GetStream(string filename);
bool Contains(string filename);
IReadOnlyPackage OpenPackage(string filename, FileSystem context);
}
public interface IReadWritePackage : IReadOnlyPackage

View File

@@ -1,137 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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.IO;
using OpenRA.FileFormats;
namespace OpenRA.FileSystem
{
public sealed class InstallShieldPackage : IReadOnlyPackage
{
public struct Entry
{
public readonly uint Offset;
public readonly uint Length;
public Entry(uint offset, uint length)
{
Offset = offset;
Length = length;
}
}
public string Name { get; private set; }
public IEnumerable<string> Contents { get { return index.Keys; } }
readonly Dictionary<string, Entry> index = new Dictionary<string, Entry>();
readonly Stream s;
readonly long dataStart = 255;
public InstallShieldPackage(FileSystem context, string filename)
{
Name = filename;
s = context.Open(filename);
try
{
// Parse package header
var signature = s.ReadUInt32();
if (signature != 0x8C655D13)
throw new InvalidDataException("Not an Installshield package");
s.Position += 8;
/*var FileCount = */s.ReadUInt16();
s.Position += 4;
/*var ArchiveSize = */s.ReadUInt32();
s.Position += 19;
var tocAddress = s.ReadInt32();
s.Position += 4;
var dirCount = s.ReadUInt16();
// Parse the directory list
s.Position = tocAddress;
// Parse directories
var directories = new Dictionary<string, uint>();
for (var i = 0; i < dirCount; i++)
{
// Parse directory header
var fileCount = s.ReadUInt16();
var chunkSize = s.ReadUInt16();
var nameLength = s.ReadUInt16();
var dirName = s.ReadASCII(nameLength);
// Skip to the end of the chunk
s.ReadBytes(chunkSize - nameLength - 6);
directories.Add(dirName, fileCount);
}
// Parse files
foreach (var dir in directories)
for (var i = 0; i < dir.Value; i++)
ParseFile(s, dir.Key);
}
catch
{
Dispose();
throw;
}
}
uint accumulatedData = 0;
void ParseFile(Stream s, string dirName)
{
s.Position += 7;
var compressedSize = s.ReadUInt32();
s.Position += 12;
var chunkSize = s.ReadUInt16();
s.Position += 4;
var nameLength = s.ReadByte();
var fileName = dirName + "\\" + s.ReadASCII(nameLength);
// Use index syntax to overwrite any duplicate entries with the last value
index[fileName] = new Entry(accumulatedData, compressedSize);
accumulatedData += compressedSize;
// Skip to the end of the chunk
s.Position += chunkSize - nameLength - 30;
}
public Stream GetStream(string filename)
{
Entry e;
if (!index.TryGetValue(filename, out e))
return null;
s.Seek(dataStart + e.Offset, SeekOrigin.Begin);
var ret = new MemoryStream();
Blast.Decompress(s, ret);
ret.Seek(0, SeekOrigin.Begin);
return ret;
}
public bool Contains(string filename)
{
return index.ContainsKey(filename);
}
public IReadOnlyDictionary<string, Entry> Index { get { return new ReadOnlyDictionary<string, Entry>(index); } }
public void Dispose()
{
s.Dispose();
}
}
}

View File

@@ -1,227 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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.Globalization;
using System.IO;
using System.Linq;
using OpenRA.FileFormats;
using OpenRA.Primitives;
namespace OpenRA.FileSystem
{
public sealed class MixFile : IReadOnlyPackage
{
public string Name { get; private set; }
public IEnumerable<string> Contents { get { return index.Keys; } }
readonly Dictionary<string, PackageEntry> index;
readonly long dataStart;
readonly Stream s;
readonly FileSystem context;
public MixFile(FileSystem context, string filename)
{
Name = filename;
this.context = context;
s = context.Open(filename);
try
{
// Detect format type
var isCncMix = s.ReadUInt16() != 0;
// The C&C mix format doesn't contain any flags or encryption
var isEncrypted = false;
if (!isCncMix)
isEncrypted = (s.ReadUInt16() & 0x2) != 0;
List<PackageEntry> entries;
if (isEncrypted)
{
long unused;
entries = ParseHeader(DecryptHeader(s, 4, out dataStart), 0, out unused);
}
else
entries = ParseHeader(s, isCncMix ? 0 : 4, out dataStart);
index = ParseIndex(entries.ToDictionaryWithConflictLog(x => x.Hash,
"{0} ({1} format, Encrypted: {2}, DataStart: {3})".F(filename, isCncMix ? "C&C" : "RA/TS/RA2", isEncrypted, dataStart),
null, x => "(offs={0}, len={1})".F(x.Offset, x.Length)));
}
catch (Exception)
{
Dispose();
throw;
}
}
Dictionary<string, PackageEntry> ParseIndex(Dictionary<uint, PackageEntry> entries)
{
var classicIndex = new Dictionary<string, PackageEntry>();
var crcIndex = new Dictionary<string, PackageEntry>();
var allPossibleFilenames = new HashSet<string>();
// Try and find a local mix database
var dbNameClassic = PackageEntry.HashFilename("local mix database.dat", PackageHashType.Classic);
var dbNameCRC = PackageEntry.HashFilename("local mix database.dat", PackageHashType.CRC32);
foreach (var kv in entries)
{
if (kv.Key == dbNameClassic || kv.Key == dbNameCRC)
{
var db = new XccLocalDatabase(GetContent(kv.Value));
foreach (var e in db.Entries)
allPossibleFilenames.Add(e);
break;
}
}
// Load the global mix database
// TODO: This should be passed to the mix file ctor
if (context.Exists("global mix database.dat"))
{
using (var db = new XccGlobalDatabase(context.Open("global mix database.dat")))
{
foreach (var e in db.Entries)
allPossibleFilenames.Add(e);
}
}
foreach (var filename in allPossibleFilenames)
{
var classicHash = PackageEntry.HashFilename(filename, PackageHashType.Classic);
var crcHash = PackageEntry.HashFilename(filename, PackageHashType.CRC32);
PackageEntry e;
if (entries.TryGetValue(classicHash, out e))
classicIndex.Add(filename, e);
if (entries.TryGetValue(crcHash, out e))
crcIndex.Add(filename, e);
}
var bestIndex = crcIndex.Count > classicIndex.Count ? crcIndex : classicIndex;
var unknown = entries.Count - bestIndex.Count;
if (unknown > 0)
Log.Write("debug", "{0}: failed to resolve filenames for {1} unknown hashes".F(Name, unknown));
return bestIndex;
}
static List<PackageEntry> ParseHeader(Stream s, long offset, out long headerEnd)
{
s.Seek(offset, SeekOrigin.Begin);
var numFiles = s.ReadUInt16();
/*uint dataSize = */s.ReadUInt32();
var items = new List<PackageEntry>();
for (var i = 0; i < numFiles; i++)
items.Add(new PackageEntry(s));
headerEnd = offset + 6 + numFiles * PackageEntry.Size;
return items;
}
static MemoryStream DecryptHeader(Stream s, long offset, out long headerEnd)
{
s.Seek(offset, SeekOrigin.Begin);
// Decrypt blowfish key
var keyblock = s.ReadBytes(80);
var blowfishKey = new BlowfishKeyProvider().DecryptKey(keyblock);
var fish = new Blowfish(blowfishKey);
// Decrypt first block to work out the header length
var ms = Decrypt(ReadBlocks(s, offset + 80, 1), fish);
var numFiles = ms.ReadUInt16();
// Decrypt the full header - round bytes up to a full block
var blockCount = (13 + numFiles * PackageEntry.Size) / 8;
headerEnd = offset + 80 + blockCount * 8;
return Decrypt(ReadBlocks(s, offset + 80, blockCount), fish);
}
static MemoryStream Decrypt(uint[] h, Blowfish fish)
{
var decrypted = fish.Decrypt(h);
var ms = new MemoryStream();
var writer = new BinaryWriter(ms);
foreach (var t in decrypted)
writer.Write(t);
writer.Flush();
ms.Seek(0, SeekOrigin.Begin);
return ms;
}
static uint[] ReadBlocks(Stream s, long offset, int count)
{
if (offset < 0)
throw new ArgumentOutOfRangeException("offset", "Non-negative number required.");
if (count < 0)
throw new ArgumentOutOfRangeException("count", "Non-negative number required.");
if (offset + (count * 2) > s.Length)
throw new ArgumentException("Bytes to read {0} and offset {1} greater than stream length {2}.".F(count * 2, offset, s.Length));
s.Seek(offset, SeekOrigin.Begin);
// A block is a single encryption unit (represented as two 32-bit integers)
var ret = new uint[2 * count];
for (var i = 0; i < ret.Length; i++)
ret[i] = s.ReadUInt32();
return ret;
}
public Stream GetContent(PackageEntry entry)
{
Stream parentStream;
var offset = dataStart + entry.Offset + SegmentStream.GetOverallNestedOffset(s, out parentStream);
var path = ((FileStream)parentStream).Name;
return new SegmentStream(File.OpenRead(path), offset, entry.Length);
}
public Stream GetStream(string filename)
{
PackageEntry e;
if (!index.TryGetValue(filename, out e))
return null;
return GetContent(e);
}
public IReadOnlyDictionary<string, PackageEntry> Index
{
get
{
var absoluteIndex = index.ToDictionary(e => e.Key, e => new PackageEntry(e.Value.Hash, (uint)(e.Value.Offset + dataStart), e.Value.Length));
return new ReadOnlyDictionary<string, PackageEntry>(absoluteIndex);
}
}
public bool Contains(string filename)
{
return index.ContainsKey(filename);
}
public void Dispose()
{
s.Dispose();
}
}
}

View File

@@ -1,84 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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.Collections.Generic;
using System.IO;
namespace OpenRA.FileSystem
{
struct Entry
{
public uint Offset;
public uint Length;
public string Filename;
}
public sealed class PakFile : IReadOnlyPackage
{
public string Name { get; private set; }
public IEnumerable<string> Contents { get { return index.Keys; } }
readonly Dictionary<string, Entry> index;
readonly Stream stream;
public PakFile(FileSystem context, string filename)
{
Name = filename;
index = new Dictionary<string, Entry>();
stream = context.Open(filename);
try
{
index = new Dictionary<string, Entry>();
var offset = stream.ReadUInt32();
while (offset != 0)
{
var file = stream.ReadASCIIZ();
var next = stream.ReadUInt32();
var length = (next == 0 ? (uint)stream.Length : next) - offset;
// Ignore duplicate files
if (index.ContainsKey(file))
continue;
index.Add(file, new Entry { Offset = offset, Length = length, Filename = file });
offset = next;
}
}
catch
{
Dispose();
throw;
}
}
public Stream GetStream(string filename)
{
Entry entry;
if (!index.TryGetValue(filename, out entry))
return null;
stream.Seek(entry.Offset, SeekOrigin.Begin);
var data = stream.ReadBytes((int)entry.Length);
return new MemoryStream(data);
}
public bool Contains(string filename)
{
return index.ContainsKey(filename);
}
public void Dispose()
{
stream.Dispose();
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -9,152 +9,231 @@
*/
#endregion
using System.Collections;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using ICSharpCode.SharpZipLib.Zip;
using SZipFile = ICSharpCode.SharpZipLib.Zip.ZipFile;
using OpenRA.Primitives;
namespace OpenRA.FileSystem
{
public sealed class ZipFile : IReadWritePackage
public class ZipFileLoader : IPackageLoader
{
public IReadWritePackage Parent { get; private set; }
public string Name { get; private set; }
readonly Stream pkgStream;
readonly SZipFile pkg;
static readonly string[] Extensions = { ".zip", ".oramap" };
static ZipFile()
class ReadOnlyZipFile : IReadOnlyPackage
{
ZipConstants.DefaultCodePage = Encoding.UTF8.CodePage;
}
public string Name { get; protected set; }
protected ZipFile pkg;
public ZipFile(Stream stream, string name, IReadOnlyPackage parent = null)
{
// SharpZipLib breaks when asked to update archives loaded from outside streams or files
// We can work around this by creating a clean in-memory-only file, cutting all outside references
pkgStream = new MemoryStream();
stream.CopyTo(pkgStream);
pkgStream.Position = 0;
// Dummy constructor for use with ReadWriteZipFile
protected ReadOnlyZipFile() { }
Name = name;
Parent = parent as IReadWritePackage;
pkg = new SZipFile(pkgStream);
}
public ReadOnlyZipFile(Stream s, string filename)
{
Name = filename;
pkg = ZipFileHelper.Create(s);
}
public ZipFile(IReadOnlyFileSystem context, string filename)
{
string name;
IReadOnlyPackage p;
if (!context.TryGetPackageContaining(filename, out p, out name))
throw new FileNotFoundException("Unable to find parent package for " + filename);
public Stream GetStream(string filename)
{
var entry = pkg.GetEntry(filename);
if (entry == null)
return null;
Name = name;
Parent = p as IReadWritePackage;
using (var z = pkg.GetInputStream(entry))
{
var ms = new MemoryStream((int)entry.Size);
z.CopyTo(ms);
ms.Seek(0, SeekOrigin.Begin);
return ms;
}
}
// SharpZipLib breaks when asked to update archives loaded from outside streams or files
// We can work around this by creating a clean in-memory-only file, cutting all outside references
pkgStream = new MemoryStream();
using (var sourceStream = p.GetStream(name))
sourceStream.CopyTo(pkgStream);
pkgStream.Position = 0;
public IEnumerable<string> Contents
{
get
{
foreach (ZipEntry entry in pkg)
yield return entry.Name;
}
}
pkg = new SZipFile(pkgStream);
}
public bool Contains(string filename)
{
return pkg.GetEntry(filename) != null;
}
ZipFile(string filename, IReadWritePackage parent)
{
pkgStream = new MemoryStream();
public void Dispose()
{
if (pkg != null)
pkg.Close();
}
Name = filename;
Parent = parent;
pkg = SZipFile.Create(pkgStream);
}
public IReadOnlyPackage OpenPackage(string filename, FileSystem context)
{
// Directories are stored with a trailing "/" in the index
var entry = pkg.GetEntry(filename) ?? pkg.GetEntry(filename + "/");
if (entry == null)
return null;
public static ZipFile Create(string filename, IReadWritePackage parent)
{
return new ZipFile(filename, parent);
}
if (entry.IsDirectory)
return new ZipFolder(this, filename);
public Stream GetStream(string filename)
{
var entry = pkg.GetEntry(filename);
if (entry == null)
// Other package types can be loaded normally
IReadOnlyPackage package;
var s = GetStream(filename);
if (s == null)
return null;
if (context.TryParsePackage(s, filename, out package))
return package;
s.Dispose();
return null;
using (var z = pkg.GetInputStream(entry))
{
var ms = new MemoryStream();
z.CopyTo(ms);
ms.Seek(0, SeekOrigin.Begin);
return ms;
}
}
public IEnumerable<string> Contents
sealed class ReadWriteZipFile : ReadOnlyZipFile, IReadWritePackage
{
get
readonly MemoryStream pkgStream = new MemoryStream();
public ReadWriteZipFile(string filename, bool create = false)
{
foreach (ZipEntry entry in pkg)
yield return entry.Name;
// SharpZipLib breaks when asked to update archives loaded from outside streams or files
// We can work around this by creating a clean in-memory-only file, cutting all outside references
if (!create)
{
using (var copy = new MemoryStream(File.ReadAllBytes(filename)))
{
pkgStream.Capacity = (int)copy.Length;
copy.CopyTo(pkgStream);
}
}
pkgStream.Position = 0;
pkg = ZipFileHelper.Create(pkgStream);
Name = filename;
}
void Commit()
{
var pos = pkgStream.Position;
pkgStream.Position = 0;
File.WriteAllBytes(Name, pkgStream.ReadBytes((int)pkgStream.Length));
pkgStream.Position = pos;
}
public void Update(string filename, byte[] contents)
{
pkg.BeginUpdate();
pkg.Add(new StaticStreamDataSource(new MemoryStream(contents)), filename);
pkg.CommitUpdate();
Commit();
}
public void Delete(string filename)
{
pkg.BeginUpdate();
pkg.Delete(filename);
pkg.CommitUpdate();
Commit();
}
}
public bool Contains(string filename)
sealed class ZipFolder : IReadOnlyPackage
{
return pkg.GetEntry(filename) != null;
public string Name { get { return path; } }
public ReadOnlyZipFile Parent { get; private set; }
readonly string path;
public ZipFolder(ReadOnlyZipFile parent, string path)
{
if (path.EndsWith("/", StringComparison.Ordinal))
path = path.Substring(0, path.Length - 1);
Parent = parent;
this.path = path;
}
public Stream GetStream(string filename)
{
// Zip files use '/' as a path separator
return Parent.GetStream(path + '/' + filename);
}
public IEnumerable<string> Contents
{
get
{
foreach (var entry in Parent.Contents)
{
if (entry.StartsWith(path, StringComparison.Ordinal) && entry != path)
{
var filename = entry.Substring(path.Length + 1);
var dirLevels = filename.Split('/').Count(c => !string.IsNullOrEmpty(c));
if (dirLevels == 1)
yield return filename;
}
}
}
}
public bool Contains(string filename)
{
return Parent.Contains(path + '/' + filename);
}
public IReadOnlyPackage OpenPackage(string filename, FileSystem context)
{
return Parent.OpenPackage(path + '/' + filename, context);
}
public void Dispose() { /* nothing to do */ }
}
void Commit()
class StaticStreamDataSource : IStaticDataSource
{
if (Parent == null)
throw new InvalidDataException("Cannot update ZipFile without writable parent");
readonly Stream s;
public StaticStreamDataSource(Stream s)
{
this.s = s;
}
var pos = pkgStream.Position;
pkgStream.Position = 0;
Parent.Update(Name, pkgStream.ReadBytes((int)pkgStream.Length));
pkgStream.Position = pos;
public Stream GetSource()
{
return s;
}
}
public void Update(string filename, byte[] contents)
public bool TryParsePackage(Stream s, string filename, FileSystem context, out IReadOnlyPackage package)
{
pkg.BeginUpdate();
pkg.Add(new StaticStreamDataSource(new MemoryStream(contents)), filename);
pkg.CommitUpdate();
Commit();
if (!Extensions.Any(e => filename.EndsWith(e, StringComparison.InvariantCultureIgnoreCase)))
{
package = null;
return false;
}
package = new ReadOnlyZipFile(s, filename);
return true;
}
public void Delete(string filename)
public static bool TryParseReadWritePackage(string filename, out IReadWritePackage package)
{
pkg.BeginUpdate();
pkg.Delete(filename);
pkg.CommitUpdate();
Commit();
if (!Extensions.Any(e => filename.EndsWith(e, StringComparison.InvariantCultureIgnoreCase)))
{
package = null;
return false;
}
package = new ReadWriteZipFile(filename);
return true;
}
public void Dispose()
public static IReadWritePackage Create(string filename)
{
if (pkg != null)
pkg.Close();
if (pkgStream != null)
pkgStream.Dispose();
}
}
class StaticStreamDataSource : IStaticDataSource
{
readonly Stream s;
public StaticStreamDataSource(Stream s)
{
this.s = s;
}
public Stream GetSource()
{
return s;
return new ReadWriteZipFile(filename, true);
}
}
}

View File

@@ -1,76 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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.IO;
using System.Linq;
using System.Text;
using ICSharpCode.SharpZipLib.Zip;
using SZipFile = ICSharpCode.SharpZipLib.Zip.ZipFile;
namespace OpenRA.FileSystem
{
public sealed class ZipFolder : IReadOnlyPackage
{
public string Name { get; private set; }
public ZipFile Parent { get; private set; }
readonly string path;
static ZipFolder()
{
ZipConstants.DefaultCodePage = Encoding.UTF8.CodePage;
}
public ZipFolder(FileSystem context, ZipFile parent, string path, string filename)
{
if (filename.EndsWith("/"))
filename = filename.Substring(0, filename.Length - 1);
Name = filename;
Parent = parent;
if (path.EndsWith("/"))
path = path.Substring(0, path.Length - 1);
this.path = path;
}
public Stream GetStream(string filename)
{
// Zip files use '/' as a path separator
return Parent.GetStream(path + '/' + filename);
}
public IEnumerable<string> Contents
{
get
{
foreach (var entry in Parent.Contents)
{
if (entry.StartsWith(path) && entry != path)
{
var filename = entry.Substring(path.Length + 1);
var dirLevels = filename.Split('/').Count(c => !string.IsNullOrEmpty(c));
if (dirLevels == 1)
yield return filename;
}
}
}
}
public bool Contains(string filename)
{
return Parent.Contains(path + '/' + filename);
}
public void Dispose() { /* nothing to do */ }
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -21,8 +21,6 @@ using System.Net;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using OpenRA.Chat;
using OpenRA.FileSystem;
using OpenRA.Graphics;
using OpenRA.Network;
using OpenRA.Primitives;
@@ -38,6 +36,7 @@ namespace OpenRA
public const int TimestepJankThreshold = 250; // Don't catch up for delays larger than 250ms
public static InstalledMods Mods { get; private set; }
public static ExternalMods ExternalMods { get; private set; }
public static ModData ModData;
public static Settings Settings;
@@ -55,9 +54,10 @@ namespace OpenRA
public static bool BenchmarkMode = false;
public static GlobalChat GlobalChat;
public static string EngineVersion { get; private set; }
static Task discoverNat;
static bool takeScreenshot = false;
public static OrderManager JoinServer(string host, int port, string password, bool recordReplay = true)
{
@@ -163,13 +163,17 @@ namespace OpenRA
using (new PerfTimer("PrepareMap"))
map = ModData.PrepareMap(mapUID);
using (new PerfTimer("NewWorld"))
OrderManager.World = new World(map, OrderManager, type);
OrderManager.World = new World(ModData, map, OrderManager, type);
worldRenderer = new WorldRenderer(ModData, OrderManager.World);
GC.Collect();
using (new PerfTimer("LoadComplete"))
OrderManager.World.LoadComplete(worldRenderer);
GC.Collect();
if (OrderManager.GameStarted)
return;
@@ -242,18 +246,37 @@ namespace OpenRA
Settings = new Settings(Platform.ResolvePath(Path.Combine("^", "settings.yaml")), args);
}
internal static void Initialize(Arguments args)
public static RunStatus InitializeAndRun(string[] args)
{
Initialize(new Arguments(args));
GC.Collect();
return Run();
}
static void Initialize(Arguments args)
{
Console.WriteLine("Platform is {0}", Platform.CurrentPlatform);
// Load the engine version as early as possible so it can be written to exception logs
try
{
EngineVersion = File.ReadAllText(Platform.ResolvePath(Path.Combine(".", "VERSION"))).Trim();
}
catch { }
if (string.IsNullOrEmpty(EngineVersion))
EngineVersion = "Unknown";
Console.WriteLine("Engine version is {0}", EngineVersion);
// Special case handling of Game.Mod argument: if it matches a real filesystem path
// then we use this to override the mod search path, and replace it with the mod id
var modArgument = args.GetValue("Game.Mod", null);
string customModPath = null;
if (modArgument != null && (File.Exists(modArgument) || Directory.Exists(modArgument)))
var modID = args.GetValue("Game.Mod", null);
var explicitModPaths = new string[0];
if (modID != null && (File.Exists(modID) || Directory.Exists(modID)))
{
customModPath = modArgument;
args.ReplaceValue("Game.Mod", Path.GetFileNameWithoutExtension(modArgument));
explicitModPaths = new[] { modID };
modID = Path.GetFileNameWithoutExtension(modID);
}
InitializeSettings(args);
@@ -304,34 +327,43 @@ namespace OpenRA
GeoIP.Initialize();
if (!Game.Settings.Server.DiscoverNatDevices)
Game.Settings.Server.AllowPortForward = false;
else
{
if (Settings.Server.DiscoverNatDevices)
discoverNat = UPnP.DiscoverNatDevices(Settings.Server.NatDiscoveryTimeout);
Game.Settings.Server.AllowPortForward = true;
}
GlobalChat = new GlobalChat();
var modSearchArg = args.GetValue("Engine.ModSearchPaths", null);
var modSearchPaths = modSearchArg != null ?
FieldLoader.GetValue<string[]>("Engine.ModsPath", modSearchArg) :
new[] { Path.Combine(".", "mods") };
Mods = new InstalledMods(customModPath);
Console.WriteLine("Available mods:");
Mods = new InstalledMods(modSearchPaths, explicitModPaths);
Console.WriteLine("Internal mods:");
foreach (var mod in Mods)
Console.WriteLine("\t{0}: {1} ({2})", mod.Key, mod.Value.Metadata.Title, mod.Value.Metadata.Version);
InitializeMod(Settings.Game.Mod, args);
}
ExternalMods = new ExternalMods();
public static bool IsModInstalled(string modId)
{
return Mods.ContainsKey(modId) && Mods[modId].RequiresMods.All(IsModInstalled);
}
Manifest currentMod;
if (modID != null && Mods.TryGetValue(modID, out currentMod))
{
var launchPath = args.GetValue("Engine.LaunchPath", Assembly.GetEntryAssembly().Location);
public static bool IsModInstalled(KeyValuePair<string, string> mod)
{
return Mods.ContainsKey(mod.Key)
&& Mods[mod.Key].Metadata.Version == mod.Value
&& IsModInstalled(mod.Key);
// Sanitize input from platform-specific launchers
// Process.Start requires paths to not be quoted, even if they contain spaces
if (launchPath.First() == '"' && launchPath.Last() == '"')
launchPath = launchPath.Substring(1, launchPath.Length - 2);
ExternalMods.Register(Mods[modID], launchPath, ModRegistration.User);
ExternalMod activeMod;
if (ExternalMods.TryGetValue(ExternalMod.MakeKey(Mods[modID]), out activeMod))
ExternalMods.ClearInvalidRegistrations(activeMod, ModRegistration.User);
}
Console.WriteLine("External mods:");
foreach (var mod in ExternalMods)
Console.WriteLine("\t{0}: {1} ({2})", mod.Key, mod.Value.Title, mod.Value.Version);
InitializeMod(modID, args);
}
public static void InitializeMod(string mod, Arguments args)
@@ -361,27 +393,24 @@ namespace OpenRA
ModData = null;
// Fall back to default if the mod doesn't exist or has missing prerequisites.
if (!IsModInstalled(mod))
mod = new GameSettings().Mod;
if (mod == null)
throw new InvalidOperationException("Game.Mod argument missing.");
if (!Mods.ContainsKey(mod))
throw new InvalidOperationException("Unknown or invalid mod '{0}'.".F(mod));
Console.WriteLine("Loading mod: {0}", mod);
Settings.Game.Mod = mod;
Sound.StopVideo();
ModData = new ModData(Mods[mod], Mods, true);
if (!ModData.LoadScreen.BeforeLoad())
return;
using (new PerfTimer("LoadMaps"))
ModData.MapCache.LoadMaps();
// Mod assets are missing!
if (!ModData.LoadScreen.RequiredContentIsInstalled())
{
InitializeMod("modchooser", new Arguments());
return;
}
ModData.InitializeLoaders(ModData.DefaultFileSystem);
Renderer.InitializeFonts(ModData);
@@ -427,7 +456,6 @@ namespace OpenRA
{
Console.WriteLine("NAT discovery failed: {0}", e.Message);
Log.Write("nat", e.ToString());
Game.Settings.Server.AllowPortForward = false;
}
ModData.LoadScreen.StartGame(args);
@@ -458,6 +486,28 @@ namespace OpenRA
return shellmaps.Random(CosmeticRandom);
}
public static void SwitchToExternalMod(ExternalMod mod, string[] launchArguments = null, Action onFailed = null)
{
try
{
var args = launchArguments != null ? mod.LaunchArgs.Append(launchArguments) : mod.LaunchArgs;
var p = Process.Start(mod.LaunchPath, args.Select(a => "\"" + a + "\"").JoinWith(" "));
if (p == null || p.HasExited)
onFailed();
else
{
p.Close();
Exit();
}
}
catch (Exception e)
{
Log.Write("debug", "Failed to switch to external mod.");
Log.Write("debug", "Error was: " + e.Message);
onFailed();
}
}
static RunStatus state = RunStatus.Running;
public static event Action OnQuit = () => { };
@@ -509,8 +559,6 @@ namespace OpenRA
var integralTickTimestep = (uiTickDelta / Timestep) * Timestep;
Ui.LastTickTime += integralTickTimestep >= TimestepJankThreshold ? integralTickTimestep : Timestep;
Viewport.TicksSinceLastMove += uiTickDelta / Timestep;
Sync.CheckSyncUnchanged(world, Ui.Tick);
Cursor.Tick();
}
@@ -534,40 +582,36 @@ namespace OpenRA
if (world == null)
return;
// Don't tick when the shellmap is disabled
if (world.ShouldTick)
var isNetTick = LocalTick % NetTickScale == 0;
if (!isNetTick || orderManager.IsReadyForNextFrame)
{
var isNetTick = LocalTick % NetTickScale == 0;
++orderManager.LocalFrameNumber;
if (!isNetTick || orderManager.IsReadyForNextFrame)
Log.Write("debug", "--Tick: {0} ({1})", LocalTick, isNetTick ? "net" : "local");
if (BenchmarkMode)
Log.Write("cpu", "{0};{1}".F(LocalTick, PerfHistory.Items["tick_time"].LastValue));
if (isNetTick)
orderManager.Tick();
Sync.CheckSyncUnchanged(world, () =>
{
++orderManager.LocalFrameNumber;
world.OrderGenerator.Tick(world);
world.Selection.Tick(world);
});
Log.Write("debug", "--Tick: {0} ({1})", LocalTick, isNetTick ? "net" : "local");
world.Tick();
if (BenchmarkMode)
Log.Write("cpu", "{0};{1}".F(LocalTick, PerfHistory.Items["tick_time"].LastValue));
if (isNetTick)
orderManager.Tick();
Sync.CheckSyncUnchanged(world, () =>
{
world.OrderGenerator.Tick(world);
world.Selection.Tick(world);
});
world.Tick();
PerfHistory.Tick();
}
else if (orderManager.NetFrameNumber == 0)
orderManager.LastTickTime = RunTime;
}
else
PerfHistory.Tick();
}
else if (orderManager.NetFrameNumber == 0)
orderManager.LastTickTime = RunTime;
Sync.CheckSyncUnchanged(world, () => world.TickRender(worldRenderer));
// Wait until we have done our first world Tick before TickRendering
if (orderManager.LocalFrameNumber > 0)
Sync.CheckSyncUnchanged(world, () => world.TickRender(worldRenderer));
}
}
}
@@ -587,7 +631,10 @@ namespace OpenRA
InnerLogicTick(worldRenderer.World.OrderManager);
}
public static bool TakeScreenshot = false;
public static void TakeScreenshot()
{
takeScreenshot = true;
}
static void RenderTick()
{
@@ -607,9 +654,9 @@ namespace OpenRA
using (new PerfSample("render_widgets"))
{
Renderer.WorldVoxelRenderer.BeginFrame();
Renderer.WorldModelRenderer.BeginFrame();
Ui.PrepareRenderables();
Renderer.WorldVoxelRenderer.EndFrame();
Renderer.WorldModelRenderer.EndFrame();
Ui.Draw();
@@ -623,9 +670,9 @@ namespace OpenRA
using (new PerfSample("render_flip"))
Renderer.EndFrame(new DefaultInputHandler(OrderManager.World));
if (TakeScreenshot)
if (takeScreenshot)
{
TakeScreenshot = false;
takeScreenshot = false;
TakeScreenshotInner();
}
}
@@ -739,7 +786,7 @@ namespace OpenRA
}
}
internal static RunStatus Run()
static RunStatus Run()
{
if (Settings.Graphics.MaxFramerate < 1)
{
@@ -763,7 +810,6 @@ namespace OpenRA
ModData.Dispose();
ChromeProvider.Deinitialize();
GlobalChat.Dispose();
Sound.Dispose();
Renderer.Dispose();
@@ -777,11 +823,6 @@ namespace OpenRA
state = RunStatus.Success;
}
public static void Restart()
{
state = RunStatus.Restart;
}
public static void AddChatLine(Color color, string name, string text)
{
OrderManager.AddChatLine(color, name, text);
@@ -824,8 +865,7 @@ namespace OpenRA
{
Name = "Skirmish Game",
Map = map,
AdvertiseOnline = false,
AllowPortForward = false
AdvertiseOnline = false
};
server = new Server.Server(new IPEndPoint(IPAddress.Loopback, 0), settings, ModData, false);

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -42,18 +42,24 @@ namespace OpenRA.GameRules
if (!fileSystem.TryOpen(Filename, out stream))
return;
Exists = true;
ISoundFormat soundFormat;
foreach (var loader in Game.ModData.SoundLoaders)
try
{
if (loader.TryParseSound(stream, out soundFormat))
Exists = true;
foreach (var loader in Game.ModData.SoundLoaders)
{
Length = (int)soundFormat.LengthInSeconds;
break;
ISoundFormat soundFormat;
if (loader.TryParseSound(stream, out soundFormat))
{
Length = (int)soundFormat.LengthInSeconds;
soundFormat.Dispose();
break;
}
}
}
stream.Dispose();
finally
{
stream.Dispose();
}
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -29,6 +29,7 @@ namespace OpenRA
public readonly IReadOnlyDictionary<string, MusicInfo> Music;
public readonly TileSet TileSet;
public readonly SequenceProvider Sequences;
public readonly IReadOnlyDictionary<string, MiniYamlNode> ModelSequences;
public Ruleset(
IReadOnlyDictionary<string, ActorInfo> actors,
@@ -37,7 +38,8 @@ namespace OpenRA
IReadOnlyDictionary<string, SoundInfo> notifications,
IReadOnlyDictionary<string, MusicInfo> music,
TileSet tileSet,
SequenceProvider sequences)
SequenceProvider sequences,
IReadOnlyDictionary<string, MiniYamlNode> modelSequences)
{
Actors = actors;
Weapons = weapons;
@@ -46,6 +48,7 @@ namespace OpenRA
Music = music;
TileSet = tileSet;
Sequences = sequences;
ModelSequences = modelSequences;
foreach (var a in Actors.Values)
{
@@ -119,8 +122,11 @@ namespace OpenRA
var music = MergeOrDefault("Manifest,Music", fs, m.Music, null, null,
k => new MusicInfo(k.Key, k.Value));
var modelSequences = MergeOrDefault("Manifest,ModelSequences", fs, m.ModelSequences, null, null,
k => k);
// The default ruleset does not include a preferred tileset or sequence set
ruleset = new Ruleset(actors, weapons, voices, notifications, music, null, null);
ruleset = new Ruleset(actors, weapons, voices, notifications, music, null, null, modelSequences);
};
if (modData.IsOnMainThread)
@@ -145,12 +151,13 @@ namespace OpenRA
var dr = modData.DefaultRules;
var ts = modData.DefaultTileSets[tileSet];
var sequences = modData.DefaultSequences[tileSet];
return new Ruleset(dr.Actors, dr.Weapons, dr.Voices, dr.Notifications, dr.Music, ts, sequences);
return new Ruleset(dr.Actors, dr.Weapons, dr.Voices, dr.Notifications, dr.Music, ts, sequences, dr.ModelSequences);
}
public static Ruleset Load(ModData modData, IReadOnlyFileSystem fileSystem, string tileSet,
MiniYaml mapRules, MiniYaml mapWeapons, MiniYaml mapVoices, MiniYaml mapNotifications,
MiniYaml mapMusic, MiniYaml mapSequences)
MiniYaml mapMusic, MiniYaml mapSequences, MiniYaml mapModelSequences)
{
var m = modData.Manifest;
var dr = modData.DefaultRules;
@@ -180,8 +187,12 @@ namespace OpenRA
var sequences = mapSequences == null ? modData.DefaultSequences[tileSet] :
new SequenceProvider(fileSystem, modData, ts, mapSequences);
// TODO: Add support for custom voxel sequences
ruleset = new Ruleset(actors, weapons, voices, notifications, music, ts, sequences);
var modelSequences = dr.ModelSequences;
if (mapModelSequences != null)
modelSequences = MergeOrDefault("ModelSequences", fileSystem, m.ModelSequences, mapModelSequences, dr.ModelSequences,
k => k);
ruleset = new Ruleset(actors, weapons, voices, notifications, music, ts, sequences, modelSequences);
};
if (modData.IsOnMainThread)

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -39,9 +39,24 @@ namespace OpenRA.GameRules
[Desc("The maximum range the weapon can fire.")]
public readonly WDist Range = WDist.Zero;
[Desc("The sound played when the weapon is fired.")]
[Desc("First burst is aimed at this offset relative to target position.")]
public readonly WVec FirstBurstTargetOffset = WVec.Zero;
[Desc("Each burst after the first lands by this offset away from the previous burst.")]
public readonly WVec FollowingBurstTargetOffset = WVec.Zero;
[Desc("The sound played each time the weapon is fired.")]
public readonly string[] Report = null;
[Desc("Sound played only on first burst in a salvo.")]
public readonly string[] StartBurstReport = null;
[Desc("The sound played when the weapon is reloaded.")]
public readonly string[] AfterFireSound = null;
[Desc("Delay in ticks to play reloading sound.")]
public readonly int AfterFireSoundDelay = 0;
[Desc("Delay in ticks between reloading ammo magazines.")]
public readonly int ReloadDelay = 1;
@@ -54,12 +69,16 @@ namespace OpenRA.GameRules
[Desc("What types of targets are unaffected.", "Overrules ValidTargets.")]
public readonly HashSet<string> InvalidTargets = new HashSet<string>();
[Desc("Delay in ticks between firing shots from the same ammo magazine.")]
public readonly int BurstDelay = 5;
[Desc("Delay in ticks between firing shots from the same ammo magazine. If one entry, it will be used for all bursts.",
"If multiple entries, their number needs to match Burst - 1.")]
public readonly int[] BurstDelays = { 5 };
[Desc("The minimum range the weapon can fire.")]
public readonly WDist MinRange = WDist.Zero;
[Desc("Does this weapon aim at the target's center regardless of other targetable offsets?")]
public readonly bool TargetActorCenter = false;
[FieldLoader.LoadUsing("LoadProjectile")]
public readonly IProjectileInfo Projectile;
@@ -68,6 +87,9 @@ namespace OpenRA.GameRules
public WeaponInfo(string name, MiniYaml content)
{
// Resolve any weapon-level yaml inheritance or removals
// HACK: The "Defaults" sequence syntax prevents us from doing this generally during yaml parsing
content.Nodes = MiniYaml.Merge(new[] { content.Nodes });
FieldLoader.Load(this, content);
}
@@ -159,11 +181,10 @@ namespace OpenRA.GameRules
{
var wh = warhead; // force the closure to bind to the current warhead
Action a = () => wh.DoImpact(target, firedBy, damageModifiers);
if (wh.Delay > 0)
firedBy.World.AddFrameEndTask(w => w.Add(new DelayedAction(wh.Delay, a)));
firedBy.World.AddFrameEndTask(w => w.Add(new DelayedImpact(wh.Delay, wh, target, firedBy, damageModifiers)));
else
a();
wh.DoImpact(target, firedBy, damageModifiers);
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,391 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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;
using System.Linq;
using System.Threading;
using Meebey.SmartIrc4net;
using OpenRA.Primitives;
namespace OpenRA.Chat
{
public enum ChatConnectionStatus { Disconnected, Connecting, Connected, Disconnecting, Joined, Error }
public enum ChatMessageType { Message, Notification }
public sealed class ChatUser
{
public readonly string Name;
public bool IsOp;
public bool IsVoiced;
public ChatUser(string name, bool isOp, bool isVoice)
{
Name = name;
IsOp = isOp;
IsVoiced = isVoice;
}
}
public sealed class ChatMessage
{
static long nextUID;
public readonly DateTime Time;
public readonly ChatMessageType Type;
public readonly string Nick;
public readonly string Message;
public readonly string UID;
public ChatMessage(DateTime time, ChatMessageType type, string nick, string message)
{
Time = time;
Type = type;
Nick = nick;
Message = message;
UID = Interlocked.Increment(ref nextUID).ToString();
}
public override string ToString()
{
var time = Time.ToString(Game.Settings.Chat.TimestampFormat);
if (Type == ChatMessageType.Notification)
return "{0} {1}".F(time, Message);
return "{0} {1}: {2}".F(time, Nick, Message);
}
}
public sealed class GlobalChat : IDisposable
{
readonly IrcClient client = new IrcClient();
volatile Channel channel;
public readonly ObservableSortedDictionary<string, ChatUser> Users = new ObservableSortedDictionary<string, ChatUser>(StringComparer.InvariantCultureIgnoreCase);
public readonly ObservableList<ChatMessage> History = new ObservableList<ChatMessage>();
volatile string topic;
public string Topic { get { return topic; } }
volatile ChatConnectionStatus connectionStatus = ChatConnectionStatus.Disconnected;
public ChatConnectionStatus ConnectionStatus { get { return connectionStatus; } }
public GlobalChat()
{
client.Encoding = System.Text.Encoding.UTF8;
client.SendDelay = 100;
client.ActiveChannelSyncing = true;
client.OnConnecting += OnConnecting;
client.OnConnected += OnConnected;
client.OnDisconnecting += OnDisconnecting;
client.OnDisconnected += OnDisconnected;
client.OnError += OnError;
client.OnKick += OnKick;
client.OnRawMessage += (_, e) => Game.RunAfterTick(() => Log.Write("irc", e.Data.RawMessage));
client.OnJoin += OnJoin;
client.OnChannelActiveSynced += OnChannelActiveSynced;
client.OnTopic += (_, e) => topic = e.Topic;
client.OnTopicChange += (_, e) => topic = e.NewTopic;
client.OnNickChange += OnNickChange;
client.OnChannelMessage += (_, e) => AddMessage(e.Data.Nick, e.Data.Message);
client.OnOp += (_, e) => SetUserOp(e.Whom, true);
client.OnDeop += (_, e) => SetUserOp(e.Whom, false);
client.OnVoice += (_, e) => SetUserVoiced(e.Whom, true);
client.OnDevoice += (_, e) => SetUserVoiced(e.Whom, false);
client.OnPart += OnPart;
client.OnQuit += OnQuit;
TrySetNickname(Game.Settings.Player.Name);
}
void SetUserOp(string whom, bool isOp)
{
Game.RunAfterTick(() =>
{
ChatUser user;
if (Users.TryGetValue(whom, out user))
user.IsOp = isOp;
});
}
void SetUserVoiced(string whom, bool isVoiced)
{
Game.RunAfterTick(() =>
{
ChatUser user;
if (Users.TryGetValue(whom, out user))
user.IsVoiced = isVoiced;
});
}
public void Connect()
{
if (client.IsConnected)
return;
new Thread(() =>
{
try
{
client.Connect(Game.Settings.Chat.Hostname, Game.Settings.Chat.Port);
}
catch (Exception e)
{
connectionStatus = ChatConnectionStatus.Error;
AddNotification(e.Message);
Game.RunAfterTick(() => Log.Write("irc", e.ToString()));
return;
}
client.Listen();
}) { Name = "IrcListenThread", IsBackground = true }.Start();
}
void AddNotification(string text)
{
var message = new ChatMessage(DateTime.Now, ChatMessageType.Notification, null, text);
Game.RunAfterTick(() =>
{
History.Add(message);
Log.Write("irc", text);
});
}
void AddMessage(string nick, string text)
{
var message = new ChatMessage(DateTime.Now, ChatMessageType.Message, nick, text);
Game.RunAfterTick(() =>
{
History.Add(message);
Log.Write("irc", text);
});
}
void OnConnecting(object sender, EventArgs e)
{
AddNotification("Connecting to {0}:{1}...".F(Game.Settings.Chat.Hostname, Game.Settings.Chat.Port));
connectionStatus = ChatConnectionStatus.Connecting;
}
void OnConnected(object sender, EventArgs e)
{
AddNotification("Connected.");
connectionStatus = ChatConnectionStatus.Connected;
// Guard against settings.yaml modification
var nick = SanitizedName(Game.Settings.Chat.Nickname);
if (nick != Game.Settings.Chat.Nickname)
Game.RunAfterTick(() => Game.Settings.Chat.Nickname = nick);
client.Login(nick, "in-game IRC client", 0, "OpenRA");
client.RfcJoin("#" + Game.Settings.Chat.Channel);
}
void OnDisconnecting(object sender, EventArgs e)
{
if (connectionStatus != ChatConnectionStatus.Error)
connectionStatus = ChatConnectionStatus.Disconnecting;
}
void OnDisconnected(object sender, EventArgs e)
{
Game.RunAfterTick(Users.Clear);
// Keep the chat window open if there is an error
// It will be cleared by the Disconnect button
if (connectionStatus != ChatConnectionStatus.Error)
{
Game.RunAfterTick(History.Clear);
topic = null;
connectionStatus = ChatConnectionStatus.Disconnected;
}
}
void OnError(object sender, ErrorEventArgs e)
{
// Ignore any errors that happen during disconnect
if (connectionStatus != ChatConnectionStatus.Disconnecting)
{
connectionStatus = ChatConnectionStatus.Error;
AddNotification("Error: " + e.ErrorMessage);
}
}
void OnKick(object sender, KickEventArgs e)
{
if (e.Whom == client.Nickname)
{
Disconnect();
connectionStatus = ChatConnectionStatus.Error;
AddNotification("You were kicked from the chat by {0}. ({1})".F(e.Who, e.KickReason));
}
else
{
Users.Remove(e.Whom);
AddNotification("{0} was kicked from the chat by {1}. ({2})".F(e.Whom, e.Who, e.KickReason));
}
}
void OnJoin(object sender, JoinEventArgs e)
{
if (e.Who == client.Nickname || channel == null || e.Channel != channel.Name)
return;
AddNotification("{0} joined the chat.".F(e.Who));
Game.RunAfterTick(() => Users.Add(e.Who, new ChatUser(e.Who, false, false)));
}
void OnChannelActiveSynced(object sender, IrcEventArgs e)
{
channel = client.GetChannel(e.Data.Channel);
AddNotification("{0} users online".F(channel.Users.Count));
connectionStatus = ChatConnectionStatus.Joined;
foreach (DictionaryEntry user in channel.Users)
{
var u = (ChannelUser)user.Value;
Game.RunAfterTick(() => Users.Add(u.Nick, new ChatUser(u.Nick, u.IsOp, u.IsVoice)));
}
}
void OnNickChange(object sender, NickChangeEventArgs e)
{
AddNotification("{0} is now known as {1}.".F(e.OldNickname, e.NewNickname));
Game.RunAfterTick(() =>
{
ChatUser user;
if (!Users.TryGetValue(e.OldNickname, out user))
return;
Users.Remove(e.OldNickname);
Users.Add(e.NewNickname, new ChatUser(e.NewNickname, user.IsOp, user.IsVoiced));
});
}
void OnQuit(object sender, QuitEventArgs e)
{
AddNotification("{0} left the chat.".F(e.Who));
Game.RunAfterTick(() => Users.Remove(e.Who));
}
void OnPart(object sender, PartEventArgs e)
{
if (channel == null || e.Data.Channel != channel.Name)
return;
AddNotification("{0} left the chat.".F(e.Who));
Game.RunAfterTick(() => Users.Remove(e.Who));
}
public string SanitizedName(string dirty)
{
if (string.IsNullOrEmpty(dirty))
return null;
// There is no need to mangle the nick if it is already valid
if (Rfc2812.IsValidNickname(dirty))
return dirty;
// TODO: some special chars are allowed as well, but not at every position
var clean = new string(dirty.Where(c => char.IsLetterOrDigit(c)).ToArray());
if (string.IsNullOrEmpty(clean))
return null;
if (char.IsDigit(clean[0]))
return SanitizedName(clean.Substring(1));
// Source: https://tools.ietf.org/html/rfc2812#section-1.2.1
if (clean.Length > 9)
clean = clean.Substring(0, 9);
return clean;
}
public bool IsValidNickname(string name)
{
return Rfc2812.IsValidNickname(name);
}
public void SendMessage(string text)
{
if (connectionStatus != ChatConnectionStatus.Joined)
return;
// Guard against a last-moment disconnection
try
{
client.SendMessage(SendType.Message, channel.Name, text);
AddMessage(client.Nickname, text);
}
catch (NotConnectedException) { }
}
public bool TrySetNickname(string nick)
{
// TODO: This is inconsistent with the other check
if (Rfc2812.IsValidNickname(nick))
{
client.RfcNick(nick);
Game.Settings.Chat.Nickname = nick;
return true;
}
return false;
}
public void Disconnect()
{
// Error is an alias for disconnect, but keeps the panel open
// so that clients can see the error
if (connectionStatus == ChatConnectionStatus.Error)
{
Game.RunAfterTick(History.Clear);
topic = null;
connectionStatus = ChatConnectionStatus.Disconnected;
}
else
connectionStatus = ChatConnectionStatus.Disconnecting;
if (!client.IsConnected)
return;
client.RfcQuit(Game.Settings.Chat.QuitMessage);
AddNotification("Disconnecting from {0}...".F(client.Address));
Game.RunAfterTick(() => Game.Settings.Chat.ConnectAutomatically = false);
}
public void Dispose()
{
// HACK: The IRC library we are using has terrible thread-handling code that relies on Thread.Abort.
// There is a thread reading from the network socket which is aborted, however on Windows this is inside
// native code so this abort call hangs until the network socket reads something and returns to managed
// code where it can then be aborted.
//
// This means we may hang for several seconds during shutdown (until we receive something over IRC!) before
// closing.
//
// Since our IRC client currently lives forever, the only time we call this Dispose method is during the
// shutdown of our process. Therefore, we can work around the problem by just not bothering to disconnect
// properly. Since our process is about to die anyway, it's not like anyone will care.
////if (client.IsConnected)
//// client.Disconnect();
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -11,6 +11,7 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Support;
@@ -66,6 +67,17 @@ namespace OpenRA.Graphics
return new IRenderable[] { imageRenderable };
}
public Rectangle ScreenBounds(WorldRenderer wr, WPos pos, WVec offset, float scale)
{
var xy = wr.ScreenPxPosition(pos) + wr.ScreenPxOffset(offset);
var cb = CurrentSequence.Bounds;
return Rectangle.FromLTRB(
xy.X + (int)(cb.Left * scale),
xy.Y + (int)(cb.Top * scale),
xy.X + (int)(cb.Right * scale),
xy.Y + (int)(cb.Bottom * scale));
}
public IEnumerable<IRenderable> Render(WPos pos, PaletteReference palette)
{
return Render(pos, WVec.Zero, 0, palette, 1f);

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -11,6 +11,7 @@
using System;
using System.Collections.Generic;
using System.Drawing;
namespace OpenRA.Graphics
{
@@ -44,6 +45,14 @@ namespace OpenRA.Graphics
return Animation.Render(center, offset, z, pal, scale);
}
public Rectangle ScreenBounds(Actor self, WorldRenderer wr, float scale)
{
var center = self.CenterPosition;
var offset = OffsetFunc != null ? OffsetFunc() : WVec.Zero;
return Animation.ScreenBounds(wr, center, offset, scale);
}
public static implicit operator AnimationWithOffset(Animation a)
{
return new AnimationWithOffset(a, null, null, null);

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -95,7 +95,8 @@ namespace OpenRA.Graphics
public static bool operator ==(HSLColor me, HSLColor other)
{
return me.H == other.H && me.S == other.S && me.L == other.L;
// Binary floating point numbers (float, double) calculations can yield the same RGB color created by different functions with little different HSL representation
return (me.H == other.H && me.S == other.S && me.L == other.L) || me.RGB == other.RGB;
}
public static bool operator !=(HSLColor me, HSLColor other) { return !(me == other); }

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -0,0 +1,87 @@
#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.Drawing;
using OpenRA.FileSystem;
namespace OpenRA.Graphics
{
public interface IModel
{
uint Frames { get; }
uint Sections { get; }
float[] TransformationMatrix(uint section, uint frame);
float[] Size { get; }
float[] Bounds(uint frame);
ModelRenderData RenderData(uint section);
/// <summary>Returns the smallest rectangle that covers all rotations of all frames in a model</summary>
Rectangle AggregateBounds { get; }
}
public struct ModelRenderData
{
public readonly int Start;
public readonly int Count;
public readonly Sheet Sheet;
public ModelRenderData(int start, int count, Sheet sheet)
{
Start = start;
Count = count;
Sheet = sheet;
}
}
public interface IModelCache : IDisposable
{
IModel GetModelSequence(string model, string sequence);
bool HasModelSequence(string model, string sequence);
IVertexBuffer<Vertex> VertexBuffer { get; }
}
public interface IModelSequenceLoader
{
Action<string> OnMissingModelError { get; set; }
IModelCache CacheModels(IReadOnlyFileSystem fileSystem, ModData modData, IReadOnlyDictionary<string, MiniYamlNode> modelDefinitions);
}
public class PlaceholderModelSequenceLoader : IModelSequenceLoader
{
public Action<string> OnMissingModelError { get; set; }
class PlaceholderModelCache : IModelCache
{
public IVertexBuffer<Vertex> VertexBuffer { get { throw new NotImplementedException(); } }
public void Dispose() { }
public IModel GetModelSequence(string model, string sequence)
{
throw new NotImplementedException();
}
public bool HasModelSequence(string model, string sequence)
{
throw new NotImplementedException();
}
}
public PlaceholderModelSequenceLoader(ModData modData) { }
public IModelCache CacheModels(IReadOnlyFileSystem fileSystem, ModData modData, IReadOnlyDictionary<string, MiniYamlNode> modelDefinitions)
{
return new PlaceholderModelCache();
}
}
}

View File

@@ -0,0 +1,58 @@
#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.Drawing;
namespace OpenRA.Graphics
{
public struct ModelAnimation
{
public readonly IModel Model;
public readonly Func<WVec> OffsetFunc;
public readonly Func<IEnumerable<WRot>> RotationFunc;
public readonly Func<bool> DisableFunc;
public readonly Func<uint> FrameFunc;
public readonly bool ShowShadow;
public ModelAnimation(IModel model, Func<WVec> offset, Func<IEnumerable<WRot>> rotation, Func<bool> disable, Func<uint> frame, bool showshadow)
{
Model = model;
OffsetFunc = offset;
RotationFunc = rotation;
DisableFunc = disable;
FrameFunc = frame;
ShowShadow = showshadow;
}
public Rectangle ScreenBounds(WPos pos, WorldRenderer wr, float scale)
{
var r = Model.AggregateBounds;
var offset = OffsetFunc != null ? OffsetFunc() : WVec.Zero;
var xy = wr.ScreenPxPosition(pos) + wr.ScreenPxOffset(offset);
return Rectangle.FromLTRB(
xy.X + (int)(r.Left * scale),
xy.Y + (int)(r.Top * scale),
xy.X + (int)(r.Right * scale),
xy.Y + (int)(r.Bottom * scale));
}
public bool IsVisible
{
get
{
return DisableFunc == null || !DisableFunc();
}
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -17,14 +17,14 @@ using OpenRA.Primitives;
namespace OpenRA.Graphics
{
public class VoxelRenderProxy
public class ModelRenderProxy
{
public readonly Sprite Sprite;
public readonly Sprite ShadowSprite;
public readonly float ShadowDirection;
public readonly float3[] ProjectedShadowBounds;
public VoxelRenderProxy(Sprite sprite, Sprite shadowSprite, float3[] projectedShadowBounds, float shadowDirection)
public ModelRenderProxy(Sprite sprite, Sprite shadowSprite, float3[] projectedShadowBounds, float shadowDirection)
{
Sprite = sprite;
ShadowSprite = shadowSprite;
@@ -33,7 +33,7 @@ namespace OpenRA.Graphics
}
}
public sealed class VoxelRenderer : IDisposable
public sealed class ModelRenderer : IDisposable
{
// Static constants
static readonly float[] ShadowDiffuse = new float[] { 0, 0, 0 };
@@ -51,9 +51,10 @@ namespace OpenRA.Graphics
readonly Stack<KeyValuePair<Sheet, IFrameBuffer>> unmappedBuffers = new Stack<KeyValuePair<Sheet, IFrameBuffer>>();
readonly List<Pair<Sheet, Action>> doRender = new List<Pair<Sheet, Action>>();
SheetBuilder sheetBuilder;
SheetBuilder sheetBuilderForFrame;
bool isInFrame;
public VoxelRenderer(Renderer renderer, IShader shader)
public ModelRenderer(Renderer renderer, IShader shader)
{
this.renderer = renderer;
this.shader = shader;
@@ -78,11 +79,14 @@ namespace OpenRA.Graphics
shader.SetMatrix("View", view);
}
public VoxelRenderProxy RenderAsync(
WorldRenderer wr, IEnumerable<VoxelAnimation> voxels, WRot camera, float scale,
public ModelRenderProxy RenderAsync(
WorldRenderer wr, IEnumerable<ModelAnimation> models, WRot camera, float scale,
float[] groundNormal, WRot lightSource, float[] lightAmbientColor, float[] lightDiffuseColor,
PaletteReference color, PaletteReference normals, PaletteReference shadowPalette)
{
if (!isInFrame)
throw new InvalidOperationException("BeginFrame has not been called. You cannot render until a frame has been started.");
// Correct for inverted y-axis
var scaleTransform = Util.ScaleMatrix(scale, scale, scale);
@@ -105,18 +109,18 @@ namespace OpenRA.Graphics
var stl = new float2(float.MaxValue, float.MaxValue);
var sbr = new float2(float.MinValue, float.MinValue);
foreach (var v in voxels)
foreach (var m in models)
{
// Convert screen offset back to world coords
var offsetVec = Util.MatrixVectorMultiply(invCameraTransform, wr.ScreenVector(v.OffsetFunc()));
var offsetVec = Util.MatrixVectorMultiply(invCameraTransform, wr.ScreenVector(m.OffsetFunc()));
var offsetTransform = Util.TranslationMatrix(offsetVec[0], offsetVec[1], offsetVec[2]);
var worldTransform = v.RotationFunc().Aggregate(Util.IdentityMatrix(),
var worldTransform = m.RotationFunc().Aggregate(Util.IdentityMatrix(),
(x, y) => Util.MatrixMultiply(Util.MakeFloatMatrix(y.AsMatrix()), x));
worldTransform = Util.MatrixMultiply(scaleTransform, worldTransform);
worldTransform = Util.MatrixMultiply(offsetTransform, worldTransform);
var bounds = v.Voxel.Bounds(v.FrameFunc());
var bounds = m.Model.Bounds(m.FrameFunc());
var worldBounds = Util.MatrixAABBMultiply(worldTransform, bounds);
var screenBounds = Util.MatrixAABBMultiply(cameraTransform, worldBounds);
var shadowBounds = Util.MatrixAABBMultiply(shadowTransform, worldBounds);
@@ -163,8 +167,11 @@ namespace OpenRA.Graphics
CalculateSpriteGeometry(tl, br, 1, out spriteSize, out spriteOffset);
CalculateSpriteGeometry(stl, sbr, 2, out shadowSpriteSize, out shadowSpriteOffset);
var sprite = sheetBuilder.Allocate(spriteSize, 0, spriteOffset);
var shadowSprite = sheetBuilder.Allocate(shadowSpriteSize, 0, shadowSpriteOffset);
if (sheetBuilderForFrame == null)
sheetBuilderForFrame = new SheetBuilder(SheetType.BGRA, AllocateSheet);
var sprite = sheetBuilderForFrame.Allocate(spriteSize, 0, spriteOffset);
var shadowSprite = sheetBuilderForFrame.Allocate(shadowSpriteSize, 0, shadowSpriteOffset);
var sb = sprite.Bounds;
var ssb = shadowSprite.Bounds;
var spriteCenter = new float2(sb.Left + sb.Width / 2, sb.Top + sb.Height / 2);
@@ -177,13 +184,13 @@ namespace OpenRA.Graphics
doRender.Add(Pair.New<Sheet, Action>(sprite.Sheet, () =>
{
foreach (var v in voxels)
foreach (var m in models)
{
// Convert screen offset to world offset
var offsetVec = Util.MatrixVectorMultiply(invCameraTransform, wr.ScreenVector(v.OffsetFunc()));
var offsetVec = Util.MatrixVectorMultiply(invCameraTransform, wr.ScreenVector(m.OffsetFunc()));
var offsetTransform = Util.TranslationMatrix(offsetVec[0], offsetVec[1], offsetVec[2]);
var rotations = v.RotationFunc().Aggregate(Util.IdentityMatrix(),
var rotations = m.RotationFunc().Aggregate(Util.IdentityMatrix(),
(x, y) => Util.MatrixMultiply(Util.MakeFloatMatrix(y.AsMatrix()), x));
var worldTransform = Util.MatrixMultiply(scaleTransform, rotations);
worldTransform = Util.MatrixMultiply(offsetTransform, worldTransform);
@@ -196,11 +203,11 @@ namespace OpenRA.Graphics
var lightTransform = Util.MatrixMultiply(Util.MatrixInverse(rotations), invShadowTransform);
var frame = v.FrameFunc();
for (uint i = 0; i < v.Voxel.Limbs; i++)
var frame = m.FrameFunc();
for (uint i = 0; i < m.Model.Sections; i++)
{
var rd = v.Voxel.RenderData(i);
var t = v.Voxel.TransformationMatrix(i, frame);
var rd = m.Model.RenderData(i);
var t = m.Model.TransformationMatrix(i, frame);
var it = Util.MatrixInverse(t);
if (it == null)
throw new InvalidOperationException("Failed to invert the transformed matrix of frame {0} during RenderAsync.".F(i));
@@ -208,19 +215,20 @@ namespace OpenRA.Graphics
// Transform light vector from shadow -> world -> limb coords
var lightDirection = ExtractRotationVector(Util.MatrixMultiply(it, lightTransform));
Render(rd, Util.MatrixMultiply(transform, t), lightDirection,
Render(rd, wr.World.ModelCache, Util.MatrixMultiply(transform, t), lightDirection,
lightAmbientColor, lightDiffuseColor, color.TextureMidIndex, normals.TextureMidIndex);
// Disable shadow normals by forcing zero diffuse and identity ambient light
Render(rd, Util.MatrixMultiply(shadow, t), lightDirection,
ShadowAmbient, ShadowDiffuse, shadowPalette.TextureMidIndex, normals.TextureMidIndex);
if (m.ShowShadow)
Render(rd, wr.World.ModelCache, Util.MatrixMultiply(shadow, t), lightDirection,
ShadowAmbient, ShadowDiffuse, shadowPalette.TextureMidIndex, normals.TextureMidIndex);
}
}
}));
var screenLightVector = Util.MatrixVectorMultiply(invShadowTransform, ZVector);
screenLightVector = Util.MatrixVectorMultiply(cameraTransform, screenLightVector);
return new VoxelRenderProxy(sprite, shadowSprite, screenCorners, -screenLightVector[2] / screenLightVector[1]);
return new ModelRenderProxy(sprite, shadowSprite, screenCorners, -screenLightVector[2] / screenLightVector[1]);
}
static void CalculateSpriteGeometry(float2 tl, float2 br, float scale, out Size size, out int2 offset)
@@ -257,7 +265,8 @@ namespace OpenRA.Graphics
}
void Render(
VoxelRenderData renderData,
ModelRenderData renderData,
IModelCache cache,
float[] t, float[] lightDirection,
float[] ambientLight, float[] diffuseLight,
float colorPaletteTextureMidIndex, float normalsPaletteTextureMidIndex)
@@ -269,17 +278,19 @@ namespace OpenRA.Graphics
shader.SetVec("AmbientLight", ambientLight, 3);
shader.SetVec("DiffuseLight", diffuseLight, 3);
shader.Render(() => renderer.DrawBatch(Game.ModData.VoxelLoader.VertexBuffer, renderData.Start, renderData.Count, PrimitiveType.TriangleList));
shader.Render(() => renderer.DrawBatch(cache.VertexBuffer, renderData.Start, renderData.Count, PrimitiveType.TriangleList));
}
public void BeginFrame()
{
if (isInFrame)
throw new InvalidOperationException("BeginFrame has already been called. A new frame cannot be started until EndFrame has been called.");
isInFrame = true;
foreach (var kv in mappedBuffers)
unmappedBuffers.Push(kv);
mappedBuffers.Clear();
sheetBuilder = new SheetBuilder(SheetType.BGRA, AllocateSheet);
doRender.Clear();
}
IFrameBuffer EnableFrameBuffer(Sheet s)
@@ -301,6 +312,12 @@ namespace OpenRA.Graphics
public void EndFrame()
{
if (!isInFrame)
throw new InvalidOperationException("BeginFrame has not been called. There is no frame to end.");
isInFrame = false;
sheetBuilderForFrame = null;
if (doRender.Count == 0)
return;
@@ -323,6 +340,8 @@ namespace OpenRA.Graphics
if (fbo != null)
DisableFrameBuffer(fbo);
doRender.Clear();
}
public Sheet AllocateSheet()

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -43,6 +43,8 @@ namespace OpenRA
IShader CreateShader(string name);
Size WindowSize { get; }
float WindowScale { get; }
event Action<float, float> OnWindowScaleChanged;
void Clear();
void Present();

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -204,11 +204,6 @@ namespace OpenRA.Graphics
}
}
public void DrawLine(IEnumerable<float2> points, float width, Color color, bool connectSegments = false)
{
DrawLine(points.Select(p => new float3(p, 0)), width, color, connectSegments);
}
public void DrawLine(IEnumerable<float3> points, float width, Color color, bool connectSegments = false)
{
if (!connectSegments)

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -11,7 +11,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
using OpenRA.FileSystem;
namespace OpenRA.Graphics
@@ -31,6 +31,7 @@ namespace OpenRA.Graphics
int ShadowStart { get; }
int ShadowZOffset { get; }
int[] Frames { get; }
Rectangle Bounds { get; }
Sprite GetSprite(int frame);
Sprite GetSprite(int frame, int facing);

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -22,10 +22,12 @@ namespace OpenRA.Graphics
: base(message) { }
}
// The enum values indicate the number of channels used by the type
// They are not arbitrary IDs!
public enum SheetType
{
Indexed = 1,
BGRA = 2,
BGRA = 4,
}
public sealed class SheetBuilder : IDisposable

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -29,25 +29,35 @@ namespace OpenRA.Graphics
readonly Face face;
readonly Cache<Pair<char, Color>, GlyphInfo> glyphs;
public SpriteFont(string name, byte[] data, int size, SheetBuilder builder)
float deviceScale;
public SpriteFont(string name, byte[] data, int size, float scale, SheetBuilder builder)
{
if (builder.Type != SheetType.BGRA)
throw new ArgumentException("The sheet builder must create BGRA sheets.", "builder");
deviceScale = scale;
this.size = size;
this.builder = builder;
face = new Face(Library, data, 0);
face.SetPixelSizes((uint)size, (uint)size);
face.SetPixelSizes((uint)(size * deviceScale), (uint)(size * deviceScale));
glyphs = new Cache<Pair<char, Color>, GlyphInfo>(CreateGlyph, Pair<char, Color>.EqualityComparer);
// PERF: Cache these delegates for Measure calls.
Func<char, float> characterWidth = character => glyphs[Pair.New(character, Color.White)].Advance;
lineWidth = line => line.Sum(characterWidth);
lineWidth = line => line.Sum(characterWidth) / deviceScale;
PrecacheColor(Color.White, name);
PrecacheColor(Color.Red, name);
if (size <= 24)
PrecacheColor(Color.White, name);
}
public void SetScale(float scale)
{
deviceScale = scale;
face.SetPixelSizes((uint)(size * deviceScale), (uint)(size * deviceScale));
glyphs.Clear();
}
void PrecacheColor(Color c, string name)
@@ -60,24 +70,28 @@ namespace OpenRA.Graphics
public void DrawText(string text, float2 location, Color c)
{
location.Y += size; // baseline vs top
// Offset from the baseline position to the top-left of the glyph for rendering
location += new float2(0, size);
var p = location;
foreach (var s in text)
{
if (s == '\n')
{
location.Y += size;
location += new float2(0, size);
p = location;
continue;
}
var g = glyphs[Pair.New(s, c)];
Game.Renderer.RgbaSpriteRenderer.DrawSprite(g.Sprite,
new float2(
(int)Math.Round(p.X + g.Offset.X, 0),
p.Y + g.Offset.Y));
p.X += g.Advance;
if (g.Sprite != null)
Game.Renderer.RgbaSpriteRenderer.DrawSprite(g.Sprite,
new float2(
(int)Math.Round(p.X * deviceScale + g.Offset.X, 0) / deviceScale,
p.Y + g.Offset.Y / deviceScale),
g.Sprite.Size / deviceScale);
p += new float2(g.Advance / deviceScale, 0);
}
}
@@ -85,10 +99,10 @@ namespace OpenRA.Graphics
{
if (offset > 0)
{
DrawText(text, location + new float2(-offset, 0), bg);
DrawText(text, location + new float2(offset, 0), bg);
DrawText(text, location + new float2(0, -offset), bg);
DrawText(text, location + new float2(0, offset), bg);
DrawText(text, location + new float2(-offset / deviceScale, 0), bg);
DrawText(text, location + new float2(offset / deviceScale, 0), bg);
DrawText(text, location + new float2(0, -offset / deviceScale), bg);
DrawText(text, location + new float2(0, offset / deviceScale), bg);
}
DrawText(text, location, fg);
@@ -123,7 +137,20 @@ namespace OpenRA.Graphics
GlyphInfo CreateGlyph(Pair<char, Color> c)
{
face.LoadChar(c.First, LoadFlags.Default, LoadTarget.Normal);
try
{
face.LoadChar(c.First, LoadFlags.Default, LoadTarget.Normal);
}
catch (FreeTypeException)
{
return new GlyphInfo
{
Sprite = null,
Advance = 0,
Offset = int2.Zero
};
}
face.Glyph.RenderGlyph(RenderMode.Normal);
var size = new Size((int)face.Glyph.Metrics.Width, (int)face.Glyph.Metrics.Height);

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -87,6 +87,10 @@ namespace OpenRA.Graphics
else
sprite = emptySprite;
// The vertex buffer does not have geometry for cells outside the map
if (!map.Tiles.Contains(uv))
return;
var offset = rowStride * uv.V + 6 * uv.U;
Util.FastCreateQuad(vertices, pos, sprite, palette.TextureIndex, offset, sprite.Size);

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -80,7 +80,7 @@ namespace OpenRA.Graphics
}
}
public static long TicksSinceLastMove = 0;
public static long LastMoveRunTime = 0;
public static int2 LastMousePos;
float ClosestTo(float[] collection, float target)

View File

@@ -1,34 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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;
namespace OpenRA.Graphics
{
public struct VoxelAnimation
{
public readonly Voxel Voxel;
public readonly Func<WVec> OffsetFunc;
public readonly Func<IEnumerable<WRot>> RotationFunc;
public readonly Func<bool> DisableFunc;
public readonly Func<uint> FrameFunc;
public VoxelAnimation(Voxel voxel, Func<WVec> offset, Func<IEnumerable<WRot>> rotation, Func<bool> disable, Func<uint> frame)
{
Voxel = voxel;
OffsetFunc = offset;
RotationFunc = rotation;
DisableFunc = disable;
FrameFunc = frame;
}
}
}

View File

@@ -1,84 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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.IO;
using System.Linq;
using OpenRA.FileSystem;
namespace OpenRA.Graphics
{
public static class VoxelProvider
{
static Dictionary<string, Dictionary<string, Voxel>> units;
public static void Initialize(VoxelLoader loader, IReadOnlyFileSystem fileSystem, List<MiniYamlNode> sequences)
{
units = new Dictionary<string, Dictionary<string, Voxel>>();
foreach (var s in sequences)
LoadVoxelsForUnit(loader, s.Key, s.Value);
loader.RefreshBuffer();
}
static Voxel LoadVoxel(VoxelLoader voxelLoader, string unit, MiniYaml info)
{
var vxl = unit;
var hva = unit;
if (info.Value != null)
{
var fields = info.Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
if (fields.Length >= 1)
vxl = hva = fields[0].Trim();
if (fields.Length >= 2)
hva = fields[1].Trim();
}
return voxelLoader.Load(vxl, hva);
}
static void LoadVoxelsForUnit(VoxelLoader loader, string unit, MiniYaml sequences)
{
Game.ModData.LoadScreen.Display();
try
{
var seq = sequences.ToDictionary(my => LoadVoxel(loader, unit, my));
units.Add(unit, seq);
}
catch (FileNotFoundException) { } // Do nothing; we can crash later if we actually wanted art
}
public static Voxel GetVoxel(string unitName, string voxelName)
{
try { return units[unitName][voxelName]; }
catch (KeyNotFoundException)
{
if (units.ContainsKey(unitName))
throw new InvalidOperationException(
"Unit `{0}` does not have a voxel `{1}`".F(unitName, voxelName));
else
throw new InvalidOperationException(
"Unit `{0}` does not have any voxels defined.".F(unitName));
}
}
public static bool HasVoxel(string unit, string seq)
{
if (!units.ContainsKey(unit))
throw new InvalidOperationException(
"Unit `{0}` does not have any voxels defined.".F(unit));
return units[unit].ContainsKey(seq);
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -24,6 +24,7 @@ namespace OpenRA.Graphics
r => ZPosition(r.Pos, r.ZOffset);
public readonly Size TileSize;
public readonly int TileScale;
public readonly World World;
public readonly Theater Theater;
public Viewport Viewport { get; private set; }
@@ -33,7 +34,7 @@ namespace OpenRA.Graphics
readonly HardwarePalette palette = new HardwarePalette();
readonly Dictionary<string, PaletteReference> palettes = new Dictionary<string, PaletteReference>();
readonly TerrainRenderer terrainRenderer;
readonly Lazy<DeveloperMode> devTrait;
readonly Lazy<DebugVisualizations> debugVis;
readonly Func<string, PaletteReference> createPaletteReference;
readonly bool enableDepthBuffer;
@@ -41,6 +42,7 @@ namespace OpenRA.Graphics
{
World = world;
TileSize = World.Map.Grid.TileSize;
TileScale = World.Map.Grid.Type == MapGridType.RectangularIsometric ? 1448 : 1024;
Viewport = new Viewport(this, world.Map);
createPaletteReference = CreatePaletteReference;
@@ -59,7 +61,7 @@ namespace OpenRA.Graphics
Theater = new Theater(world.Map.Rules.TileSet);
terrainRenderer = new TerrainRenderer(world, this);
devTrait = Exts.Lazy(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait<DeveloperMode>() : null);
debugVis = Exts.Lazy(() => world.WorldActor.TraitOrDefault<DebugVisualizations>());
}
public void UpdatePalettesForPlayer(string internalName, HSLColor color, bool replaceExisting)
@@ -98,9 +100,9 @@ namespace OpenRA.Graphics
palettes[name].Palette = pal;
}
List<IFinalizedRenderable> GenerateRenderables()
List<IFinalizedRenderable> GenerateRenderables(HashSet<Actor> actorsInBox)
{
var actors = World.ScreenMap.ActorsInBox(Viewport.TopLeft, Viewport.BottomRight).Append(World.WorldActor);
var actors = actorsInBox.Append(World.WorldActor);
if (World.RenderPlayer != null)
actors = actors.Append(World.RenderPlayer.PlayerActor);
@@ -108,34 +110,69 @@ namespace OpenRA.Graphics
if (World.OrderGenerator != null)
worldRenderables = worldRenderables.Concat(World.OrderGenerator.Render(this, World));
worldRenderables = worldRenderables.Concat(World.Effects.SelectMany(e => e.Render(this)));
// Unpartitioned effects
worldRenderables = worldRenderables.Concat(World.UnpartitionedEffects.SelectMany(e => e.Render(this)));
// Partitioned, currently on-screen effects
var effectRenderables = World.ScreenMap.RenderableEffectsInBox(Viewport.TopLeft, Viewport.BottomRight);
worldRenderables = worldRenderables.Concat(effectRenderables.SelectMany(e => e.Render(this)));
worldRenderables = worldRenderables.OrderBy(RenderableScreenZPositionComparisonKey);
Game.Renderer.WorldVoxelRenderer.BeginFrame();
Game.Renderer.WorldModelRenderer.BeginFrame();
var renderables = worldRenderables.Select(r => r.PrepareRender(this)).ToList();
Game.Renderer.WorldVoxelRenderer.EndFrame();
Game.Renderer.WorldModelRenderer.EndFrame();
return renderables;
}
List<IFinalizedRenderable> GenerateOverlayRenderables(HashSet<Actor> actorsInBox)
{
var aboveShroud = World.ActorsWithTrait<IRenderAboveShroud>()
.Where(a => a.Actor.IsInWorld && !a.Actor.Disposed && (!a.Trait.SpatiallyPartitionable || actorsInBox.Contains(a.Actor)))
.SelectMany(a => a.Trait.RenderAboveShroud(a.Actor, this));
var aboveShroudSelected = World.Selection.Actors.Where(a => a.IsInWorld && !a.Disposed)
.SelectMany(a => a.TraitsImplementing<IRenderAboveShroudWhenSelected>()
.Where(t => !t.SpatiallyPartitionable || actorsInBox.Contains(a))
.SelectMany(t => t.RenderAboveShroud(a, this)));
var aboveShroudEffects = World.Effects.Select(e => e as IEffectAboveShroud)
.Where(e => e != null)
.SelectMany(e => e.RenderAboveShroud(this));
var aboveShroudOrderGenerator = SpriteRenderable.None;
if (World.OrderGenerator != null)
aboveShroudOrderGenerator = World.OrderGenerator.RenderAboveShroud(this, World);
var overlayRenderables = aboveShroud
.Concat(aboveShroudSelected)
.Concat(aboveShroudEffects)
.Concat(aboveShroudOrderGenerator);
Game.Renderer.WorldModelRenderer.BeginFrame();
var finalOverlayRenderables = overlayRenderables.Select(r => r.PrepareRender(this)).ToList();
Game.Renderer.WorldModelRenderer.EndFrame();
return finalOverlayRenderables;
}
public void Draw()
{
if (World.WorldActor.Disposed)
return;
if (devTrait.Value != null)
if (debugVis.Value != null)
{
Game.Renderer.WorldSpriteRenderer.SetDepthPreviewEnabled(devTrait.Value.ShowDepthPreview);
Game.Renderer.WorldRgbaSpriteRenderer.SetDepthPreviewEnabled(devTrait.Value.ShowDepthPreview);
Game.Renderer.WorldRgbaColorRenderer.SetDepthPreviewEnabled(devTrait.Value.ShowDepthPreview);
Game.Renderer.WorldSpriteRenderer.SetDepthPreviewEnabled(debugVis.Value.DepthBuffer);
Game.Renderer.WorldRgbaSpriteRenderer.SetDepthPreviewEnabled(debugVis.Value.DepthBuffer);
Game.Renderer.WorldRgbaColorRenderer.SetDepthPreviewEnabled(debugVis.Value.DepthBuffer);
}
RefreshPalette();
if (World.Type == WorldType.Shellmap && !Game.Settings.Game.ShowShellmap)
return;
var renderables = GenerateRenderables();
var onScreenActors = World.ScreenMap.RenderableActorsInBox(Viewport.TopLeft, Viewport.BottomRight).ToHashSet();
var renderables = GenerateRenderables(onScreenActors);
var bounds = Viewport.GetScissorBounds(World.Type != WorldType.Editor);
Game.Renderer.EnableScissor(bounds);
@@ -168,44 +205,39 @@ namespace OpenRA.Graphics
Game.Renderer.DisableScissor();
var aboveShroud = World.ActorsWithTrait<IRenderAboveShroud>().Where(a => a.Actor.IsInWorld && !a.Actor.Disposed)
.SelectMany(a => a.Trait.RenderAboveShroud(a.Actor, this));
var aboveShroudSelected = World.Selection.Actors.Where(a => !a.Disposed)
.SelectMany(a => a.TraitsImplementing<IRenderAboveShroudWhenSelected>()
.SelectMany(t => t.RenderAboveShroud(a, this)));
var aboveShroudEffects = World.Effects.Select(e => e as IEffectAboveShroud)
.Where(e => e != null)
.SelectMany(e => e.RenderAboveShroud(this));
var aboveShroudOrderGenerator = SpriteRenderable.None;
if (World.OrderGenerator != null)
aboveShroudOrderGenerator = World.OrderGenerator.RenderAboveShroud(this, World);
Game.Renderer.WorldVoxelRenderer.BeginFrame();
var finalOverlayRenderables = aboveShroud
.Concat(aboveShroudSelected)
.Concat(aboveShroudEffects)
.Concat(aboveShroudOrderGenerator)
.Select(r => r.PrepareRender(this));
Game.Renderer.WorldVoxelRenderer.EndFrame();
var finalOverlayRenderables = GenerateOverlayRenderables(onScreenActors);
// HACK: Keep old grouping behaviour
foreach (var g in finalOverlayRenderables.GroupBy(prs => prs.GetType()))
var groupedOverlayRenderables = finalOverlayRenderables.GroupBy(prs => prs.GetType());
foreach (var g in groupedOverlayRenderables)
foreach (var r in g)
r.Render(this);
if (devTrait.Value != null && devTrait.Value.ShowDebugGeometry)
if (debugVis.Value != null && debugVis.Value.RenderGeometry)
{
for (var i = 0; i < renderables.Count; i++)
renderables[i].RenderDebugGeometry(this);
foreach (var g in finalOverlayRenderables.GroupBy(prs => prs.GetType()))
foreach (var g in groupedOverlayRenderables)
foreach (var r in g)
r.RenderDebugGeometry(this);
}
if (debugVis.Value != null && debugVis.Value.ScreenMap)
{
foreach (var r in World.ScreenMap.RenderBounds(World.RenderPlayer))
Game.Renderer.WorldRgbaColorRenderer.DrawRect(
new float3(r.Left, r.Top, r.Bottom),
new float3(r.Right, r.Bottom, r.Bottom),
1 / Viewport.Zoom, Color.MediumSpringGreen);
foreach (var r in World.ScreenMap.MouseBounds(World.RenderPlayer))
Game.Renderer.WorldRgbaColorRenderer.DrawRect(
new float3(r.Left, r.Top, r.Bottom),
new float3(r.Right, r.Bottom, r.Bottom),
1 / Viewport.Zoom, Color.OrangeRed);
}
Game.Renderer.Flush();
}
@@ -218,13 +250,13 @@ namespace OpenRA.Graphics
// Conversion between world and screen coordinates
public float2 ScreenPosition(WPos pos)
{
return new float2(TileSize.Width * pos.X / 1024f, TileSize.Height * (pos.Y - pos.Z) / 1024f);
return new float2((float)TileSize.Width * pos.X / TileScale, (float)TileSize.Height * (pos.Y - pos.Z) / TileScale);
}
public float3 Screen3DPosition(WPos pos)
{
var z = ZPosition(pos, 0) * TileSize.Height / 1024f;
return new float3(TileSize.Width * pos.X / 1024f, TileSize.Height * (pos.Y - pos.Z) / 1024f, z);
var z = ZPosition(pos, 0) * (float)TileSize.Height / TileScale;
return new float3((float)TileSize.Width * pos.X / TileScale, (float)TileSize.Height * (pos.Y - pos.Z) / TileScale, z);
}
public int2 ScreenPxPosition(WPos pos)
@@ -241,16 +273,16 @@ namespace OpenRA.Graphics
return new float3((float)Math.Round(px.X), (float)Math.Round(px.Y), px.Z);
}
// For scaling vectors to pixel sizes in the voxel renderer
// For scaling vectors to pixel sizes in the model renderer
public float3 ScreenVectorComponents(WVec vec)
{
return new float3(
TileSize.Width * vec.X / 1024f,
TileSize.Height * (vec.Y - vec.Z) / 1024f,
TileSize.Height * vec.Z / 1024f);
(float)TileSize.Width * vec.X / TileScale,
(float)TileSize.Height * (vec.Y - vec.Z) / TileScale,
(float)TileSize.Height * vec.Z / TileScale);
}
// For scaling vectors to pixel sizes in the voxel renderer
// For scaling vectors to pixel sizes in the model renderer
public float[] ScreenVector(WVec vec)
{
var xyz = ScreenVectorComponents(vec);
@@ -266,7 +298,7 @@ namespace OpenRA.Graphics
public float ScreenZPosition(WPos pos, int offset)
{
return ZPosition(pos, offset) * TileSize.Height / 1024f;
return ZPosition(pos, offset) * (float)TileSize.Height / TileScale;
}
static int ZPosition(WPos pos, int offset)
@@ -280,7 +312,7 @@ namespace OpenRA.Graphics
/// </summary>
public WPos ProjectedPosition(int2 screenPx)
{
return new WPos(1024 * screenPx.X / TileSize.Width, 1024 * screenPx.Y / TileSize.Height, 0);
return new WPos(TileScale * screenPx.X / TileSize.Width, TileScale * screenPx.Y / TileSize.Height, 0);
}
public void Dispose()

View File

@@ -1,45 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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.Collections.Generic;
using System.Linq;
namespace OpenRA
{
public class Group
{
readonly Actor[] actors;
readonly int id;
static int nextGroup;
public IEnumerable<Actor> Actors { get { return actors; } }
public Group(IEnumerable<Actor> actors)
{
this.actors = actors.ToArray();
foreach (var a in actors)
a.Group = this;
id = nextGroup++;
}
public void Dump()
{
/* debug crap */
Game.Debug("Group #{0}: {1}".F(
id, actors.Select(a => "#{0} {1}".F(a.ActorID, a.Info.Name)).JoinWith(",")));
}
/* TODO: add lazy group path crap, groupleader, pruning, etc */
}
}

View File

@@ -0,0 +1,40 @@
#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.Collections.Generic;
using System.Linq;
namespace OpenRA
{
public sealed class HotkeyDefinition
{
public readonly string Name;
public readonly Hotkey Default = Hotkey.Invalid;
public readonly string Description = "";
public readonly HashSet<string> Types = new HashSet<string>();
public HotkeyDefinition(string name, MiniYaml node)
{
Name = name;
if (!string.IsNullOrEmpty(node.Value))
Default = FieldLoader.GetValue<Hotkey>("value", node.Value);
var descriptionNode = node.Nodes.FirstOrDefault(n => n.Key == "Description");
if (descriptionNode != null)
Description = descriptionNode.Value.Value;
var typesNode = node.Nodes.FirstOrDefault(n => n.Key == "Types");
if (typesNode != null)
Types = FieldLoader.GetValue<HashSet<string>>("Types", typesNode.Value.Value);
}
}
}

View File

@@ -0,0 +1,77 @@
#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 OpenRA.FileSystem;
namespace OpenRA
{
public sealed class HotkeyManager
{
readonly Dictionary<string, Hotkey> settings;
readonly Dictionary<string, HotkeyDefinition> definitions = new Dictionary<string, HotkeyDefinition>();
readonly Dictionary<string, Hotkey> keys = new Dictionary<string, Hotkey>();
public HotkeyManager(IReadOnlyFileSystem fileSystem, Dictionary<string, Hotkey> settings, Manifest manifest)
{
this.settings = settings;
var keyDefinitions = MiniYaml.Load(fileSystem, manifest.Hotkeys, null);
foreach (var kd in keyDefinitions)
{
var definition = new HotkeyDefinition(kd.Key, kd.Value);
definitions[kd.Key] = definition;
keys[kd.Key] = definition.Default;
}
foreach (var kv in settings)
keys[kv.Key] = kv.Value;
}
internal Func<Hotkey> GetHotkeyReference(string name)
{
// Is this a mod-defined hotkey?
if (keys.ContainsKey(name))
return () => keys[name];
// Try and parse as a hardcoded definition
Hotkey key;
if (!Hotkey.TryParse(name, out key))
key = Hotkey.Invalid;
return () => key;
}
public void Set(string name, Hotkey value)
{
HotkeyDefinition definition;
if (!definitions.TryGetValue(name, out definition))
return;
keys[name] = value;
if (value != definition.Default)
settings[name] = value;
else
settings.Remove(name);
}
public HotkeyReference this[string name]
{
get
{
return new HotkeyReference(GetHotkeyReference(name));
}
}
public IEnumerable<HotkeyDefinition> Definitions { get { return definitions.Values; } }
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -0,0 +1,46 @@
#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;
namespace OpenRA
{
/// <summary>
/// A reference to either a named hotkey (defined in the game settings) or a statically assigned hotkey
/// </summary>
public class HotkeyReference
{
static readonly Func<Hotkey> Invalid = () => Hotkey.Invalid;
readonly Func<Hotkey> getValue;
public HotkeyReference()
{
getValue = Invalid;
}
internal HotkeyReference(Func<Hotkey> getValue)
{
this.getValue = getValue;
}
public Hotkey GetValue()
{
return getValue();
}
public bool IsActivatedBy(KeyInput e)
{
var currentValue = getValue();
return currentValue.Key == e.Key && currentValue.Modifiers == e.Modifiers;
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -69,5 +69,6 @@ namespace OpenRA
public Modifiers Modifiers;
public int MultiTapCount;
public char UnicodeChar;
public bool IsRepeat;
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -12,9 +12,11 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using OpenRA.FileSystem;
using OpenRA.Graphics;
using OpenRA.Primitives;
namespace OpenRA
@@ -22,86 +24,94 @@ namespace OpenRA
public class InstalledMods : IReadOnlyDictionary<string, Manifest>
{
readonly Dictionary<string, Manifest> mods;
readonly SheetBuilder sheetBuilder;
public InstalledMods(string customModPath)
readonly Dictionary<string, Sprite> icons = new Dictionary<string, Sprite>();
public readonly IReadOnlyDictionary<string, Sprite> Icons;
/// <summary>Initializes the collection of locally installed mods.</summary>
/// <param name="searchPaths">Filesystem paths to search for mod packages.</param>
/// <param name="explicitPaths">Filesystem paths to additional mod packages.</param>
public InstalledMods(IEnumerable<string> searchPaths, IEnumerable<string> explicitPaths)
{
mods = GetInstalledMods(customModPath);
sheetBuilder = new SheetBuilder(SheetType.BGRA, 256);
Icons = new ReadOnlyDictionary<string, Sprite>(icons);
mods = GetInstalledMods(searchPaths, explicitPaths);
}
static IEnumerable<Pair<string, string>> GetCandidateMods()
static IEnumerable<Pair<string, string>> GetCandidateMods(IEnumerable<string> searchPaths)
{
// Get mods that are in the game folder.
var basePath = Platform.ResolvePath(Path.Combine(".", "mods"));
var mods = Directory.GetDirectories(basePath)
.Select(x => Pair.New(x.Substring(basePath.Length + 1), x))
.ToList();
var mods = new List<Pair<string, string>>();
foreach (var path in searchPaths)
{
try
{
var resolved = Platform.ResolvePath(path);
if (!Directory.Exists(resolved))
continue;
foreach (var m in Directory.GetFiles(basePath, "*.oramod"))
mods.Add(Pair.New(Path.GetFileNameWithoutExtension(m), m));
// Get mods that are in the support folder.
var supportPath = Platform.ResolvePath(Path.Combine("^", "mods"));
if (!Directory.Exists(supportPath))
return mods;
foreach (var pair in Directory.GetDirectories(supportPath).ToDictionary(x => x.Substring(supportPath.Length + 1)))
mods.Add(Pair.New(pair.Key, pair.Value));
foreach (var m in Directory.GetFiles(supportPath, "*.oramod"))
mods.Add(Pair.New(Path.GetFileNameWithoutExtension(m), m));
var directory = new DirectoryInfo(resolved);
foreach (var subdir in directory.EnumerateDirectories())
mods.Add(Pair.New(subdir.Name, subdir.FullName));
}
catch (Exception e)
{
Console.WriteLine("Failed to enumerate mod search path {0}: {1}", path, e.Message);
}
}
return mods;
}
static Manifest LoadMod(string id, string path)
Manifest LoadMod(string id, string path)
{
IReadOnlyPackage package = null;
try
{
if (Directory.Exists(path))
package = new Folder(path);
else
if (!Directory.Exists(path))
{
try
{
using (var fileStream = File.OpenRead(path))
package = new ZipFile(fileStream, path);
}
catch
{
throw new InvalidDataException(path + " is not a valid mod package");
}
Log.Write("debug", path + " is not a valid mod package");
return null;
}
if (!package.Contains("mod.yaml"))
throw new InvalidDataException(path + " is not a valid mod package");
package = new Folder(path);
if (package.Contains("mod.yaml"))
{
var manifest = new Manifest(id, package);
// Mods in the support directory and oramod packages (which are listed later
// in the CandidateMods list) override mods in the main install.
return new Manifest(id, package);
if (package.Contains("icon.png"))
{
using (var stream = package.GetStream("icon.png"))
if (stream != null)
using (var bitmap = new Bitmap(stream))
icons[id] = sheetBuilder.Add(bitmap);
}
else if (!manifest.Metadata.Hidden)
Log.Write("debug", "Mod '{0}' is missing 'icon.png'.".F(path));
return manifest;
}
}
catch (Exception)
catch (Exception e)
{
if (package != null)
package.Dispose();
return null;
Log.Write("debug", "Load mod '{0}': {1}".F(path, e));
}
if (package != null)
package.Dispose();
return null;
}
static Dictionary<string, Manifest> GetInstalledMods(string customModPath)
Dictionary<string, Manifest> GetInstalledMods(IEnumerable<string> searchPaths, IEnumerable<string> explicitPaths)
{
var ret = new Dictionary<string, Manifest>();
var candidates = GetCandidateMods();
if (customModPath != null)
candidates = candidates.Append(Pair.New(Path.GetFileNameWithoutExtension(customModPath), customModPath));
var candidates = GetCandidateMods(searchPaths)
.Concat(explicitPaths.Select(p => Pair.New(Path.GetFileNameWithoutExtension(p), p)));
foreach (var pair in candidates)
{
var mod = LoadMod(pair.First, pair.Second);
// Mods in the support directory and oramod packages (which are listed later
// in the CandidateMods list) override mods in the main install.
if (mod != null)
ret[pair.First] = mod;
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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
@@ -31,12 +31,21 @@ namespace OpenRA
}
}
public sealed class ModelSequenceFormat : IGlobalModData
{
public readonly string Type;
public readonly IReadOnlyDictionary<string, MiniYaml> Metadata;
public ModelSequenceFormat(MiniYaml yaml)
{
Type = yaml.Value;
Metadata = new ReadOnlyDictionary<string, MiniYaml>(yaml.ToDictionary());
}
}
public class ModMetadata
{
public string Title;
public string Description;
public string Version;
public string Author;
public bool Hidden;
}
@@ -48,25 +57,24 @@ namespace OpenRA
public readonly ModMetadata Metadata;
public readonly string[]
Rules, ServerTraits,
Sequences, VoxelSequences, Cursors, Chrome, Assemblies, ChromeLayout,
Sequences, ModelSequences, Cursors, Chrome, Assemblies, ChromeLayout,
Weapons, Voices, Notifications, Music, Translations, TileSets,
ChromeMetrics, MapCompatibility, Missions;
ChromeMetrics, MapCompatibility, Missions, Hotkeys;
public readonly IReadOnlyDictionary<string, string> Packages;
public readonly IReadOnlyDictionary<string, string> MapFolders;
public readonly MiniYaml LoadScreen;
public readonly Dictionary<string, string> RequiresMods;
public readonly Dictionary<string, Pair<string, int>> Fonts;
public readonly string[] SoundFormats = { };
public readonly string[] SpriteFormats = { };
public readonly string[] PackageFormats = { };
readonly string[] reservedModuleNames = { "Metadata", "Folders", "MapFolders", "Packages", "Rules",
"Sequences", "VoxelSequences", "Cursors", "Chrome", "Assemblies", "ChromeLayout", "Weapons",
"Voices", "Notifications", "Music", "Translations", "TileSets", "ChromeMetrics", "Missions",
"Sequences", "ModelSequences", "Cursors", "Chrome", "Assemblies", "ChromeLayout", "Weapons",
"Voices", "Notifications", "Music", "Translations", "TileSets", "ChromeMetrics", "Missions", "Hotkeys",
"ServerTraits", "LoadScreen", "Fonts", "SupportsMapsFrom", "SoundFormats", "SpriteFormats",
"RequiresMods" };
"RequiresMods", "PackageFormats" };
readonly TypeDictionary modules = new TypeDictionary();
readonly Dictionary<string, MiniYaml> yaml;
@@ -90,7 +98,7 @@ namespace OpenRA
Rules = YamlList(yaml, "Rules");
Sequences = YamlList(yaml, "Sequences");
VoxelSequences = YamlList(yaml, "VoxelSequences");
ModelSequences = YamlList(yaml, "ModelSequences");
Cursors = YamlList(yaml, "Cursors");
Chrome = YamlList(yaml, "Chrome");
Assemblies = YamlList(yaml, "Assemblies");
@@ -103,6 +111,7 @@ namespace OpenRA
TileSets = YamlList(yaml, "TileSets");
ChromeMetrics = YamlList(yaml, "ChromeMetrics");
Missions = YamlList(yaml, "Missions");
Hotkeys = YamlList(yaml, "Hotkeys");
ServerTraits = YamlList(yaml, "ServerTraits");
@@ -115,8 +124,6 @@ namespace OpenRA
return Pair.New(nd["Font"].Value, Exts.ParseIntegerInvariant(nd["Size"].Value));
});
RequiresMods = yaml["RequiresMods"].ToDictionary(my => my.Value);
// Allow inherited mods to import parent maps.
var compat = new List<string> { Id };
@@ -125,6 +132,9 @@ namespace OpenRA
MapCompatibility = compat.ToArray();
if (yaml.ContainsKey("PackageFormats"))
PackageFormats = FieldLoader.GetValue<string[]>("PackageFormats", yaml["PackageFormats"].Value);
if (yaml.ContainsKey("SoundFormats"))
SoundFormats = FieldLoader.GetValue<string[]>("SoundFormats", yaml["SoundFormats"].Value);

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* 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

Some files were not shown because too many files have changed in this diff Show More