From 8fa1fc23455ac65cb7bc429e41a6b83c2c3f25e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 15 Apr 2013 12:59:08 +0200 Subject: [PATCH 1/8] mapped DATA.R8 completely, fixes #2341 d2k is now completely independened from RA MIX/SHP files --- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 303 +++++++++-- mods/d2k/bits/clock.shp | Bin 0 -> 7334 bytes mods/d2k/bits/levelup.shp | Bin 0 -> 5280 bytes mods/d2k/bits/nopower.shp | Bin 0 -> 2410 bytes mods/d2k/bits/rank.shp | Bin 0 -> 654 bytes mods/d2k/bits/speed.shp | Bin 0 -> 1945 bytes mods/d2k/mod.yaml | 14 +- mods/d2k/rules/aircraft.yaml | 3 +- mods/d2k/rules/structures.yaml | 11 +- mods/d2k/rules/system.yaml | 24 +- mods/d2k/sequences.yaml | 503 +++++++----------- mods/d2k/weapons.yaml | 38 +- 12 files changed, 491 insertions(+), 405 deletions(-) create mode 100644 mods/d2k/bits/clock.shp create mode 100644 mods/d2k/bits/levelup.shp create mode 100644 mods/d2k/bits/nopower.shp create mode 100644 mods/d2k/bits/rank.shp create mode 100644 mods/d2k/bits/speed.shp diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index 0ba7f6e108..63ec8a7ad4 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -65,26 +65,41 @@ namespace OpenRA.Mods.D2k.Widgets.Logic { new string[] {"--r8", PathToDataR8, PathToPalette, "0", "2", Path.Combine(PathToSHPs, "overlay")}, new string[] {"--r8", PathToDataR8, PathToPalette, "3", "3", Path.Combine(PathToSHPs, "repairing")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4", "4", Path.Combine(PathToSHPs, "black")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "5", "8", Path.Combine(PathToSHPs, "selectionedges")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "9", "9", Path.Combine(PathToSHPs, "bar1")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "10", "10", Path.Combine(PathToSHPs, "bar2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "11", "11", Path.Combine(PathToSHPs, "bar3")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "12", "12", Path.Combine(PathToSHPs, "bar4")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "13", "13", Path.Combine(PathToSHPs, "bar5")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "14", "14", Path.Combine(PathToSHPs, "bar6")}, new string[] {"--r8", PathToDataR8, PathToPalette, "15", "16", Path.Combine(PathToSHPs, "dots")}, new string[] {"--r8", PathToDataR8, PathToPalette, "17", "26", Path.Combine(PathToSHPs, "numbers")}, - //new string[] {"--r8", PathToDataR8, PathToPalette, "40", "101", Path.Combine(PathToSHPs, "shadow")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "27", "37", Path.Combine(PathToSHPs, "credits")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "40", "101", Path.Combine(PathToSHPs, "d2kshadow")}, new string[] {"--r8", PathToDataR8, PathToPalette, "102", "105", Path.Combine(PathToSHPs, "crates")}, new string[] {"--r8", PathToDataR8, PathToPalette, "107", "109", Path.Combine(PathToSHPs, "spicebloom")}, new string[] {"--r8", PathToDataR8, PathToPalette, "110", "111", Path.Combine(PathToSHPs, "stars")}, - new string[] {"--r8", PathToDataR8, PathToPalette, "112", "112", Path.Combine(PathToSHPs, "greenuparrow")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "112", "113", Path.Combine(PathToSHPs, "greenuparrow")}, new string[] {"--r8", PathToDataR8, PathToPalette, "114", "129", Path.Combine(PathToSHPs, "rockcrater1")}, new string[] {"--r8", PathToDataR8, PathToPalette, "130", "145", Path.Combine(PathToSHPs, "rockcrater2")}, new string[] {"--r8", PathToDataR8, PathToPalette, "146", "161", Path.Combine(PathToSHPs, "sandcrater1")}, new string[] {"--r8", PathToDataR8, PathToPalette, "162", "177", Path.Combine(PathToSHPs, "sandcrater2")}, - // ? + new string[] {"--r8", PathToDataR8, PathToPalette, "178", "193", Path.Combine(PathToSHPs, "unknown")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "194", "205", Path.Combine(PathToSHPs, "unknown2")}, 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, "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"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "458", "633", Path.Combine(PathToSHPs, "bazooka"), "--infantry"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "634", "693", Path.Combine(PathToSHPs, "bazookadeath"), "--infantrydeath"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "694", "869", Path.Combine(PathToSHPs, "fremen"), "--infantry"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "870", "929", Path.Combine(PathToSHPs, "fremendeath"), "--infantrydeath"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "930", "1105", Path.Combine(PathToSHPs, "sardaukar"), "--infantry"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "1106", "1165", Path.Combine(PathToSHPs, "sardaukardeath"), "--infantrydeath"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "1166", "1341", 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, "1402", "1457", Path.Combine(PathToSHPs, "thumper"), "--infantry"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "1458", "1462", Path.Combine(PathToSHPs, "thumping"), "--infantrydeath"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "1463", "1542", Path.Combine(PathToSHPs, "thumper2"), "--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"}, @@ -102,8 +117,7 @@ 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"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "2149", "2324", Path.Combine(PathToSHPs, "saboteur"), "--infantry"}, new string[] {"--r8", PathToDataR8, PathToPalette, "2325", "2388", Path.Combine(PathToSHPs, "saboteurdeath"), "--infantrydeath"}, new string[] {"--r8", PathToDataR8, PathToPalette, "2389", "2420", Path.Combine(PathToSHPs, "deviatortank"), "--vehicle"}, new string[] {"--r8", PathToDataR8, PathToPalette, "2421", "2452", Path.Combine(PathToSHPs, "raider"), "--vehicle"}, @@ -168,19 +182,69 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--r8", PathToDataR8, PathToPalette, "2999", "3000", Path.Combine(PathToSHPs, "starportc"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "3001", "3003", Path.Combine(PathToSHPs, "heavyc"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "3004", "3005", Path.Combine(PathToSHPs, "palacec"), "--building"}, - //conyardc repetition + new string[] {"--r8", PathToDataR8, PathToPalette, "3006", "3007", Path.Combine(PathToSHPs, "conyardh2"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "3008", "3013", Path.Combine(PathToSHPs, "plates")}, - //projectiles + new string[] {"--r8", PathToDataR8, PathToPalette, "3014", "3014", Path.Combine(PathToSHPs, "unknown3"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3015", "3078", Path.Combine(PathToSHPs, "rpg"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3079", "3087", Path.Combine(PathToSHPs, "unknown4"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3088", "3247", Path.Combine(PathToSHPs, "missile"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3248", "3279", Path.Combine(PathToSHPs, "doubleblast"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3280", "3283", Path.Combine(PathToSHPs, "bombs"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3284", "3287", Path.Combine(PathToSHPs, "unknown6"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3288", "3289", Path.Combine(PathToSHPs, "unknown7"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3290", "3303", Path.Combine(PathToSHPs, "unknown8"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3304", "3305", Path.Combine(PathToSHPs, "unknown9"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3306", "3369", Path.Combine(PathToSHPs, "missile2"), "--projectile"}, new string[] {"--r8", PathToDataR8, PathToPalette, "3370", "3380", Path.Combine(PathToSHPs, "unload"), "--projectile"}, - //explosions - new string[] {"--r8", PathToDataR8, PathToPalette, "3549", "3564", Path.Combine(PathToSHPs, "wormjaw")}, - new string[] {"--r8", PathToDataR8, PathToPalette, "3565", "3585", Path.Combine(PathToSHPs, "wormdust")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3381", "3385", Path.Combine(PathToSHPs, "harvest"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3386", "3389", Path.Combine(PathToSHPs, "miniboom"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3390", "3402", Path.Combine(PathToSHPs, "mediboom"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3403", "3417", Path.Combine(PathToSHPs, "mediboom2"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3418", "3420", Path.Combine(PathToSHPs, "minifire"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3421", "3428", Path.Combine(PathToSHPs, "miniboom2"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3429", "3432", Path.Combine(PathToSHPs, "minibooms"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3433", "3447", Path.Combine(PathToSHPs, "bigboom"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3448", "3470", Path.Combine(PathToSHPs, "bigboom2"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3471", "3493", Path.Combine(PathToSHPs, "bigboom3"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3494", "3501", Path.Combine(PathToSHPs, "unknown10"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3502", "3509", Path.Combine(PathToSHPs, "unknown11"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3510", "3511", Path.Combine(PathToSHPs, "unknown12"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3512", "3530", Path.Combine(PathToSHPs, "movingsand"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3531", "3534", Path.Combine(PathToSHPs, "unknown13"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3535", "3539", Path.Combine(PathToSHPs, "unknown14"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3540", "3543", Path.Combine(PathToSHPs, "unknown15"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3544", "3548", Path.Combine(PathToSHPs, "unknown16"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3549", "3564", Path.Combine(PathToSHPs, "wormjaw"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3565", "3585", Path.Combine(PathToSHPs, "wormdust"), "--projectile"}, new string[] {"--r8", PathToDataR8, PathToPalette, "3586", "3600", Path.Combine(PathToSHPs, "wormsigns1")}, new string[] {"--r8", PathToDataR8, PathToPalette, "3601", "3610", Path.Combine(PathToSHPs, "wormsigns2")}, new string[] {"--r8", PathToDataR8, PathToPalette, "3611", "3615", Path.Combine(PathToSHPs, "wormsigns3")}, new string[] {"--r8", PathToDataR8, PathToPalette, "3616", "3620", Path.Combine(PathToSHPs, "wormsigns4")}, - //new string[] {"--r8", PathToDataR8, PathToPalette, "3679", "3686", "sell"}, - //explosions and muzzle flash + new string[] {"--r8", PathToDataR8, PathToPalette, "3621", "3625", Path.Combine(PathToSHPs, "rings"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3626", "3630", Path.Combine(PathToSHPs, "minipiff"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3631", "3678", Path.Combine(PathToSHPs, "movingsand2"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3679", "3686", Path.Combine(PathToSHPs, "selling"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3687", "3693", Path.Combine(PathToSHPs, "shockwave"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3694", "3711", Path.Combine(PathToSHPs, "electroplosion"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3712", "3722", Path.Combine(PathToSHPs, "fire"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3723", "3734", Path.Combine(PathToSHPs, "fire2"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3735", "3738", Path.Combine(PathToSHPs, "unknown21"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3739", "3742", Path.Combine(PathToSHPs, "unknown22"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3743", "3774", Path.Combine(PathToSHPs, "doublemuzzle"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3775", "3806", Path.Combine(PathToSHPs, "muzzle"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3807", "3838", Path.Combine(PathToSHPs, "doubleblastmuzzle"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3839", "3870", Path.Combine(PathToSHPs, "minimuzzle"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3871", "3872", Path.Combine(PathToSHPs, "unknown17"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3873", "3875", Path.Combine(PathToSHPs, "unknown18"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3876", "3876", Path.Combine(PathToSHPs, "unknown19"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3877", "3884", Path.Combine(PathToSHPs, "burst"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3885", "3898", Path.Combine(PathToSHPs, "fire3"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3899", "3910", Path.Combine(PathToSHPs, "energy"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3911", "3946", Path.Combine(PathToSHPs, "reveal"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3947", "3964", Path.Combine(PathToSHPs, "orbit"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3965", "3979", Path.Combine(PathToSHPs, "mushroomcloud"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3980", "3987", Path.Combine(PathToSHPs, "mediboom3"), "--projectile"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "3988", "4010", Path.Combine(PathToSHPs, "largeboom"), "--projectile"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4011", "4011", Path.Combine(PathToSHPs, "rifleicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4012", "4012", Path.Combine(PathToSHPs, "bazookaicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4013", "4013", Path.Combine(PathToSHPs, "engineericon")}, @@ -189,7 +253,7 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--r8", PathToDataR8, PathToPalette, "4016", "4016", Path.Combine(PathToSHPs, "trikeicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4017", "4017", Path.Combine(PathToSHPs, "raidericon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4018", "4018", Path.Combine(PathToSHPs, "quadicon")}, - new string[] {"--r8", PathToDataR8, PathToPalette, "4019", "4019", Path.Combine(PathToSHPs, "harvestericon")}, // == 4044 + new string[] {"--r8", PathToDataR8, PathToPalette, "4019", "4019", Path.Combine(PathToSHPs, "harvestericon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4020", "4020", Path.Combine(PathToSHPs, "combataicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4021", "4021", Path.Combine(PathToSHPs, "combathicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4022", "4022", Path.Combine(PathToSHPs, "combatoicon")}, @@ -199,33 +263,55 @@ namespace OpenRA.Mods.D2k.Widgets.Logic 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 - new string[] {"--r8", PathToDataR8, PathToPalette, "4032", "4032", Path.Combine(PathToSHPs, "fremenicon")}, // == 4033 + new string[] {"--r8", PathToDataR8, PathToPalette, "4029", "4029", Path.Combine(PathToSHPs, "carryallicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4030", "4030", Path.Combine(PathToSHPs, "carryallicon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4031", "4031", Path.Combine(PathToSHPs, "orniicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4032", "4032", Path.Combine(PathToSHPs, "fremenicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4033", "4033", Path.Combine(PathToSHPs, "fremenicon2")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4034", "4034", Path.Combine(PathToSHPs, "saboteuricon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4035", "4035", Path.Combine(PathToSHPs, "deathhandicon")}, - // "4036..4045 = repetitions - new string[] {"--r8", PathToDataR8, PathToPalette, "4046", "4046", Path.Combine(PathToSHPs, "conyardaicon")}, // == 4049 + new string[] {"--r8", PathToDataR8, PathToPalette, "4036", "4036", Path.Combine(PathToSHPs, "rifleicon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4037", "4037", Path.Combine(PathToSHPs, "bazookaicon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4038", "4038", Path.Combine(PathToSHPs, "engineericon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4039", "4039", Path.Combine(PathToSHPs, "thumpericon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4040", "4040", Path.Combine(PathToSHPs, "sardaukaricon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4041", "4041", Path.Combine(PathToSHPs, "trikeicon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4042", "4042", Path.Combine(PathToSHPs, "raidericon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4043", "4043", Path.Combine(PathToSHPs, "quadicon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4044", "4044", Path.Combine(PathToSHPs, "harvestericon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4045", "4045", Path.Combine(PathToSHPs, "combataicon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4046", "4046", Path.Combine(PathToSHPs, "conyardaicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4047", "4047", Path.Combine(PathToSHPs, "conyardhicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4048", "4048", Path.Combine(PathToSHPs, "conyardoicon")}, - new string[] {"--r8", PathToDataR8, PathToPalette, "4050", "4050", Path.Combine(PathToSHPs, "4plateicon")}, // == 4051..4052 - new string[] {"--r8", PathToDataR8, PathToPalette, "4053", "4053", Path.Combine(PathToSHPs, "6plateicon")}, // == 4054..4055 + new string[] {"--r8", PathToDataR8, PathToPalette, "4049", "4049", Path.Combine(PathToSHPs, "conyardaicon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4050", "4050", Path.Combine(PathToSHPs, "4plateaicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4051", "4051", Path.Combine(PathToSHPs, "4platehicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4052", "4052", Path.Combine(PathToSHPs, "4plateoicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4053", "4053", Path.Combine(PathToSHPs, "6plateaicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4054", "4054", Path.Combine(PathToSHPs, "6platehicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4055", "4055", Path.Combine(PathToSHPs, "6plateoicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4056", "4056", Path.Combine(PathToSHPs, "pwraicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4057", "4057", Path.Combine(PathToSHPs, "pwrhicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4058", "4058", Path.Combine(PathToSHPs, "pwroicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4059", "4059", Path.Combine(PathToSHPs, "barraicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4060", "4060", Path.Combine(PathToSHPs, "barrhicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4061", "4061", Path.Combine(PathToSHPs, "barroicon")}, - new string[] {"--r8", PathToDataR8, PathToPalette, "4063", "4063", Path.Combine(PathToSHPs, "wallicon")}, // == 4061..4062 + new string[] {"--r8", PathToDataR8, PathToPalette, "4062", "4062", Path.Combine(PathToSHPs, "orniicon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4063", "4063", Path.Combine(PathToSHPs, "wallaicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4064", "4064", Path.Combine(PathToSHPs, "wallhicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4065", "4065", Path.Combine(PathToSHPs, "walloicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4066", "4066", Path.Combine(PathToSHPs, "refaicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4067", "4067", Path.Combine(PathToSHPs, "refhicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4068", "4068", Path.Combine(PathToSHPs, "refoicon")}, - new string[] {"--r8", PathToDataR8, PathToPalette, "4069", "4069", Path.Combine(PathToSHPs, "turreticon")}, // == 4070..4071 - new string[] {"--r8", PathToDataR8, PathToPalette, "4072", "4072", Path.Combine(PathToSHPs, "radaraicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4069", "4069", Path.Combine(PathToSHPs, "guntoweraicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4070", "4070", Path.Combine(PathToSHPs, "guntowerhicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4071", "4071", Path.Combine(PathToSHPs, "guntoweroicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4072", "4072", Path.Combine(PathToSHPs, "radaraicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4073", "4073", Path.Combine(PathToSHPs, "radarhicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4074", "4074", Path.Combine(PathToSHPs, "radaroicon")}, - new string[] {"--r8", PathToDataR8, PathToPalette, "4075", "4075", Path.Combine(PathToSHPs, "rturreticon")}, // == 4076..4077 + new string[] {"--r8", PathToDataR8, PathToPalette, "4075", "4075", Path.Combine(PathToSHPs, "rockettoweraicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4076", "4076", Path.Combine(PathToSHPs, "rockettowerhicon")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4077", "4077", Path.Combine(PathToSHPs, "rockettoweroicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4078", "4078", Path.Combine(PathToSHPs, "hightechaicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4079", "4079", Path.Combine(PathToSHPs, "hightechhicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4080", "4080", Path.Combine(PathToSHPs, "hightechoicon")}, @@ -238,12 +324,12 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--r8", PathToDataR8, PathToPalette, "4087", "4087", Path.Combine(PathToSHPs, "heavyaicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4088", "4088", Path.Combine(PathToSHPs, "heavyhicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4089", "4089", Path.Combine(PathToSHPs, "heavyoicon")}, - // 4090 == orniicon - // 4091 == heavyhicon + new string[] {"--r8", PathToDataR8, PathToPalette, "4090", "4090", Path.Combine(PathToSHPs, "orniicon3")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4091", "4091", Path.Combine(PathToSHPs, "heavyhicon2")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4092", "4092", Path.Combine(PathToSHPs, "starportaicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4093", "4093", Path.Combine(PathToSHPs, "starporthicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4094", "4094", Path.Combine(PathToSHPs, "starportoicon")}, - // 4095 = orniicon + new string[] {"--r8", PathToDataR8, PathToPalette, "4095", "4095", Path.Combine(PathToSHPs, "orniicon4")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4096", "4096", Path.Combine(PathToSHPs, "repairaicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4097", "4097", Path.Combine(PathToSHPs, "repairhicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4098", "4098", Path.Combine(PathToSHPs, "repairoicon")}, @@ -253,12 +339,15 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--r8", PathToDataR8, PathToPalette, "4102", "4102", Path.Combine(PathToSHPs, "palaceaicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4103", "4103", Path.Combine(PathToSHPs, "palacehicon")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4104", "4104", Path.Combine(PathToSHPs, "palaceoicon")}, - // 4105 = orniicon - // 4106..4107 = radaraicon - // 4108 = conyardaicon + new string[] {"--r8", PathToDataR8, PathToPalette, "4105", "4105", Path.Combine(PathToSHPs, "orniicon5")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4106", "4106", Path.Combine(PathToSHPs, "radaraicon2")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4107", "4107", Path.Combine(PathToSHPs, "radaraicon3")}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4108", "4108", Path.Combine(PathToSHPs, "conyardaicon3")}, new string[] {"--r8", PathToDataR8, PathToPalette, "4109", "4150", Path.Combine(PathToSHPs, "conmake"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4151", "4174", Path.Combine(PathToSHPs, "wtrpmake"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4175", "4194", Path.Combine(PathToSHPs, "barramake"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4195", "4212", Path.Combine(PathToSHPs, "barrhmake"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4213", "4230", Path.Combine(PathToSHPs, "barromake"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4231", "4253", Path.Combine(PathToSHPs, "refmake"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4254", "4273", Path.Combine(PathToSHPs, "radarmake"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4274", "4294", Path.Combine(PathToSHPs, "highmake"), "--building"}, @@ -271,9 +360,21 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--r8", PathToDataR8, PathToPalette, "4413", "4435", Path.Combine(PathToSHPs, "palacemake"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4436", "4449", Path.Combine(PathToSHPs, "cranea"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4450", "4463", Path.Combine(PathToSHPs, "craneh"), "--building"}, - new string[] {"--r8", PathToDataR8, PathToPalette, "4463", "4477", Path.Combine(PathToSHPs, "craneo"), "--building"}, - new string[] {"--r8", PathToDataR8, PathToPalette, "4760", "4819", Path.Combine(PathToSHPs, "windtrap_anim"), "--building"}, //? - new string[] {"--r8", PathToDataR8, PathToPalette, "4820", "4840", Path.Combine(PathToSHPs, "missile_launch"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4464", "4477", Path.Combine(PathToSHPs, "craneo"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4478", "4491", Path.Combine(PathToSHPs, "cranea2"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4492", "4501", Path.Combine(PathToSHPs, "windtrapa"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4502", "4511", Path.Combine(PathToSHPs, "windtraph"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4512", "4521", Path.Combine(PathToSHPs, "windtrapo"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4522", "4552", Path.Combine(PathToSHPs, "disha"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4553", "4582", Path.Combine(PathToSHPs, "dishh"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4583", "4613", Path.Combine(PathToSHPs, "disho"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4614", "4643", Path.Combine(PathToSHPs, "highweld"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4644", "4673", Path.Combine(PathToSHPs, "lightweld"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4674", "4721", Path.Combine(PathToSHPs, "heavyweld"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4722", "4744", Path.Combine(PathToSHPs, "unknown20"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4745", "4759", Path.Combine(PathToSHPs, "marker"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4760", "4819", Path.Combine(PathToSHPs, "windtrapzaps"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4820", "4840", Path.Combine(PathToSHPs, "deathhandlaunch"), "--building"}, new string[] {"--r8", Path.Combine(Platform.SupportDir, "Content/d2k/MOUSE.R8"), PathToPalette, "0", "264", Path.Combine(PathToSHPs, "mouse")}, new string[] {"--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), PathToPalette, "0", "799", Path.Combine(PathToTilesets, "BASE"), "--tileset"}, new string[] {"--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), PathToPalette, "748", "749", Path.Combine(PathToSHPs, "spice0")}, @@ -289,10 +390,19 @@ namespace OpenRA.Mods.D2k.Widgets.Logic { new string[] {"--shp", Path.Combine(PathToSHPs, "overlay.png"), "32"}, new string[] {"--shp", Path.Combine(PathToSHPs, "repairing.png"), "24"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "numbers.png"), "8"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "black.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "selectionedges.png"), "8"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bar1.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bar2.png"), "24"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bar3.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bar4.png"), "64"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bar5.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bar6.png"), "32"}, new string[] {"--shp", Path.Combine(PathToSHPs, "dots.png"), "4"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "numbers.png"), "8"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "credits.png"), "10"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "d2kshadow.png"), "32"}, new string[] {"--shp", Path.Combine(PathToSHPs, "crates.png"), "32"}, - //new string[] {"--shp", Path.Combine(PathToSHPs, "shadow.png"), "32"}, new string[] {"--shp", Path.Combine(PathToSHPs, "spicebloom.png"), "32"}, new string[] {"--shp", Path.Combine(PathToSHPs, "stars.png"), "16"}, new string[] {"--shp", Path.Combine(PathToSHPs, "greenuparrow.png"), "16"}, @@ -300,14 +410,21 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--shp", Path.Combine(PathToSHPs, "rockcrater2.png"), "32"}, new string[] {"--shp", Path.Combine(PathToSHPs, "sandcrater1.png"), "32"}, new string[] {"--shp", Path.Combine(PathToSHPs, "sandcrater2.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown.png"), "64"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown2.png"), "64"}, new string[] {"--shp", Path.Combine(PathToSHPs, "rifle.png"), "48"}, new string[] {"--shp", Path.Combine(PathToSHPs, "rifledeath.png"), "48"}, new string[] {"--shp", Path.Combine(PathToSHPs, "bazooka.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bazookadeath.png"), "48"}, new string[] {"--shp", Path.Combine(PathToSHPs, "fremen.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "fremendeath.png"), "48"}, new string[] {"--shp", Path.Combine(PathToSHPs, "sardaukar.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "sardaukardeath.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, "thumping.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "thumper2.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"}, @@ -386,14 +503,73 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--shp", Path.Combine(PathToSHPs, "starporto.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "lighto.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "palaceo.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "sietch.png"), "64"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "starportc.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "heavyc.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "palacec.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "conyardh2.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "plates.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown3.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "rpg.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown4.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "missile.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "doubleblast.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bombs.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown6.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown7.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown8.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown9.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "missile2.png"), "16"}, new string[] {"--shp", Path.Combine(PathToSHPs, "unload.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "harvest.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "miniboom.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "mediboom.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "mediboom2.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "minifire.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "miniboom2.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "minibooms.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bigboom.png"), "64"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bigboom2.png"), "72"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "bigboom3.png"), "72"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown10.png"), "24"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown11.png"), "84"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown12.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "movingsand.png"), "72"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown13.png"), "72"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown14.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown15.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown16.png"), "32"}, new string[] {"--shp", Path.Combine(PathToSHPs, "wormjaw.png"), "68"}, new string[] {"--shp", Path.Combine(PathToSHPs, "wormdust.png"), "68"}, new string[] {"--shp", Path.Combine(PathToSHPs, "wormsigns1.png"), "16"}, new string[] {"--shp", Path.Combine(PathToSHPs, "wormsigns2.png"), "16"}, new string[] {"--shp", Path.Combine(PathToSHPs, "wormsigns3.png"), "16"}, new string[] {"--shp", Path.Combine(PathToSHPs, "wormsigns4.png"), "16"}, - //new string[] {"--shp", Path.Combine(PathToSHPs, "sell.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "rings.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "minipiff.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "movingsand2.png"), "64"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "selling.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "shockwave.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "electroplosion.png"), "64"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "fire.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "fire2.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown21.png"), "12"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown22.png"), "24"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "doublemuzzle.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "muzzle.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "doubleblastmuzzle.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "minimuzzle.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown17.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown18.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown19.png"), "16"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "burst.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "fire3.png"), "120"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "energy.png"), "48"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "reveal.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "orbit.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "mushroomcloud.png"), "72"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "mediboom3.png"), "32"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "largeboom.png"), "72"}, new string[] {"--shp", Path.Combine(PathToSHPs, "rifleicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "bazookaicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "engineericon.png"), "60"}, @@ -420,23 +596,33 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--shp", Path.Combine(PathToSHPs, "conyardaicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "conyardhicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "conyardoicon.png"), "60"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "4plateicon.png"), "60"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "6plateicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "4plateaicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "4platehicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "4plateoicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "6plateaicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "6platehicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "6plateoicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "pwraicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "pwrhicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "pwroicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "barraicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "barrhicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "barroicon.png"), "60"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "wallicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "wallaicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "wallhicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "walloicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "refaicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "refhicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "refoicon.png"), "60"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "turreticon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "guntoweraicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "guntowerhicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "guntoweroicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "radaraicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "radarhicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "radaroicon.png"), "60"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "rturreticon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "rockettoweraicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "rockettowerhicon.png"), "60"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "rockettoweroicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "hightechaicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "hightechhicon.png"), "60"}, new string[] {"--shp", Path.Combine(PathToSHPs, "hightechoicon.png"), "60"}, @@ -464,6 +650,8 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--shp", Path.Combine(PathToSHPs, "conmake.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "wtrpmake.png"), "64"}, new string[] {"--shp", Path.Combine(PathToSHPs, "barramake.png"), "80"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "barrhmake.png"), "64"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "barromake.png"), "64"}, new string[] {"--shp", Path.Combine(PathToSHPs, "refmake.png"), "120"}, new string[] {"--shp", Path.Combine(PathToSHPs, "radarmake.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "highmake.png"), "96"}, @@ -477,15 +665,21 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--shp", Path.Combine(PathToSHPs, "cranea.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "craneh.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "craneo.png"), "96"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "windtrap_anim.png"), "96"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "missile_launch.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "windtrapa.png"), "64"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "windtraph.png"), "64"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "windtrapo.png"), "64"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "disha.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "dishh.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "disho.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "highweld.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "lightweld.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "heavyweld.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "unknown20.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "marker.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "windtrapzaps.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "deathhandlaunch.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "mouse.png"), "48"}, new string[] {"--shp", Path.Combine(PathToSHPs, "spice0.png"), "32"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "sietch.png"), "64"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "starportc.png"), "96"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "heavyc.png"), "96"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "palacec.png"), "96"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "plates.png"), "32"}, }; var SHPsToTranspose = new string[][] @@ -496,8 +690,9 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--transpose", Path.Combine(PathToSHPs, "fremen.shp"), Path.Combine(PathToSHPs, "fremen.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5"}, new string[] {"--transpose", Path.Combine(PathToSHPs, "sardaukar.shp"), Path.Combine(PathToSHPs, "sardaukar.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5"}, new string[] {"--transpose", Path.Combine(PathToSHPs, "thumper.shp"), Path.Combine(PathToSHPs, "thumper.shp"), "8", "8", "6"}, + new string[] {"--transpose", Path.Combine(PathToSHPs, "thumper2.shp"), Path.Combine(PathToSHPs, "thumper2.shp"), "8", "8", "5"}, new string[] {"--transpose", Path.Combine(PathToSHPs, "engineer.shp"), Path.Combine(PathToSHPs, "engineer.shp"), "8", "8", "6"}, - new string[] {"--transpose", Path.Combine(PathToSHPs, "saboteur.shp"), Path.Combine(PathToSHPs, "saboteur.shp"), "8", "8", "4"}, + new string[] {"--transpose", Path.Combine(PathToSHPs, "saboteur.shp"), Path.Combine(PathToSHPs, "saboteur.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5"}, }; var onError = (Action)(s => Game.RunAfterTick(() => diff --git a/mods/d2k/bits/clock.shp b/mods/d2k/bits/clock.shp new file mode 100644 index 0000000000000000000000000000000000000000..d55ae3cf3cd734ef0438a6adb83a7ec953ef1827 GIT binary patch literal 7334 zcmc&&S&tP}5U!pxb7$XYn1Nwwc0>e36htL6kq2LV@ySHr_zga}&-(xsovyox@M)*{ zv?L%pA5a9ls)*Wg{(KRIJp9BDvEA+{bZo!q^!f$1OW1BNR(nq|g{5p$iQ3CcC@g2Y zC$=YKbbLjue~I5ri#K=wqK}HdvUeuzhZr;hQjfDy{1;jzpABhBHLwkYM-s6Fl2j5z1joy6i#7# zNrT!~8YrB`_LGfjmp4&3gYEVvwXd^1i|wXnwZCtsa5mdFV*BD43g@srxkdGJEqdSj zRto3w`1x2*9INAV$5FU|$2-TVy`hc5g>3)XruIGt<9}BDx@ygpB3ip_Sy$I8_fH3P zcCESAK`X0ov{yv5a@ma)l&x6Vb*-avb!%5w_1|AqcDA-g1I3O%z4?x~*f;W_$hrP} z61da$jV5Ozq6l#^%&W*?wxca*B!F{*T*i&VJd1SxkX zM9SPrf|R;$k&HVkdNMBh7HXV%B31u-rWK`dDD}F%J1gKjpe^5Qfu$HPP)7NC*+&AT)r2kN^fCAgkDY zxWEt56IV1_?sh7WTrQRPs{q*g{jF;QMPE5ec#E;Y&S2nz0}6}IF|FVh08@VSHecF zg7tz0Oac!oH8ACP7{J5mw@l!&@;$>CO->8eGeNRM9@h#usGPZ4s%rwKU%@##Xo_>>`UeA3N&%YjJs&?=$h2;Z5MnQ}=pE_h1=<_MGZ1ZU}Dv^Cc)kLOB$jMdA z2{H{=l#`(+;6_tY&LpeEj`>NAemlxcS#bqpK5IU6#-7ihv50kQYc)xR`B5%`uZUfB~d5h+`H)*~i-^w|`7zgDTgSD4`11&bv z!E1S>NTqGRN4i`fW{?YD#o}&kAjUomKyS$3p!?nHw7|Va54cxpp?ifMbT89Gu8S7A z^|V--`B9kxCvg)L$K2?VzQP;x*ht9o8PW5r1>(gx0UyQ%vH_U@9*hIS5A5scVYil+ zxYhKiTSbq#PFk8HQbnF+UeHT1a%r=mfmgdP$qT@M-@Z<=4DIw@3Pza{qzKXj ziv%g*Qvmn~J)p0lM}~!+rop#`lBdxs^guvFw{QTQzpNS zXuivLdM=QIjJzYELB*de+_){d+l^Z%zqfDXHoBAF^Vf;a&Bi;$G2HJ3Th{R=paqUy zI4M1GJqNMIosrRK@2z&nodMS3uk0pdqlYn-BOl&so$l$?+EzUJfb&v?W52b zx0aYa)q3JL)|GPW!4qQ6-I!Ava-mS>*hCIza@|f2O BbRPf! literal 0 HcmV?d00001 diff --git a/mods/d2k/bits/levelup.shp b/mods/d2k/bits/levelup.shp new file mode 100644 index 0000000000000000000000000000000000000000..10fce43ef2d66d0455584c85e3ba8401d812b5a8 GIT binary patch literal 5280 zcmeHK%T2^E6wCo64jed803}4qAstWyN1v&INLvBg66nOO@n+te{KaN>4@8+Sl(}0lXIB8 z*ROmL=C3_|(ZOdNsB-`Hciqa~x_-y`MSszM4V~Yu16uDQ$YL&CiV+rG(GIE%G{^Gbs7cob#4HC+ c@LVSg=QW$mZ~da>{K<2iJ^AnTTYeF~0kndZ&Hw-a literal 0 HcmV?d00001 diff --git a/mods/d2k/bits/nopower.shp b/mods/d2k/bits/nopower.shp new file mode 100644 index 0000000000000000000000000000000000000000..3bb46e04a056626855e5c4e26350ad2f9025b7c3 GIT binary patch literal 2410 zcmeHIyKTcT5G4WwLE1D& z*(nTvs*D@d)}~JYu2fUNLBQiJDiJT>;he{+qaP7jt=$F+v{%Y^R<^4&&j%T`*6k3_ zl&&mUYHLj$z|KLqERE@_yB12N4dw@)W<4;drdX$tVd-`A>`gI-^P9mpFAqL)|JzdW z{0qeQ7>!E;Ige{tE=xmlbYP`mehDCF!qDEn29rwB@O1>m*8UuocvO+C@Wf|3cSjk)nSB-JtJIed zuHp)n93jc!8HojN7dR*kiNNT%gr)xycjFOGl7A}oclC`5t}=+cGnE2D2K~uA_kjxr zf$0cI4tx5EU+}xWN!41PO2t|LZ9y<(@58OHnr_PZHddNcFA>-s!h(V@GB)eD&A42Sx?*}ZNx-4G6 zVtMoYzO{Py{JGoP9<|Gn;y%C>MFo=-uT(;cv^h&ITjTP%p1aF{DUQ}JJ4eQ-%Aruw zwoY=AZ<1-qkufTMIsWCFWXf(*Dnc`X^zQgzSD%QP-6!=@T*74hp86R5a_ksGxMKPO D%j+*N literal 0 HcmV?d00001 diff --git a/mods/d2k/bits/speed.shp b/mods/d2k/bits/speed.shp new file mode 100644 index 0000000000000000000000000000000000000000..9b99c1b846669a9ef22c25e12a3714d56bdec815 GIT binary patch literal 1945 zcmc&#U5Fc16#nj=OgEc4A=?Pj?#tkV)&XH37TPh2gSz0uY!cWdK8WoUq{>p7_^{xE z4|_8kck;7R3jLF5!P4N9RL}=SYx|gt{h5s0F0KgnNp}atl2Qu7;<-tdR^NOOFS+O3 zxk=7B-*>-r=SiqwNaHD70`MKML=G`v$@SB0`24}h|2gu9IV`#Uj6+v}*YES;@8%R( za(zmHo}~SsmEr!230QJ{A_09j?cYlb_up1w$@PW`Jx%-byN3HejQsOs!{=ioe{M`x z_h<-gzYA1-|MnrcQ7`Jgg{o-=D-cHTA-We4d;(G4ejgB6x~cfS-xwI?w^&%^e(15t zWl@XqRh~8K+%yF>9J{iP_nFzMjm74<0;-w>E3ZIR0&GGmaN)$wjhrb920*a9%pc zvOm#L$Y`hj5phkiXY;ir&&yExu$J`sFkB6ZI3c6el5>0*jm}wy82}$bCiqdB)H1-Y z)5Ct~(?wH%v*-xlVKGqHYQ$jLV(RA*)xQLoq8KsB-}T4y)yJ%;%-)DmHp zbA~2WoGQ3TWoh>z#DNBRk4uaJaGc-Jw!g%4t zC}2I&r%^|;{XMf=#8bY>ect48Oh7;W8_-(0Y#7EG^;kM$xb+g9GG4}k3=5CIVvZ+t zkPL$*SO+o(D@Sxq_!hf$jed4_gZ|TDB+GE1pn%Rb>h2#Lt{N}W@KkkvVq$^{mK94! z{<1=AjFsGxmt@ov1sbQ3EYy(9((Kc0U*)#lqWY-^C3H0(`sdGks?@`lrxGhNgH!^q zbI#9TS1BQhaVfZreS*|Q9Muz)w$#AbOpQ1iE1Vo@?jSM%~<* z1hrdHt4W1Nlg^7JXQo7|rD)PY1jLP&D=Qaf5-Ty#@MA3i*4Sr*ag5*T%U zo+xxNUSio6E3GCZu_p&is-;?z9!fJ3twNG$D8%U*X_`EnZSsD<#oF@l&qz*3pR=i* z{_xMcshtkl+H|Q$b`3kuP3?5asOMIBDce#gbCVWzioHTiE0nk~Ff1z=CEuGWG^t2l zDzs#+{l_VG{;zxOzq_!vX91U9BX?gT^?+_isTuhe=)6jAo?LeYu4x+G)AGuH1(kg_ TzD95v+lQp?=)(OMZ>zrm_tSJj literal 0 HcmV?d00001 diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 30aa17706c..233542a134 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -9,22 +9,14 @@ Folders: ./mods/d2k ./mods/d2k/bits ./mods/d2k/uibits + ./mods/ra/uibits ~^/Content/d2k ~^/Content/d2k/GAMESFX ~^/Content/d2k/Music ~^/Content/d2k/Tilesets ~^/Content/d2k/SHPs - ./mods/ra/bits - ./mods/ra/uibits - ~^/Content/ra Packages: - ~main.mix - redalert.mix - conquer.mix - hires.mix - local.mix - sounds.mix Rules: mods/d2k/rules/system.yaml @@ -89,8 +81,8 @@ Movies: LoadScreen: D2kLoadScreen InstallerMenuWidget: INSTALL_PANEL - TestFile: plates.shp - PackageURL: http://open-ra.org/get-dependency.php?file=d2k-packages + TestFile: deathhandlaunch.shp + PackageURL: http://open-ra.org/get-dependency.php?file=d2k-complete-packages ServerTraits: LobbyCommands diff --git a/mods/d2k/rules/aircraft.yaml b/mods/d2k/rules/aircraft.yaml index 2fc86dc6a6..a9911baa91 100644 --- a/mods/d2k/rules/aircraft.yaml +++ b/mods/d2k/rules/aircraft.yaml @@ -138,6 +138,7 @@ ORNI.bomber: CARRYALL.infantry: ParaDrop: LZRange: 5 + ChuteSound: Inherits: ^Plane Health: HP: 200 @@ -174,4 +175,4 @@ BADR: ParaDrop: LZRange: 4 Tooltip: - Name: Crate Carryall \ No newline at end of file + Name: Crate Carryall diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index c29e1c67da..9887290023 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -333,8 +333,8 @@ WALL: Value: 0 Tooltip: Name: Concrete Wall - Description: Stops units and blocks enemy fire - Icon: wallicon + Description: Stop units and blocks enemy fire. + Icon: wallaicon AppearsOnRadar: Building: BuildSounds: CHUNG.aud @@ -377,7 +377,7 @@ GUNTOWER: Tooltip: Name: Gun Tower Description: Defensive structure\n Strong vs Tanks\n Weak vs Infantry, Aircraft - Icon: turreticon + Icon: guntoweraicon Building: Power: -20 Adjacent: 4 @@ -432,9 +432,9 @@ ROCKETTOWER: Valued: Cost: 750 Tooltip: - Name: Missile Tower - Icon: rturreticon + Name: Rocket Tower Description: Defensive structure\n Strong vs Infantry, Aircraft\n Weak vs Tanks\n\n Requires power to operate + Icon: rockettoweraicon Building: Power: -30 Adjacent: 4 @@ -493,6 +493,7 @@ REPAIR: Tooltip: Name: Repair Pad Description: Repairs vehicles\n Allows construction of MCVs + Image: repairaicon Building: Power: -25 Footprint: =x= =x= === diff --git a/mods/d2k/rules/system.yaml b/mods/d2k/rules/system.yaml index 5cfe79a7f1..7e8d584cd8 100644 --- a/mods/d2k/rules/system.yaml +++ b/mods/d2k/rules/system.yaml @@ -303,7 +303,7 @@ World: ShadowIndex: 3 PaletteFromFile@effect: Name: effect - Filename: temperat.pal + Filename: d2k.pal ShadowIndex: 4 PaletteFromFile@colorpicker: Name: colorpicker @@ -359,7 +359,7 @@ World: BibWidths: 3, 2 ResourceLayer: ResourceClaimLayer: - ResourceType@spice: + ResourceType@Spice: ResourceType: 1 Palette: d2k TerrainType: Spice @@ -369,14 +369,16 @@ World: PipColor: green AllowedTerrainTypes: Sand AllowUnderActors: false - SmudgeLayer@rock: - Type:RockCrater - Types:rockcrater1,rockcrater2 - Depths:15,15 - SmudgeLayer@sand: - Type:SandCrater - Types:sandcrater1,sandcrater2 - Depths:15,15 + SmudgeLayer@Rock: + Type: RockCrater + Types: rockcrater1, rockcrater2 + Depths: 15, 15 + SmokePercentage: 0 + SmudgeLayer@Sand: + Type: SandCrater + Types: sandcrater1, sandcrater2 + Depths: 15, 15 + SmokePercentage: 0 SpawnMapActors: CreateMPPlayers: MPStartLocations: @@ -512,7 +514,7 @@ SPICEBLOOM: # Tooltip: # Name: Sandworm # Description: Attracted by vibrations in the sand. Will eat units whole and has a large appetite. -# Icon: wormjaw +# Icon: black # Health: # HP: 10000 # Radius: 3 diff --git a/mods/d2k/sequences.yaml b/mods/d2k/sequences.yaml index 28dd8eb311..d90565e37d 100644 --- a/mods/d2k/sequences.yaml +++ b/mods/d2k/sequences.yaml @@ -259,42 +259,28 @@ bazooka: Length: 5 Facings: 8 Tick: 120 - die1: - Start: 176 - Length: 8 - Tick: 120 - die2: - Start: 184 - Length: 8 - Tick: 120 - die3: - Start: 192 - Length: 8 - Tick: 120 - die4: - Start: 200 - Length: 8 - Tick: 120 - die5: - Start: 176 - Length: 8 - Tick: 120 - die6: - Start: 184 - Length: 8 - Tick: 120 - die-crushed: - Start: 208 - Length: 8 - Tick: 240 - idle1: - Start: 216 - Length: 8 - Tick: 160 - idle2: - Start: 224 - Length: 8 - Tick: 160 + die1: bazookadeath + Start: 0 + Length: 5 + die2: bazookadeath + Start: 5 + Length: 7 + die3: bazookadeath + Start: 12 + Length: 7 + die4: bazookadeath + Start: 19 + Length: 7 + die5: bazookadeath + Start: 26 + Length: 7 + die6: bazookadeath + Start: 26 + Length: 7 + die-crushed: bazookadeath + Start: 34 + Length: 26 + Tick: 1600 engineer: stand: @@ -307,35 +293,29 @@ engineer: Start: 8 Length: 6 Facings: 8 - Tick: 110 - die1: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die2: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die3: rifledeath - Start: 36 - Length: 12 - Tick: 80 - die4: rifledeath - Start: 24 - Length: 12 - Tick: 80 - die5: rifledeath + Tick: 120 + die1: engineerdeath Start: 0 - Length: 12 - Tick: 80 - die6: rifledeath + Length: 5 + die2: engineerdeath + Start: 5 + Length: 7 + die3: engineerdeath Start: 12 - Length: 12 - Tick: 80 - die-crushed: rifledeath - Start: 48 - Length: 12 - Tick: 160 + Length: 7 + die4: engineerdeath + Start: 19 + Length: 7 + die5: engineerdeath + Start: 26 + Length: 7 + die6: engineerdeath + Start: 26 + Length: 7 + die-crushed: engineerdeath + Start: 34 + Length: 26 + Tick: 1600 thumper: stand: @@ -349,49 +329,43 @@ thumper: Length: 6 Facings: 8 Tick: 120 - heal: - Start: 60 + heal: thumping + Start: 0 Length: 4 Tick: 480 - die1: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die2: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die3: rifledeath - Start: 36 - Length: 12 - Tick: 80 - die4: rifledeath - Start: 24 - Length: 12 - Tick: 80 - die5: rifledeath + die1: thumperdeath Start: 0 - Length: 12 - Tick: 80 - die6: rifledeath + Length: 5 + die2: thumperdeath + Start: 5 + Length: 7 + die3: thumperdeath Start: 12 - Length: 12 - Tick: 80 - die-crushed: rifledeath - Start: 48 - Length: 12 - Tick: 160 + Length: 7 + die4: thumperdeath + Start: 19 + Length: 7 + die5: thumperdeath + Start: 26 + Length: 7 + die6: thumperdeath + Start: 26 + Length: 7 + die-crushed: thumperdeath + Start: 34 + Length: 26 + Tick: 1600 thumping: - idle: thumper - Start: 56 + idle: + Start: 0 Length: 4 Tick: 150 - make: thumper - Start: 56 + make: + Start: 0 Length: 4 - damaged-idle: thumper - Start: 56 + damaged-idle: + Start: 0 Length: 4 Tick: 150 @@ -431,34 +405,28 @@ fremen: Length: 5 Facings: 8 Tick: 120 - die1: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die2: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die3: rifledeath - Start: 36 - Length: 12 - Tick: 80 - die4: rifledeath - Start: 24 - Length: 12 - Tick: 80 - die5: rifledeath + die1: fremendeath Start: 0 - Length: 12 - Tick: 80 - die6: rifledeath + Length: 5 + die2: fremendeath + Start: 5 + Length: 7 + die3: fremendeath Start: 12 - Length: 12 - Tick: 80 - die-crushed: rifledeath - Start: 48 - Length: 12 - Tick: 160 + Length: 7 + die4: fremendeath + Start: 19 + Length: 7 + die5: fremendeath + Start: 26 + Length: 7 + die6: fremendeath + Start: 26 + Length: 7 + die-crushed: fremendeath + Start: 34 + Length: 26 + Tick: 1600 saboteur: stand: @@ -467,39 +435,50 @@ saboteur: stand2: Start: 0 Facings: 8 + stand3: + Start: 0 + Facings: 8 run: Start: 8 - Length: 4 + Length: 6 Facings: 8 - Tick: 100 - die1: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die2: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die3: rifledeath - Start: 36 - Length: 12 - Tick: 80 - die4: rifledeath - Start: 24 - Length: 12 - Tick: 80 - die5: rifledeath + Tick: 120 + prone-stand: + Start: 104 + Length: 1 + Facings: 8 + prone-run: + Start: 112 + Length: 3 + Facings: 8 + Tick: 120 + standup-0: + Start: 96 + Length: 1 + Facings: 8 + Tick: 120 + die1: saboteurdeath Start: 0 - Length: 12 - Tick: 80 - die6: rifledeath + Length: 5 + die2: saboteurdeath + Start: 5 + Length: 7 + die3: saboteurdeath Start: 12 - Length: 12 - Tick: 80 - die-crushed: rifledeath - Start: 48 - Length: 12 - Tick: 160 + Length: 7 + die4: saboteurdeath + Start: 19 + Length: 7 + die5: saboteurdeath + Start: 26 + Length: 7 + die6: saboteurdeath + Start: 26 + Length: 7 + die-crushed: saboteurdeath + Start: 34 + Length: 26 + Tick: 1600 sardaukar: stand: @@ -537,34 +516,28 @@ sardaukar: Length: 5 Facings: 8 Tick: 120 - die1: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die2: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die3: rifledeath - Start: 36 - Length: 12 - Tick: 80 - die4: rifledeath - Start: 24 - Length: 12 - Tick: 80 - die5: rifledeath + die1: sardaukardeath Start: 0 - Length: 12 - Tick: 80 - die6: rifledeath + Length: 5 + die2: sardaukardeath + Start: 5 + Length: 7 + die3: sardaukardeath Start: 12 - Length: 12 - Tick: 80 - die-crushed: rifledeath - Start: 48 - Length: 12 - Tick: 160 + Length: 7 + die4: sardaukardeath + Start: 19 + Length: 7 + die5: sardaukardeath + Start: 26 + Length: 7 + die6: sardaukardeath + Start: 26 + Length: 7 + die-crushed: sardaukardeath + Start: 34 + Length: 26 + Tick: 1600 conyarda: idle: @@ -791,7 +764,7 @@ pwrh: barrh: idle: Start: 0 - make: barramake + make: barrhmake Start: 0 Length: * damaged-idle: @@ -953,7 +926,7 @@ pwro: barro: idle: Start: 0 - make: barramake + make: barromake Start: 0 Length: * damaged-idle: @@ -1094,13 +1067,11 @@ pips: pip-green: dots Start: 1 -#falls back to RA, but looks ok clock: idle: Start: 0 Length: * -#falls back to RA, but looks ok powerdown: disabled: speed Start: 3 @@ -1111,7 +1082,6 @@ poweroff: Length: * Tick: 160 -#falls back to RA, but looks okay rank: rank: Start: 0 @@ -1137,90 +1107,47 @@ rallypoint: Start: 0 Length: * -#TODO: falls back to RA -dragon: +rpg: idle: Start: 0 Facings: 32 -#TODO: falls back to RA explosion: - piff: piff + piff: minipiff Start: 0 Length: * - piffs: piffpiff + piffs: minipiff Start: 0 Length: * - small_explosion: veh-hit3 + small_explosion: miniboom Start: 0 Length: * - med_explosion: veh-hit2 + med_explosion: mediboom Start: 0 Length: * - large_splash: h2o_exp1 + napalm: mediboom2 Start: 0 Length: * - napalm: napalm2 - Start: 0 - Length: * - napalm2: napalm2 + nuke: mushroomcloud Start: 0 Length: * Tick: 60 - nuke: atomsfx + napalm2: mediboom2 Start: 0 Length: * Tick: 60 - med_splash: h2o_exp2 + self_destruct: bigboom Start: 0 Length: * - self_destruct: art-exp1 + building: bigboom2 Start: 0 Length: * - building: fball1 + large_explosion: largeboom Start: 0 Length: * - small_splash: h2o_exp3 + small_napalm: miniboom2 Start: 0 Length: * - large_explosion: frag1 - Start: 0 - Length: * - small_napalm: napalm1 - Start: 0 - Length: * - -#TODO: falls back to RA -smokey: - idle: - Start: 0 - Length: * - -#TODO: falls back to RA -smoke_m: - idle: - Start: 0 - Length: * - loop: - Start: 49 - Length: 42 - end: - Start: 0 - Length: 26 - -#TODO: falls back to RA -120mm: - idle: - Start: 0 - -#TODO: falls back to RA -litning: - bright: - Start: 0 - Length: 4 - dim: - Start: 4 - Length: 4 crate: idle: crates @@ -1228,54 +1155,14 @@ crate: land: crates Start: 0 -#TODO: falls back to RA crate-effects: - speed: speed + dollar: selling Start: 0 Length: * - dollar: dollar + reveal-map: orbit Start: 0 Length: * - reveal-map: earth - Start: 0 - Length: * - hide-map: empulse - Start: 0 - Length: * - fpower: fpower - Start: 0 - Length: * - gps: gpsbox - Start: 0 - Length: * - invuln: invulbox - Start: 0 - Length: * - heal: invun - Start: 0 - Length: * - nuke: missile2 - Start: 0 - Length: * - parabombs: parabox - Start: 0 - Length: * - sonar: sonarbox - Start: 0 - Length: * - stealth: stealth2 - Start: 0 - Length: * - timequake: tquake - Start: 0 - Length: * - armor: armor - Start: 0 - Length: * - chrono: chronbox - Start: 0 - Length: * - airstrike: deviator + hide-map: reveal Start: 0 Length: * levelup: levelup @@ -1294,6 +1181,11 @@ missile: Start: 0 Facings: 32 +missile2: + idle: + Start: 0 + Facings: 32 + spicebloom: make: Start: 0 @@ -1346,24 +1238,6 @@ atomic: Start: 1 Length: 1 -# falls back to RA -parabomb: - open: - Start: 0 - Length: 8 - idle: - Start: 8 - Length: 5 - -# falls back to RA -parach: - open: - Start: 0 - Length: 5 - idle: - Start: 5 - Length: 11 - plates: idle: Start: 0 @@ -1379,7 +1253,7 @@ plates: Length: 6 fire: - 1: fire1 + 1: fire Start: 0 Length: * 2: fire2 @@ -1388,12 +1262,39 @@ fire: 3: fire3 Start: 0 Length: * - 4: fire4 + 4: fire Start: 0 Length: * +smoke_m: + idle: minifire + Start: 0 + Length: * + loop: minifire + Start: 0 + Length: * + end: minifire + Start: 0 + Length: 3 + palacec: idle: Start: 0 damaged-idle: - Start: 1 \ No newline at end of file + Start: 1 + +bombs: + open: + Start: 0 + Length: 4 + idle: + Start: 0 + Length: 4 + +parach: + open: + Start: 0 + Length: 5 + idle: + Start: 5 + Length: 11 diff --git a/mods/d2k/weapons.yaml b/mods/d2k/weapons.yaml index b1413efc69..a30ee42b22 100644 --- a/mods/d2k/weapons.yaml +++ b/mods/d2k/weapons.yaml @@ -30,9 +30,9 @@ Bazooka: High: true Shadow: yes Proximity: true - Trail: smokey + ContrailLength: 10 Inaccuracy: 3 - Image: DRAGON + Image: RPG ROT: 5 RangeLimit: 35 Warhead: @@ -44,11 +44,10 @@ Bazooka: Heavy: 90% Concrete: 40% Explosion: med_explosion - WaterExplosion: med_splash InfDeath: 4 SmudgeType: SandCrater, RockCrater Damage: 50 - ImpactSound: kaboom12 + ImpactSound: EXPLSML2 Sniper: ROF: 100 @@ -178,9 +177,8 @@ QuadRockets: Shadow: yes Proximity: yes Inaccuracy: 3 - Image: DRAGON + Image: MISSILE ROT: 10 - Trail: smokey Speed: 40 RangeLimit: 40 Warhead: @@ -193,8 +191,7 @@ QuadRockets: Concrete: 60% InfDeath: 4 Explosion: med_explosion - WaterExplosion: med_splash - ImpactSound: kaboom12 + ImpactSound: EXPLSML2 SmudgeType: SandCrater, RockCrater Damage: 70 @@ -233,7 +230,7 @@ TowerMissile: Shadow: yes Proximity: yes Inaccuracy: 12 - Image: DRAGON + Image: MISSILE2 ROT: 10 Trail: smokey Speed: 45 @@ -247,8 +244,8 @@ TowerMissile: Heavy: 40% Concrete: 35% InfDeath: 3 - Explosion: large_explosion - ImpactSound: kaboom12 + Explosion: small_explosion + ImpactSound: EXPLSML2 SmudgeType: SandCrater, RockCrater Damage: 50 @@ -309,7 +306,6 @@ DevBullet: Light: 65% Concrete: 75% Explosion: large_explosion - #ImpactSound: kaboom12 InfDeath: 4 SmudgeType: SandCrater, RockCrater Damage: 40 @@ -329,7 +325,7 @@ DevBullet: Shadow: yes Inaccuracy: 55 Angle: 0.2 - Image: MISSILE + Image: MISSILE2 ROT: 5 ContrailLength: 5 Warhead: @@ -340,9 +336,8 @@ DevBullet: Light: 65% Heavy: 75% InfDeath: 4 - Explosion: large_explosion - WaterExplosion: med_splash - ImpactSound: explsml1 + Explosion: med_explosion + ImpactSound: EXPLSML2 SmudgeType: SandCrater, RockCrater Damage: 75 @@ -367,10 +362,10 @@ FakeMissile: Light: 0% Heavy: 0% Concrete: 0% - Explosion: napalm2 - SmudgeType: + Explosion: med_explosion + SmudgeType: SandCrater, RockCrater Damage: 0 - ImpactSound: firebl3 + ImpactSound: EXPLSML2 155mm: ROF: 120 @@ -383,7 +378,6 @@ FakeMissile: Shadow: yes Angle: .1 Inaccuracy: 45 - Image: 120MM ContrailLength: 20 Warhead: Spread: 12 @@ -467,7 +461,7 @@ ParaBomb: Range: 4.5 Report: Projectile: GravityBomb - Image: PARABOMB + Image: BOMBS Warhead: Spread: 6 Versus: @@ -484,7 +478,7 @@ ParaBomb: Napalm: ROF: 6 Projectile: GravityBomb - Image: PARABOMB + Image: BOMBS Warhead: Spread: 20 Versus: From a7ace54ecbc0fdca76f9a1cb7ff6351fed7129f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 15 Apr 2013 12:06:50 +0200 Subject: [PATCH 2/8] BuildingCapture, ActorLost now use notifications.yaml less redundancy, aggregates notification audio files --- .../BuildingCaptureNotification.cs | 8 +-- OpenRA.Mods.RA/ActorLostNotification.cs | 7 +-- OpenRA.Mods.RA/BuildingCaptureNotification.cs | 8 +-- mods/cnc/notifications.yaml | 8 +++ mods/cnc/rules/defaults.yaml | 18 ++---- mods/cnc/rules/infantry.yaml | 4 +- mods/d2k/notifications.yaml | 3 + mods/d2k/rules/defaults.yaml | 62 +++---------------- mods/ra/notifications.yaml | 5 ++ mods/ra/rules/defaults.yaml | 8 +-- 10 files changed, 37 insertions(+), 94 deletions(-) diff --git a/OpenRA.Mods.D2k/BuildingCaptureNotification.cs b/OpenRA.Mods.D2k/BuildingCaptureNotification.cs index ceaaf8a240..e23746d7f4 100644 --- a/OpenRA.Mods.D2k/BuildingCaptureNotification.cs +++ b/OpenRA.Mods.D2k/BuildingCaptureNotification.cs @@ -14,8 +14,7 @@ namespace OpenRA.Mods.RA { class CaptureNotificationInfo : ITraitInfo { - public readonly string Race = null; - public readonly string Notification = null; + public readonly string Notification = "BuildingCaptured"; public object Create(ActorInitializer init) { return new CaptureNotification(this); } } @@ -33,10 +32,7 @@ namespace OpenRA.Mods.RA if (captor.World.LocalPlayer != captor.Owner) return; - if (Info.Race != null && Info.Race != newOwner.Country.Race) - return; - - Sound.PlayToPlayer(captor.World.LocalPlayer, Info.Notification); + Sound.PlayNotification(captor.World.LocalPlayer, "Speech", Info.Notification, newOwner.Country.Race); } } } diff --git a/OpenRA.Mods.RA/ActorLostNotification.cs b/OpenRA.Mods.RA/ActorLostNotification.cs index 827c8afe30..d053e79288 100644 --- a/OpenRA.Mods.RA/ActorLostNotification.cs +++ b/OpenRA.Mods.RA/ActorLostNotification.cs @@ -14,8 +14,7 @@ namespace OpenRA.Mods.RA { class ActorLostNotificationInfo : ITraitInfo { - public readonly string Race = null; - public readonly string Notification = null; + public readonly string Notification = "UnitLost"; public readonly bool NotifyAll = false; public object Create(ActorInitializer init) { return new ActorLostNotification(this); } @@ -32,9 +31,7 @@ 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); + Sound.PlayNotification(player, "Speech", Info.Notification, self.Owner.Country.Race); } } } diff --git a/OpenRA.Mods.RA/BuildingCaptureNotification.cs b/OpenRA.Mods.RA/BuildingCaptureNotification.cs index 67b23c3ab5..441bc69b0c 100644 --- a/OpenRA.Mods.RA/BuildingCaptureNotification.cs +++ b/OpenRA.Mods.RA/BuildingCaptureNotification.cs @@ -14,8 +14,7 @@ namespace OpenRA.Mods.RA { class CaptureNotificationInfo : ITraitInfo { - public readonly string Race = null; - public readonly string Notification = null; + public readonly string Notification = "BuildingCaptured"; public object Create(ActorInitializer init) { return new CaptureNotification(this); } } @@ -33,10 +32,7 @@ namespace OpenRA.Mods.RA if (captor.World.LocalPlayer != captor.Owner) return; - if (Info.Race != null && Info.Race != oldOwner.Country.Race) - return; - - Sound.PlayToPlayer(captor.World.LocalPlayer, Info.Notification); + Sound.PlayNotification(captor.World.LocalPlayer, "Speech", Info.Notification, oldOwner.Country.Race); } } } diff --git a/mods/cnc/notifications.yaml b/mods/cnc/notifications.yaml index fe9699c073..20a27318ee 100644 --- a/mods/cnc/notifications.yaml +++ b/mods/cnc/notifications.yaml @@ -1,4 +1,7 @@ Speech: + Prefixes: + gdi: gdi + nod: nod Notifications: Repairing: repair1 LowPower: lopower1 @@ -21,6 +24,11 @@ Speech: Building: bldging1 ConstructionComplete: constru1 Reinforce: reinfor1 + UnitLost: unitlost + BuildingLost: strclost + CivilianKilled: civdead1 + BuildingCaptured: capt1 + DisablePrefixes: Repairing, LowPower, SilosNeeded, PrimaryBuildingSelected, BuildingCannotPlaceAudio, NewOptions, AbilityInsufficientPower, Win, Lose, BaseAttack, HarvesterAttack, Leave, UnitReady, NoBuild, Training, OnHold, Cancelled, Building, ConstructionComplete, Reinforce, UnitLost, BuildingLost, CivilianKilled Sounds: Notifications: diff --git a/mods/cnc/rules/defaults.yaml b/mods/cnc/rules/defaults.yaml index 7615dfcc2c..2e891daebf 100644 --- a/mods/cnc/rules/defaults.yaml +++ b/mods/cnc/rules/defaults.yaml @@ -27,7 +27,6 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: unitlost.aud AttackMove: AcceptsCloakCrate: WithSmoke: @@ -62,7 +61,6 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: unitlost.aud AttackMove: AcceptsCloakCrate: WithSmoke: @@ -91,7 +89,6 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: unitlost.aud Explodes: Weapon: HeliExplode EmptyWeapon: HeliExplode @@ -139,7 +136,6 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: unitlost.aud SpawnViceroid: Probability: 2 CrushableInfantry: @@ -175,7 +171,7 @@ Weapon: Pistol AttackFrontal: ActorLostNotification: - Notification: civdead1.aud + Notification: CivilianKilled NotifyAll: true ScaredyCat: RenderInfantryPanic: @@ -196,7 +192,6 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: unitlost.aud DebugMuzzlePositions: ^Ship: @@ -215,7 +210,6 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: unitlost.aud AttackMove: DebugMuzzlePositions: @@ -252,14 +246,10 @@ ActorTypes: e6,e1 MustBeDestroyed: GivesExperience: - CaptureNotification@GDI: - Race: gdi - Notification: gdicapt1.aud - CaptureNotification@NOD: - Race: nod - Notification: nodcapt1.aud + CaptureNotification: + Notification: BuildingCaptured ActorLostNotification: - Notification: strclost.aud + Notification: BuildingLost EditorAppearance: RelativeToTopLeft: yes AutoTargetIgnore: diff --git a/mods/cnc/rules/infantry.yaml b/mods/cnc/rules/infantry.yaml index fdda163d5f..e4b90489f0 100644 --- a/mods/cnc/rules/infantry.yaml +++ b/mods/cnc/rules/infantry.yaml @@ -223,7 +223,6 @@ PVICE: Queue: Biolab BuildPaletteOrder: 40 Owner: gdi, nod -# Prerequisites: bio Tooltip: Description: Mutated abomination that spits liquid tiberium.\n Strong vs Infantry, Buildings\n Weak vs Aircraft Icon: viceicnh @@ -231,5 +230,4 @@ PVICE: Selectable: Voice: DinoVoice SelectionDecorations: - ActorLostNotification: - Notification: unitlost.aud + ActorLostNotification: \ No newline at end of file diff --git a/mods/d2k/notifications.yaml b/mods/d2k/notifications.yaml index 46af2a46c6..f00743a389 100644 --- a/mods/d2k/notifications.yaml +++ b/mods/d2k/notifications.yaml @@ -29,6 +29,9 @@ Speech: BuildingReady: BDRDY OrderPlaced: ORDER Reinforce: REINF + UnitLost: ULOST + BuildingLost: BLOST + BuildingCaptured: CAPT Sounds: Notifications: diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index 6a9c995faf..703740beef 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -23,15 +23,7 @@ GainsExperience: GivesExperience: DrawLineToTarget: - ActorLostNotification@Atreides: - Race: atreides - Notification: AI_ULOST.AUD - ActorLostNotification@Harkonnen: - Race: harkonnen - Notification: HI_ULOST.AUD - ActorLostNotification@Ordos: - Race: ordos - Notification: OI_ULOST.AUD + ActorLostNotification: ProximityCaptor: Types:Vehicle GivesBounty: @@ -67,15 +59,7 @@ GainsExperience: GivesExperience: DrawLineToTarget: - ActorLostNotification@Atreides: - Race: atreides - Notification: AI_ULOST.AUD - ActorLostNotification@Harkonnen: - Race: harkonnen - Notification: HI_ULOST.AUD - ActorLostNotification@Ordos: - Race: ordos - Notification: OI_ULOST.AUD + ActorLostNotification: ProximityCaptor: Types:Tank GivesBounty: @@ -154,15 +138,7 @@ GainsExperience: GivesExperience: DrawLineToTarget: - ActorLostNotification@Atreides: - Race: atreides - Notification: AI_ULOST.AUD - ActorLostNotification@Harkonnen: - Race: harkonnen - Notification: HI_ULOST.AUD - ActorLostNotification@Ordos: - Race: ordos - Notification: OI_ULOST.AUD + ActorLostNotification: ProximityCaptor: Types:Infantry GivesBounty: @@ -188,15 +164,7 @@ GainsExperience: GivesExperience: DrawLineToTarget: - ActorLostNotification@Atreides: - Race: atreides - Notification: AI_ULOST.AUD - ActorLostNotification@Harkonnen: - Race: harkonnen - Notification: HI_ULOST.AUD - ActorLostNotification@Ordos: - Race: ordos - Notification: OI_ULOST.AUD + ActorLostNotification: DebugAircraftFacing: DebugAircraftSubPxX: DebugAircraftSubPxY: @@ -236,25 +204,11 @@ ActorTypes: rifle,rifle,rifle,rifle,rifle,bazooka,bazooka,bazooka,engineer MustBeDestroyed: GivesExperience: + FrozenUnderFog: - CaptureNotification@Atreides: - Race: atreides - Notification: AI_CAPT.AUD - CaptureNotification@Harkonnen: - Race: harkonnen - Notification: HI_CAPT.AUD - CaptureNotification@Ordos: - Race: ordos - Notification: OI_CAPT.AUD - ActorLostNotification@Atreides: - Race: atreides - Notification: AI_BLOST.AUD - ActorLostNotification@Harkonnen: - Race: harkonnen - Notification: HI_BLOST.AUD - ActorLostNotification@Ordos: - Race: ordos - Notification: OI_BLOST.AUD + CaptureNotification: + ActorLostNotification: + Notification: BuildingLost EditorAppearance: RelativeToTopLeft: yes AutoTargetIgnore: diff --git a/mods/ra/notifications.yaml b/mods/ra/notifications.yaml index cfcde2d486..aeab522df8 100644 --- a/mods/ra/notifications.yaml +++ b/mods/ra/notifications.yaml @@ -20,6 +20,11 @@ Speech: Cancelled: cancld1 Building: abldgin1 ConstructionComplete: conscmp1 + UnitLost: unitlst1 + NavalUnitLost: navylst1 + AirUnitLost: aunitl1 + BuildingCaptured: strucap1 + Sounds: Notifications: diff --git a/mods/ra/rules/defaults.yaml b/mods/ra/rules/defaults.yaml index b06075f5c2..01d0078538 100644 --- a/mods/ra/rules/defaults.yaml +++ b/mods/ra/rules/defaults.yaml @@ -26,7 +26,6 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: unitlst1.aud ProximityCaptor: Types:Vehicle GivesBounty: @@ -64,7 +63,6 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: unitlst1.aud ProximityCaptor: Types:Tank GivesBounty: @@ -110,7 +108,6 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: unitlst1.aud ProximityCaptor: Types:Infantry GivesBounty: @@ -145,7 +142,7 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: navylst1.aud + Notification: NavalUnitLost ProximityCaptor: Types:Ship GivesBounty: @@ -169,7 +166,7 @@ GivesExperience: DrawLineToTarget: ActorLostNotification: - Notification: aunitl1.aud + Notification: AirUnitLost DebugAircraftFacing: DebugAircraftSubPxX: DebugAircraftSubPxY: @@ -217,7 +214,6 @@ GivesExperience: # FrozenUnderFog: CaptureNotification: - Notification: strucap1.aud EditorAppearance: RelativeToTopLeft: yes ShakeOnDeath: From 18b457af373c8c77fd17e56d3834af3bb2adb3f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 2 Sep 2012 11:05:46 +0200 Subject: [PATCH 3/8] overhauled d2k buttons and alternate splash by Sardaukar --- mods/d2k/uibits/buttons.png | Bin 15375 -> 18356 bytes mods/d2k/uibits/dune2000-loadscreen.png | Bin 0 -> 88125 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/d2k/uibits/dune2000-loadscreen.png diff --git a/mods/d2k/uibits/buttons.png b/mods/d2k/uibits/buttons.png index 181946ddc1d64266aa67397209962be17d106b59..66ac2663180ad271502ea355feba2a2f3424fece 100644 GIT binary patch delta 15826 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 delta 12796 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 diff --git a/mods/d2k/uibits/dune2000-loadscreen.png b/mods/d2k/uibits/dune2000-loadscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..d208752ef75290391715bd8770c61ae6be467e94 GIT binary patch literal 88125 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

