diff --git a/OpenRA.Mods.D2k/BuildingCaptureNotification.cs b/OpenRA.Mods.D2k/BuildingCaptureNotification.cs new file mode 100644 index 0000000000..ceaaf8a240 --- /dev/null +++ b/OpenRA.Mods.D2k/BuildingCaptureNotification.cs @@ -0,0 +1,43 @@ +#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 OpenRA.Traits; + +namespace OpenRA.Mods.RA +{ + class CaptureNotificationInfo : ITraitInfo + { + public readonly string Race = null; + public readonly string Notification = null; + + public object Create(ActorInitializer init) { return new CaptureNotification(this); } + } + + class CaptureNotification : INotifyCapture + { + CaptureNotificationInfo Info; + public CaptureNotification(CaptureNotificationInfo info) + { + Info = info; + } + + public void OnCapture (Actor self, Actor captor, Player oldOwner, Player newOwner) + { + if (captor.World.LocalPlayer != captor.Owner) + return; + + if (Info.Race != null && Info.Race != newOwner.Country.Race) + return; + + Sound.PlayToPlayer(captor.World.LocalPlayer, Info.Notification); + } + } +} + diff --git a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj index eb480236de..7c2c351809 100644 --- a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj +++ b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj @@ -62,6 +62,7 @@ + @@ -91,7 +92,4 @@ cd "$(SolutionDir)" OpenRA.Mods.RA - - - \ No newline at end of file diff --git a/OpenRA.Mods.RA/ActorLostNotification.cs b/OpenRA.Mods.RA/ActorLostNotification.cs index 3d6e2c4b7c..827c8afe30 100644 --- a/OpenRA.Mods.RA/ActorLostNotification.cs +++ b/OpenRA.Mods.RA/ActorLostNotification.cs @@ -14,6 +14,7 @@ namespace OpenRA.Mods.RA { class ActorLostNotificationInfo : ITraitInfo { + public readonly string Race = null; public readonly string Notification = null; public readonly bool NotifyAll = false; @@ -31,6 +32,8 @@ namespace OpenRA.Mods.RA public void Killed(Actor self, AttackInfo e) { var player = (Info.NotifyAll) ? self.World.LocalPlayer : self.Owner; + if (Info.Race != null && Info.Race != self.Owner.Country.Race) + return; Sound.PlayToPlayer(player, Info.Notification); } } diff --git a/OpenRA.Mods.RA/ConquestVictoryConditions.cs b/OpenRA.Mods.RA/ConquestVictoryConditions.cs index 7e57c7effd..334562f751 100644 --- a/OpenRA.Mods.RA/ConquestVictoryConditions.cs +++ b/OpenRA.Mods.RA/ConquestVictoryConditions.cs @@ -18,6 +18,8 @@ namespace OpenRA.Mods.RA public string WinNotification = null; public string LoseNotification = null; public int NotificationDelay = 1500; // Milliseconds + public readonly string Race = null; + public object Create(ActorInitializer init) { return new ConquestVictoryConditions(this); } } @@ -53,6 +55,7 @@ namespace OpenRA.Mods.RA public void Lose(Actor self) { + if (Info.Race != null && Info.Race != self.Owner.Country.Race) return; if (self.Owner.WinState == WinState.Lost) return; self.Owner.WinState = WinState.Lost; @@ -74,6 +77,7 @@ namespace OpenRA.Mods.RA public void Win(Actor self) { + if (Info.Race != null && Info.Race != self.Owner.Country.Race) return; if (self.Owner.WinState == WinState.Won) return; self.Owner.WinState = WinState.Won; diff --git a/mods/d2k/TODO b/mods/d2k/TODO index f0abe4cb87..9b8b1050d7 100644 --- a/mods/d2k/TODO +++ b/mods/d2k/TODO @@ -6,7 +6,8 @@ # construction yard crane animations missing # welding animation (factories) missing # chimney animation (refinery) missing -# harvester unload and harvest animation missing +# harvest animation missing +# harvester unload animation ugly # add more spice tiles and make them fit # add game logic for concrete plates (use terrain overlay from bridges/ressources) # allow placing turrets on walls @@ -14,8 +15,7 @@ # ornithocopter should flap (might need new RenderOrni code for proper animation) # R8 converter needs infantry frame resorter # add grenade thrower -# add sandworm (behave like a moving anti-vehicle mine) -# add thumper which deploys and really attracts sandworms +# make sandworm behave like a moving anti-vehicle mine # add neutral buildings: emperor palace, fremen siech, smugglers factory # add deathhand missile (nuke) # maybe add ornithocopter strikes (they are currently directly contrallable units with non-reloading machine guns as in Dune II) @@ -33,7 +33,6 @@ # black spots on buildings should be fading team colors # gamefile extraction (setup/setup.z) from CD fails # support patch 1.06 gamefiles: DATA.R8 has more frames and currently fails to extract, also featuring new terrain with white houses and new unit: grenade thrower -# mouse cursor has no transparency and is a little pixelish # infantry-only areas (Rough) do not show the dark-green mouse cursor # put TilesetBuilder.Export into OpenRA.Utility to call the functions directly when extracting game-files (instead of opening a GUI) # replace RA sounds by Dune 2000 ones \ No newline at end of file diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index b1e22ffd96..13a0e686c5 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -23,9 +23,15 @@ GainsExperience: GivesExperience: DrawLineToTarget: -#TODO: not race specific - ActorLostNotification: + ActorLostNotification@Atreides: + Race: atreides Notification: AI_ULOST.AUD + ActorLostNotification@Harkonnen: + Race: harkonnen + Notification: HI_ULOST.AUD + ActorLostNotification@Ordos: + Race: ordos + Notification: OI_ULOST.AUD ProximityCaptor: Types:Vehicle GivesBounty: @@ -58,8 +64,15 @@ GainsExperience: GivesExperience: DrawLineToTarget: - ActorLostNotification: + ActorLostNotification@Atreides: + Race: atreides Notification: AI_ULOST.AUD + ActorLostNotification@Harkonnen: + Race: harkonnen + Notification: HI_ULOST.AUD + ActorLostNotification@Ordos: + Race: ordos + Notification: OI_ULOST.AUD ProximityCaptor: Types:Tank GivesBounty: @@ -101,8 +114,15 @@ GainsExperience: GivesExperience: DrawLineToTarget: - ActorLostNotification: + ActorLostNotification@Atreides: + Race: atreides Notification: AI_ULOST.AUD + ActorLostNotification@Harkonnen: + Race: harkonnen + Notification: HI_ULOST.AUD + ActorLostNotification@Ordos: + Race: ordos + Notification: OI_ULOST.AUD ProximityCaptor: Types:Infantry GivesBounty: @@ -122,8 +142,15 @@ GainsExperience: GivesExperience: DrawLineToTarget: - ActorLostNotification: + ActorLostNotification@Atreides: + Race: atreides Notification: AI_ULOST.AUD + ActorLostNotification@Harkonnen: + Race: harkonnen + Notification: HI_ULOST.AUD + ActorLostNotification@Ordos: + Race: ordos + Notification: OI_ULOST.AUD DebugAircraftFacing: DebugAircraftSubPxX: DebugAircraftSubPxY: @@ -159,7 +186,7 @@ WithBuildingExplosion: RepairableBuilding: EmitInfantryOnSell: - ActorTypes: rifle,rifle,rifle,rifle,rifle,rifle + ActorTypes: rifle,rifle,rifle,bazooka,bazooka,engineer MustBeDestroyed: GivesExperience: # FrozenUnderFog: @@ -172,9 +199,15 @@ CaptureNotification@Ordos: Race: ordos Notification: OI_CAPT.AUD -#TODO: not Race-specific - ActorLostNotification: + ActorLostNotification@Atreides: + Race: atreides Notification: AI_BLOST.AUD + ActorLostNotification@Harkonnen: + Race: harkonnen + Notification: HI_BLOST.AUD + ActorLostNotification@Ordos: + Race: ordos + Notification: OI_BLOST.AUD EditorAppearance: RelativeToTopLeft: yes ShakeOnDeath: diff --git a/mods/d2k/rules/system.yaml b/mods/d2k/rules/system.yaml index e5d2c3fe0d..b5e265e03a 100644 --- a/mods/d2k/rules/system.yaml +++ b/mods/d2k/rules/system.yaml @@ -48,9 +48,18 @@ Player: BlockedAudio: AI_NROOM.AUD PlaceBuilding: SupportPowerManager: - ConquestVictoryConditions: - WinNotification:AI_MWIN.AUD - LoseNotification:AI_MFAIL.AUD + ConquestVictoryConditions@Atreides: + Race: atreides + WinNotification: AI_MWIN.AUD + LoseNotification: AI_MFAIL.AUD + ConquestVictoryConditions@Harkonnen: + Race: harkonnen + WinNotification: HI_MWIN.AUD + LoseNotification: HI_MFAIL.AUD + ConquestVictoryConditions@Ordos: + Race: ordos + WinNotification: OI_MWIN.AUD + LoseNotification: OI_MFAIL.AUD PowerManager: AllyRepair: PlayerResources: @@ -246,17 +255,60 @@ CRATE: RevealMapCrateAction: SelectionShares: 1 Effect: reveal-map -#TODO: Currently only gives you an Atreides MCV - GiveMcvCrateAction: + GiveMcvCrateAction@Atreides: SelectionShares: 2 NoBaseSelectionShares: 9001 Unit: mcva - GiveUnitCrateAction@trike: + GiveMcvCrateAction@Harkonnen: + SelectionShares: 2 + NoBaseSelectionShares: 9001 + Unit: mcvh + GiveMcvCrateAction@Ordos: + SelectionShares: 2 + NoBaseSelectionShares: 9001 + Unit: mcvo + GiveUnitCrateAction@Trike: SelectionShares: 7 Unit: trike - GiveUnitCrateAction@quad: + GiveUnitCrateAction@Quad: SelectionShares: 6 Unit: quad + GiveUnitCrateAction@Raider: + SelectionShares: 6 + Unit: raider + GiveUnitCrateAction@SiegeTank: + SelectionShares: 6 + Unit: siegetank + GiveUnitCrateAction@MissileTank: + SelectionShares: 6 + Unit: missiletank + GiveUnitCrateAction@CombatA: + SelectionShares: 5 + Unit: combata + GiveUnitCrateAction@CombatH: + SelectionShares: 5 + Unit: combath + GiveUnitCrateAction@CombatO: + SelectionShares: 5 + Unit: combato + GiveUnitCrateAction@Fremen: + SelectionShares: 4 + Unit: fremen + GiveUnitCrateAction@Sardaukar: + SelectionShares: 4 + Unit: sardaukar + GiveUnitCrateAction@Saboteur: + SelectionShares: 4 + Unit: saboteur + GiveUnitCrateAction@SonicTank: + SelectionShares: 3 + Unit: sonictank + GiveUnitCrateAction@Devast: + SelectionShares: 3 + Unit: devast + GiveUnitCrateAction@deviatortank: + SelectionShares: 3 + Unit: deviatortank RenderSimple: BelowUnits: ProximityCaptor: