diff --git a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj
index 46cf9505e6..eb480236de 100644
--- a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj
+++ b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj
@@ -58,7 +58,6 @@
-
@@ -87,5 +86,12 @@ cd "$(SolutionDir)"
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}
OpenRA.TilesetBuilder
+
+ {4A8A43B5-A9EF-4ED0-99DD-4BAB10A0DB6E}
+ OpenRA.Mods.RA
+
+
+
+
\ No newline at end of file
diff --git a/OpenRA.Mods.D2k/Render/RenderBuildingSeparateTurret.cs b/OpenRA.Mods.D2k/Render/RenderBuildingSeparateTurret.cs
deleted file mode 100644
index 9240f27bf2..0000000000
--- a/OpenRA.Mods.D2k/Render/RenderBuildingSeparateTurret.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2012 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. For more information,
- * see COPYING.
- */
-#endregion
-
-/*using System;
-using OpenRA.Mods.RA.Buildings;
-using OpenRA.Graphics;
-using OpenRA.Traits;
-
-namespace OpenRA.Mods.RA.Render
-{
- class RenderBuildingSeparateTurretInfo : RenderBuildingInfo, Requires, Requires
- {
- public override object Create(ActorInitializer init) { return new RenderBuildingSeparateTurret( init, this ); }
- }
-
- class RenderBuildingSeparateTurret : RenderBuilding
- {
- public RenderBuildingSeparateTurret( ActorInitializer init, RenderBuildingInfo info )
- : base(init, info, MakeTurretFacingFunc(init.self))
- {
- var turretAnim = new Animation(GetImage(self), () => turreted.turretFacing );
- turretAnim.Play( "turret" );
-
- for( var i = 0; i < attack.Turrets.Count; i++ )
- {
- var turret = attack.Turrets[i];
- anims.Add( "turret_{0}".F(i),
- new AnimationWithOffset( turretAnim,
- () => Combat.GetTurretPosition( self, facing, turret ),
- null));
- }
- }
-
- static Func MakeTurretFacingFunc(Actor self)
- {
- var turreted = self.Trait();
- return () => turreted.turretFacing;
- }
-
- }
-} */
diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs
index 8891a32c8b..cdbfed686d 100644
--- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs
+++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs
@@ -69,19 +69,21 @@ namespace OpenRA.Mods.D2k.Widgets.Logic
new string[] {"--r8", PathToDataR8, PathToPalette, "162", "177", Path.Combine(PathToSHPs, "sandcrater2")},
new string[] {"--r8", PathToDataR8, PathToPalette, "206", "381", Path.Combine(PathToSHPs, "rifle"), "--infantry"},
new string[] {"--r8", PathToDataR8, PathToPalette, "382", "457", Path.Combine(PathToSHPs, "rifledeath"), "--infantrydeath"},
- new string[] {"--r8", PathToDataR8, PathToPalette, "458", "693", Path.Combine(PathToSHPs, "rocket"), "--infantry"},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "458", "693", Path.Combine(PathToSHPs, "bazooka"), "--infantry"},
new string[] {"--r8", PathToDataR8, PathToPalette, "694", "929", Path.Combine(PathToSHPs, "fremen"), "--infantry"},
new string[] {"--r8", PathToDataR8, PathToPalette, "930", "1165", Path.Combine(PathToSHPs, "sardaukar"), "--infantry"},
- new string[] {"--r8", PathToDataR8, PathToPalette, "1166", "1221", Path.Combine(PathToSHPs, "engineer"), "--infantry"}, // death animation 1342..1401
- new string[] {"--r8", PathToDataR8, PathToPalette, "1402", "1502", Path.Combine(PathToSHPs, "thumper"), "--infantry"}, // death animations 1543..1602
- new string[] {"--r8", PathToDataR8, PathToPalette, "1603", "1634", Path.Combine(PathToSHPs, "missile"), "--vehicle"},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "1166", "1221", Path.Combine(PathToSHPs, "engineer"), "--infantry"},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "1342", "1401", Path.Combine(PathToSHPs, "engineerdeath"), "--infantrydeath"},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "1402", "1502", Path.Combine(PathToSHPs, "thumper"), "--infantry"},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "1543", "1602", Path.Combine(PathToSHPs, "thumperdeath"), "--infantrydeath"},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "1603", "1634", Path.Combine(PathToSHPs, "missiletank"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1635", "1666", Path.Combine(PathToSHPs, "trike"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1667", "1698", Path.Combine(PathToSHPs, "quad"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1699", "1730", Path.Combine(PathToSHPs, "harvester"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1731", "1762", Path.Combine(PathToSHPs, "combata"), "--vehicle"},
- new string[] {"--r8", PathToDataR8, PathToPalette, "1763", "1794", Path.Combine(PathToSHPs, "siege"), "--vehicle"},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "1763", "1794", Path.Combine(PathToSHPs, "siegetank"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1795", "1826", Path.Combine(PathToSHPs, "dmcv"), "--vehicle"},
- new string[] {"--r8", PathToDataR8, PathToPalette, "1827", "1858", Path.Combine(PathToSHPs, "sonic"), "--vehicle"},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "1827", "1858", Path.Combine(PathToSHPs, "sonictank"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1859", "1890", Path.Combine(PathToSHPs, "combataturret"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1891", "1922", Path.Combine(PathToSHPs, "siegeturret"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1923", "1954", Path.Combine(PathToSHPs, "carryall"), "--vehicle"},
@@ -90,9 +92,10 @@ namespace OpenRA.Mods.D2k.Widgets.Logic
new string[] {"--r8", PathToDataR8, PathToPalette, "2083", "2114", Path.Combine(PathToSHPs, "devast"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2115", "2146", Path.Combine(PathToSHPs, "combathturret"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2147", "2148", Path.Combine(PathToSHPs, "deathhandmissile")},
- new string[] {"--r8", PathToDataR8, PathToPalette, "2245", "2284", Path.Combine(PathToSHPs, "saboteur"), "--infantry"}, //#death animations 2325..2388
+ new string[] {"--r8", PathToDataR8, PathToPalette, "2245", "2284", Path.Combine(PathToSHPs, "saboteur"), "--infantry"},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "2325", "2388", Path.Combine(PathToSHPs, "saboteurdeath"), "--infantrydeath"},
//rifleinfantry repetitions?
- new string[] {"--r8", PathToDataR8, PathToPalette, "2389", "2420", Path.Combine(PathToSHPs, "deviator"), "--vehicle"},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "2389", "2420", Path.Combine(PathToSHPs, "deviatortank"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2421", "2452", Path.Combine(PathToSHPs, "raider"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2453", "2484", Path.Combine(PathToSHPs, "combato"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2485", "2516", Path.Combine(PathToSHPs, "combatoturret"), "--vehicle"},
@@ -170,10 +173,10 @@ namespace OpenRA.Mods.D2k.Widgets.Logic
new string[] {"--r8", PathToDataR8, PathToPalette, "4021", "4021", Path.Combine(PathToSHPs, "combathicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4022", "4022", Path.Combine(PathToSHPs, "combatoicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4023", "4023", Path.Combine(PathToSHPs, "mcvicon")},
- new string[] {"--r8", PathToDataR8, PathToPalette, "4024", "4024", Path.Combine(PathToSHPs, "missileicon")},
- new string[] {"--r8", PathToDataR8, PathToPalette, "4025", "4025", Path.Combine(PathToSHPs, "deviatoricon")},
- new string[] {"--r8", PathToDataR8, PathToPalette, "4026", "4026", Path.Combine(PathToSHPs, "siegeicon")},
- new string[] {"--r8", PathToDataR8, PathToPalette, "4027", "4027", Path.Combine(PathToSHPs, "sonicicon")},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "4024", "4024", Path.Combine(PathToSHPs, "missiletankicon")},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "4025", "4025", Path.Combine(PathToSHPs, "deviatortankicon")},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "4026", "4026", Path.Combine(PathToSHPs, "siegetankicon")},
+ new string[] {"--r8", PathToDataR8, PathToPalette, "4027", "4027", Path.Combine(PathToSHPs, "sonictankicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4028", "4028", Path.Combine(PathToSHPs, "devasticon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4029", "4029", Path.Combine(PathToSHPs, "carryallicon")}, // == 4030
new string[] {"--r8", PathToDataR8, PathToPalette, "4031", "4031", Path.Combine(PathToSHPs, "orniicon")}, // == 4062
@@ -277,8 +280,10 @@ namespace OpenRA.Mods.D2k.Widgets.Logic
new string[] {"--shp", Path.Combine(PathToSHPs, "fremen.png"), "48"},
new string[] {"--shp", Path.Combine(PathToSHPs, "sardaukar.png"), "48"},
new string[] {"--shp", Path.Combine(PathToSHPs, "engineer.png"), "48"},
+ new string[] {"--shp", Path.Combine(PathToSHPs, "engineerdeath.png"), "48"},
new string[] {"--shp", Path.Combine(PathToSHPs, "thumper.png"), "48"},
- new string[] {"--shp", Path.Combine(PathToSHPs, "missile.png"), "48"},
+ new string[] {"--shp", Path.Combine(PathToSHPs, "thumperdeath.png"), "48"},
+ new string[] {"--shp", Path.Combine(PathToSHPs, "missiletank.png"), "48"},
new string[] {"--shp", Path.Combine(PathToSHPs, "trike.png"), "32"},
new string[] {"--shp", Path.Combine(PathToSHPs, "quad.png"), "32"},
new string[] {"--shp", Path.Combine(PathToSHPs, "harvester.png"), "48"},
@@ -295,7 +300,8 @@ namespace OpenRA.Mods.D2k.Widgets.Logic
new string[] {"--shp", Path.Combine(PathToSHPs, "combathturret.png"), "48"},
new string[] {"--shp", Path.Combine(PathToSHPs, "deathhandmissile.png"), "24"},
new string[] {"--shp", Path.Combine(PathToSHPs, "saboteur.png"), "48"},
- new string[] {"--shp", Path.Combine(PathToSHPs, "deviator.png"), "48"},
+ new string[] {"--shp", Path.Combine(PathToSHPs, "saboteurdeath.png"), "48"},
+ new string[] {"--shp", Path.Combine(PathToSHPs, "deviatortank.png"), "48"},
new string[] {"--shp", Path.Combine(PathToSHPs, "raider.png"), "32"},
new string[] {"--shp", Path.Combine(PathToSHPs, "combato.png"), "48"},
new string[] {"--shp", Path.Combine(PathToSHPs, "combatoturret.png"), "48"},
@@ -368,10 +374,10 @@ namespace OpenRA.Mods.D2k.Widgets.Logic
new string[] {"--shp", Path.Combine(PathToSHPs, "combathicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToSHPs, "combatoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToSHPs, "mcvicon.png"), "60"},
- new string[] {"--shp", Path.Combine(PathToSHPs, "missileicon.png"), "60"},
- new string[] {"--shp", Path.Combine(PathToSHPs, "deviatoricon.png"), "60"},
- new string[] {"--shp", Path.Combine(PathToSHPs, "siegeicon.png"), "60"},
- new string[] {"--shp", Path.Combine(PathToSHPs, "sonicicon.png"), "60"},
+ new string[] {"--shp", Path.Combine(PathToSHPs, "missiletankicon.png"), "60"},
+ new string[] {"--shp", Path.Combine(PathToSHPs, "deviatortankicon.png"), "60"},
+ new string[] {"--shp", Path.Combine(PathToSHPs, "siegetankicon.png"), "60"},
+ new string[] {"--shp", Path.Combine(PathToSHPs, "sonictankicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToSHPs, "devasticon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToSHPs, "carryallicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToSHPs, "orniicon.png"), "60"},
diff --git a/mods/d2k/TODO b/mods/d2k/TODO
index ad50511553..0ddf63efe7 100644
--- a/mods/d2k/TODO
+++ b/mods/d2k/TODO
@@ -12,8 +12,6 @@
# RenderBuildingTurreted does not support separate turret sequence
# ornithocopter should flap (might need new RenderOrni code for proper animation)
# R8 converter needs infantry frame resorter
-# add trooper (carries bazooka)
-# add engineer
# add fremen (stealthed)
# add saboteur (stealthed with C4)
# add grenade thrower
diff --git a/mods/d2k/cursors.yaml b/mods/d2k/cursors.yaml
index 2b341c2565..496dfb74a9 100644
--- a/mods/d2k/cursors.yaml
+++ b/mods/d2k/cursors.yaml
@@ -225,6 +225,16 @@ Cursors:
length: 1
x: 12
y: 12
+ goldwrench:
+ start:88
+ length: 8
+ x: 12
+ y: 12
+ goldwrench-blocked:
+ start:64
+ length: 1
+ x: 12
+ y: 12
nopower: cursor
powerdown-blocked:
diff --git a/mods/d2k/rules/atreides.yaml b/mods/d2k/rules/atreides.yaml
index 9079a870de..a3119adcd8 100644
--- a/mods/d2k/rules/atreides.yaml
+++ b/mods/d2k/rules/atreides.yaml
@@ -110,7 +110,7 @@ COMBATA:
Prerequisites: heavya
Owner: atreides
-SONIC:
+SONICTANK:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
diff --git a/mods/d2k/rules/infantry.yaml b/mods/d2k/rules/infantry.yaml
index 1ff67fed85..0e0f1955b3 100644
--- a/mods/d2k/rules/infantry.yaml
+++ b/mods/d2k/rules/infantry.yaml
@@ -7,7 +7,7 @@ RIFLE:
Valued:
Cost: 100
Tooltip:
- Name: Rifle Infantry
+ Name: Rifleman
Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles
Selectable:
Bounds: 12,17,0,0
@@ -19,4 +19,56 @@ RIFLE:
PrimaryWeapon: M1Carbine
TakeCover:
-RenderInfantry:
+ RenderInfantryProne:
+
+ENGINEER:
+ Inherits: ^Infantry
+ Buildable:
+ Queue: Infantry
+ BuildPaletteOrder: 50
+ Owner: atreides,harkonnen,ordos
+ Valued:
+ Cost: 500
+ Tooltip:
+ Name: Engineer
+ Description: Infiltrates and captures enemy structures.\n Strong vs Nothing\n Weak vs Everything
+ Selectable:
+# Voice: EngineerVoice
+ Bounds: 12,17,0,-9
+ Health:
+ HP: 25
+ Mobile:
+ Speed: 4
+ Passenger:
+ PipType: Yellow
+ EngineerRepair:
+ Captures:
+ TakeCover:
+ -AutoTarget:
+ AttackMove:
+ JustMove: true
+
+BAZOOKA:
+ Inherits: ^Infantry
+ Buildable:
+ Queue: Infantry
+ BuildPaletteOrder: 20
+ Owner: atreides,harkonnen,ordos
+ Valued:
+ Cost: 300
+ Tooltip:
+ Name: Trooper
+ Description: Anti-tank/Anti-aircraft infantry.\n Strong vs Tanks, Aircraft\n Weak vs Infantry
+ Selectable:
+ Bounds: 12,17,0,-9
+ Health:
+ HP: 45
+ Mobile:
+ Speed: 3
+ AttackFrontal:
+ PrimaryWeapon: RedEye
+ SecondaryWeapon: Dragon
+ PrimaryOffset: 0,0,0,-13
+ TakeCover:
+ -RenderInfantry:
RenderInfantryProne:
\ No newline at end of file
diff --git a/mods/d2k/rules/ordos.yaml b/mods/d2k/rules/ordos.yaml
index 84ae6604e3..7a37fb1af9 100644
--- a/mods/d2k/rules/ordos.yaml
+++ b/mods/d2k/rules/ordos.yaml
@@ -141,7 +141,7 @@ RAIDER:
SecondaryOffset: 0,0,0,-4
AutoTarget:
-DEVIATOR:
+DEVIATORTANK:
Inherits: ^Tank
Valued:
Cost: 800
diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml
index e4608f2f4a..917399c021 100644
--- a/mods/d2k/rules/structures.yaml
+++ b/mods/d2k/rules/structures.yaml
@@ -423,7 +423,6 @@ GUNTOWER:
RenderRangeCircle:
-RenderBuilding:
RenderBuildingTurreted:
- Palette: d2k
Turreted:
ROT: 12
InitialFacing: 50
diff --git a/mods/d2k/rules/vehicles.yaml b/mods/d2k/rules/vehicles.yaml
index cce820b026..a3201d69b1 100644
--- a/mods/d2k/rules/vehicles.yaml
+++ b/mods/d2k/rules/vehicles.yaml
@@ -146,7 +146,7 @@ QUAD:
Selectable:
Bounds: 30,30
-SIEGE:
+SIEGETANK:
Inherits: ^Tank
Buildable:
Queue: Vehicle
@@ -179,7 +179,7 @@ SIEGE:
Chance: 75
AutoTarget:
-MISSILE:
+MISSILETANK:
Inherits: ^Tank
Valued:
Cost: 800
diff --git a/mods/d2k/sequences.yaml b/mods/d2k/sequences.yaml
index a92945873b..3793d74723 100644
--- a/mods/d2k/sequences.yaml
+++ b/mods/d2k/sequences.yaml
@@ -55,9 +55,7 @@ quad:
Start: 0
Facings: 32
-
-
-siege:
+siegetank:
idle:
Start: 0
Facings: 32
@@ -65,12 +63,12 @@ siege:
Start: 0
Facings: 32
-missile:
+missiletank:
idle:
Start: 0
Facings: 32
-sonic:
+sonictank:
idle:
Start: 0
Facings: 32
@@ -149,6 +147,100 @@ rifle:
die5: rifledeath
Start: 26
Length: 7
+ die6: electro
+ Start: 0
+ Length: *
+ die-crushed: rifledeath
+ Start: 54
+ Length: 22
+ Tick: 1600
+
+bazooka:
+ stand:
+ Start: 0
+ Facings: 8
+ stand2:
+ Start: 0
+ Facings: 8
+ stand3:
+ Start: 0
+ Facings: 8
+ run:
+ Start: 8
+ Length: 6
+ Facings: 8
+ shoot:
+ Start: 56
+ Length: 5
+ Facings: 8
+ prone-stand:
+ Start: 104
+ Length: 1
+ Facings: 8
+ prone-run:
+ Start: 112
+ Length: 3
+ Facings: 8
+ standup-0:
+ Start: 96
+ Length: 1
+ Facings: 8
+ prone-shoot:
+ Start: 136
+ Length: 5
+ Facings: 8
+ die1: rifledeath
+ Start: 0
+ Length: 5
+ die2: rifledeath
+ Start: 5
+ Length: 7
+ die3: rifledeath
+ Start: 12
+ Length: 7
+ die4: rifledeath
+ Start: 19
+ Length: 7
+ die5: rifledeath
+ Start: 26
+ Length: 7
+ die6: electro
+ Start: 0
+ Length: *
+ die-crushed: rifledeath
+ Start: 54
+ Length: 22
+ Tick: 1600
+
+engineer:
+ stand:
+ Start: 0
+ Facings: 8
+ stand2:
+ Start: 0
+ Facings: 8
+ run:
+ Start: 8
+ Length: 6
+ Facings: 8
+ die1: rifledeath
+ Start: 0
+ Length: 5
+ die2: rifledeath
+ Start: 5
+ Length: 7
+ die3: rifledeath
+ Start: 12
+ Length: 7
+ die4: rifledeath
+ Start: 19
+ Length: 7
+ die5: rifledeath
+ Start: 26
+ Length: 7
+ die6: electro
+ Start: 0
+ Length: *
die-crushed: rifledeath
Start: 54
Length: 22
@@ -662,7 +754,7 @@ raider:
Start: 0
Facings: 32
-deviator:
+deviatortank:
idle:
Start: 0
Facings: 32
@@ -882,6 +974,11 @@ parach:
Start: 5
Length: 11
+missile:
+ idle:
+ Start: 0
+ Facings: 32
+
spicebloom:
make:
Start: 0
diff --git a/mods/d2k/weapons.yaml b/mods/d2k/weapons.yaml
index c9791b72c1..093ca190e6 100644
--- a/mods/d2k/weapons.yaml
+++ b/mods/d2k/weapons.yaml
@@ -439,4 +439,32 @@ WormJaw:
Versus:
Wood: 0%
Concrete: 0%
- Damage: 100
\ No newline at end of file
+ Damage: 100
+
+RedEye:
+ ROF: 50
+ Range: 7.5
+ Report: MISSILE1
+ ValidTargets: Air
+ Projectile: Missile
+ Arm: 3
+ High: true
+ Shadow: false
+ Proximity: true
+# Trail: smokey
+ ContrailLength: 10
+ Image: MISSILE
+ ROT: 20
+ RangeLimit: 30
+ Speed: 35
+ Warhead:
+ Spread: 3
+ Versus:
+ None: 90%
+ Wood: 75%
+ Light: 60%
+ Heavy: 25%
+ Explosion: med_explosion
+ InfDeath: 2
+ SmudgeType: Crater
+ Damage: 40
\ No newline at end of file