diff --git a/mpq/arr/flingy.datex b/mpq/arr/flingy.datex index df7aefda..bb149ad8 100644 Binary files a/mpq/arr/flingy.datex and b/mpq/arr/flingy.datex differ diff --git a/mpq/arr/images.datex b/mpq/arr/images.datex index 9340e60a..12a3e711 100644 Binary files a/mpq/arr/images.datex and b/mpq/arr/images.datex differ diff --git a/mpq/arr/images.tbl b/mpq/arr/images.tbl index 578258be..a1ca6308 100644 Binary files a/mpq/arr/images.tbl and b/mpq/arr/images.tbl differ diff --git a/mpq/arr/images.txt b/mpq/arr/images.txt index 70e4a9fc..4c61b46f 100644 --- a/mpq/arr/images.txt +++ b/mpq/arr/images.txt @@ -2387,8 +2387,8 @@ Tortare Shadow Cybrene Cybrene Shadow Silversoul Remains -Extended Image #1387 -Extended Image #1388 +Alacyne Engine +Elgird Engine Extended Image #1389 Extended Image #1390 Extended Image #1391 diff --git a/mpq/arr/orders.datex b/mpq/arr/orders.datex index bf5b9fcd..48657279 100644 Binary files a/mpq/arr/orders.datex and b/mpq/arr/orders.datex differ diff --git a/mpq/arr/orders.txt b/mpq/arr/orders.txt index 64832c0e..880265aa 100644 --- a/mpq/arr/orders.txt +++ b/mpq/arr/orders.txt @@ -14,7 +14,7 @@ Use Ability (Rematerialize) Use Ability (Rapid Rendezvous) Attack Move Building Is Being Infested -Nothing 1 (Unused) +Use Ability (Ashbind) Power-Up (Unused) Guard (Building) Attack (Building) diff --git a/mpq/arr/sprites.datex b/mpq/arr/sprites.datex index 3c81e47f..aca22926 100644 Binary files a/mpq/arr/sprites.datex and b/mpq/arr/sprites.datex differ diff --git a/mpq/arr/techdata.datex b/mpq/arr/techdata.datex index aba1dd9b..a5e90acb 100644 Binary files a/mpq/arr/techdata.datex and b/mpq/arr/techdata.datex differ diff --git a/mpq/arr/techdata.txt b/mpq/arr/techdata.txt index d8423085..2b875df5 100644 --- a/mpq/arr/techdata.txt +++ b/mpq/arr/techdata.txt @@ -1,7 +1,7 @@ Stim Packs (Maverick) Lobotomy Grenade (Francisco Goska) Controlled Demolition (Terran) -Terran Mines (+ Proselyte) +Terran Mines and Askosi Wards Scanner Sweep (Comsat Station) Deployed Mode (Terran) Defensive Matrix (Azazel) @@ -13,13 +13,13 @@ Burrowing (Zerg) Rejoinder of Service (Serathiel) Ensnaring Brood (Matraleth) Carapace Swarm (Isthrathaleth) -Plague (Ogroszaleth) +Plague (Isthrathaleth) Remote Hijack (Askosi) Land Grab (Wyvern) Parasitic Excision (Matraleth) Psionic Storm (Cantavis) Hallucination (Cantavis) -Recall (Didact) +Dimensional Recall (Didact) Stasis Field (Didact) Rematerialize (Askosi) Preylock (Askosi) @@ -33,13 +33,13 @@ Maelstrom (Mind Tyrant) Lazarus Agent (Apostle) Select Swarm (Larva) Healing (Cleric) -Enthralling Assault (Akistrokor) +Blissful Embrace (Zerg) Hijack (Askosi) -Skyfall (Paladin) +Ashbind (Askosi) Select Assault (Larva) Emergency Detonation (Terran) Sublime Shepherd (Azazel) -Salvage (Talos) +Salvage (Askosi) Through the Looking Glass (Hypnagogue) None None diff --git a/mpq/arr/units.datex b/mpq/arr/units.datex index b29ee3eb..1c47b1d5 100644 Binary files a/mpq/arr/units.datex and b/mpq/arr/units.datex differ diff --git a/mpq/arr/weapons.datex b/mpq/arr/weapons.datex index d46a7914..22aafa60 100644 Binary files a/mpq/arr/weapons.datex and b/mpq/arr/weapons.datex differ diff --git a/mpq/datreq/Buttons.graft b/mpq/datreq/Buttons.graft index ee1f02d9..de9087d8 100644 Binary files a/mpq/datreq/Buttons.graft and b/mpq/datreq/Buttons.graft differ diff --git a/mpq/datreq/Orders.graft b/mpq/datreq/Orders.graft index e79046f9..be4965dc 100644 Binary files a/mpq/datreq/Orders.graft and b/mpq/datreq/Orders.graft differ diff --git a/mpq/datreq/Tech.graft b/mpq/datreq/Tech.graft index 353d5183..cbec6b94 100644 Binary files a/mpq/datreq/Tech.graft and b/mpq/datreq/Tech.graft differ diff --git a/mpq/datreq/Units.graft b/mpq/datreq/Units.graft index 17c67139..586c6026 100644 Binary files a/mpq/datreq/Units.graft and b/mpq/datreq/Units.graft differ diff --git a/mpq/game/icons.grp b/mpq/game/icons.grp index 447f8bad..15cbe720 100644 Binary files a/mpq/game/icons.grp and b/mpq/game/icons.grp differ diff --git a/mpq/rez/stat.txt b/mpq/rez/stat.txt index a857a670..685ee25b 100644 --- a/mpq/rez/stat.txt +++ b/mpq/rez/stat.txt @@ -355,7 +355,7 @@ e<3><4>Vision Module <1>(<3>E<1>)<10>Extends the structure skywards, providing + s<1><4>Morph into Protathalor <1>(<3>S<1>)<10>Mobile artillery strain.<0> <0> <0> -<0> +z<3><4>Ashbind <1>(<3>Z<1>)<10>Leaps to the target ground enemy within 5 range, applying Scrapworld: Ash Heap to all hostiles within 3 range of the jump target.<0> Puppeteer requires:<10> Recent victim<0> c<3><4>Puppeteer <1>(<3>C<1>)<10>Activates a trap on the most recently-damaged foe, pulling hostiles within 5 range towards the target.<0> ¤<3><4>Scrapworld: Gold Vein <2>(passive)<10>This structure salvages one corpse within 8 range every second, securing 25% of the corpses's resource cost.<0> diff --git a/mpq/scripts/iscript_askosi.bin b/mpq/scripts/iscript_askosi.bin index 6a34d5a5..b4d41f09 100644 Binary files a/mpq/scripts/iscript_askosi.bin and b/mpq/scripts/iscript_askosi.bin differ diff --git a/mpq/scripts/iscript_askosi.txt b/mpq/scripts/iscript_askosi.txt index f7946fc6..b1f51024 100644 --- a/mpq/scripts/iscript_askosi.txt +++ b/mpq/scripts/iscript_askosi.txt @@ -5729,6 +5729,285 @@ GhostwritWalking: wait 1 playfram 0x340 goto GhostwritWalking + +# ----------------------------------------------------------------------------- # +# This header is used by images.dat entries: +# 2178 Endbore (cm\a\endbore.grp) +.headerstart +IsId 66 +Type 21 +Init EndboreInit +Death EndboreDeath +GndAttkInit EndboreGndAttkInit +AirAttkInit EndboreGndAttkInit +Unused1 SkryrokorLocal00 +GndAttkRpt EndboreGndAttkInit +AirAttkRpt EndboreGndAttkInit +CastSpell [NONE] +GndAttkToIdle EndboreGndAttkToIdle +AirAttkToIdle EndboreGndAttkToIdle +Unused2 [NONE] +Walking EndboreWalking +WalkingToIdle EndboreLocal00 +SpecialState1 EndboreSpecialState1 +.headerend +# ----------------------------------------------------------------------------- # + +EndboreInit: + imgulnextid 0 42 # Endbore Shadow (cm\a\endbore.grp) +EndboreGndAttkToIdle: + playfram 0x00 +EndboreLocal00: + setvertpos 0 + wait 8 + setvertpos 0 + wait 8 + setvertpos -1 + wait 8 + setvertpos 0 + wait 8 + goto EndboreLocal00 + +EndboreDeath: + playsnd 177 # Terran\BATTLE\tbaDth00.wav + imgol 333 0 0 # Explosion2 (Medium) (thingy\tBangL.grp) + wait 3 + lowsprul 1065 0 42 # Askosi Unit Rubble (cm\a\a-rubble-tiny.grp) + wait 1 + end + +EndboreGndAttkInit: + setvertpos 0 + wait 1 + nobrkcodestart + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 3 + playfram 0x00 + attackwith 1 + imgol 2245 0 0 # Impact Dissipation (medium) + wait 1 + nobrkcodeend + gotorepeatattk + goto EndboreGndAttkToIdle + +EndboreWalking: + setvertpos 0 +# imgol 225 0 5 # Endbore Engines (thingy\tdrGlow.grp) + goto SkryrokorLocal00 + +EndboreSpecialState1: + playfram 0x00 + wait 12 + goto SkryrokorLocal00 + +# ----------------------------------------------------------------------------- # +# This header is used by images.dat entries: +# 2389 Alacyne (cm\a\alacyne.grp) +.headerstart +IsId 67 +Type 13 +Init AlacyneInit +Death AlacyneDeath +GndAttkInit AlacyneGndAttkInit +AirAttkInit AlacyneGndAttkInit +Unused1 AlacyneUnused1 +GndAttkRpt AlacyneGndAttkInit +AirAttkRpt AlacyneGndAttkInit +CastSpell [NONE] +GndAttkToIdle AlacyneGndAttkToIdle +AirAttkToIdle AlacyneGndAttkToIdle +Unused2 [NONE] +Walking AlacyneWalking +WalkingToIdle AlacyneGndAttkToIdle +SpecialState1 [NONE] +.headerend +# ----------------------------------------------------------------------------- # + +AlacyneInit: + imgulnextid 0 7 # Alacyne Shadow (cm\a\alacyne.grp) + playfram 0x00 + goto AlacyneGndAttkToIdle + +AlacyneGndAttkToIdle: + setvertpos 0 + wait 8 + setvertpos 0 + wait 8 + setvertpos -1 + wait 8 + setvertpos 0 + wait 8 + goto AlacyneGndAttkToIdle + +AlacyneDeath: + playsnd 353 # Terran\Alacyne\TVuDth00.WAV + imgol 332 0 0 # Explosion2 (Small) (thingy\tBangS.grp) + wait 3 + lowsprul 1065 0 0 # Askosi Unit Rubble (cm\a\a-rubble-tiny.grp) + end + +AlacyneUnused1: + wait 1 + nobrkcodestart + tmprmgraphicstart + playsnd 1699 # Alacyne revive 01 + sprol 742 0 0 + wait 10 + setfldirect 12 + tmprmgraphicend + nobrkcodeend + goto AlacyneGndAttkToIdle + +AlacyneGndAttkInit: + wait 1 + nobrkcodestart + wait 1 + playfram 0x20 + attackwith 1 + attackwith 1 + attackwith 1 + attackwith 1 + attackwith 1 + attackwith 1 + wait 1 + playfram 0x00 + nobrkcodeend + gotorepeatattk + goto AlacyneGndAttkToIdle + +AlacyneWalking: + playfram 0x00 + setvertpos 0 + imgol 2303 0 0 # Alacyne Engine + goto SkryrokorLocal00 + +# ----------------------------------------------------------------------------- # +# This header is used by images.dat entries: +# 2370 Elgird (cm\a\elgird.grp) +.headerstart +IsId 68 +Type 13 +Init ElgirdInit +Death ElgirdDeath +GndAttkInit ElgirdGndAttkInit +AirAttkInit ElgirdGndAttkInit +Unused1 ElgirdUnused1 +GndAttkRpt ElgirdGndAttkInit +AirAttkRpt ElgirdGndAttkInit +CastSpell [NONE] +GndAttkToIdle ElgirdGndAttkToIdle +AirAttkToIdle ElgirdGndAttkToIdle +Unused2 [NONE] +Walking ElgirdWalking +WalkingToIdle ElgirdGndAttkToIdle +SpecialState1 [NONE] +.headerend +# ----------------------------------------------------------------------------- # + +ElgirdInit: + imgulnextid 0 7 # Elgird Shadow (cm\a\elgird.grp) + playfram 0x00 + goto ElgirdGndAttkToIdle + +ElgirdGndAttkToIdle: + setvertpos 0 + wait 8 + setvertpos 0 + wait 8 + setvertpos -1 + wait 8 + setvertpos 0 + wait 8 + goto ElgirdGndAttkToIdle + +ElgirdDeath: + playsnd 353 # Terran\Elgird\TVuDth00.WAV + imgol 332 0 0 # Explosion2 (Small) (thingy\tBangS.grp) + wait 3 + lowsprul 1065 0 0 # Askosi Unit Rubble (cm\a\a-rubble-tiny.grp) + end + +ElgirdUnused1: + wait 1 + nobrkcodestart + tmprmgraphicstart + playsnd 1699 # Elgird revive 01 + sprol 742 0 0 + wait 10 + setfldirect 12 + tmprmgraphicend + nobrkcodeend + goto ElgirdGndAttkToIdle + +ElgirdGndAttkInit: + wait 1 + nobrkcodestart + wait 1 + playfram 0x20 + attackwith 1 + wait 1 + playfram 0x00 + wait 3 + playfram 0x20 + attackwith 1 + wait 1 + playfram 0x00 + wait 3 + playfram 0x20 + attackwith 1 + wait 1 + playfram 0x00 + nobrkcodeend + gotorepeatattk + goto ElgirdGndAttkToIdle + +ElgirdWalking: + playfram 0x00 + setvertpos 0 + imgol 2303 0 0 # Elgird Engine + goto SkryrokorLocal00 # ----------------------------------------------------------------------------- # # This header is used by images.dat entries: diff --git a/mpq/unit/cm/a/alacyne-engine.grp b/mpq/unit/cm/a/alacyne-engine.grp new file mode 100644 index 00000000..3cc44546 Binary files /dev/null and b/mpq/unit/cm/a/alacyne-engine.grp differ diff --git a/mpq/unit/cm/a/alacyne.grp b/mpq/unit/cm/a/alacyne.grp new file mode 100644 index 00000000..19746db6 Binary files /dev/null and b/mpq/unit/cm/a/alacyne.grp differ diff --git a/mpq/unit/cm/a/elgird-engine.grp b/mpq/unit/cm/a/elgird-engine.grp new file mode 100644 index 00000000..f5a4bea8 Binary files /dev/null and b/mpq/unit/cm/a/elgird-engine.grp differ diff --git a/mpq/unit/cm/a/elgird.grp b/mpq/unit/cm/a/elgird.grp new file mode 100644 index 00000000..c9062559 Binary files /dev/null and b/mpq/unit/cm/a/elgird.grp differ diff --git a/mpq/unit/cmdbtns/cmdicons.grp b/mpq/unit/cmdbtns/cmdicons.grp index 25d88d69..ab39db6a 100644 Binary files a/mpq/unit/cmdbtns/cmdicons.grp and b/mpq/unit/cmdbtns/cmdicons.grp differ diff --git a/mpq/unit/cmdbtns/uniticons.grp b/mpq/unit/cmdbtns/uniticons.grp index 49e35fa8..2692027a 100644 Binary files a/mpq/unit/cmdbtns/uniticons.grp and b/mpq/unit/cmdbtns/uniticons.grp differ diff --git a/patchnotes.md b/patchnotes.md index d4a801e6..3e641372 100644 --- a/patchnotes.md +++ b/patchnotes.md @@ -1,5 +1,5 @@ -# 9 March 2026 -## Year 4, month 3, patch 1 +# 23 March 2026 +## Year 4, month 3, patch 2 ## Patch goals - Continue balancing for all races @@ -10,6 +10,16 @@ ### *Notes in italics are from Pr0nogo* +# Editor achievements +- **Map-specific aiscripts** (c. DF) + - Documentation forthcoming. +- **Custom resource areas:** (c. DF) + - You can now override default resource areas via this tech from DF! Instructions are below. + - Draw locations around resources. + - Name the locations `RESAREA_#`, where `#` is a number between `1` and `249`. + - You can use multiple locations with the same name for the same resarea id. + - When using multiple locations, append `+` at the end of the location you intend to use for the resarea's center. If not appended, the game will choose the earliest-created location as the center. + # Core changes ## Game Modes @@ -44,6 +54,17 @@ - [Starpad](https://www.fraudsclub.com/cosmonarchy-bw/show.php?target=terran/starpad): - Vision range 10 » 9 +## Zerg +- [Almaksalisk](https://www.fraudsclub.com/cosmonarchy-bw/show.php?target=zerg/almaksalisk): + - Resource costs 150/125 » 150/100 + - **Piercing Spines:** + - Armor penetration 3 » 4 + - Cooldown 0.83 » 0.75 +- [Alkag Iteth](https://www.fraudsclub.com/cosmonarchy-bw/show.php?target=zerg/alkag-iteth): + - Resource costs 300/150 » 250/150 +- [Chokral Chazsal](https://www.fraudsclub.com/cosmonarchy-bw/show.php?target=zerg/chokral-chazsal): + - Resource costs 750/400 » 750/500 + ## Askosi - **Rematerialize:** - *Used by: Eyelet (Proselyte), Vicar, Emissary* diff --git a/plugins/gptp.qdp b/plugins/gptp.qdp index 5c1b13ab..4597b53f 100644 Binary files a/plugins/gptp.qdp and b/plugins/gptp.qdp differ