From 1e45a9899b7bc2aae8f7f31be16fafb21ede6d4b Mon Sep 17 00:00:00 2001 From: Scott_NZ Date: Thu, 4 Apr 2013 21:02:43 +1300 Subject: [PATCH] Shellmap: Add Viewport movement, coastal attacks and so forth --- .../Missions/DesertShellmapScript.cs | 72 ++++-- mods/ra/maps/desert-shellmap/map.bin | Bin 81925 -> 81925 bytes mods/ra/maps/desert-shellmap/map.yaml | 214 ++++++++++++++++-- 3 files changed, 255 insertions(+), 31 deletions(-) diff --git a/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs b/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs index 5882a0ae6f..850aa811e2 100644 --- a/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs +++ b/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Linq; +using OpenRA.Mods.RA.Move; using OpenRA.Traits; namespace OpenRA.Mods.RA.Missions @@ -30,18 +31,46 @@ namespace OpenRA.Mods.RA.Missions float div = 400; int waitTicks = 0; + Actor attackLocation; + Actor coastRP1; + Actor coastRP2; + int coastUnitsLeft; + static readonly string[] CoastUnits = { "e1", "e1", "e2", "e3", "e4" }; + + Actor paradropLocation; + static readonly string[] ParadropUnits = { "e1", "e1", "e1", "e2", "e2" }; + public void Tick(Actor self) { - if (--waitTicks > 0) - return; - if (++mul <= div) - Game.MoveViewport(float2.Lerp(viewportOrigin, viewportTarget, mul / div)); - else + MissionUtils.CapOre(soviets); + if (world.FrameNumber % 20 == 0 && coastUnitsLeft-- > 0) { - mul = 0; - viewportOrigin = viewportTarget; - viewportTarget = viewportTargets[(viewportTargetNumber = (viewportTargetNumber + 1) % viewportTargets.Count)]; - waitTicks = 100; + var u = world.CreateActor(CoastUnits.Random(world.SharedRandom), soviets, coastRP1.Location, null); + u.QueueActivity(new Move.Move(coastRP2.Location, 0)); + u.QueueActivity(new AttackMove.AttackMoveActivity(u, new Move.Move(attackLocation.Location, 0))); + } + + if (world.FrameNumber % 25 == 0) + foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.Owner == soviets && a.IsIdle && !a.IsDead() + && a.HasTrait() && a.HasTrait())) + actor.QueueActivity(new AttackMove.AttackMoveActivity(actor, new Move.Move(attackLocation.Location))); + + if (--waitTicks <= 0) + { + if (++mul <= div) + Game.MoveViewport(float2.Lerp(viewportOrigin, viewportTarget, mul / div)); + else + { + mul = 0; + viewportOrigin = viewportTarget; + viewportTarget = viewportTargets[(viewportTargetNumber = (viewportTargetNumber + 1) % viewportTargets.Count)]; + waitTicks = 100; + + if (viewportTargetNumber == 0) + coastUnitsLeft = 15; + if (viewportTargetNumber == 2) + MissionUtils.Paradrop(world, soviets, ParadropUnits, world.ChooseRandomEdgeCell(), paradropLocation.Location); + } } } @@ -54,18 +83,33 @@ namespace OpenRA.Mods.RA.Missions var actors = w.WorldActor.Trait().Actors; - for (var i = 1; i <= 5; i++) - viewportTargets.Add(actors["ViewportTarget" + i].Location.ToInt2()); + attackLocation = actors["AttackLocation"]; + coastRP1 = actors["CoastRP1"]; + coastRP2 = actors["CoastRP2"]; + paradropLocation = actors["ParadropLocation"]; - AutoTarget at = null; - foreach (var actor in actors.Values.Where(a => a.Owner == allies && (at = a.TraitOrDefault()) != null)) - at.stance = UnitStance.Defend; + var t1 = actors["ViewportTarget1"]; + var t2 = actors["ViewportTarget2"]; + var t3 = actors["ViewportTarget3"]; + var t4 = actors["ViewportTarget4"]; + var t5 = actors["ViewportTarget5"]; + viewportTargets = new[] { t1, t2, t3, t4, t5 }.Select(t => t.Location.ToInt2()).ToList(); + + foreach (var actor in actors.Values.Where(a => a.Owner == allies || a.HasTrait())) + { + if (actor.Owner == allies && actor.HasTrait()) + actor.Trait().stance = UnitStance.Defend; + actor.AddTrait(new Invulnerable()); + } viewportOrigin = viewportTargets[0]; viewportTargetNumber = 1; viewportTarget = viewportTargets[1]; Game.viewport.Center(viewportOrigin); Sound.SoundVolumeModifier = 0.25f; + + world.RenderedPlayer = allies; + world.RenderedShroud.Jank(); } } } diff --git a/mods/ra/maps/desert-shellmap/map.bin b/mods/ra/maps/desert-shellmap/map.bin index 233b1995eacc1287f39414652f49d2200bc84c86..670c688fcb44b889fc6eb9e626881087cb716359 100644 GIT binary patch delta 1453 zcmYjRT}V@57=GS!w&`poO2)t#{Y-~LDU!sntQ$k>s)AtPO+g?8-bzB?jW;eZB6!UiWwX zY-JY6LZ1WXpsfLG(9Ei{_bG4~&w{dW&4K2iuYuN}n=gYM6q*HQp&gE9<`d;Adjr^jmH{$MPr)U9ebeq+Wvh0^G*tyLRt^ zpTh6!4rCmah-03~Q5CV39J}fGDExup0;kBhz{*mS;|f-kHYeJBMK#3>4N>Oy8~6<} zA|Knmwt5no{K#D_7%mj!W~ZPG7yG14rVJOFRC8sx*ym<3hZx1!{&Lyrdg!Zy#WTi( zDS=hjV^a(lG}-=kiT8C{9Qxi;6r}SlShY`9Lz)%7djFS^Y+dPf`qf5mRONGCEXvim;L z!5<<9bmQLEZkfh&O?^4O>mxhHAQy1F6daSEM31UmB3VJF*SD%@&#S^xWL9LaSDUA@ H56k}p@ad*? delta 1500 zcmYk6%WG3n5XR5Bw@K5OrdX*IgrYVWEK0?qRMe^qMRel>gg{qBfB-Sk^Go-ZlbVWF7=S)FgVrHewx0G3&nt%&v`K0B zz>(OYETiYFKd)u^a^7MVQIgRMe{Vd=8M z2z&W;+15rShOh`1ZHn0k2b>C40^TVTq2?aF!k2W$(+X7@q?#-1e` zvl}$Ys|!oF_hSH+&-H&~Ao~E!9Tr0u`n4$YKnqQk`$%i8LM$ zH#_CS*C#t@ss^O`)L@+C!-;1K6T*IGu-^3W_4&4_t2>eEi|x%mfB8W|LGZZ%6cZgb@*Dm2szB4G_41?O}4E zkC2a0mioeo-)%ziTEn6OU4pnqDp(zzbRAa3SJqkWN!*#q+IKtsUSl8>?=lGjUOBL7 zM^ld82)ihBr!P