l4po=%+jRz&epc^BPbrqO_ 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

gMn1!+`R`u1>K-qf$T`?0?+t6z0I~q_UT|m z0XTkVAqN7XBu;m?a8&2>13HC)?|H>kUBWtn86%hm^qjlHP;#9OC0PA>l zxtFrcN>oGyt%_0&KxB@t(W@$Z^VT*^Lkq9^dhWqU#Vqtpxud;#t1v-=Xm>>8npx%r zD#EBS91m<0B{gqUD-lj85hAiF?fjL-or?06&?`|>%4VcBMDoj(vc?&@7G2+Tb;7`P zQv8exOOG57TCc1z^ld_VgaJT^fGD)_ww=6zirT}3re3i}d=b7KrpUr5>O-d+87)c3 zqsN4Nv?N1q}~-#f!F# zF@Cpa0<6zlLvvKU!x4iyVh>`Jj_4Et-Fdwff<)Y9G@WACaE3i2Nv1|K>^`uELw9_D zB1!)8p@(?!#g{sed?rt=R%2!5S{FrdC=~L1{@;F%kKTJTXJ3AT^Y6aH(ngiVqR;Yn zjZ(FS=XuC@$E?&xb{|fkc+8EU=MHonjYb_$DdO=YaaWRZA>}%_j)N~0j*z%Q5_cpq zN8q}h&#TvK-Hls>Y@7v(Ogf2BUN=)+qJoZ+K}ta~8IPRP2VIUrwNgXI<0O&^l8#H< zjS+L)PFD=Lj!WE;I8q@U2PYQ84-}p@>ab^e@wiJSoy7M_9nL|oIPrZPAeo4xlppHS zdoPjg?H!~OBbG?uIFh6ziOG&xkLn0Qy8qwFC5Xk6C?)aQ?a0j^z>T@2vq{?R8iDV3 zs&h3U`RV#?X+XK5Kx>T^t_5ak8@WW6I+=`I`~K;gf4gI{V^xG@uw#r&Wh9kc8_fwM z*Wuk5=&ckTGsak4 zuU!*^(XxLPhv0gu6qb z`N8YvXJ!X!t0QzPTxCV)3d^QBvh6d+2Fkoo!hYrH7O`ruxtQ-;rE#uI$apaS)vRel z?++0&mqO{Imniw6evg%DkFBf`nZh!`5&iXL%)+|`txJQ^g7)gkI;N)h`TX{QVFIDDQ1UL z%nT)&ota?a);r0~E%2qUe}`{9@)+&5hZE}<{;aRB(`+`on}EY-f8jxX<-t#|dj2iW zo_dXItE;ST*V!z!@q>Wzp$r)pe8)i&kZ~dKnzWh?8r2f>vr`P^bF6J_h1khL!0P%2 z=PxgFcyx?(CPON|Ng?TwPsH$>G17@RxnzuNLXu7<$rMH?R_iP+E}8mHZJwEM9pfM|J=~J&(Q0*oM_wO+bj_f(!yYHT*(uVZV1etV-e6mh1<&uay(DF#eB)Nnn z9d}5lvt$aRy!_T8TRS_~-M~kOhZxSK*jenv1~+|3_=;w|hHBM0bZ{?HfPbAD;Ns;a zDvdU|p)u0QB)LR`T+(4D;h+ShlQHrshin{D=`4x-7?;kku(Q2wPvZLz-RN+Ep>&Me zQjvDEjUOo5swcPVX=P=^%RBs72uq*TU!GEXSt)C>EiARM!M+zE-MuOQx7f{+kdccb zd~DHHxKS3Qgfv%nz=(=gqKE!mMRXv8V>Dq_rOj;><_uIt5G%uof#5pMG!WUPn&C48 z{*#EX8V-*xvE*#Vxm)(TT<3jeoSRPUw4nhszXoN&)AqWvuC;DeEkeI1O!m6{j*fWO z>&8UNdjCi97A)qW@jLc))IVE9pbFt*31<$3brfbaHO4a$!WWEt9(vXz82BnWcER+@ z6ycHCKb^c|vS}g*|N8G(=VM-1%^RbSWGE4e;q7Y?m3hsK7ljsOs%tQ9ccy-Xqq5=^ zyOU9f1GNrD}s*OmSc=$&u+CH_Qxi(@cS*GsEl|&y$S_TJ|^j!EicGAsJ&R6K5n7C!dN@7%EU0pW*!FpN@tDEGfXUXI<6p}EK zjWe80lFud>&c+$ZbgYF($HvJNMtSGVd$e0#{{fLw8d0$~9le3HD=2So&}_D7`q1L0d7ImBzKNki{<;Okg^QOsd;Su`6I0|1c?zi*BiT4ZnFNJ&oS{sN;glqs5@g3l zNsLeP=9#lJn+>zl?(z$iQXD;Um|V)GQrf1~Y|(1@w0$3;6t0klxsNcie>GjU5Phxw z;1@M5w6fx2yBc7r>8>SaoT=1EXHpQ3_|=~UB6zu$Hd+{wx8@jDcjPl7ZbLRNrXN8c z78myU^>pHdBEyA{S_H5~IqF_h*+cMz2)(Z*178F?Ry;IDFkf7uYozO?r6r@Mf1bMK zt^N)YSg$iP4%Ui7?&;>G72|4av%^1=p;%=j?pBNO#k#Hr0S){3#6ST8X5_E-hf;)7 z@cIz55LRrjFrtn1H6bvglI`qVX-U|m?)MUk(Z%qbp^y0r>p0D8BBJxVLs8vPwQqmj z384*xOzw>CcOY%qd-s`=5k^ZAJ5Jo9^5|X=*bndETI%alYUd_JlxK)Q8aKL?5s$O8z0KD4c8BC91RwqIkMa3m{bgd! zZO)x|j@89;6suK~beSBRnX(p$4ksF)l zsb^oLSSocudpTIRQgkxmZ@u+qrpF3wZ>&yTFbn0Y zE7$nZlTTBaoMLQdijjPr$)Oap<9T+E=b0YPFqTU&GBm`*+#c3TRi1tRg+2=7I353e zx(Kv$L~Jz161CY}0JEs8;H1udj1(ei!@q?YT~Y0183%zAGqKDm?q* zD-2D}GC4ELNIu16A;GTE46|c7?U=Gm?w+R}1U&!J%LGBENOE1rV2iu1%N@7eOi(Yg zv$aX1)uQFK@dCeZ*n|kIOd+U8XbLt#_@z-BtW3z|=ve_i1ogy3SoAj(H zZ#{aL-}>yQ*_~vhXXc3IMsR7P6jX|3 zmQTG(YvUUJ);b?Pew@GkyKl0yvyBI!e1qx!(yOoWqZi)fpWS;a+gGm8u2paypV54d zq?2Sa8)If>l9_`?IJdgR_nv$jq>D>{bexVwarYj%$rK+vejh<)gRRwTR2vOStu}Gu zRBLs%uU+Nn;d}V8;~(I}+i!#4sc-|K01t)458wxnJ;tX#cAVXZZlt(*jkdo=#&z*L zpLAR@Ih18?-$5o8Zsr@0zr^XY?-GkS1irwLg24CtdhUJu_j2dWH?XsEp6#6y-h^NF}!V72nff>oZV2Ab)TVQTkk|ORyAT zVC@^3255f1fw^9X>tI{{_pP2SB~}lSHO+*=Gx(4(Rzw1^F*??Wq$1=+E&E&vlh&ba zdAjwrW<;dWX);z=vk0qBq8Rmq>uo;s1LHi|x9!z`ZfN-R(Sb7e%icPZ+PkJ-bLpeA zh-b;n7Z8SJu+*--Gg`?0Zm-%hs$$#964QcI*W(VXICc4lCaV%g>0o55_lP$(tYcP# zVYpBV%f_;MwIrQL;CwQ{a4yBJLXz1+g6Z*L_8vaU!rdR_t)&hA_|L!0d*{vrkk934 zx7#c(F7{#J{d?y4U;pRd36#iVPMRo+nz_MSmN%x z?`6;KIizZnlr6^6ikaaQbMtfTzx6J1^N0EJHy+{fC!Zk*6pqvJ3Gh6x|6aKJ?z{NS z&;C4>r88VQ^ERtn6|R*U_)3wBL&BAePRuYmyO$?lc!Az8|5aYhDXcuX*IpU49$k4h0uUN6GAkgZ4FMB`tN89f1qU+5nO@+ zbO_qZ-ez~}-JI4fORb}qx;?K}Z0Lxb-reigyHa7=_o5lHSh{)rvj(uKZAWa53$QH3 z1=hPm2;*An?<}dmo0J9VYn71H;ZbWW-6x$HNJ7NiS$`*)ZJ5=W3S*{iz|j5C=HMO~ z-FO5vZ6G^6Yg!#SFuYTAI9s!N*AWOI%x=EFmdtCbbCvp0usu0z=w4ZCKIB*(hS+6< z-?VNWFAR5{hyl7VQ5|~gT7=1}QoAPheqxVpq%hGi)8^iCVeI|B@n^!a$G1jp2J(hw z&ut=ggphCBH$%H-Hfd1^b9|)1jm}s;^Se4sr^9dI&0krNB>n$3AUG+khc^sS*t14s zLE1b7Awu5JcG1y0p_t=P=+4h43mN8y66_kuFu!n^Lw6tNY7PGAix2bq8z)ezWA-vK zGQ#rmGWB``x@I%~@jv`F4}R*WA!w5u8fJ3O0cH;!W9IO!OdYy~u>(iR%^rl@1Xs&# zUO#<-=UzU+H~!%f{_>%}V|MpEN9L!wdio7EmzM~D@wr_TCZ>4qxtFL`Y6ON%r_=E* zFE3LpRXKd~ogBFFR>r0#nVg<#?=51-|)|K?#DjV7)eLkK~m(dc)! z$#ja}{&&C19s8%a@W%5jFJ0kkvBkAw9nTNQCLEGdkxnEye9P?=8%lc%412^A<(@i?B>rrv0R z=*Sgsy737A@$;WS?5uL>#0l0{H(4&%S*f>CI1IUptn^7FQ!E_2m1)iwAnU9C zJT_2@w@<%IJeA?@_utRVp1q7sOfo$?$K1k=%pJRzvNOb2zWE4GJpBTmf_NfE;I(MC zT78xO;e-45o!|HzqO#7VldrM9vBhS&#ZJ9V)$^$}TC_aRSmPQX9ZoCLax;{O7@=97 z{X&zo>d%PK=ZV(lEV?_JQILmTwwAGp4mS&7evc5L8Mgk+Dy=C{#xti(uXioGz_>mJ zp;6n+Y{=dk1E|mpS@U$)(MX{g`t&|YnxAPGT>5bdy*TNg6GkeWFkpUR-IGC_`9M-= z&#Ucmiq;;9^uozfKnx&!b4(_zja6vl7Q=)`OAa(P zZtEFD>c?rO3mT&~>$#*a$=5~|y=Op%k2yTj={!r$cp>w zt+(Gz6PFiXc?Hi8%xbcGGN<1?$H_D2s1aj${vacJZa|LAvs{MnKK&ApJo-HS{wHGfv%<0Q3eCs=p@%+oL;&}nd zSb}DwLAg@F4?5>II+W*s`K@2${YU;k%HBIzlIy(k{N2o~tg7ctKiBWI_l@ob8m3_y zmLLgI^aM#s5Jid9%8#GjnTa(qGZ7o>V|HU_ceL8kQj|oIA}P^|79a?K@V*Jd_Wt$r zwtTv~e`HnGy*IO7w>p9Z@VZ{s&FjDOo$s9OoPG6qu3osv{92hS>ou0E9##ZBj-bo2 zfr$RzZf?8tF0RhZaq{$8t+Js7k@>#QE3du5#pxOBu71XL?5BV8Zlc~%PF`E)n?L+1 zPe1!Sei)L=Irxn_<Lb=XLwLzufQEN2X zblD6;9E5JXp^|unS=Vilr`p7`Hlau-e+lg%$6x@PWZd?Gx00wzvvU<4NP=cA8%vMg zQ(P?_0l+{yFo|2zj9S$1woG~XOvKPqqbY@amcFp)Eb^?qNn{+D?M>e@$Y^G;VW2wF zI524Mk*J>$dZm&|g2X^Xkm{x{w1XKkE_lM^Y#0|$*?u>Z7}`og0TrIj>hoSB~!##P%`-_bC71%O0#qOK$ z#2%jHFTVOM9{<_X$S^=y7GV^zyu8fZ+#Ep=#O_G8O%OzU|A&v0b8UnLmX!4N_F?B- zA{j&OwrykC7C9$J(am%5+(q7e^Gz(*<*`qFik_g%#glKbxLjtw5#g<^Fn8*g3=MDP zw;%fqGs}zo#h1RCXx%4@eU^llqE@RX{qo@b_wl=*`*rFI(_A`vf~BQJ7ODZuHIJ$nVp$dom4Lp2PyhTZm*07r z{SSVSfAssGXK8Vnm*0F-8TE)3xEeHSJn_RH@aC(pvuED{#>R%}Dmv8bbyil_>FVyr zwj8D}UuA7=oiL1Tj&ru)cRu&)eBzM@nLY6wbLY>nTv}tHTBB0;i0U4G5U}hD<_jV2 z{36ruzRH2&QU36^e}ii?b3Fg@YkJ)`U^_N}jQHUbKjqao-(=68eTeVZ(t**pQhr%M4v-!g3f0JMR*sm~q@-^l!oMEj}Wv$j=z2Q?21F8*= zFl^ehW~8N5YN}KU+1vRz#TiVt>(W~}{zQC7N=+z4sA46pI&V|EUbZ4m*WbY7VJ&=4iSdt#eV~8kn-| zt#PpuO%z?lvpviT*&#z8Lo~&Lq{eoUy7-vJThKikl6^&bL>^Ld7bhw1I_!*(2mWnl|J zzEH%?IangjZx`G=g?xdA-{9ow)4Xxw1hqzkU;m9?_)T*-$} z;)Zo1uR{Oe0LSjW2R{=0;_Y_{qc(hKSr$3Rp;&M!7K>PxO%Q|xzE9D0DdY>(YIUwm z&v5a=dFr)V6O$7>^x$#+%|HD;_HD{@{?!+_cJ>0ZD|N1}`z)4gRO=1GD3&yKEpSDI z<&}|9#KA*H*t!1z)AI{VUzv_AZ<}R>!m`Nc^K=&rxP>A?6j86&W37Q=7gjFE%IX>y z&R^i_^tBka7dC}rk>CBoZ}Lw*|0yaL-s0>VFL7;Vfotn^=GGgOstsfiCK~3pEyy_% z{3;>}*ni*vyAIsM^xPs>t~B)ygcWa+mWAWyD0CIb=Zgd()apJ_B4pH9st+VFfBpgih$|NgDZg6f0Ayz?M>v@X~B> zX>fCl>IWmL)cQo|Ips`tzSb{keglR*E?OxXnK{)225mY4>MU)&ELVf3Q!HzhB`*^r zwd}SCy=p3D$t+T((il|=Y1BgKQMj6>mFga=9{!4FfEKNq=#+Vz)N{|6bIXW2HP*Y) zel4va^c1q%uL!;3L!|g==~PU54H@N!>N{X6c4nk&gwzovz$D6 zlGA5SGcz*{QOM36Tlv@j><{So*Es*i3(U;SFr!28}$ zS5G(RFI=Qjt~GVNBf>BslCgfhn{%)Q1YVuxrDaZ?KFu%Qew*2u8G;~=XbZ(6pZ@rV z_*ehv3+x^1<=iVzbN=KhW|m4^TWc`4R;OI6#cqUBV#yFIim(OPGQ_V{k$#OMhYxe) z=xvm1A!pBDCJG}$8G#IA8)PAHT^rXH5QfxiRj$p<@QV{CICJ_GYpbhCR4_F)#XtSS z|AIgK+$X8eoaM}G&vEtgG;?b;X4mShR08UL&?M$GtGn+ZoI>p-ZO7mc|86ThE4}bUb z{PAypnqd9{XI^`rnJbrBTC1>7@>r@gm|v?=^*qC-vjwR)p<7GYP^>n|N=tuPDp$$U z4n<+)Ax+{IDgz%?0|2e2yj87Y63=vgE+(*({W zmYUg#SSq4@5wY~YQu@S7tp%+U)iF_w>vZmemFQozqiUh=56Ppf<}wn-Tq4T@&mh$5 zu#tJ;+DP}%(q#d%&skNE6 zrwT~egkpMKm+`?KrutlV47zL^A7bwv_cD3xeSGt$&+{Mu)1Pql>I|i7ogi#F@=2Mh z_Sit@P>aUe5S$<)hH&$_9RJO~`WO8EuRg-5XMf7sH(ur1;tH478Z55WaD~NSUl*GO z3XJvV*}82DTaO-RV%I@lJaL+@e)IeM=!vITU0s8wTySgftfszfB-OGNi(Ed>tw)dW z+0T5Ok3M`4;mTFcoOp%HzdXg&&6dCL9W^ypk z`^z1_%0i@5Arm zu}^)H`ws79{`6~{e)CnXUb@2EN{zYoI6gJ-^&Y5+&g266_v4J9!eR;+= z4X|zZKDHmd2Znd@ou59(SHAW)y#D&@G(10<16Hdpzj>fUQIuF=T0+p<*TZ`rdWc{B z)T11~Z8uA2f5FAqU*+26OU$jWGheE)u-@S6N{!`;mqdqYHyX3nPQ~A4raD=Ia>=aE zsB130xLRdgri`olT#=NwDQii!^;Js#ikdz zYPXyE{S2K!RZ6w>-G(WWH06M0%1V!HO+K=u?J`KQ#=fO~SIVFlO?Elkxqib&q{j!N zek`?Li_|`zRtYygr@`GaV_#N{naurNGoekMCs3`j^}4sjNil02Bx$%_RY;c7P=8h0 zXKE&^b*)-1td(LRCA}{5+N%q_&oo24|#teDT;lXoaM z4vy>M9N znU{F&jT2nDc!_GQhVKW7PC(wV$>&@q#>Y5((@ora_Z>WR&+Ux$I?SGVlZz*R!R+NL zEG(9oD^-~**I28^QpI-52vybNnc!VN@%As7o13H2s1t@ke85^3ZmvL2cMsdQZRWOH4)M_a_i*g!VdUBpXI^}g znbU7EJ2%hVYK@t-28-);Dh&@ml!@-W)!d94e#BbU!?G<94k2Yi{~cONkzT$jDP7fd58ZiHnq)nMQU9xyG8@il zT8(~2{WzBHqITz6)7=~*XKa<|E=bMlogS+#@G_tW^L{v zX}M)xuRv&$(aM+z)gs!gCeY=d(-!UqAAq!MtR{dYRk;CUyv_P`K}x7cYTg*C4uioD z5XPJo`mvzhYm`V?b-LBYLWq>CfyN>d(vW!8-(BSe=uQSga}HF;M6X`aPj;z#?N}M{ zv=U2nlq4oC_pND@XmiQ5r82I-EkxkZ_Hii{6AVF{_#qVm4%4HfmCuk`w5}oo%I~4) zF(uOQ_Yg@5n>uq_A`Yp`8f{X9ZNXS~7bAULjP*NA4fn8p%M`cV`yK{%9-GRAkmbtoGWxnQ9_rs>~0`wLf z28s?tJ$Z(Ea|{d&Ff=y7=(e4VZQnzFaDr+8S7zo|TwY^sy-eNnahx1|JzWggZKVw4! zOpXrH<3M$Fj=4+cnZI}>ze;BS03ZNKL_t)R#hDpaSJzl7d(4*VER{XhD-FtC1HYMX zc7z~r+p+7OfV?eYkAb4gNN<7hZkOS%JVV1n3{7rjXy;x=Cb!}A4l=h|VP;{8rPX!T z%VnZ4#C78~Z5kS2a%6x$7wW6CEL=Rz{M8FA&djpDR${GEXSwPzTk_+`zg&xP7peHY zBQ+pEF|%z)=g1V#NY%oSD&i#-`(A~Jr=nRZnGm7c&$fkuTK2>mh9%pCDoF+rNfjGzeEtGYo8W3g2AVO(7rtcl;uU9wbmW8TRdsFuXH6r(xsE=x#lZYL)qBkY#Og^tf zKtjFys5Z`0YV7(pS|SZ`A*qn$WD;Suh*sJ*+u9dp+EpzPK{Iw2VcZ(EF-&;}3BwXt zH`PhsYIM{ zLzM%S)Y(DiIHUm!PJcmgp3ejL}hJ-xoel0TPiWX z>M>jPSZ)OPk;IN7Y#GFMzB!lf?mUCtFxZu&FYnUd-Oa$j5WS=0^o@?wJupPRX8_wR zfbAfoh^St}uddTrUtxWDf#rp3tgkGwzP8S4xxrF3VzKPARtu=sJQ`j|C?t^x34KWr zN&;fufYY?m%~{~)a`YBmHg!3SbUO?bbM*Ff)7w8l-{3GqBct?g8YMR{LZR42&dnha zgn>`w)v1@(D6cG1S)ONoX^!>fCCcj+Rx3VBm4Jn+&vMOUt>#mzdw5}xuwiWxUjl>` z-%4EDqUZ>E^A`Pim%*+gL&ZD;-8p)?T)O+a=o=oUe`K7Vp%J?K2XVUkaSFw_S|JGV zJrBRKPOvz~+R{8L%S)`UEK@0$sMLJc>K==YI!l#+>E#+Ll?IUp=XZc&Ga-LT3ad;- zb&{0IQffNO4p+}kS5eXVGX|@=^K&}1r*r-;V?W4x?;CxWjrwmRsC6(u3E;hpH^%RQCSoham2i)L%NLP2n2ruAt~ZvAYYm*hQ|8C+Fs|b2%(aKoAlIA-?C~HGJxgI<K<#A2J2Oi<*Lt8 z&8J-VsRvOkex&9BBdJ|*1>jn7N#{V`rN7IiH}BA$x9Kgq^b~En3ND45O);M%@8+=c zMXa2Q0D>?i3_^UbfnTpt_k3!NkeU}zYxq<=Sg(65mg~%{*C^HFoWIOS^`}yOGL7h_ zTuQUnf|>Hqa5l}Lx}?+J!YBdSU`?p>gH9=Rv)ai_5qH{yr7-i1>ASy3MWLPVPU1S> z-KjkrrLa|+MrPWZ&f{y^E1P>)>fV-?BuTrxWkjpy*k~XSMir)B-It<}m{og1bfyoG zO~**hC-Z)lI^*O9aB0T)ndzd9=whAv4NO^MeSXMJbDHcpRdvl4WK_O(qRSW@3(<+r zW1xbW)Dd$&nD+^pNsUNLkdr+}GN}vAe>f0vVDplGKBMO5LaGh4>-V{n%M945PSWL4Xqq0x1at3(vEtT7s1v z6mvF(YCz7dV%xFDz13p(HV^YKlK5eS7lc$B9+i4r-(U6uYQBuU?4yWKN_;8t!iXS> zVtZWymSuwkpNJ@k`2nFNh@?drLc{l|c{Zh5oh~;=cfp~{waMEydCSJOthi0hx#G)+ zK*pScMi9~P0;&z4m72$D)nlz5QVqg{bYt4b>UFL0-!`I%pb^CFCc^h~lp7Z7b&uYv zO|jsTvjnbVk+UswwvE-Q9+r|w#(h)|L%cvz^?d4HK+O*+HzL;SF(Og(L&LvaxfEJ7 z>t);JVr~0Ov|OU@5+^$oONGw(Zqt>O8gq5+v{Fn7<)lr}OOd>UNd!`A(gj*wxyWdk z%IOiBNlf~Z+^W;I(r&0qO+8BanVSDsQX;}YRa8k@1zuL$EtT>%q3nz@RjH+po4`^O z5fKKn!D^p|mQjJ;l9kmhRi#GKm0A{7W?0cmt?ENI$(tsDS{Q74Y3eIz&(S#!Exv)O z(=UW6@2}_@D5{Ey4u#g2iXMQH@-e-9MH+$DV0bCA1e&B~y(~16snmEJ!Xz4EjG?h+ zERjJaPdVsHMQ;GD>Yx?q3Ni?RLQf5~(Ke}7s7OV9vCYvj#!Kj_G(aOEYD^KU-2^M+ z!emy2Xtyj&XoO8w*T6y|j_jC_*$_V3hci(uI;SF1(5EnRQQ8$z&u>UYxhS(89SRC^ zmY}!bFx2Iew=EpY(jzw+C5KmBa%RPZGZ`VHsAW&j!^<$5K^jpRJ@2r7~zKzk(2~cd?E5eNhqU4r7JVc z)W~*Zhn1;tyF>V5CV5jv^w&pTJ0r&}4uP_9W`2iE$W0;xj?E%q>&aP>{&^-sAXDt> z08^0!Pw4`z6)&FM5OkJ2K_$_P&U{ymJt7-ENG0#$B|vmvM4$h1zV64f}A6WfKWmd z#WqG!^AMF10vQp>CMpod7m`S--VXA*SG2aI zBw>u$MC#m0oVmn?#Xe*dvR$XJ2RdeHbp^cicN&r24Hk!Sojx>*X*VRfX8o2P_sI^Q z`iK2{hr*`~->Xx*ue&F7+UKvcujzlkaj(LS6NobkBUAk=ZgAW?y_4MFOxP%X`-fzs zxuN|;pi^Bv+8FJHnnmqQdy^3xlFn{BCBEA=eD7JnZ@KMosZBg zUj-?azs9`QlB)VUw1-+~)fwuV5};HSv{4z^DSXnbYbi}3S2G~$>7X75+fQHvW@UaZ7!=r-L44fcq(c; ztug16bdpY>)rsqRi%Hoir?d)M=>dsxAyD3f45ErK_8zq|z(}X62$G&m%_0Zt0H(NQ z*Q8dtoUTEX*$g6aBdk}EzJX+3EoHg{<$8BuDLROnkcKCPRBlt9@3vCPR1YLFm9p&( zpLPF|Qe@`DG9guQeH^7drV^R1^3*vLo%*Ty?vZRySzUE&<0vd?fi!ZfdPVdNGEQ%l zU7g)B<9c!f?@gM4XM83F?`Jk!hbG&oYWi-T?veI-N&jAZ)09GN%oFZ3-8=S>*@D!! zcIej*PtW>tljUn>tz-~XbBOc>y{)<-m5YL4hzHVvT8LVk{yl zl~hvlo+@kIpb?olsZ`E1p<1ESV}wq$LGO1pl4;#{q=`OR=)I!0!BSJ7%I^uVq|hQy z)myvujAXt`-Q!&)3njJxmf{2`4RTe|Z9=PBL5+r0i(ILaz0}mWNX&OEg~K8;L^)0H zPpIob4d{eoVxp{lRa0I?TU3=(Q#{5>Dg9YZlu2m&j8ODR1X5q0N;!oTs!oGG=5e1` z&Clrjf)vsS%!N+Ml)ALJ+DA!*rR0h&6y;Du0IIc?qyc(pAgtEM#FEk(z;&W~U`Z^E zwjq>$wi3iZ|3ZI&5dO@nxcGgn1R2vS7fg3=}Id)$mFO{}f~m z4OwbIoXK;OJxS3RQ1~O#P-0BZ#-qEZ+UK&ux|KIjr=OX@)XI7lC{?6c9YQGZubJ5} zp*1$HTNNpe>h)@ zZ?1JnncWa#MrtCA?>(G0T4m`z#IE+$-` zQS%3>YKZK0LHc%{nV!JN>PkJGWTrqnX4qv$H;N6UhO_&=Q@*o&cE4VpUCP5 zX>yBXhyF>gH6e_ar~-6SkqP0i^P_zz%XCU71F~6__nv-=y z%=-QIIcXN%W*p8KMAwc?vJJMiEFlXsDw1^cm^RN#EsZ4!}Im0Yu777Lt18;Dyd_l%+BoKv;*^7 z8eZI4F`ar_m+e~clx}s4z)4zA%$!GNjA%-9W)i|gib|#DQ`PTJ3z}ncjMMo&krMPJ zi{_bS9FmEQ=y@rj>@aQFSwmXe;L%Ev=G4lpC^qv>osN)IT>yClqG&o_Fl#R`2!v@m zpvGFrIz>%O1N~x|O}W%D#EkXa5y{G0(^-2@8jTZKV229Trr07f9phvu6$yjUk!b{z z8Hskrt1!}Cs_9Zzg@p>S3$anA-I#G1y8Z3rN>AfHZ$DrH|2pme`5<*703ZYDO{}(^Jl3aoe6Pdd4+jZi@|MH9K{oAiJ7S zuR9hps}P8k)T&VOY}%IFK^{{mQEVF8YwMqPzMIL^aiL9vkM6W;2fT+ySRT@XW zNd}b|=tWwptIeRza!I2DOl`1`wdw_-MgQp<_D-j2hHP8HQvQb&4yFZn^wNVY=~JTy zIh8XtH(Zgu+otOFv*iCWIwGs8s8gIO3@5s*KJ1u&$tX(_88Uv#&x96fXSqS@?<_P& z2ine!X~KoJ7TR6V2{y|{9@1;es4Oujp9ukUz>zSJH6q?pRSKzj@^&9*&26cBOQiaV?ETJk*JPtL(mD&xY9cb{cji6{CK1RO#|$a%taU9+ zc(7ePf&g**-Yw}gRz`{}CBI0AG;`*SLn<=7*|1?+541CRQin{kwG%p~mNB(ll+;Cr zv}R|9ZO2SW3Qft%G^9|~4kT91Y~y;F;~Pi?YiXHITAos5o>84h(^6(=w#d%Xnj2|h zn9u2$p}9UaJR{qz5L>l5B{TEEH^#o#bM#ti(*_uJ7BMW7Y|jS!_(oE#8TXg#GPh+$ zierQ5uH&<0w)tna-jSN_p`!*3bXb?EERjxLHcRbf>R#O;os=<$v$O0SA~o8nsw~%D zZfyEy&%uuK`})tjenpl#z6z}0L7F=CD4EhRx*^@0tbKMPiDHp4{vu1NS7y*X*g#wB z2Ku(+wInMx6CI0?*eD*@Xv5EJk8+l!GNdWj;+Ak-lM5|cb<-`{qGE(t|j=r*CkN?WZazi*+*w+iK@E|TKMktz94T*?tqA_Y|eIkUyb`^SuB!92Y6%jvCm}9L^FYT7wntHANXf?x9 zUdK|Jm^4$Z6G#}}y7jKs<7pT@6YJN`dQ>8Ck>kO;?zLwCdG+Ljr+UrfV6>c@qQs=zYMn)~6 z&k51&03l2(*4Fy8nt!M7f2~y~41;r_%yo6a7&Sb}=k)n4^!?cQJ#|MG#vIn4(%!SI zR!c1XHmCPL+GSU0dq<1eZoDUnj+!wc)V@?i+l1anmNM5+B;EBki1t2V>HXK1;kr3r9OC)A9j_n|YAn<&Gz{d{)Mew5?D%zHXn|E>S96=c1 z`yOE!CfI;w30x;fE}sV=2m=JMxQ~?JH5zfdo0Bh>bIIr3Sk~7MkP>n^8^>{tY#{i7 zk5_LHgh7hE*)FdU*p5Tq&6CUJ(h#|bC5FQ=B8-Cg^R`V8hIoxe{4PS^=3H{FOC%$_ zMuRAd$k`5VA&+g_+AT1OBwoYA^F5*{)a)-UVd3U;xVZwBEt({e_+5S9!}t7TQRN($ zyz=}6F^Obz?0jt7BIm|NJf7zf1Oc|=;O27JwvF$5c%DxbhFFeG!F920yE!M~_h`>Q zhn$E8_ze$X2^`14b=}xRsrCG32fDfV`9jzPzE8ue6GalocE}f8 z9NSUsgqy@pVa4wg_=HicRB2fjK@hK-FbtDz!F6qNxn`eB2!h!BDGbA=mxI7{i}73{ z!t>((1xYUF;<|Yx(5Tl4!w}oD$>$4LwuSFC@caPT^raA_=c1Zi5bA7~LStm3+WBf^ zG+mfThayDkdxgftY?Bj(36)AT!7GtMKonF<>ejp>#jh|f$XV=pQ*|jBOS48(PaSDF z0*z?efoPVlB3BS+nPO!oWHyyBjBI0}DZ2%cVP2)apH#@uDwHqu!v|7gW-0bzrs8dz zb7Z2xh%B^8YDQ8bWpAvuPHG37_H!u=B8+VJhuP0Ym5_c}km(@6&aPf9@QWT1A1I+M`zNDzaneZg%b3Lr-saQ~Fn?eBNvI2Bp$EPR^mXyO(mg#M!fF zn7(|OLa~dz2M(}#VlzSDbMew8)>c>9vSkb76BEq?xV^CjLBQhDBBxKD}Pmr7~65;y(9{$)N0Jn&T-+wc~)0f=_(Z2vwt63w{F9AbM2e81V0Q} zTw3DV^i{gMyP2At!m@3quU=(lW`@zRF{ZXmk$3ZyO6#0CeTK!w1xCll*t2^Ng<^q) z`FT#AJjKGo0y#Iw*yt!*wr*u;c!WYRkBlUhN`={(87^JC$okqE-90_*-M5!5TegvN z9ZKsZ&YwTWh4UAv*Q#`Nb+KdDE_UwPMNfARmSrIY1cA@`+B#P*U*XE-%QPA_hKEPk zfAA)THw_Vm5i_$hoIiIKBG|EWCz~fX<25|aoH@g#3m0fK>I@DIv3K8oHcxKGadMQ) zWzL*B&C>EBlT%yRwR0!MVj-!~RTpw3BTD58)pD8c?rsXjA}h-)oILqU7UpLW!eVS} zjH#_#7#SHMpDz-I5#`c4)6>&TU%g7DT4r!)n0@>9F*-ViBw}`EmUCy%5`_^vcI{+h zVlz@o&YwHawdt#jjE=B-_g?Y^m-&SSPQLpti}Ul%i%h}xnpF8`v-&}k{8F?|+G>&}H$WQE zBs6tQ6mEv91Cm`}C^{B&q{H}jm?<+a4(j_`O_faZ%xrx|X!Yu9e<9Txbu<>a`tyt< zQ9om(mG+w;J7*+~09guMt0bwUu}Hf(c9g$T-RBInLXevG>ismnZ&(SpL8w{{tv)jt!xhgdva6%zsu)c_Uzrqky~$L ztz0LU&ojAY3%=K2aef{tC2l^)?%jL1=iUd{v;P1hm#189&Rv>$MugBcqIujWIhjL#0w7 z@4DN03ZNKL_t)vQlb&Y#yho!Ps0zWdOo&WVArmltgWrFytriW8RMv6>(=cY zJ$8&nAgOykbw9w5BK%M`9sPW2et_lV*}Z2EUERGbt(E8-9At1{kZQTY)@|F_zI!i? z5U?F~@7~3hEmMqco@9BgOc06K_SOri`#yC)qJMCR$<3R&HhqO!wFW?c-ynA%zn89o zL8@MW7lhP2A1{Kg?jCmS-o@t46V$3zCN@uU@X#%+SL^tpq~Qhe^Mim&-D7looZY*2 zF+MR#)eoo#5qtLTWn%L1CpG{nwbyC@dBs8-7C*|(2dkKM`gdYMKTQRwPn$BrFT z%4OEqOH6H<;^5(%vGYah&9>IOfKXU$8X0BZp7tY}vVsa@`|WC@?WL&U$H`FbKKzj@#M2{{ZEhMwf z=ZE-_j7_1uxR1*3)%RH~Rhindm4UuKs?`en_8;KxpIzCqm``(6MN_r6xjT2J)d6<)u`Abd8R*K8I4On^c%6 z61Ku{2rwgaDK*g|sgMEMoR|#hW7P#yDk46r(3N786-WF!8CXcYf+Z0F6NXBo%pf92 zX>h?>Wy%;b@o06GB7@Pdqb)L%=PJy~kxbv|_P99!c{k7a#5mQ4$N&9jUu0@xg5UV` zqfAXrar)#*8jS{9x9#A*2Oea8d5xcZ^LxB=@>G1WumpY(ux)A!58Zd1d+)!WYPrnZ z(i(sAXI~Z$3)F=7nsZ)IU zYk$k#cizDV9=e~YEt71X+QNm))BNBkkAo2W*Z<`|W#8UCJn_tPeDN>80)Xr0u!NQD z5BJ=8C%^LWeH07b2vz{ez~BH=Q&W89Ti@l46K~@qGN>(msV{k2EAQSdWb9#){*`a&cY8&Z>%04_ zW@;+A@sd+C*yKC6>tmflK&naSXmn1S)AtMYzXu9w1l`Ut`Q5J&9?s?q)6&y2vhxQL ziTYgg0FLKVX%6loY$ghns^~8=H=VUBBbHx`~OU666&Jf}|uG@nNHd=0jiM~_P^nHV8eC~{S9ab(6oDetM zt`63)^mdmxla6bIh{?>~vW z00S=WuD5r1Jv+5MPc15ys$T=&FV}00_C(+V!XHH6uhJ@&Z2S+S@0@P;g4-USuGFbc z*E`lX{g|p7@Cum`%Z}@rIxj1%)N+)QZTsRlM-8$&{0|(^r6#4V4@2E zrOkgeyM#=;Z&(>sJZM9MGG)^%nKvP+JHF!$A)kg%xKfbiyO=CG1eNJPG2i^AYN zA13A>hirVm17+Ibw#Ckki9}M4#(!FS6Z+pgex7IW&j4?%Yu_Ev&7g_O+RpzbEh(_X za?sxYY2{^>6v_Fr4J#uf3mjN)nnZE9#Z^-1;0?k6-`qpUkx5 zXop?)M3XHrzMDA2g^QN{VJLz8VgqOo{p!|}%i$V{Yys@<6cU*m`NT*su>4n5lb)r& zv)vItx3VBytY+$F7iiTq3bzV?3M6HyF_5we-+vtQKI)KYPIdV~#rTw)`s?V}L5 zqnSOx2Kse=2Q8S-)O!NgOTP;iV89Q2GunRP$HyxcW$JhpZT0NJ!qoOB6!tdj#%c*kjJI*oj+j|` zroM)XA_5bWLZWZRN3U3c?>oTF1snr2=j;q{kzz74Gi&8#8JTz5j1w1lGmP7IB0DmE zAr1!r9HlH+F8hy(JAcQlS172ijum+A{J0Je!qVsr^m`E4)&Gw67in8IurthEYx4va z-N?w;m|1wFUw`a4cHdTC8?CVuz3#kox)>1kH)Q1L8<_c_a9lIDxkl~g%YN+0caMJb zlYmsxSOW>Wy4&x)TQTwRiWl^#5Gak#aKJ9Ty+!g*@V@3Bc4p|DZ0Y$Xt%IG5rj|+j zSAE+f8HxAfXR%Yp4Brz@cD8V_&Y}I+m3B6_bDVJt!66#a>rcfWq@)Ara1g*zs-dlK zZt5Dl9q9M;{CNAaFmscp|EX;i%boYO8s2vKhqS7u`hI`Je;D{_!e&QDuLFQjx@Mb< z0u_2DjvkO+B)^9rEn7Yz9ao*fUR`}lr`A6Nf1``JJiCyFOnrQiSf8J#(3o!e5U#kQ z&Zn!yrm&88NT^-}+f^8s^lRth2$hGbkrEKQh)z5;o8lZQ7U7RCDfRt0Q-6WFHMDA~ z)PQIC`(s*dhMNo&d;pj;g>HodFQi9 zE;l>C__fay(`I%o5hT#8ly7|Rj#-}Xofq(ZyU*+K4Wt|Lf;l)L#wG8EV(IUH?LW_M zY>7_SXC==WnV6)kZ1eWT=XoSa754*&wX@GhVNcLGH+r=0?a{@1RaMo^Su}%@rrSa? zVTfsPUESr2XR|Ry%y>xK#(_CFXR|OiWDGpgeXs8bm+KM!buRCeRrz2|j`&NTd>&9p zC9uXQaNm7P5yO=OEypY!T;he7oQZ3y0+NIzYZ}Z1m8}p}fHe5|i=B%H9;4c7zsQBclRt zhwC}r{vlnY-RwW1FpRf(=xONkTxg!FK87DfdPNkT8}xF{MX0ve{+^jIT^q0^k*7_Zb&cb z!{>oF9bD89{j#(vu+o^NDou*_?k3phYDHjbz8_4RVg!iom;&QObv^&!EPd`#<2=t4 zooR@_9i>@H<&*J*{z=+){6SgH4mMdoq4y-ZxR3}ohMO`3q|)(^4amH;_UCZ4;-3vV!5Am!;6$^3~M5e zp~V8FB%L&+7mFBCR+W$P0WDuQdDN1ez}TdcVN-~P6(KfBGTd)+Cg$#wQJG!-)Q__= zg=7WY8Iwkxp@x&oQ(+BE7M4a}yaEhl<^dZM_X7T5QpJ;>NIl^jc3l0+GyF4?7rek* z9N9o;0V^|f;Ybd5lb(JL$$59cA`Sx{rW70PAfN5SOLuvt>Sb(v{GA#edvK~YhuiEdR|p4&c~5&H{WIAVjTRT3N)!~Ii7=_)hV z*cgj>`I6P9`-dDkg_x$ER=*?M*umQq;5))x-y@MSN#oB>E>FB8Ag6`GR8#4!*b-W> zTI+B#V?n3GDYba3W3Amce0kZaxSz-VGsvoXoWOl6l{Vd7F6XG{TmQ@b?v)p;uYVr( z(JM!YKTqjYTbtqb`n&Wy)@S<{wD8;eo5#gM-e3Q}`pLem9JNi4Y(N(n=_aN9yF*K$ zZS}}?d$LrUOyRP`wzsEe==VdZJ}{8^)DHUjx2Gj9-v0p{pUDQztH*s5Q+z z*FUo7b=dvoli`EB%?wu%8g8S$&EpkTy`+|jtt~?s>X}7=WdLr5Z({w8`c)^_NL^iq zaI+<==WVz}Q0nP&V`{4fFr3zX=Sr{B);~nEaIx7QJO74zp6b?7YHseiKe)mB-aoN; z#^z?XF@7+JEggLi|Aa(tyT!{i4O9&Ad>T^sIBLUkz^^38hwghhg2~p&J=XIHeN>9< zu&HVTs|SYzzPT;GOsfoel>9V z5k&RNVksC}v6`33M5QQ%&py7VO5i2>)v`_+WI~);2p(Y=o01@Vb2aE>dGqA2Jv2qm5n1#oFxc1a^fehS1RtkBC_=o{LN||DF>JVSok$ z0wGIMp|eO$5V)blsa8NFNen$??E1;Yz0v$xE({Vfff*S6%GbC4+f*x4*5gfcUhQ(G z_yq3~$uFv06?Jzr{1FAQA9N*t;X?zYe!}+@0o8Kp9)Jz4N+crACv)gqYLJPdEvB>CW?E=5k@n8oO zb_lFET0M#5W5eDr{`%uHzHG_L#U10d-=1%{_csyNbap{cEkoq2msh(dP}j=ic+s-^ z`7_Vqq~x=;4PPlJd4h?*DKt&rCsf&d8nn**8S#qKE9LrY$8lM0#pCUG=3YCVPfA{% zL2rOGC2^U+Z%4UYZ9OY6kqEIrfih+#M0<3f19!2)^emPid8gg(p34x;GV0p}BiiTY z^ZM|tNwfR2i^ypq&{uM-86DY!AFS_Xl`@T9-xP@bX?4ZblE_liY%)@z2+hoz|A?j{ z=Zu(OgDt3 zcQR%=xicOE%XW=kye_1!r%+w8ap98VPdrbeX$7bx*PHT}hqe*p7dI)!(b~^|UwxeF zbwL+Oq+7m1P!o!}*++ws%%(-aRD#F-y3ZAklZ%4<$DhimB#ptnJzfLH`@Ue_#|P)m*JYk; zKL5njB~`==z(g*=MyuB?{+~-mYIX`==Z`C6-ltRX^5u$`?vb-~YWo}y@EN%Itf)9% zv$JEGiS9@hGSr_oIhhA6c`ua4q@)MBX|?|6-oPg+)^6E;QDH{$K4r)^m^!h(4mkmhLDIAnd$$D~iMO>4I2&`bf zoFt#r%uyMzdMRCTJ(q;G<-6&y?{bC7e~Yl-bm5f^Uvq{g+?1czNkdV_<>bjxlkBu; zLOeQ(PGds1J53>Dr3vNj9&j#2zwbquCI_^(!Ks3>osh9(K9+Ac-R@L1zZz`OHWrZ* zBD;eWugX>AEO4R1n!L26;{PpH7YGJOSVNFOM;4>fs_xf5=`a`1nXn|Fi$TCpK8;3E z1ho^vHOa8;B4Fo&HMnNXnmQ!+D_ZJ+Ehg&_^TLMm8knZz!w3#zs1RAxU7BuUhe(#B z9jqGub`js#`U=+J2Lk20@@|b zES#LHDg+CjO;*zqG;K_WJ()BlN_xZfww+$Fjpkq9Pu;vnHRr9@9M@g;#S)R|&#FZt zim1P&n{8+sE?OONM=CB`WrK?BVt?30v7dmUQz`uXq!8u!N0k8fN+G&|?uz?kDs0$d zy`((WBhpxVS&nW|C<xUBY3_p3Y*6JHWI6nvsw?zxf~3)ozHsC;SIU z<#|Itp|1Mhi9C>5te5vTfY_#f z3A_+FHtR4O8=VgwuDZ|NKK2+sc=>@bY3%8#rOzpi{z%&QMP=({Z%%q%o^m!KFco-N z6({Qd(zYM6F4Y%jBA>|6W(j98pWYivi~kGI@1yH*-y=ohi+~ci;rF=+ClYGe7+PyQ zzIn9wgL}6F#Jh4-hht%u+caNIH#vBMo-fx7L0$JCf!quUe4%~x)cSw}4`hD3n;`S$E7`kJCknFB75`TbQORy26<6k(1@Y_>)AFvKLyOGG`QbufX)ZX63^vWH9k0Y#` zyzU$Am&RH@0*hBg4peKQwi3JFa8_WDfCUQ)8nOz>)7ym1v zU?YW8689E30q-p3qYkN5Kp?gfkwP;PgFXdnoaG@%DeeZ#^BxyKU-u z!TdTEcvshGG$Sidbj4KlR@wr|%p3bmuE1 z`(`JoFz|1QQ$+#ZasWgA-=E*0G4|>_?lwaVpP%}J(|jF{Z%xVAh;XZa;~pHs2SCG& z#ab05+|j=X5!HH!kOxu)Gx7-F!&@6#L+)#P;`B;+j85=M(IA7tXoCAFkKuOqiltw| zzhBbC2RV$9C-lD(cOya$vXmX_i9R$bte@oV{*p9k{Y z@l;3l$m8JUv7Y&4AGor3?0mi7Y zAo+uh#N`e4_Y0kRfI^fl^yQl)89O?H*7m%TUv-_kxs+GheH_~A6g0!gJqs$mYEBsQ zw_Ui4c>E(3nj=^nu}jiJZc$$X#QlGPjo)l^m9EEp_e9sOv@V6X2aP1B z^D71Y|G5BbS-m0%trert5Ya(0$bu)x=70Hm-n%$W=5+kPM%?s7_O|cBFb8kWG)MC{=sE^l2pl_Kz$w-8^-<~ZG`m0=6Jnc7*YA?m zY%@F{aEpV_^9Z@^aW8Ar=}GElzY$UUahhkO0S{Cj_Qhu9i#JE=3E=B+GZ;XyzS+z# ztur1$tlFwWVIUHKF&hr&ztNkNalKt067@Ns6Q4VO7*3TI^{l&C??&iow(BSIzm0de zy1)s*!E3SU8zJ(;uI+kdm+O4OeY)D3l(?1lw`tR1v=b#VD z;pl?P=MfJe)FS;`5vAY(I2oLub6Qf=*@At*E*+w9|UU7OLZ>@RyoF|Sr3}mvs%t8T> zkoSSs?}5=+4Eta2SAFAqrZ%f}pwYo#@w{K?Zxg=%=|k7~1N3NVgF_*gi#s&{Tp*Uz<#%SCXN>*)5d2QQ-W?7?j~%Zjvw&Qn=e_a2 zy~^RaLz9cF+wRv}K#?%ZD!@OS(wW?mL{f3bl^iI>4O5>-Y5n2J3tIlKG5NjGTV+na zJu=|k-i)FUxqf?0n+@(nb{(H?I$9_D#f9RIU)3#)TUo<3IUDufD~Pl@K6ng04oLW|yQ8=2^`;Bt7u)SP1AWZRHXDK0ytk~=J)f9SLAU!v@04+!H@tRjkL*78^%V7; z|6;&fuA!=Fccs6dzjx+Cqlud;iN7LS1ReV?n$tXtv0Nx@;ICN&h~}T$Z4wu@l>f20 zX}^VZ*$tS~0o*%|2uKMm4g!aZ)|*ON9$;Y1U8JpR%TC#!#Li5`I z)U#9RMqkNPmgCCSv(a_8FX`_*=rx3Ji0NFOU@YLEJ}egfA9CMv-HTwo0`?PVXtNi) zBESDqukLUZyTZi67tMnhhxiZ_s2)!+Fh|N@=HM$-3*3WdSt)6IRX69n9M{v=c-cPi0_yS?TJ9qX%;V6frS^3yv`MjU^uAV!g z@Hp(nYFB9Z`h#!=Qu{dVwGA%YT{Sduc1|W3cH7KzhYzLGfC(%4rsIv>MVl!@NolFL zNa2 zuS$XBi<6fZq__QAc<}Rf_~W_#U~zQX%|)a9erlTDa2;ix^)n$pe$NDOGT!v>9^Z^l zFc|wy;ckBBde;L9m+;ZVdR$&V?DGWTfnRU5v3z+lC8OG=LAcdFlfx5jj>s3gFCK5; z>522hz{(5P`{{Ck59pVXwQS#89F2AJ;XJeVp?zF${!F;(^?sS2moqXnfps%{x{#ig zH3CeKm{{0IqyI3`hH<(d(dzLz;sc}M0U&W|_SDUB?*Jy7-xEx`#dc&mr$Z1Vjz}OZ zP0t7P-ub?De@D<}s{sQ7%VYnM1^ zeh7asv4FJEjr82yp;(S;VgK^@Lh-nr(1Dq~yTggqZeNwFIoIM915H2q6C!bp)uS3{)HJEdeTU0Ea$MLyNA}>6IB#;2X&O z^hD!vzwEDW*$R7o#hcaF98Sd2|LhZ>P%w+=E zQ#d%*w=&HWkgo#ju1$H) zl{%wKwa=%_CQ%n>Zij~%V*+6jrk`{*0>3p}mzpy?_w)K9a~Dx&Ug=W>Ru0^AT)7p* zJIscCKt<`XA;A{`Dr=ql0!yxA4=#Q8UIkZy$KM6pSUZqiDj4Kp=*fib-bBIT7N0Q0 zvMn3RI^#nQ5q|zS(Qwh&m=GmiU5cLD4?yeq!V*rJ2@M?`F-77OBx2uf? zwihD@5BQl|rBYE46Fwp%Hs)WWi0MUiSo*qutr5kcp^6?A8#sZTN5^xQZgbZR#+HsK z6BD2FSvffbsRgpKQz`kfV1)+5<9D!_X_&)Po*J{9XMY-*CDzVmfkZCEg)S=ia2jA> z9wFF+WF}-^5&qf+r2NSn0|Q4xOBA5S%wIXIduQkLjGTcwY>r+WcqTr!(9<=|hmw+% zAjD|mKUnV?TAe|C2E`=JAjTCuY;T|CI92d(8ai4(kYHU#I^lq?03Hed?U@%ZUFf^G zfal)IRcbAutn2(2lA4O)(#|?;JmXYza%M81#H$cC&@rlL<(G@s0wpByZ~P1Rn!kfiUpP0i z^CJZ2%Y~3?(h~;Mj4XWMLRiw$a2i+fLa&X^jp;cVP~0J@#iH1VQrri_F0 zdthM$pe3bZ=L?szz`@Og{qSF_p352nTf@;1MS3FIfYGaK`y{8tT)`o5Xy{i})x+GW z8xsdlyk2eimlIL6G~E6_BttJNtCYR;OfmoBc;JE$j3bcI+Le`ob94CO;-PG@)}ZPE z3fMq{PX3ng(*)HElaug}!F?9;i0ZTFvCFPjR0-!Z!D(tq0!=udHHD{ zBImXzHKdy`zzLu8wxv+b7X_>okQ4T*{(_xAN8z`?az?u5x~vW}5`xmg8`cq12l zm?FO1$($Y&5sbG0Fqk9~!FCvwn~U>l2jbeo<0YOGyy4BC1uRU%&WjemX{##SpC{lZ z7%z3cE4A|UQyVQQ5F$=#_1`bO4B8}$Rft(qsB+5cZ&h?nw{N5h#ZdrANv@Ioa!rq! z(joVnLo<)(%KdBK{5Jgvy=rZ zZd(LaAZX*|NHFKe8)lFAhaY9~D4M!O3Z-2vBVu%m+X%0=1|GLnh*0^o_rX;OZ;AC9 zHU2-#jBfW?RGbMHv&E;Uy4)`JnlgSh|DLyfGEnB)dxCX~Q*^q6GcC)K;fyfokW?$D z79K=)kcmFRMtfk$I_4}FlvXgj4DV26out~)UyM;<42Nc&gH&{hKdqyJ$eH=wfTgV} zU$tPX^2zW62W~?F!}7b=5~0FIMM0TXA|L%j4B6>-kk5w$HIzAjBp$>M1&PTPL2nij zy6QUwsw5>h36mH*d8^jl?Papx5j45>am8U{av3#5m{83ZUXa?_lSNdL)xL?`Q%O*~W^i;kmTYbht8CGjFfp!s`apL8cKk)%{1qub36^?$p)8fr!C z!I=ktM{)gLHG&9tM5T%;+o z{>Sr_Al+;Y)q(0=f{I6&n@{YD>iR1-J(wkxwwQH?TTDhU*u-TRjgE`|l+^utU+ZV6 z5kbTjHa6P|>9J>G{BS4v2FzF_qX$RD&e5(Y6xht->*WsSLIUqEG^$9KQdm?ESAYAD zZ^lSw=eOV~uXV1dsd!n`Wst@K|7W{=suq$HrX)#tNEGlzkZjK1r03c^Sv{U8rRV{1 zX!+0uAe)TgiH>W?W?Q+693K)SY_s1H^y2nC^{?y(0jpC9_+iY~Pg8D}ley2{r&@b1 zXhXY@AR(WhqhC)h!%J1A>6Vk z_-d@1IBqQP)Obccn&6voBtg@>5Gaf<+~UCE@F;(%dQ>=Y1Jl1)1%8+0B+oad%q_NV z{bDMG4#jllvO*-Bm6d;@&>tM>C-Bfs$=(@=AkcZLCwb*WoccdOz0hmKWtrIwwRvGy zT71mepfKl9LiB`ElG6Prf{Ft~(9t!rva~|Zl3iqzAZfU`(H<&eUbU)R<1_%2qnp&C z+VbSS69&v2&h>&S=`&$}CLBVOwG>(~@Xr21GO~o<ntD~Ij;qA&uRM@`d4Az8F&cd70!X3d&l;S09sG)?VoOtK&Cg+&;*5J=X zxi+84PL~rIIdPC!jY=8r!dZn%lEG;LjnE?Y8t`I#3Gx)^95QKk0|vF~HH8hU$g?8Z48*E)=hGrlmZlBb7&>)I z%n?NmC|uqksP)f;kYh+=1?UP%G0Tb&;AsMCF69|P4;s8gnj*6&@;|ddG?*>Ht?^3B z_{>06A)#$F>?=JF&#*KCGFJm&Z8BPT7fpF^FyD2QCY&55D!qVWV?PrlY}7a@+`iQJ zWUICk-bDZ&#akpOFbNq(i90Zuk9!`@c9YF(b&MwCnK*l-a0%7z=68xipj z2%IUnycWy4U4NqoDINb*KPf!uktF_$_z0^>x9IiZuo4gf&u^{aDtkV$1FNE$jp?a(tf$PE<-CQ5- zU26;2EzA?a87*p*q0vBDUNm81)~9%j$il4sQ&w!Hti>lIrmVt(mBp{P-2=mqRmF&G zGGn?7H#dx0t3I>I^CEj{Oki!pLI(#t;et>{b*2}E?{pGnhusLa0~u=>hJ zLAxp>6+1+caqe%PsCbx1#seGYgKNnb-t9vU*tvfs9HTt@Vgj7hx85`r(6o6QVq4>$ zbF$MEO@B9?Ryem5lIWU@ri|`sh(Ju5$c+cfoMNfku1+zPR){T5)hRa*9Xdwq7bqrk z4jO11&Dv=Flph`-6cZAx;|86U$JElw27@B}8v!DA$IVPFi?$)n8n@%50NS_gnxP=d z^Hz8hmHe2^nq(Yj#4UODc<>Dzpe@Tc>}+$M%lUr^cElB0Wg^`T7Pp16EYT7jIBJCP zio|JfXQ5*?cTd==5LE#Yz3zK+irg}byfkdWYR~j3oZ(cO3nh;gS;B)O=;+Gc=nWSN zc8bC(#Z>eIbPXf2&^G^GIIhRx;)7~`!HyJe9zu3W3Qn<_s`9;Uw0ET#eP=#7Ze{Ijwv8S!WeI48>3o6SJ1$tVStA8w~Ahb zT}ZGMrXNsfdWffDRn)2z{+u{)M{i#d4)h!(!w+i*Z}_G8t9Q>DHDY*gbI(c-!BSB| zc${Qs0CM9exSCA>gUwT_P2QQw>g6%UDY@kUb{Fk3boNQEET-Jm`AlT?=^r&!X4Cj;$9v=G-0`jvqQW&&U%5iY~YHx>J zA0xqcDB@nw;iYqx-Ji~uVlU?up3yB*4|M7l`U7cX4X_<5vi0lThi7ODg+&a|fBE&V zAN3}5p0`m3ogU8*6u^%%O8@BGJuNJTt{$(bnUZxayV zV*1ps)kpV-WAK*Wp);#T=j4V=4L&dh$L+9Pu)fBM^cHSdX=8cR=vp=UFuaSl$2N8y zMX}^CHj8h1VdRp*GbS8ezh|bZ)tk*jL75J|$c>4;^2i|Wkxxq)%0@Wf)g1p;AgS4=X32J<-tMbNs@Kf+FQLy`*X)?@zT0dVCm zZDhU;i!f%2BEtIhL2;MAgj38M>14PMYUl?=#sk&gOh&^FzKlz8)!e@u{|z8o`Ge_@ zwbUu19IRSVVV=TbT9WX5JJg}2(vNnD9r07X_o?8f@5W_`^{>o8^AgKp6D%u$=k;Z^1g;K$S4lidc zYIyuNblRONVSJ%xl#N(^_N9h$}e11w{3uM z*od9hc51B6F?Yys__&aLD^EE50-wrwdIIWqL~@>SLmIJ81$~fl*Io)t%D0g}WuDjz0;nRZWWntV- zLnovD-U)mKVO$~Pd_$Yk@tV17cgVb7oB|8;&g6G`=06(sSPL>kWl0jub8zc4&YS0z zYQe<=&j!d^lxZR{-*%7e(krjp}io8EMKF(7F*v+~1Ru|>V@=(?#nVt`Wn_c4KR zuE-Tkdb?oe;O^5$)Su#=j}DvVM(mTWGS-5@=R%i>Aso?f!E| z;zB)V6jXE<+DmTW!JzI8L8NFni77^@+MEmVrjDUKs+e?-oJ~dYBnz!c`yQv|f|VdD zOJ*b40+r(`Yp&@q#tD*GIS-n+%D7`LT+0)UaQoOMyJ2Cp1dWihgolhB>CFKG*aMFQ zTO!fFe4DEL$;bX`7K59Jv!i0LkSQa{{1&Id&(da2gaJvRG*{~rNG)M3qEf|;Q4MEP zJF!B{CX;+Jk^FN&r<}Nx{->E%asJ5+L9otf9(xvsm=ChTMGB>P&5x=I8Rm_Sgm&8W zOYaFr(UKLKppx23Lk-?BLK?c>dA(V+l}Jey*$Kh$#$bLSh1j94_%GV-o1A8y5`URg zWFkMp*bQEYsu-S-3tHip(echcmfyyRv)r_W+Wxrxn{)J81 zMc1mlOMaHI>3@5_!}9LEg1U+8i3fc18jZcY+AOBIu2KclN%!NRWu-WFB% z(YgWCA1+}jQA%vfLNTJ=F0N(M5gS%`md-_uI=U5ss5MCV-sB__wu|9`Ta{okTLx0D zLCY+Btd-vN^^It&)y^G!F3KOU3Z<=bL<)@p)-_~Fl*MGL z1s*49R(pzq_byqvzhy%q_H-{g&ohOstI{+|`O>Kv<()3+kOVnv!Z-z!b6MQJKhWEC&SpJ=D)^7UxC`wDFaEivtTHMh z5cjBWFAq*dQC+TsQR-Uc`v;6P-RtBMVx3jq6Ky-uHsdN~0AGzrT|gcGs$VHIVWL6TD+d{nPSPH_Ysu zT$4CRy&`(~1(sC3;8~;S?<}{q3KHQehKFs#!g^DGm-N7fpXQ3E7KqS8=_dc8gX2bQ zHrys&_a#CLwJ4?vGm4OJk)J(kM(MF%bAY&1Y}u&Uke_%W-*`nsz+x_0 zulQB8gpsS?*-1%_2(nwOr0A7|6Ix0tH>%MQHsf=dd5a=)M$|7io6eeYj;g?Z#CHtl zbulPg#?`_b)5G8sUlYpT)qEKSCP8ZF`SPO`c*YpNNR5vDrgztF@;ja?+F>Sy@Toa* zmVdFg(A5O!h1HQ5vZHqeb71)OeJeB0|I)2;B-vDi%9fe;m0f*}Bw|+YDs<>CdpTbKO49 zhfzEbRI#I+P_CgtO+jgB;c^plV<#-vOct4tVV4bA?eh-N<4PnecAVn+$r0CHHJVVk zvZp*_9FZK&s2p`u_pmL=&Q_p78Wd&K_SVHTr>eUE#{6M&1|oIJNf89lgJ1H~z7WU? zO2_Z?OHyezXD@aHCDsTTXHWx76+{W^g^hCEQiYM+9j$^>t*j&@|0^^sC0h#0wgnpk zL2|*+S~6l^w;a4TTY~siwMLqBSqKqYBQZ9vHkIJAgYUKlKbnMLw^pA=jb~vS2ab)@ zTVB5t^p`$uapDcvS^`nBim0EZuEY=xqSUCVbkkX8y*F~f5PGsA7qM!rCPI*?{Tx#c z7F*Q9H#keA2u0Ydm(|Fc#2cIK*oCg2_U^h~jH+qI^6h$+|2U-W=7|&n{md{K9*)y# zx@`C{ANMC(@f6Pr6m%w7CZb+ncTvr!)$p~6U8bM<+i*=>m0Ju`$K{2#eI5iz zS%@n%$iA!}nAK+?r&O(I*z^Wb{Wm0hRq#1p&)`!-2Y`3WVvdRLl*Lu^AGvmvhH+LH z2uB8OULm+19@evGZg+8~!1@|uCBq~llGeg|3qBU=Ls>Ol^#;)m~1i zILr8kqM@0L(yW|E=tZ@JYh~!88Rf}{4t1hS6~YvwQH~jcQF}_iyHxAn8a4eMEZ6c=9xCG=%B z3}3>wwA3E?U?qMe;HXJQ=;-|d8;iNvj1cf6S(rl$3#P$<+JgfYHkgc1LyO}JTR&*{THhnKW;CNR;_)6t{7Ta7 zc(Gn9bftV9u670Vq06qjY_~N(L3;E|ZZ~u>=d;wK2zgqW00x8yh1eZQ+=I^M$Cz%V zhD7`HAm@;#%@a7OQS>erXn9?CArfI8sQ5ZZ%6qD?U(=4JLq>-5)(@Xgy1&tqt@Ice z6OP;;y6le_MW>@U<{|nMrb{jN>I;wq`@i!`Fj2`T_0#D`=Tcz69|FNUG$46YIZ?Uc zD{k}fZ)s^y!r{}LUvzCnXsdpG;6WItB+zNY;0HmRZ5OU}Ja`p^`o{*UvJRCOcm8`E zbV@Pd9}=T@h~Q#gDKT0K;N-F>o}BIsW2xl1mi&#kGKmOA8Joj{SjJ0Lfc1E(o4K;4 zEh#WnC4PKPG8xf!`{(a*B7E7>ij32f0a{;?eu5;ZmOh2TgO>JSqe$}`ttI~JjpkJuMCOw$6v@!A$m@p4H25_8e zG}_p0NN#(2(T=EL(ad6=|^kgma7x9_4!4vB-U0AF6O+veJ zLO3kyW8k~U4auxxVaEJ1yFyw54-R#ovdUL{yfP2W?$jwHlcZECK=lULMN8L$Nxqw1 zcoQ|eOH1JNPb=urWegHhsijh+uKrve-w-BmxUwRm`)NTcxf~L6caLdTKpzkr5M!m` zf0K%4;MiO5l9ukZf&OQeZceJq1`3Yydw&b7deJ>HFIq1S{k|P)#^kT8-IpAFCO#P6 z{1=}xK9Bdwd0}9KD3psTDu#RSgGXn87kb-|_+fi2g+TCwcWwdv6o@zjJCkUO@l|+v zdGsht&zhFa^WkLO@-L-~g&qxQo1(B7Z|@9b_+9a}i*vaR+`+Qd2}1ml>0QYYN=SU< zb6r#2K($q?N=`ArU+?&bHWyp;{*i~>#*y(MMmRn&SVQ5x8kYv zWu4cU?-cBuZ)DhlI4h1_XdKhj`(Yb*M<)#@S`?t(b@8vDAeFKDRS=wY%wUkk6nE6P zfw@NrTo2Y^*J0EO4n22nsA5yc@K=F#xE`Wx43xX(-IVT_9#2!*c85aXk2obUB3(fd zse!6m4;P4Qj2gOgwF{Pf;Ff4(x6;T=Xu;!L;5_r|5tOrW=7-(Usug3g%WZsjT;e<(+xz8=x#(QQAO>~n zE~?tpVSiV%%^V4G0kuZ;FQ27itYD;&AL2E%$%@F;mZd&mlAMvqL7y_q)7^bf>MP(PqtEpFJeD`Q05qLPVBmh-D=zOYZPeQL=5 zD}JAy1;W`1vnB4q3Gy(cphck@^58YHBRDmYV>fHWO%?b?mCUP%Dy=g9;^F8jPeB=! zi5~)tJYC{r2mTs?Po6=ni@oi+7;W6N07fzw&&?qqoADJfNfak<2NUY+dG^rx z_%T=uZ3v7v0p_{^6|B}3iUnCF>U)sK6yrxh6-dj9K*QMcRf9Dh;6@TNIKA~Te2A8( zU3I{`B0jie1_)`sR2jO{x|)HCwf+=|wlM~}e264rUdoc{YNoBQsGh=mcERXmpMYJz zf7(XVHmwI-d#HY${hF%y<45BfN(Vq$%6nQdN&{T4`x#rKsu;Gk( zUu6ErW>vkYI917Rw#eyo1qX)n0~2PIyQy(gG^((*)pj202{P_61ran$=u$pYYvQn@ z+)U=rsT8I&zST>AQwMudP3UyM8$iWo;jjLQ-WonWXG1oy>Nr`Sjhc&C|Lfb?qv0Ee z?wcz)WNahuA!c*UO!$Q6{vE&l`}nrC+qZni6ttY^oAANB%yQCI{i$Q=g3moodwN)# zxO2Qf+t`Owqa1T}>E16zCcI5)&Z4yP1a3xZpkt-Td7Ou^F5yS}{T!6;_EQK-ffRrP z?ZnCA_9(MksL}yuBV_E-tBqOZYzhP-5f`;LkFKD3j`|^Uj-4W(Twm1Ls93!EH8c}$ zRE~L|PyCLskpGFkNp4_#U(xH1yKWKNoy5i035=WJ9rfb`Olu8$wl(@W4UdeJUI@E$ ztq|d9x6x_%gktAxcpB(Jj(x$n8cPWbQkrkR>86jRm5!Rv_GLbu*Uj}UmGgDQPr_5+ z865|n^#BE+dPJkbseWN@#dHjGR8-LM146u01_r7J6q3Y?q<#e0_;m<@KsZ&2*_1%=OLwQ~c`bnyBi?64Ps^8{ojc}rB zgTPdi!{02~`v(H}_5`&ERI$u%7sHn&y)5;z+S1LqgNi0L8cO6Ek6#9NUK!7tYpkZf zc?eE_*B!U=ajfY|{t|SEk*MJI4wg@JhI#np3wfMR3}gIYw#Y=v?7xiRno;0x59#Ng zTmlO?*_OUQdkqN(?+>zqguFU4-Y2RmPEkv5SH*Qfh6boRONqr)x>Onp>u1^eq`R_T zA&JusMm0x$b8hBG;2E;QJ1S&%ot>6tcP@MeA&cYg#csCPCmTtnZF|js%XehJu8r() z{~a*aMGC*~aG9XhezIX43vMxO+A?j?Ko%MWNA>P#N6F=op2Ed%)FZ9UQLGo*LyoM< zD-#zkW3CM}Z_VS9o`NG^OLqpMstl283lnQ&Z8xrDm`mv@6Y!x`)*Z8v#QLA~E2!Ek zeax%*oa<(UL&h>enc7tb%}47UN=+_{ePu27GQ@PV%4+m2%T2^lO~keDL^PNv&mkX6 z#;qUeCk!KgmC_qYzUutZkuig3RuiTt9i@~sR2m4onwJ3-fqE9}QJ~mVxV2fuaWFMZ zzOZ7moSJ@puRwHis!@+F>FO0!d8)`U2RfJBNX~%l6=wj2xL@ zJ}QiA@*sV$B8*;Mtf52gH?5OVzA@|GG2vLfHdzg_rQCaT?_BNfb&I_&<)1wNyoQKP4d$z$~~&8Q*C$OUr^CkV3G6EW+h_etxBP0 zJO|k-T^PHk?FF)Bzqu>{u0TP&Px{p|K;*)Dg;6X5&LMlUox!C#v!%O}$R zUSLn&f6c`?w&JQ)U`mIwBs_JA#wBZ*z5PzDU(Ze2W=_67|03kguY`wCE-8emGd5#? z(J9xp&bB{=S0h7Yt7eay14I@3lH$pG^@9j-lEW$DFlM|tvA2hKxERu25D=vKy(>j8 z-IFH}{d^boXpje9PkC7%bm2#C2jXb~EF4Zt^1milVVE-OMnWo==cRg_y1s2CpmD$2 zr-NB;T;p>-C=v>y@fp@kUd-3G;uqHaEBl%L%HBIGISz_9HYN^;gI~cm6Yr0@e(gW?9Bx;Yu&fCylsqk|XGmV+O^*Jkmj0T6iE%9YIUYx=A z8L}}4>nP&kp?DdO=ss0axwjjFN7l*l4S1@pT`dz;YMstBp-7%#R{6vazi!ggc(<4j zS>q+Xz2FI_aY{v4M738yKQsADH<7oEhok0?pPtpV-yYWWT$4G%yqKSzw1ltD_}5|i z69%2S+NR6Hja8oRc?#l>5$IHLpE%P5OvsYoY)d8b#O+Y@w$~REaMA50ZKk5oT!mSL zcT!UaG?V>ynUOhbF0jy~c&tJ#tR&(yXj4NZeI)H%XV@G(G4Akq7WR$x>Tz2hHNxwG zP9BkITx=J8M^yX2uG^3xr|-;aa`cJ0i8VpVOlFvn&{*hGOL)#7!X$INz>K@N9GQrh zGhfRuIQHX-ew5lw5ATrm9G_V5vo? z2fc!ePr_bl@Zw#SUM{}Og?sIq0tYytqk)yy7|;Pu?w2-_;luOV%f?0ynpKe&b?UNF7jvGJ^Gc8`Ak2Qc&lr_O?ASnBz{iW1Z`1y3NRFoZ(lTQ*>Y1hJdVD5 zS?pJao??^&t+baMo|n9>KF(Io<{xu@`0~HpZS0SKUqF@ zm2$e(kZ+`MNFZSNPJ0l~#YY?};LBz24^{;s4{{{@^J89#A(|RHVed}!a&_h|y~g0O z`F!`J;2E*|#TloS_k7(_!^W8oW5$r$KP=Hj@HBju8jitNC@Hpk^qVeCIzfY3H&-rga+m@efu)iAn{^fC#s$NRixdsr7YdzQ(L`mC(kdDrXA?ml#@X1=m zfYX^qRFvL>>IHcc0@xeT*sGPBn&yvm!UQ!CN~;awGnGw_bu;w`4mf^6l)nuM2m-q{ znIBFJc>_;fT-y~rb4-<(@|Cfa=#qSgPQ`rA0*1xg-Kf@sGz$L}_tU#E4dMr87)lyf{R<3&b HBJ}?NG&V3S literal 0 HcmV?d00001 From f80180509c761ba9bd126406d3e41d2a53ff250d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 10 Dec 2012 20:00:10 +0100 Subject: [PATCH 4/8] added Jes suggestions on d2k R8 to SHP conversion - windtrapzaps is actually the IX structure animation - rpg, missile, missile2: frame order reversed like vehicles --- OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs | 4 ++-- OpenRA.Utility/Command.cs | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index 63ec8a7ad4..78f471c2ee 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -373,7 +373,7 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--r8", PathToDataR8, PathToPalette, "4674", "4721", Path.Combine(PathToSHPs, "heavyweld"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4722", "4744", Path.Combine(PathToSHPs, "unknown20"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4745", "4759", Path.Combine(PathToSHPs, "marker"), "--building"}, - new string[] {"--r8", PathToDataR8, PathToPalette, "4760", "4819", Path.Combine(PathToSHPs, "windtrapzaps"), "--building"}, + new string[] {"--r8", PathToDataR8, PathToPalette, "4760", "4819", Path.Combine(PathToSHPs, "researchzaps"), "--building"}, new string[] {"--r8", PathToDataR8, PathToPalette, "4820", "4840", Path.Combine(PathToSHPs, "deathhandlaunch"), "--building"}, new string[] {"--r8", Path.Combine(Platform.SupportDir, "Content/d2k/MOUSE.R8"), PathToPalette, "0", "264", Path.Combine(PathToSHPs, "mouse")}, new string[] {"--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), PathToPalette, "0", "799", Path.Combine(PathToTilesets, "BASE"), "--tileset"}, @@ -676,7 +676,7 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] {"--shp", Path.Combine(PathToSHPs, "heavyweld.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "unknown20.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "marker.png"), "96"}, - new string[] {"--shp", Path.Combine(PathToSHPs, "windtrapzaps.png"), "96"}, + new string[] {"--shp", Path.Combine(PathToSHPs, "researchzaps.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "deathhandlaunch.png"), "96"}, new string[] {"--shp", Path.Combine(PathToSHPs, "mouse.png"), "48"}, new string[] {"--shp", Path.Combine(PathToSHPs, "spice0.png"), "32"}, diff --git a/OpenRA.Utility/Command.cs b/OpenRA.Utility/Command.cs index 96097dfb75..df4b8eb25b 100644 --- a/OpenRA.Utility/Command.cs +++ b/OpenRA.Utility/Command.cs @@ -175,7 +175,8 @@ namespace OpenRA.Utility Console.WriteLine("FrameCount: {0}", FrameCount); } } - else if (args.Contains("--vehicle")) //resorting to RA/CnC compatible counter-clockwise frame order + //resorting to RA/CnC compatible counter-clockwise frame order + else if (args.Contains("--vehicle") || args.Contains("--projectile")) { frame = srcImage[startFrame]; @@ -296,11 +297,6 @@ namespace OpenRA.Utility OffsetX = frame.FrameWidth/2 - frame.Width/2; OffsetY = frame.FrameHeight/2 - frame.Height/2; } - else if (args.Contains("--projectile")) - { - OffsetX = frame.FrameWidth/2 - frame.OffsetX; - OffsetY = frame.FrameHeight/2 - frame.OffsetY; - } else if (args.Contains("--building")) { if (frame.OffsetX < 0) { frame.OffsetX = 0 - frame.OffsetX; } From 4a2473a1a5cc460216d19f08854ff6fdd458e3c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 15 Apr 2013 12:11:30 +0200 Subject: [PATCH 5/8] customisable icon size in build palette for d2k, fixes #2521 --- OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs | 19 +- mods/d2k/chrome/ingame.yaml | 386 +++++++++++++++++++ mods/d2k/mod.yaml | 2 +- 3 files changed, 398 insertions(+), 9 deletions(-) create mode 100644 mods/d2k/chrome/ingame.yaml diff --git a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs index ead5721ed8..e767606a6f 100755 --- a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs +++ b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs @@ -30,6 +30,9 @@ namespace OpenRA.Mods.RA.Widgets public string HoldText = ""; public string RequiresText = ""; + public int IconWidth = 64; + public int IconHeight = 48; + ProductionQueue CurrentQueue; List VisibleQueues; @@ -75,7 +78,7 @@ namespace OpenRA.Mods.RA.Widgets public override Rectangle EventBounds { - get { return new Rectangle((int)(paletteOrigin.X) - 24, (int)(paletteOrigin.Y), 215, Math.Max(48 * numActualRows, 40 * tabs.Count + 9)); } + get { return new Rectangle((int)(paletteOrigin.X) - 24, (int)(paletteOrigin.Y), 215, Math.Max(IconHeight * numActualRows, 40 * tabs.Count + 9)); } } public override void Tick() @@ -217,16 +220,16 @@ namespace OpenRA.Mods.RA.Widgets for (var w = 0; w < numActualRows; w++) WidgetUtils.DrawRGBA( ChromeProvider.GetImage(paletteCollection, "bg-" + (w % 4)), - new float2(origin.X - 9, origin.Y + 48 * w)); + new float2(origin.X - 9, origin.Y + IconHeight * w)); WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "bottom"), - new float2(origin.X - 9, origin.Y - 1 + 48 * numActualRows)); + new float2(origin.X - 9, origin.Y - 1 + IconHeight * numActualRows)); // Icons string tooltipItem = null; foreach (var item in allBuildables) { - var rect = new RectangleF(origin.X + x * 64, origin.Y + 48 * y, 64, 48); + var rect = new RectangleF(origin.X + x * IconWidth, origin.Y + IconHeight * y, IconWidth, IconHeight); var drawPos = new float2(rect.Location); WidgetUtils.DrawSHP(iconSprites[item.Name], drawPos, worldRenderer); @@ -277,7 +280,7 @@ namespace OpenRA.Mods.RA.Widgets // Tooltip if (tooltipItem != null && !paletteAnimating && paletteOpen) DrawProductionTooltip(world, tooltipItem, - new float2(Game.viewport.Width, origin.Y + numActualRows * 48 + 9).ToInt2()); + new float2(Game.viewport.Width, origin.Y + numActualRows * IconHeight + 9).ToInt2()); } // Palette Dock @@ -286,12 +289,12 @@ namespace OpenRA.Mods.RA.Widgets for (int i = 0; i < numActualRows; i++) WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "dock-" + (i % 4).ToString()), - new float2(Game.viewport.Width - 14, origin.Y + 48 * i)); + new float2(Game.viewport.Width - 14, origin.Y + IconHeight * i)); WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "dock-bottom"), - new float2(Game.viewport.Width - 14, origin.Y - 1 + 48 * numActualRows)); + new float2(Game.viewport.Width - 14, origin.Y - 1 + IconHeight * numActualRows)); - return 48 * y + 9; + return IconHeight * y + 9; } string GetOverlayForItem(ProductionItem item) diff --git a/mods/d2k/chrome/ingame.yaml b/mods/d2k/chrome/ingame.yaml new file mode 100644 index 0000000000..445d94ac7c --- /dev/null +++ b/mods/d2k/chrome/ingame.yaml @@ -0,0 +1,386 @@ +Container@INGAME_ROOT: + Logic:IngameChromeLogic + Children: + WorldInteractionController@INTERACTION_CONTROLLER: + X:0 + Y:0 + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM + ViewportScrollController: + X:0 + Y:0 + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM + WorldCommand: + X:0 + Y:0 + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM + Timer@GAME_TIMER: + X: WINDOW_RIGHT/2 + Y: 0-10 + StrategicProgress@STRATEGIC_PROGRESS: + X: WINDOW_RIGHT/2 + Y: 40 + Background@POSTGAME_BG: + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:400 + Height:100 + Background:dialog4 + Visible:false + Children: + Label@TEXT: + X:(PARENT_RIGHT - WIDTH)/2 + Y:0 + Width:200 + Height:80 + Align:Center + Button@POSTGAME_OBSERVE: + X:10 + Y:(PARENT_BOTTOM - HEIGHT - 10) + Width:150 + Height:25 + Font:Bold + Text:Observe + Button@POSTGAME_QUIT: + X:(PARENT_RIGHT - WIDTH - 10) + Y:(PARENT_BOTTOM - HEIGHT - 10) + Width:150 + Height:25 + Font:Bold + Text:Leave + SupportPowerBin@INGAME_POWERS_BIN: + X:0 + Y:25 + ReadyText: READY + HoldText: ON HOLD + BuildPalette@INGAME_BUILD_PALETTE: + X:WINDOW_RIGHT - 250 + Y:280 + Width:250 + Height:500 + ReadyText: READY + HoldText: ON HOLD + RequiresText: Requires + IconWidth: 60 + IconHeight: 47 + Button@INGAME_OPTIONS_BUTTON: + X:0 + Y:0 + Width:160 + Height:25 + Text:Options + Font:Bold + Key: escape + Button@INGAME_DIPLOMACY_BUTTON: + X:162 + Y:0 + Width:160 + Height:25 + Text:Diplomacy + Font:Bold + Button@CHEATS_BUTTON: + X:324 + Y:0 + Width:160 + Height:25 + Text:Cheats + Visible:false + Font:Bold + Button@OBJECTIVES_BUTTON: + X:486 + Y:0 + Width:160 + Height:25 + Text:Objectives + Visible:false + Font:Bold + RadarBin@INGAME_RADAR_BIN: + WorldInteractionController:INTERACTION_CONTROLLER + PowerBin@INGAME_POWER_BIN: + MoneyBin@INGAME_MONEY_BIN: + X:WINDOW_RIGHT - WIDTH + Y:0 + Width:320 + Height: 32 + Children: + OrderButton@SELL: + Logic:OrderButtonsChromeLogic + X:3 + Y:0 + Width:30 + Height:30 + Image:sell + Description:Sell + LongDesc:Sell buildings, reclaiming a \nproportion of their build cost + OrderButton@POWER_DOWN: + Logic:OrderButtonsChromeLogic + X:39 + Y:0 + Width:30 + Height:30 + Image:power + Description:Powerdown + LongDesc:Disable unneeded structures so their \npower can be used elsewhere + OrderButton@REPAIR: + Logic:OrderButtonsChromeLogic + X:75 + Y:0 + Width:30 + Height:30 + Image:repair + Description:Repair + LongDesc:Repair damaged buildings + WorldTooltip: + Background@INGAME_OPTIONS_BG: + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:300 + Height:295 + Visible:false + Children: + Label@LABEL_TITLE: + X:(PARENT_RIGHT - WIDTH)/2 + Y:20 + Width:250 + Height:25 + Text:Options + Align:Center + Font:Bold + Button@RESUME: + X:(PARENT_RIGHT - WIDTH)/2 + Y:60 + Width:160 + Height:25 + Text:Resume + Font:Bold + Key:escape + Button@SETTINGS: + X:(PARENT_RIGHT - WIDTH)/2 + Y:100 + Width:160 + Height:25 + Text:Settings + Font:Bold + Button@MUSIC: + X:(PARENT_RIGHT - WIDTH)/2 + Y:140 + Width:160 + Height:25 + Text:Music + Font:Bold + Button@SURRENDER: + X:(PARENT_RIGHT - WIDTH)/2 + Y:180 + Width:160 + Height:25 + Text:Surrender + Font:Bold + Button@DISCONNECT: + X:(PARENT_RIGHT - WIDTH)/2 + Y:220 + Width:160 + Height:25 + Text:Abort Mission + Font:Bold + Background@DIPLOMACY_BG: + Logic:DiplomacyLogic + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:450 + Height:400 + Visible:false + Children: + Label@LABEL_TITLE: + X:(PARENT_RIGHT - WIDTH)/2 + Y:20 + Width:250 + Height:25 + Text:Diplomacy + Align:Center + Font:Bold + ChatDisplay@CHAT_DISPLAY: + X:250 + Y:WINDOW_BOTTOM - HEIGHT - 30 + Width: 760 + Height: 200 + DrawBackground: False + RemoveTime:250 + UseContrast: yes + ChatEntry@CHAT_ENTRY: + X:250 + Y:WINDOW_BOTTOM - HEIGHT + Width: 760 + Height: 30 + UseContrast: yes + Background@PERF_BG: + ClickThrough:true + Background:dialog4 + Logic:PerfDebugLogic + X:10 + Y:WINDOW_BOTTOM - 250 + Width: 210 + Height: 250 + Children: + PerfGraph@GRAPH: + X:5 + Y:5 + Width:200 + Height:200 + Label@TEXT: + X:20 + Y:205 + Width:170 + Height:40 +Container@OBSERVER_ROOT: + Visible:true + Logic:IngameObserverChromeLogic + Children: + WorldInteractionController@INTERACTION_CONTROLLER: + X:0 + Y:0 + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM + ViewportScrollController: + X:0 + Y:0 + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM + Timer@GAME_TIMER: + X: WINDOW_RIGHT/2 + Y: 0-10 + Background@POSTGAME_BG: + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:400 + Height:100 + Background:dialog4 + Visible:false + Children: + Label@TEXT: + X:(PARENT_RIGHT - WIDTH)/2 + Y:0 + Width:200 + Height:80 + Align:Center + Button@POSTGAME_OBSERVE: + X:10 + Y:(PARENT_BOTTOM - HEIGHT - 10) + Width:150 + Height:25 + Font:Bold + Text:Observe + Button@POSTGAME_QUIT: + X:(PARENT_RIGHT - WIDTH - 10) + Y:(PARENT_BOTTOM - HEIGHT - 10) + Width:150 + Height:25 + Font:Bold + Text:Leave + SupportPowerBin@INGAME_POWERS_BIN: + X:0 + Y:25 + Button@INGAME_OPTIONS_BUTTON: + X:0 + Y:0 + Width:160 + Height:25 + Text:Options + Font:Bold + Key:escape + WorldTooltip: + Background@INGAME_OPTIONS_BG: + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:300 + Height:295 + Visible:false + Children: + Label@LABEL_TITLE: + X:(PARENT_RIGHT - WIDTH)/2 + Y:20 + Width:250 + Height:25 + Text:Options + Align:Center + Font:Bold + Button@RESUME: + X:(PARENT_RIGHT - WIDTH)/2 + Y:60 + Width:160 + Height:25 + Text:Resume + Font:Bold + Key:escape + Button@SETTINGS: + X:(PARENT_RIGHT - WIDTH)/2 + Y:100 + Width:160 + Height:25 + Text:Settings + Font:Bold + Button@MUSIC: + X:(PARENT_RIGHT - WIDTH)/2 + Y:140 + Width:160 + Height:25 + Text:Music + Font:Bold + Button@SURRENDER: + X:(PARENT_RIGHT - WIDTH)/2 + Y:180 + Width:160 + Height:25 + Text:Surrender + Font:Bold + Button@DISCONNECT: + X:(PARENT_RIGHT - WIDTH)/2 + Y:220 + Width:160 + Height:25 + Text:Abort Mission + Font:Bold + ChatDisplay@CHAT_DISPLAY: + X:250 + Y:WINDOW_BOTTOM - HEIGHT - 30 + Width: 760 + Height: 200 + DrawBackground: False + RemoveTime:250 + UseContrast: yes + ChatEntry@CHAT_ENTRY: + X:250 + Y:WINDOW_BOTTOM - HEIGHT + Width: 760 + Height: 30 + UseContrast: yes + Background@PERF_BG: + ClickThrough:true + Background:dialog4 + Logic:PerfDebugLogic + X:10 + Y:WINDOW_BOTTOM - 250 + Width: 210 + Height: 250 + Children: + PerfGraph@GRAPH: + X:5 + Y:5 + Width:200 + Height:200 + Label@TEXT: + X:20 + Y:205 + Width:170 + Height:40 +Background@FMVPLAYER: + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM + Background:dialog4 + Children: + VqaPlayer@PLAYER: + X:0 + Y:0 + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 233542a134..1d5477292a 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -45,7 +45,7 @@ Assemblies: ChromeLayout: mods/d2k/chrome/gameinit.yaml - mods/ra/chrome/ingame.yaml + mods/d2k/chrome/ingame.yaml mods/ra/chrome/ingame-chat.yaml mods/d2k/chrome/mainmenu.yaml mods/ra/chrome/settings.yaml From f71dbca8e793b27698ba48bbfd95737b20a4af78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 15 Apr 2013 12:11:48 +0200 Subject: [PATCH 6/8] removed blood splatter idle animation for d2k rifle infantry --- mods/d2k/rules/infantry.yaml | 2 -- mods/d2k/sequences.yaml | 8 -------- 2 files changed, 10 deletions(-) diff --git a/mods/d2k/rules/infantry.yaml b/mods/d2k/rules/infantry.yaml index 7ae0d51723..18ab40852c 100644 --- a/mods/d2k/rules/infantry.yaml +++ b/mods/d2k/rules/infantry.yaml @@ -22,7 +22,6 @@ RIFLE: TakeCover: -RenderInfantry: RenderInfantryProne: - IdleAnimations: idle1,idle2 ENGINEER: Inherits: ^Infantry @@ -81,7 +80,6 @@ BAZOOKA: TakeCover: -RenderInfantry: RenderInfantryProne: - IdleAnimations: idle1,idle2 MEDIC: Inherits: ^Infantry diff --git a/mods/d2k/sequences.yaml b/mods/d2k/sequences.yaml index d90565e37d..e8a4cd201e 100644 --- a/mods/d2k/sequences.yaml +++ b/mods/d2k/sequences.yaml @@ -212,14 +212,6 @@ rifle: Start: 48 Length: 12 Tick: 160 - idle1: rifledeath - Start: 60 - Length: 8 - Tick: 160 - idle2: rifledeath - Start: 68 - Length: 8 - Tick: 160 bazooka: stand: From 194f8b0dfc2be85a48162c018631fd479f7b8dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 15 Apr 2013 12:19:20 +0200 Subject: [PATCH 7/8] don't package the PhotoShop files --- {mods/d2k/uibits => artsrc/d2k}/tabs.psd | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename {mods/d2k/uibits => artsrc/d2k}/tabs.psd (100%) diff --git a/mods/d2k/uibits/tabs.psd b/artsrc/d2k/tabs.psd similarity index 100% rename from mods/d2k/uibits/tabs.psd rename to artsrc/d2k/tabs.psd From 59afc46ab5edf580eaf11fe82d06547e7a07d846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 15 Apr 2013 12:49:06 +0200 Subject: [PATCH 8/8] separate ra chrome for better reusability in d2k --- mods/cnc-classic/mod.yaml | 3 + mods/d2k/chrome/color-picker.yaml | 66 +++ mods/d2k/chrome/ingame.yaml | 176 +------ mods/d2k/chrome/lobby.yaml | 68 +-- mods/d2k/mod.yaml | 3 + mods/ra-classic/mod.yaml | 3 + mods/ra/chrome/color-picker.yaml | 66 +++ mods/ra/chrome/ingame-fmvplayer.yaml | 10 + mods/ra/chrome/ingame-observer.yaml | 643 ++++++++++++++++++++++++++ mods/ra/chrome/ingame.yaml | 655 +-------------------------- mods/ra/chrome/lobby.yaml | 68 +-- mods/ra/mod.yaml | 3 + 12 files changed, 811 insertions(+), 953 deletions(-) create mode 100644 mods/d2k/chrome/color-picker.yaml create mode 100644 mods/ra/chrome/color-picker.yaml create mode 100644 mods/ra/chrome/ingame-fmvplayer.yaml create mode 100644 mods/ra/chrome/ingame-observer.yaml diff --git a/mods/cnc-classic/mod.yaml b/mods/cnc-classic/mod.yaml index 4bc2c14963..68baf6b44a 100644 --- a/mods/cnc-classic/mod.yaml +++ b/mods/cnc-classic/mod.yaml @@ -66,9 +66,12 @@ ChromeLayout: mods/ra/chrome/gameinit.yaml mods/ra/chrome/ingame.yaml mods/ra/chrome/ingame-chat.yaml + mods/ra/chrome/ingame-observer.yaml + mods/ra/chrome/ingame-fmvplayer.yaml mods/ra/chrome/mainmenu.yaml mods/ra/chrome/settings.yaml mods/ra/chrome/lobby.yaml + mods/ra/chrome/color-picker.yaml mods/ra/chrome/map-chooser.yaml mods/ra/chrome/create-server.yaml mods/ra/chrome/serverbrowser.yaml diff --git a/mods/d2k/chrome/color-picker.yaml b/mods/d2k/chrome/color-picker.yaml new file mode 100644 index 0000000000..a51f95e9b9 --- /dev/null +++ b/mods/d2k/chrome/color-picker.yaml @@ -0,0 +1,66 @@ +Background@COLOR_CHOOSER: + Logic:ColorPickerLogic + Background:dialog2 + Width:310 + Height:120 + Children: + Button@SAVE_BUTTON: + X:210 + Y:85 + Width:90 + Height:25 + Text:Save + Font:Bold + Button@RANDOM_BUTTON: + X:115 + Y:85 + Width:90 + Height:25 + Text:Random + Font:Bold + ShpImage@CARRYALL: + X:220 + Y:10 + Image:carryall + Palette:colorpicker + Label@HUE_LABEL: + X:0 + Y:5 + Width:40 + Height:20 + Align: Right + Text: Hue: + Slider@HUE: + X:43 + Y:10 + Width:160 + Height:20 + Ticks:5 + Label@SAT_LABEL: + X:0 + Y:30 + Width:40 + Height:20 + Align: Right + Text: Sat: + Slider@SAT: + X:43 + Y:35 + Width:160 + Height:20 + Ticks:5 + Label@LUM_LABEL: + X:0 + Y:55 + Width:40 + Height:20 + Align: Right + Text: Lum: + Slider@LUM: + X:43 + Y:60 + Width:160 + Height:20 + Ticks:5 + MinimumValue: 0.2 + MaximumValue: 1 diff --git a/mods/d2k/chrome/ingame.yaml b/mods/d2k/chrome/ingame.yaml index 445d94ac7c..00f3ca76f1 100644 --- a/mods/d2k/chrome/ingame.yaml +++ b/mods/d2k/chrome/ingame.yaml @@ -70,7 +70,7 @@ Container@INGAME_ROOT: Y:0 Width:160 Height:25 - Text:Options + Text:Options (ESC) Font:Bold Key: escape Button@INGAME_DIPLOMACY_BUTTON: @@ -78,24 +78,27 @@ Container@INGAME_ROOT: Y:0 Width:160 Height:25 - Text:Diplomacy + Text:Diplomacy (F1) Font:Bold + Key: f1 Button@CHEATS_BUTTON: X:324 Y:0 Width:160 Height:25 - Text:Cheats + Text:Cheats (F2) Visible:false Font:Bold + Key: f2 Button@OBJECTIVES_BUTTON: X:486 Y:0 Width:160 Height:25 - Text:Objectives + Text:Objectives (F3) Visible:false Font:Bold + Key: f3 RadarBin@INGAME_RADAR_BIN: WorldInteractionController:INTERACTION_CONTROLLER PowerBin@INGAME_POWER_BIN: @@ -200,161 +203,14 @@ Container@INGAME_ROOT: Text:Diplomacy Align:Center Font:Bold - ChatDisplay@CHAT_DISPLAY: - X:250 - Y:WINDOW_BOTTOM - HEIGHT - 30 - Width: 760 - Height: 200 - DrawBackground: False - RemoveTime:250 - UseContrast: yes - ChatEntry@CHAT_ENTRY: - X:250 - Y:WINDOW_BOTTOM - HEIGHT - Width: 760 - Height: 30 - UseContrast: yes - Background@PERF_BG: - ClickThrough:true - Background:dialog4 - Logic:PerfDebugLogic - X:10 - Y:WINDOW_BOTTOM - 250 - Width: 210 - Height: 250 - Children: - PerfGraph@GRAPH: - X:5 - Y:5 - Width:200 - Height:200 - Label@TEXT: - X:20 - Y:205 - Width:170 - Height:40 -Container@OBSERVER_ROOT: - Visible:true - Logic:IngameObserverChromeLogic - Children: - WorldInteractionController@INTERACTION_CONTROLLER: - X:0 - Y:0 - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM - ViewportScrollController: - X:0 - Y:0 - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM - Timer@GAME_TIMER: - X: WINDOW_RIGHT/2 - Y: 0-10 - Background@POSTGAME_BG: - X:(WINDOW_RIGHT - WIDTH)/2 - Y:(WINDOW_BOTTOM - HEIGHT)/2 - Width:400 - Height:100 - Background:dialog4 - Visible:false - Children: - Label@TEXT: + Button@CLOSE_DIPLOMACY: X:(PARENT_RIGHT - WIDTH)/2 - Y:0 - Width:200 - Height:80 - Align:Center - Button@POSTGAME_OBSERVE: - X:10 - Y:(PARENT_BOTTOM - HEIGHT - 10) - Width:150 - Height:25 - Font:Bold - Text:Observe - Button@POSTGAME_QUIT: - X:(PARENT_RIGHT - WIDTH - 10) - Y:(PARENT_BOTTOM - HEIGHT - 10) - Width:150 - Height:25 - Font:Bold - Text:Leave - SupportPowerBin@INGAME_POWERS_BIN: - X:0 - Y:25 - Button@INGAME_OPTIONS_BUTTON: - X:0 - Y:0 - Width:160 - Height:25 - Text:Options - Font:Bold - Key:escape - WorldTooltip: - Background@INGAME_OPTIONS_BG: - X:(WINDOW_RIGHT - WIDTH)/2 - Y:(WINDOW_BOTTOM - HEIGHT)/2 - Width:300 - Height:295 - Visible:false - Children: - Label@LABEL_TITLE: - X:(PARENT_RIGHT - WIDTH)/2 - Y:20 - Width:250 - Height:25 - Text:Options - Align:Center - Font:Bold - Button@RESUME: - X:(PARENT_RIGHT - WIDTH)/2 - Y:60 + Y:350 Width:160 Height:25 - Text:Resume + Text:Close Font:Bold Key:escape - Button@SETTINGS: - X:(PARENT_RIGHT - WIDTH)/2 - Y:100 - Width:160 - Height:25 - Text:Settings - Font:Bold - Button@MUSIC: - X:(PARENT_RIGHT - WIDTH)/2 - Y:140 - Width:160 - Height:25 - Text:Music - Font:Bold - Button@SURRENDER: - X:(PARENT_RIGHT - WIDTH)/2 - Y:180 - Width:160 - Height:25 - Text:Surrender - Font:Bold - Button@DISCONNECT: - X:(PARENT_RIGHT - WIDTH)/2 - Y:220 - Width:160 - Height:25 - Text:Abort Mission - Font:Bold - ChatDisplay@CHAT_DISPLAY: - X:250 - Y:WINDOW_BOTTOM - HEIGHT - 30 - Width: 760 - Height: 200 - DrawBackground: False - RemoveTime:250 - UseContrast: yes - ChatEntry@CHAT_ENTRY: - X:250 - Y:WINDOW_BOTTOM - HEIGHT - Width: 760 - Height: 30 - UseContrast: yes Background@PERF_BG: ClickThrough:true Background:dialog4 @@ -373,14 +229,4 @@ Container@OBSERVER_ROOT: X:20 Y:205 Width:170 - Height:40 -Background@FMVPLAYER: - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM - Background:dialog4 - Children: - VqaPlayer@PLAYER: - X:0 - Y:0 - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM + Height:40 \ No newline at end of file diff --git a/mods/d2k/chrome/lobby.yaml b/mods/d2k/chrome/lobby.yaml index cbb4e9f03e..e1969e1cf1 100644 --- a/mods/d2k/chrome/lobby.yaml +++ b/mods/d2k/chrome/lobby.yaml @@ -433,70 +433,4 @@ Background@SERVER_LOBBY: Width:120 Height:25 Text:Start Game - Font:Bold -Background@COLOR_CHOOSER: - Logic:ColorPickerLogic - Background:dialog2 - Width:310 - Height:120 - Children: - Button@SAVE_BUTTON: - X:210 - Y:85 - Width:90 - Height:25 - Text:Save - Font:Bold - Button@RANDOM_BUTTON: - X:115 - Y:85 - Width:90 - Height:25 - Text:Random - Font:Bold - ShpImage@CARRYALL: - X:220 - Y:10 - Image:carryall - Palette:colorpicker - Label@HUE_LABEL: - X:0 - Y:5 - Width:40 - Height:20 - Align: Right - Text: Hue: - Slider@HUE: - X:43 - Y:10 - Width:160 - Height:20 - Ticks:5 - Label@SAT_LABEL: - X:0 - Y:30 - Width:40 - Height:20 - Align: Right - Text: Sat: - Slider@SAT: - X:43 - Y:35 - Width:160 - Height:20 - Ticks:5 - Label@LUM_LABEL: - X:0 - Y:55 - Width:40 - Height:20 - Align: Right - Text: Lum: - Slider@LUM: - X:43 - Y:60 - Width:160 - Height:20 - Ticks:5 - MinimumValue: 0.2 - MaximumValue: 1 + Font:Bold \ No newline at end of file diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 1d5477292a..1af3dc4afa 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -47,9 +47,12 @@ ChromeLayout: mods/d2k/chrome/gameinit.yaml mods/d2k/chrome/ingame.yaml mods/ra/chrome/ingame-chat.yaml + mods/ra/chrome/ingame-observer.yaml + mods/ra/chrome/ingame-fmvplayer.yaml mods/d2k/chrome/mainmenu.yaml mods/ra/chrome/settings.yaml mods/d2k/chrome/lobby.yaml + mods/d2k/chrome/color-picker.yaml mods/ra/chrome/map-chooser.yaml mods/ra/chrome/create-server.yaml mods/ra/chrome/serverbrowser.yaml diff --git a/mods/ra-classic/mod.yaml b/mods/ra-classic/mod.yaml index 9c0d6ce510..f626035688 100644 --- a/mods/ra-classic/mod.yaml +++ b/mods/ra-classic/mod.yaml @@ -57,9 +57,12 @@ ChromeLayout: mods/ra/chrome/gameinit.yaml mods/ra/chrome/ingame.yaml mods/ra/chrome/ingame-chat.yaml + mods/ra/chrome/ingame-observer.yaml + mods/ra/chrome/ingame-fmvplayer.yaml mods/ra/chrome/mainmenu.yaml mods/ra/chrome/settings.yaml mods/ra/chrome/lobby.yaml + mods/ra/chrome/color-picker.yaml mods/ra/chrome/map-chooser.yaml mods/ra/chrome/create-server.yaml mods/ra/chrome/serverbrowser.yaml diff --git a/mods/ra/chrome/color-picker.yaml b/mods/ra/chrome/color-picker.yaml new file mode 100644 index 0000000000..6de1830ecd --- /dev/null +++ b/mods/ra/chrome/color-picker.yaml @@ -0,0 +1,66 @@ +Background@COLOR_CHOOSER: + Logic:ColorPickerLogic + Background:dialog2 + Width:310 + Height:120 + Children: + Button@SAVE_BUTTON: + X:210 + Y:85 + Width:90 + Height:25 + Text:Save + Font:Bold + Button@RANDOM_BUTTON: + X:115 + Y:85 + Width:90 + Height:25 + Text:Random + Font:Bold + ShpImage@FACT: + X:220 + Y:10 + Image:fact + Palette:colorpicker + Label@HUE_LABEL: + X:0 + Y:5 + Width:40 + Height:20 + Align: Right + Text: Hue: + Slider@HUE: + X:43 + Y:10 + Width:160 + Height:20 + Ticks:5 + Label@SAT_LABEL: + X:0 + Y:30 + Width:40 + Height:20 + Align: Right + Text: Sat: + Slider@SAT: + X:43 + Y:35 + Width:160 + Height:20 + Ticks:5 + Label@LUM_LABEL: + X:0 + Y:55 + Width:40 + Height:20 + Align: Right + Text: Lum: + Slider@LUM: + X:43 + Y:60 + Width:160 + Height:20 + Ticks:5 + MinimumValue: 0.2 + MaximumValue: 1 diff --git a/mods/ra/chrome/ingame-fmvplayer.yaml b/mods/ra/chrome/ingame-fmvplayer.yaml new file mode 100644 index 0000000000..4a536b56b8 --- /dev/null +++ b/mods/ra/chrome/ingame-fmvplayer.yaml @@ -0,0 +1,10 @@ +Background@FMVPLAYER: + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM + Background:dialog4 + Children: + VqaPlayer@PLAYER: + X:0 + Y:0 + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM \ No newline at end of file diff --git a/mods/ra/chrome/ingame-observer.yaml b/mods/ra/chrome/ingame-observer.yaml new file mode 100644 index 0000000000..e757831a99 --- /dev/null +++ b/mods/ra/chrome/ingame-observer.yaml @@ -0,0 +1,643 @@ +Container@OBSERVER_ROOT: + Visible:true + Logic:IngameObserverChromeLogic + Children: + WorldInteractionController@INTERACTION_CONTROLLER: + X:0 + Y:0 + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM + ViewportScrollController: + X:0 + Y:0 + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM + Timer@GAME_TIMER: + X: WINDOW_RIGHT/2 + Y: 0-10 + Background@POSTGAME_BG: + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:400 + Height:100 + Background:dialog4 + Visible:false + Children: + Label@TEXT: + X:(PARENT_RIGHT - WIDTH)/2 + Y:0 + Width:200 + Height:80 + Align:Center + Button@POSTGAME_OBSERVE: + X:10 + Y:(PARENT_BOTTOM - HEIGHT - 10) + Width:150 + Height:25 + Font:Bold + Text:Observe + Button@POSTGAME_QUIT: + X:(PARENT_RIGHT - WIDTH - 10) + Y:(PARENT_BOTTOM - HEIGHT - 10) + Width:150 + Height:25 + Font:Bold + Text:Leave + SupportPowerBin@INGAME_POWERS_BIN: + X:0 + Y:25 + Button@INGAME_OPTIONS_BUTTON: + X:0 + Y:0 + Width:160 + Height:25 + Text:Options (ESC) + Font:Bold + Key:escape + Button@INGAME_STATS_BUTTON: + X:162 + Y:0 + Width:160 + Height:25 + Text:Statistics (F1) + Font:Bold + Key:f1 + Background@RADAR_BG: + X:WINDOW_RIGHT-255 + Y:5 + Width:250 + Height:250 + Children: + Radar@INGAME_RADAR: + X:10 + Y:10 + Width:PARENT_RIGHT-19 + Height:PARENT_BOTTOM-19 + WorldInteractionController:INTERACTION_CONTROLLER + DropDownButton@SHROUD_SELECTOR: + Logic:ObserverShroudSelectorLogic + X:WINDOW_RIGHT-250 + Y:260 + Width:240 + Height:25 + Font:Bold + Visible:true + WorldTooltip: + Background@INGAME_OPTIONS_BG: + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:300 + Height:295 + Visible:false + Children: + Label@LABEL_TITLE: + X:(PARENT_RIGHT - WIDTH)/2 + Y:20 + Width:250 + Height:25 + Text:Options + Align:Center + Font:Bold + Button@RESUME: + X:(PARENT_RIGHT - WIDTH)/2 + Y:60 + Width:160 + Height:25 + Text:Resume + Font:Bold + Key:escape + Button@SETTINGS: + X:(PARENT_RIGHT - WIDTH)/2 + Y:100 + Width:160 + Height:25 + Text:Settings + Font:Bold + Button@MUSIC: + X:(PARENT_RIGHT - WIDTH)/2 + Y:140 + Width:160 + Height:25 + Text:Music + Font:Bold + Button@SURRENDER: + X:(PARENT_RIGHT - WIDTH)/2 + Y:180 + Width:160 + Height:25 + Text:Surrender + Font:Bold + Button@DISCONNECT: + X:(PARENT_RIGHT - WIDTH)/2 + Y:220 + Width:160 + Height:25 + Text:Abort Mission + Font:Bold + Background@PERF_BG: + ClickThrough:true + Background:dialog4 + Logic:PerfDebugLogic + X:10 + Y:WINDOW_BOTTOM - 250 + Width: 210 + Height: 250 + Children: + PerfGraph@GRAPH: + X:5 + Y:5 + Width:200 + Height:200 + Label@TEXT: + X:20 + Y:205 + Width:170 + Height:40 + Container@OBSERVER_STATS: + Logic:ObserverStatsLogic + X:25 + Y:50 + Width:950 + Height:500 + Visible:false + Children: + Background@BACKGROUND: + Width:PARENT_RIGHT + Height:PARENT_BOTTOM + Background:dialog + Children: + Label@TITLE: + X:0 + Y:15 + Width:PARENT_RIGHT + Height:25 + Font:Bold + Align:Center + Text:Statistics + DropDownButton@STATS_DROPDOWN: + X:PARENT_RIGHT-200 + Y:15 + Width:185 + Height:25 + Font:Bold + Container@BASIC_STATS_HEADERS: + X:0 + Y:0 + Width:PARENT_RIGHT + Height:PARENT_BOTTOM + Children: + Label@PLAYER_HEADER: + X:85 + Y:40 + Width:160 + Height:25 + Font:Bold + Text:Player + Label@CASH_HEADER: + X:245 + Y:40 + Width:80 + Height:25 + Font:Bold + Text:Cash + Label@EARNED_MIN_HEADER: + X:325 + Y:40 + Width:60 + Height:25 + Font:Bold + Text:Earned/min + Label@POWER_HEADER: + X:425 + Y:40 + Width:80 + Height:25 + Font:Bold + Text:Power + Label@KILLS_HEADER: + X:505 + Y:40 + Width:40 + Height:25 + Font:Bold + Text:Kills + Align:Right + Label@DEATHS_HEADER: + X:565 + Y:40 + Width:40 + Height:25 + Font:Bold + Text:Deaths + Align:Right + Label@ACTIONS_MIN_HEADER: + X:665 + Y:40 + Width:40 + Height:25 + Font:Bold + Text:Actions/min + Align:Right + Container@ECONOMY_STATS_HEADERS: + X:0 + Y:0 + Width:PARENT_RIGHT + Height:PARENT_BOTTOM + Children: + Label@PLAYER_HEADER: + X:85 + Y:40 + Width:160 + Height:25 + Font:Bold + Text:Player + Label@CASH_HEADER: + X:245 + Y:40 + Width:80 + Height:25 + Font:Bold + Text:Cash + Label@EARNED_MIN_HEADER: + X:325 + Y:40 + Width:60 + Height:25 + Font:Bold + Text:Earned/min + Label@EARNED_THIS_MIN_HEADER: + X:425 + Y:40 + Width:60 + Height:25 + Font:Bold + Text:Earned this min + Label@ASSETS_HEADER: + X:565 + Y:40 + Width:60 + Height:25 + Font:Bold + Text:Assets + Label@EARNED_HEADER: + X:645 + Y:40 + Width:60 + Height:25 + Font:Bold + Text:Earned + Label@SPENT_HEADER: + X:725 + Y:40 + Width:60 + Height:25 + Font:Bold + Text:Spent + Label@HARVESTERS_HEADER: + X:805 + Y:40 + Width:60 + Height:25 + Font:Bold + Text:Harvesters + Align:Right + Container@PRODUCTION_STATS_HEADERS: + X:0 + Y:0 + Width:PARENT_RIGHT + Height:PARENT_BOTTOM + Children: + Label@PLAYER_HEADER: + X:85 + Y:40 + Width:160 + Height:25 + Font:Bold + Text:Player + Label@PRODUCTION_HEADER: + X:245 + Y:40 + Width:320 + Height:25 + Font:Bold + Text:Production + Label@SUPPORT_POWERS_HEADER: + X:565 + Y:40 + Width:320 + Height:25 + Font:Bold + Text:Support Powers + Container@COMBAT_STATS_HEADERS: + X:0 + Y:0 + Width:PARENT_RIGHT + Height:PARENT_BOTTOM + Children: + Label@PLAYER_HEADER: + X:85 + Y:40 + Width:160 + Height:25 + Font:Bold + Text:Player + Label@CONTROL_HEADER: + X:245 + Y:40 + Width:60 + Height:25 + Font:Bold + Text:Control + Label@KILLS_COST_HEADER: + X:325 + Y:40 + Width:60 + Height:25 + Font:Bold + Text:Kills + Label@DEATHS_COST_HEADER: + X:405 + Y:40 + Width:60 + Height:25 + Font:Bold + Text:Deaths + Label@UNITS_KILLED_HEADER: + X:505 + Y:40 + Width:40 + Height:25 + Font:Bold + Text:Units Killed + Align:Right + Label@UNITS_DEAD_HEADER: + X:605 + Y:40 + Width:40 + Height:25 + Font:Bold + Text:Units Lost + Align:Right + Label@BUILDINGS_KILLED_HEADER: + X:725 + Y:40 + Width:40 + Height:25 + Font:Bold + Text:Bldg Killed + Align:Right + Label@BUILDINGS_DEAD_HEADER: + X:825 + Y:40 + Width:40 + Height:25 + Font:Bold + Text:Bldg Lost + Align:Right + Container@EARNED_THIS_MIN_GRAPH_HEADERS: + X:0 + Y:0 + Width:PARENT_RIGHT + Height:PARENT_BOTTOM + Children: + Label@EARNED_THIS_MIN_HEADER: + X:0 + Y:40 + Width:PARENT_RIGHT + Height:25 + Font:Bold + Text:Earnings received each minute + Align:Center + ScrollPanel@PLAYER_STATS_PANEL: + X:25 + Y:70 + Width:PARENT_RIGHT-50 + Height:PARENT_BOTTOM-45-50 + ItemSpacing:5 + Children: + ScrollItem@TEAM_TEMPLATE: + X:0 + Y:0 + Width:PARENT_RIGHT-35 + Height:25 + Children: + Label@TEAM: + X:0 + Y:0 + Width:PARENT_RIGHT + Height:PARENT_BOTTOM + Font:Bold + ScrollItem@BASIC_PLAYER_TEMPLATE: + X:0 + Y:0 + Width:PARENT_RIGHT-35 + Height:25 + Children: + Image@FLAG: + X:20 + Y:5 + Width:35 + Height:PARENT_BOTTOM-5 + ImageName:random + ImageCollection:flags + Label@PLAYER: + X:55 + Y:0 + Width:160 + Height:PARENT_BOTTOM + Font:Bold + Label@CASH: + X:215 + Y:0 + Width:80 + Height:PARENT_BOTTOM + Label@EARNED_MIN: + X:295 + Y:0 + Width:60 + Height:PARENT_BOTTOM + Label@POWER: + X:395 + Y:0 + Width:80 + Height:PARENT_BOTTOM + Label@KILLS: + X:475 + Y:0 + Width:40 + Height:PARENT_BOTTOM + Align:Right + Label@DEATHS: + X:535 + Y:0 + Width:40 + Height:PARENT_BOTTOM + Align:Right + Label@ACTIONS_MIN: + X:635 + Y:0 + Width:40 + Height:PARENT_BOTTOM + Align:Right + ScrollItem@ECONOMY_PLAYER_TEMPLATE: + X:0 + Y:0 + Width:PARENT_RIGHT-35 + Height:25 + Children: + Image@FLAG: + X:20 + Y:5 + Width:35 + Height:PARENT_BOTTOM-5 + ImageName:random + ImageCollection:flags + Label@PLAYER: + X:55 + Y:0 + Width:160 + Height:PARENT_BOTTOM + Font:Bold + Label@CASH: + X:215 + Y:0 + Width:80 + Height:PARENT_BOTTOM + Label@EARNED_MIN: + X:295 + Y:0 + Width:60 + Height:PARENT_BOTTOM + Label@EARNED_THIS_MIN: + X:395 + Y:0 + Width:60 + Height:PARENT_BOTTOM + Label@ASSETS: + X:535 + Y:0 + Width:60 + Height:PARENT_BOTTOM + Label@EARNED: + X:615 + Y:0 + Width:60 + Height:PARENT_BOTTOM + Label@SPENT: + X:695 + Y:0 + Width:60 + Height:PARENT_BOTTOM + Label@HARVESTERS: + X:775 + Y:0 + Width:60 + Height:PARENT_BOTTOM + Align:Right + ScrollItem@PRODUCTION_PLAYER_TEMPLATE: + X:0 + Y:0 + Width:PARENT_RIGHT-35 + Height:25 + Children: + Image@FLAG: + X:20 + Y:5 + Width:35 + Height:PARENT_BOTTOM-5 + ImageName:random + ImageCollection:flags + Label@PLAYER: + X:55 + Y:0 + Width:160 + Height:PARENT_BOTTOM + Font:Bold + ObserverProductionIcons@PRODUCTION_ICONS: + X:215 + Y:0 + Width:320 + Height:PARENT_BOTTOM + ObserverSupportPowerIcons@SUPPORT_POWER_ICONS: + X:535 + Y:0 + Width:320 + Height:PARENT_BOTTOM + ScrollItem@COMBAT_PLAYER_TEMPLATE: + X:0 + Y:0 + Width:PARENT_RIGHT-35 + Height:25 + Children: + Image@FLAG: + X:20 + Y:5 + Width:35 + Height:PARENT_BOTTOM-5 + ImageName:random + ImageCollection:flags + Label@PLAYER: + X:55 + Y:0 + Width:160 + Height:PARENT_BOTTOM + Font:Bold + Label@CONTROL: + X:215 + Y:0 + Width:60 + Height:PARENT_BOTTOM + Label@KILLS_COST: + X:295 + Y:0 + Width:60 + Height:PARENT_BOTTOM + Label@DEATHS_COST: + X:375 + Y:0 + Width:60 + Height:PARENT_BOTTOM + Label@UNITS_KILLED: + X:475 + Y:0 + Width:40 + Height:PARENT_BOTTOM + Align:Right + Label@UNITS_DEAD: + X:575 + Y:0 + Width:40 + Height:PARENT_BOTTOM + Align:Right + Label@BUILDINGS_KILLED: + X:695 + Y:0 + Width:40 + Height:PARENT_BOTTOM + Align:Right + Label@BUILDINGS_DEAD: + X:795 + Y:0 + Width:40 + Height:PARENT_BOTTOM + Align:Right + Container@EARNED_THIS_MIN_GRAPH_TEMPLATE: + X:0 + Y:0 + Width:PARENT_RIGHT-100 + Height:PARENT_BOTTOM-50 + Children: + LineGraph@EARNED_THIS_MIN_GRAPH: + X:0 + Y:0 + Width:PARENT_RIGHT + Height:PARENT_BOTTOM + ValueFormat:${0} + XAxisValueFormat:{0} + YAxisValueFormat:${0:F0} + XAxisSize:20 + YAxisSize:10 + XAxisLabel:m + YAxisLabel:$ + LabelFont:TinyBold + AxisFont:Bold \ No newline at end of file diff --git a/mods/ra/chrome/ingame.yaml b/mods/ra/chrome/ingame.yaml index cad3bc4f1d..da33fa2c65 100644 --- a/mods/ra/chrome/ingame.yaml +++ b/mods/ra/chrome/ingame.yaml @@ -227,657 +227,4 @@ Container@INGAME_ROOT: X:20 Y:205 Width:170 - Height:40 -Container@OBSERVER_ROOT: - Visible:true - Logic:IngameObserverChromeLogic - Children: - WorldInteractionController@INTERACTION_CONTROLLER: - X:0 - Y:0 - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM - ViewportScrollController: - X:0 - Y:0 - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM - Timer@GAME_TIMER: - X: WINDOW_RIGHT/2 - Y: 0-10 - Background@POSTGAME_BG: - X:(WINDOW_RIGHT - WIDTH)/2 - Y:(WINDOW_BOTTOM - HEIGHT)/2 - Width:400 - Height:100 - Background:dialog4 - Visible:false - Children: - Label@TEXT: - X:(PARENT_RIGHT - WIDTH)/2 - Y:0 - Width:200 - Height:80 - Align:Center - Button@POSTGAME_OBSERVE: - X:10 - Y:(PARENT_BOTTOM - HEIGHT - 10) - Width:150 - Height:25 - Font:Bold - Text:Observe - Button@POSTGAME_QUIT: - X:(PARENT_RIGHT - WIDTH - 10) - Y:(PARENT_BOTTOM - HEIGHT - 10) - Width:150 - Height:25 - Font:Bold - Text:Leave - SupportPowerBin@INGAME_POWERS_BIN: - X:0 - Y:25 - Button@INGAME_OPTIONS_BUTTON: - X:0 - Y:0 - Width:160 - Height:25 - Text:Options (ESC) - Font:Bold - Key:escape - Button@INGAME_STATS_BUTTON: - X:162 - Y:0 - Width:160 - Height:25 - Text:Statistics (F1) - Font:Bold - Key:f1 - Background@RADAR_BG: - X:WINDOW_RIGHT-255 - Y:5 - Width:250 - Height:250 - Children: - Radar@INGAME_RADAR: - X:10 - Y:10 - Width:PARENT_RIGHT-19 - Height:PARENT_BOTTOM-19 - WorldInteractionController:INTERACTION_CONTROLLER - DropDownButton@SHROUD_SELECTOR: - Logic:ObserverShroudSelectorLogic - X:WINDOW_RIGHT-250 - Y:260 - Width:240 - Height:25 - Font:Bold - Visible:true - WorldTooltip: - Background@INGAME_OPTIONS_BG: - X:(WINDOW_RIGHT - WIDTH)/2 - Y:(WINDOW_BOTTOM - HEIGHT)/2 - Width:300 - Height:295 - Visible:false - Children: - Label@LABEL_TITLE: - X:(PARENT_RIGHT - WIDTH)/2 - Y:20 - Width:250 - Height:25 - Text:Options - Align:Center - Font:Bold - Button@RESUME: - X:(PARENT_RIGHT - WIDTH)/2 - Y:60 - Width:160 - Height:25 - Text:Resume - Font:Bold - Key:escape - Button@SETTINGS: - X:(PARENT_RIGHT - WIDTH)/2 - Y:100 - Width:160 - Height:25 - Text:Settings - Font:Bold - Button@MUSIC: - X:(PARENT_RIGHT - WIDTH)/2 - Y:140 - Width:160 - Height:25 - Text:Music - Font:Bold - Button@SURRENDER: - X:(PARENT_RIGHT - WIDTH)/2 - Y:180 - Width:160 - Height:25 - Text:Surrender - Font:Bold - Button@DISCONNECT: - X:(PARENT_RIGHT - WIDTH)/2 - Y:220 - Width:160 - Height:25 - Text:Abort Mission - Font:Bold - Background@PERF_BG: - ClickThrough:true - Background:dialog4 - Logic:PerfDebugLogic - X:10 - Y:WINDOW_BOTTOM - 250 - Width: 210 - Height: 250 - Children: - PerfGraph@GRAPH: - X:5 - Y:5 - Width:200 - Height:200 - Label@TEXT: - X:20 - Y:205 - Width:170 - Height:40 - Container@OBSERVER_STATS: - Logic:ObserverStatsLogic - X:25 - Y:50 - Width:950 - Height:500 - Visible:false - Children: - Background@BACKGROUND: - Width:PARENT_RIGHT - Height:PARENT_BOTTOM - Background:dialog - Children: - Label@TITLE: - X:0 - Y:15 - Width:PARENT_RIGHT - Height:25 - Font:Bold - Align:Center - Text:Statistics - DropDownButton@STATS_DROPDOWN: - X:PARENT_RIGHT-200 - Y:15 - Width:185 - Height:25 - Font:Bold - Container@BASIC_STATS_HEADERS: - X:0 - Y:0 - Width:PARENT_RIGHT - Height:PARENT_BOTTOM - Children: - Label@PLAYER_HEADER: - X:85 - Y:40 - Width:160 - Height:25 - Font:Bold - Text:Player - Label@CASH_HEADER: - X:245 - Y:40 - Width:80 - Height:25 - Font:Bold - Text:Cash - Label@EARNED_MIN_HEADER: - X:325 - Y:40 - Width:60 - Height:25 - Font:Bold - Text:Earned/min - Label@POWER_HEADER: - X:425 - Y:40 - Width:80 - Height:25 - Font:Bold - Text:Power - Label@KILLS_HEADER: - X:505 - Y:40 - Width:40 - Height:25 - Font:Bold - Text:Kills - Align:Right - Label@DEATHS_HEADER: - X:565 - Y:40 - Width:40 - Height:25 - Font:Bold - Text:Deaths - Align:Right - Label@ACTIONS_MIN_HEADER: - X:665 - Y:40 - Width:40 - Height:25 - Font:Bold - Text:Actions/min - Align:Right - Container@ECONOMY_STATS_HEADERS: - X:0 - Y:0 - Width:PARENT_RIGHT - Height:PARENT_BOTTOM - Children: - Label@PLAYER_HEADER: - X:85 - Y:40 - Width:160 - Height:25 - Font:Bold - Text:Player - Label@CASH_HEADER: - X:245 - Y:40 - Width:80 - Height:25 - Font:Bold - Text:Cash - Label@EARNED_MIN_HEADER: - X:325 - Y:40 - Width:60 - Height:25 - Font:Bold - Text:Earned/min - Label@EARNED_THIS_MIN_HEADER: - X:425 - Y:40 - Width:60 - Height:25 - Font:Bold - Text:Earned this min - Label@ASSETS_HEADER: - X:565 - Y:40 - Width:60 - Height:25 - Font:Bold - Text:Assets - Label@EARNED_HEADER: - X:645 - Y:40 - Width:60 - Height:25 - Font:Bold - Text:Earned - Label@SPENT_HEADER: - X:725 - Y:40 - Width:60 - Height:25 - Font:Bold - Text:Spent - Label@HARVESTERS_HEADER: - X:805 - Y:40 - Width:60 - Height:25 - Font:Bold - Text:Harvesters - Align:Right - Container@PRODUCTION_STATS_HEADERS: - X:0 - Y:0 - Width:PARENT_RIGHT - Height:PARENT_BOTTOM - Children: - Label@PLAYER_HEADER: - X:85 - Y:40 - Width:160 - Height:25 - Font:Bold - Text:Player - Label@PRODUCTION_HEADER: - X:245 - Y:40 - Width:320 - Height:25 - Font:Bold - Text:Production - Label@SUPPORT_POWERS_HEADER: - X:565 - Y:40 - Width:320 - Height:25 - Font:Bold - Text:Support Powers - Container@COMBAT_STATS_HEADERS: - X:0 - Y:0 - Width:PARENT_RIGHT - Height:PARENT_BOTTOM - Children: - Label@PLAYER_HEADER: - X:85 - Y:40 - Width:160 - Height:25 - Font:Bold - Text:Player - Label@CONTROL_HEADER: - X:245 - Y:40 - Width:60 - Height:25 - Font:Bold - Text:Control - Label@KILLS_COST_HEADER: - X:325 - Y:40 - Width:60 - Height:25 - Font:Bold - Text:Kills - Label@DEATHS_COST_HEADER: - X:405 - Y:40 - Width:60 - Height:25 - Font:Bold - Text:Deaths - Label@UNITS_KILLED_HEADER: - X:505 - Y:40 - Width:40 - Height:25 - Font:Bold - Text:Units Killed - Align:Right - Label@UNITS_DEAD_HEADER: - X:605 - Y:40 - Width:40 - Height:25 - Font:Bold - Text:Units Lost - Align:Right - Label@BUILDINGS_KILLED_HEADER: - X:725 - Y:40 - Width:40 - Height:25 - Font:Bold - Text:Bldg Killed - Align:Right - Label@BUILDINGS_DEAD_HEADER: - X:825 - Y:40 - Width:40 - Height:25 - Font:Bold - Text:Bldg Lost - Align:Right - Container@EARNED_THIS_MIN_GRAPH_HEADERS: - X:0 - Y:0 - Width:PARENT_RIGHT - Height:PARENT_BOTTOM - Children: - Label@EARNED_THIS_MIN_HEADER: - X:0 - Y:40 - Width:PARENT_RIGHT - Height:25 - Font:Bold - Text:Earnings received each minute - Align:Center - ScrollPanel@PLAYER_STATS_PANEL: - X:25 - Y:70 - Width:PARENT_RIGHT-50 - Height:PARENT_BOTTOM-45-50 - ItemSpacing:5 - Children: - ScrollItem@TEAM_TEMPLATE: - X:0 - Y:0 - Width:PARENT_RIGHT-35 - Height:25 - Children: - Label@TEAM: - X:0 - Y:0 - Width:PARENT_RIGHT - Height:PARENT_BOTTOM - Font:Bold - ScrollItem@BASIC_PLAYER_TEMPLATE: - X:0 - Y:0 - Width:PARENT_RIGHT-35 - Height:25 - Children: - Image@FLAG: - X:20 - Y:5 - Width:35 - Height:PARENT_BOTTOM-5 - ImageName:random - ImageCollection:flags - Label@PLAYER: - X:55 - Y:0 - Width:160 - Height:PARENT_BOTTOM - Font:Bold - Label@CASH: - X:215 - Y:0 - Width:80 - Height:PARENT_BOTTOM - Label@EARNED_MIN: - X:295 - Y:0 - Width:60 - Height:PARENT_BOTTOM - Label@POWER: - X:395 - Y:0 - Width:80 - Height:PARENT_BOTTOM - Label@KILLS: - X:475 - Y:0 - Width:40 - Height:PARENT_BOTTOM - Align:Right - Label@DEATHS: - X:535 - Y:0 - Width:40 - Height:PARENT_BOTTOM - Align:Right - Label@ACTIONS_MIN: - X:635 - Y:0 - Width:40 - Height:PARENT_BOTTOM - Align:Right - ScrollItem@ECONOMY_PLAYER_TEMPLATE: - X:0 - Y:0 - Width:PARENT_RIGHT-35 - Height:25 - Children: - Image@FLAG: - X:20 - Y:5 - Width:35 - Height:PARENT_BOTTOM-5 - ImageName:random - ImageCollection:flags - Label@PLAYER: - X:55 - Y:0 - Width:160 - Height:PARENT_BOTTOM - Font:Bold - Label@CASH: - X:215 - Y:0 - Width:80 - Height:PARENT_BOTTOM - Label@EARNED_MIN: - X:295 - Y:0 - Width:60 - Height:PARENT_BOTTOM - Label@EARNED_THIS_MIN: - X:395 - Y:0 - Width:60 - Height:PARENT_BOTTOM - Label@ASSETS: - X:535 - Y:0 - Width:60 - Height:PARENT_BOTTOM - Label@EARNED: - X:615 - Y:0 - Width:60 - Height:PARENT_BOTTOM - Label@SPENT: - X:695 - Y:0 - Width:60 - Height:PARENT_BOTTOM - Label@HARVESTERS: - X:775 - Y:0 - Width:60 - Height:PARENT_BOTTOM - Align:Right - ScrollItem@PRODUCTION_PLAYER_TEMPLATE: - X:0 - Y:0 - Width:PARENT_RIGHT-35 - Height:25 - Children: - Image@FLAG: - X:20 - Y:5 - Width:35 - Height:PARENT_BOTTOM-5 - ImageName:random - ImageCollection:flags - Label@PLAYER: - X:55 - Y:0 - Width:160 - Height:PARENT_BOTTOM - Font:Bold - ObserverProductionIcons@PRODUCTION_ICONS: - X:215 - Y:0 - Width:320 - Height:PARENT_BOTTOM - ObserverSupportPowerIcons@SUPPORT_POWER_ICONS: - X:535 - Y:0 - Width:320 - Height:PARENT_BOTTOM - ScrollItem@COMBAT_PLAYER_TEMPLATE: - X:0 - Y:0 - Width:PARENT_RIGHT-35 - Height:25 - Children: - Image@FLAG: - X:20 - Y:5 - Width:35 - Height:PARENT_BOTTOM-5 - ImageName:random - ImageCollection:flags - Label@PLAYER: - X:55 - Y:0 - Width:160 - Height:PARENT_BOTTOM - Font:Bold - Label@CONTROL: - X:215 - Y:0 - Width:60 - Height:PARENT_BOTTOM - Label@KILLS_COST: - X:295 - Y:0 - Width:60 - Height:PARENT_BOTTOM - Label@DEATHS_COST: - X:375 - Y:0 - Width:60 - Height:PARENT_BOTTOM - Label@UNITS_KILLED: - X:475 - Y:0 - Width:40 - Height:PARENT_BOTTOM - Align:Right - Label@UNITS_DEAD: - X:575 - Y:0 - Width:40 - Height:PARENT_BOTTOM - Align:Right - Label@BUILDINGS_KILLED: - X:695 - Y:0 - Width:40 - Height:PARENT_BOTTOM - Align:Right - Label@BUILDINGS_DEAD: - X:795 - Y:0 - Width:40 - Height:PARENT_BOTTOM - Align:Right - Container@EARNED_THIS_MIN_GRAPH_TEMPLATE: - X:0 - Y:0 - Width:PARENT_RIGHT-100 - Height:PARENT_BOTTOM-50 - Children: - LineGraph@EARNED_THIS_MIN_GRAPH: - X:0 - Y:0 - Width:PARENT_RIGHT - Height:PARENT_BOTTOM - ValueFormat:${0} - XAxisValueFormat:{0} - YAxisValueFormat:${0:F0} - XAxisSize:20 - YAxisSize:10 - XAxisLabel:m - YAxisLabel:$ - LabelFont:TinyBold - AxisFont:Bold -Background@FMVPLAYER: - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM - Background:dialog4 - Children: - VqaPlayer@PLAYER: - X:0 - Y:0 - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM + Height:40 \ No newline at end of file diff --git a/mods/ra/chrome/lobby.yaml b/mods/ra/chrome/lobby.yaml index 353b85f3e0..3b85458a1a 100644 --- a/mods/ra/chrome/lobby.yaml +++ b/mods/ra/chrome/lobby.yaml @@ -432,70 +432,4 @@ Background@SERVER_LOBBY: Width:120 Height:25 Text:Start Game - Font:Bold -Background@COLOR_CHOOSER: - Logic:ColorPickerLogic - Background:dialog2 - Width:310 - Height:120 - Children: - Button@SAVE_BUTTON: - X:210 - Y:85 - Width:90 - Height:25 - Text:Save - Font:Bold - Button@RANDOM_BUTTON: - X:115 - Y:85 - Width:90 - Height:25 - Text:Random - Font:Bold - ShpImage@FACT: - X:220 - Y:10 - Image:fact - Palette:colorpicker - Label@HUE_LABEL: - X:0 - Y:5 - Width:40 - Height:20 - Align: Right - Text: Hue: - Slider@HUE: - X:43 - Y:10 - Width:160 - Height:20 - Ticks:5 - Label@SAT_LABEL: - X:0 - Y:30 - Width:40 - Height:20 - Align: Right - Text: Sat: - Slider@SAT: - X:43 - Y:35 - Width:160 - Height:20 - Ticks:5 - Label@LUM_LABEL: - X:0 - Y:55 - Width:40 - Height:20 - Align: Right - Text: Lum: - Slider@LUM: - X:43 - Y:60 - Width:160 - Height:20 - Ticks:5 - MinimumValue: 0.2 - MaximumValue: 1 + Font:Bold \ No newline at end of file diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 01fe43e4ab..bbe96b670d 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -56,9 +56,12 @@ ChromeLayout: mods/ra/chrome/gameinit.yaml mods/ra/chrome/ingame.yaml mods/ra/chrome/ingame-chat.yaml + mods/ra/chrome/ingame-observer.yaml + mods/ra/chrome/ingame-fmvplayer.yaml mods/ra/chrome/mainmenu.yaml mods/ra/chrome/settings.yaml mods/ra/chrome/lobby.yaml + mods/ra/chrome/color-picker.yaml mods/ra/chrome/map-chooser.yaml mods/ra/chrome/create-server.yaml mods/ra/chrome/serverbrowser.yaml