parent
6be8e1d7fe
commit
34319c9d0d
@ -0,0 +1,517 @@
|
|||||||
|
Version 11 changelog (from 10.92)
|
||||||
|
- included new dplayx/tplayx setup from FunkyFr3sh
|
||||||
|
- included new tdraw.dll with many fixes and features by Axle1975
|
||||||
|
**Highlights and Bugfixes**
|
||||||
|
- changed all T3 constructor names to say construction unit instead of giving them individual unit names. Updated all translations also
|
||||||
|
- updated buildpics: Arm Banisher, Boa, G2, Impala, Invincible, Mofo, Odin, Orca, Pike, T3 Metal-making fusion, Core Raider, Harbinger, Neptune, Proteus, Smasher
|
||||||
|
- fixed core antinuke cloak button
|
||||||
|
- fixed non-functional Damascus nuke bomber bomb (was dropping way too early)
|
||||||
|
- adjusted accuracy of Arm Orion nuke bomber so it doesn't overshoot its target (still does slightly, but within its area of effect)
|
||||||
|
- Updated Arm Huntsman and Core Slingshot models, both now pop down turret(s) when not firing
|
||||||
|
- increased Shiva cannon animation speed to keep up with fire rate
|
||||||
|
- changed Arm Impala to 3-barrel gattling style, faster reload
|
||||||
|
- changed Arm MoFo to 2-barrel main weapon, faster reload
|
||||||
|
- changed Arm Wolf to 2-barrel annihilator weapon, faster reload
|
||||||
|
- changed Arm Orca to 2-barrel main weapon, faster reload
|
||||||
|
- changed Core Harbinger to 3-barrel main weapon, faster reload
|
||||||
|
- changed Orca to 3-barrel main weapon, faster reload
|
||||||
|
- changed Core Walking Construction Ship to a Walking Construction Sub (walks on land)
|
||||||
|
- Updated Arm Samurai model to 8-barrel main weapon (2x4-barrel gattling) from 6 barrels (2x3)
|
||||||
|
- Updated Core Broadsword model (thanks M1Garland)
|
||||||
|
- updated bomb drop sounds
|
||||||
|
|
||||||
|
**T1 updates**
|
||||||
|
Rocko
|
||||||
|
Damage 110 down from 115
|
||||||
|
Reload 3.8s up from 3.7s
|
||||||
|
DPS 28.9 down from 31.1
|
||||||
|
OTA for reference: 105/4s 26.25 DPS
|
||||||
|
Storm
|
||||||
|
Damage 100 (unchanged)
|
||||||
|
Reload 3.4s up from 3.2s
|
||||||
|
DPS 29.3 down from 31.25
|
||||||
|
OTA for reference: 100/3.7s 27 DPS
|
||||||
|
Stumpy
|
||||||
|
Health 1140 down from 1200
|
||||||
|
OTA: 992 ProTA: 1200
|
||||||
|
Speed 1.64 up from 1.6
|
||||||
|
OTA: 1.7 ProTA: 1.65
|
||||||
|
Raider
|
||||||
|
Health 1200 health down from 1260
|
||||||
|
OTA: 1058 ProTA: 1250
|
||||||
|
Speed 1.58 up from 1.55
|
||||||
|
OTA: 1.6 ProTA: 1.55
|
||||||
|
|
||||||
|
**Defence Updates**
|
||||||
|
Shark's Teeth: increased height of core one, was only 19 and arm's was 26. Both 26 now (both also waterline 3)
|
||||||
|
|
||||||
|
Light Laser Towers:
|
||||||
|
Arm
|
||||||
|
Health 810 down from 860
|
||||||
|
Core
|
||||||
|
Health 840 down from 890
|
||||||
|
OTA for reference: Health 700 and 710
|
||||||
|
|
||||||
|
Floating Light Laser Towers:
|
||||||
|
Arm Shrimp
|
||||||
|
Energy 1740 down from 1840
|
||||||
|
Metal 178 down from 195
|
||||||
|
Build time 3660 down from 3900
|
||||||
|
Health 695 down from 700
|
||||||
|
Core Floater
|
||||||
|
Energy 1750 down from 1850
|
||||||
|
Metal 176 down from 190
|
||||||
|
Build time 3620 down from 3800
|
||||||
|
Health 710 down from 720
|
||||||
|
|
||||||
|
Arm Sunspot (EMG Tower)
|
||||||
|
Health 1050 down from 1100
|
||||||
|
Core Immolator
|
||||||
|
Health 1100 down from 1150
|
||||||
|
|
||||||
|
Arm Radical short-range plasma cannon
|
||||||
|
Health 2010 down from 2109
|
||||||
|
Core Blocker short-range plasma cannon
|
||||||
|
Health 2060 down from 2160
|
||||||
|
|
||||||
|
Arm Sentinel
|
||||||
|
Health 1550 down from 1630
|
||||||
|
OTA: 1230 ProTA: 1250
|
||||||
|
Core GAAT gun
|
||||||
|
Health 1600 down from 1680
|
||||||
|
OTA: 1200 ProTA: 1280
|
||||||
|
Arm Stingray (Floating HLT)
|
||||||
|
Health 1480 down from 1530
|
||||||
|
OTA: 1325
|
||||||
|
Core Thunderbolt (Floating HLT)
|
||||||
|
Health 1540 down from 1590
|
||||||
|
OTA: 1385
|
||||||
|
|
||||||
|
Arm Guardian
|
||||||
|
Health 2848 down from 3017
|
||||||
|
OTA: 2477
|
||||||
|
Damage 384 up from 380
|
||||||
|
Reload 3s up from 2.9s
|
||||||
|
DPS 128 down from 131
|
||||||
|
Core Punisher
|
||||||
|
Health 2921 down from 3080
|
||||||
|
OTA: 2540
|
||||||
|
Reload 2.8s up from 2.7s
|
||||||
|
DPS 121.43 down from 125.9
|
||||||
|
|
||||||
|
Arm Ambusher
|
||||||
|
Health 3240 down from 3540
|
||||||
|
OTA: 1658 ProTA: 2477
|
||||||
|
Range 1350 (unchanged) ProTA: 1350
|
||||||
|
Damage 520 up from 460
|
||||||
|
Reload 3.65s up from 3.2s
|
||||||
|
DPS 142.5 down from 143.75 ProTA: 120
|
||||||
|
AOE 96 (unchanged) ProTA: 100
|
||||||
|
Core Toaster
|
||||||
|
Health 3320 down from 3592
|
||||||
|
OTA: 1877 ProTA: 2540
|
||||||
|
Range 1350 (unchanged) ProTA: 1350
|
||||||
|
Damage 465 down from 490
|
||||||
|
Reload 3.4s down from 3.5s
|
||||||
|
DPS 136.8 down from 140 ProTA: 114.29
|
||||||
|
AOE: 108 (unchanged) ProTA: 100
|
||||||
|
|
||||||
|
Rapid fire medium range plasma cannons:
|
||||||
|
Arm Archgun
|
||||||
|
Metal 3036 down from 3136
|
||||||
|
Build time 30360 up from 25088
|
||||||
|
Health 2423 down from 2723
|
||||||
|
Range 1480 (unchanged)
|
||||||
|
Damage 260 (was 270)
|
||||||
|
Reload 0.591s (was 0.55s)
|
||||||
|
DPS 440 (was 540)
|
||||||
|
AOE 64 (unchanged)
|
||||||
|
Core Chainsaw
|
||||||
|
Metal 3112 down from 3212
|
||||||
|
Build time 31120 up from 25696
|
||||||
|
Health 2482 down from 2782
|
||||||
|
Range 1450 (unchanged)
|
||||||
|
Damage 310 (unchanged)
|
||||||
|
Reload 0.72s (was 0.66s)
|
||||||
|
DPS 430.6 (was 469.7)
|
||||||
|
AOE 80 (unchanged)
|
||||||
|
|
||||||
|
Arm Annihilator
|
||||||
|
Health 3520 down from 3620
|
||||||
|
Core Doomsday Machine
|
||||||
|
Health 3800 down from 3925
|
||||||
|
|
||||||
|
Arm Moho Mine Health 1440 down from 1572
|
||||||
|
Upgrade Health 3600 down from 3930
|
||||||
|
Core Moho Mine health 1460 down from 1536
|
||||||
|
Upgrade health 3650 down from 3840
|
||||||
|
|
||||||
|
**Hover updates**
|
||||||
|
Arm Anaconda
|
||||||
|
Metal 199 up from 195
|
||||||
|
Buildtime 3980 up from 3900
|
||||||
|
Health 1040 down from 1110
|
||||||
|
Core Snapper
|
||||||
|
Metal 195 up from 192
|
||||||
|
Buildtime 3900 up from 3840
|
||||||
|
Health 1080 down from 1150
|
||||||
|
|
||||||
|
Arm Mongoose T1 Assault Hover
|
||||||
|
Metal 154 up from 150
|
||||||
|
Buildtime 3696 up from 3600
|
||||||
|
Core Gharial T1 Assault Hover
|
||||||
|
Metal 158 up from 155
|
||||||
|
Buildtime 3792 up from 3700
|
||||||
|
|
||||||
|
Arm Grizzly T2 Skirmish/Antisub Hover
|
||||||
|
Health 1920 down from 1960
|
||||||
|
Speed 1.72 down from 1.8
|
||||||
|
Core Kendo T2 Skirmish/Antisub Hover
|
||||||
|
Health 2010 down from 2180
|
||||||
|
Speed 1.68 down from 1.7
|
||||||
|
|
||||||
|
Arm Hippo T2 Heavy Hovertank
|
||||||
|
Health 3230 down from 3346
|
||||||
|
Core Crusher T2 Heavy Hovertank
|
||||||
|
Health 3620 down from 3775
|
||||||
|
|
||||||
|
Arm Moose T2 Rapid Artillery Hover
|
||||||
|
Energy 5589 Metal 428, up from 5389/418
|
||||||
|
Build time 10272 up from 10032
|
||||||
|
Damage 63 reload 0.75s 84 DPS down from 70/0.72s 97.2 DPS
|
||||||
|
Health 1150 up from 1038
|
||||||
|
Core Viceroy T2 Artillery Hover
|
||||||
|
Energy 5962 Metal 441, up from 5562/431
|
||||||
|
Build time 10584 up from 10344
|
||||||
|
Damage/shot 96 reload 1.25s 76.8 DPS up from 105/1.45s 72.4 DPS
|
||||||
|
Laser Damage 40 reload 0.8s 50 DPS down from 44/0.8 55 DPS
|
||||||
|
Health 1360 (unchanged)
|
||||||
|
|
||||||
|
Arm Wombat T2 Vlaunch Rocket Hover
|
||||||
|
Metal 455 up from 435
|
||||||
|
Buildtime 13650 up from 13050
|
||||||
|
Health 905 down from 925
|
||||||
|
Core Nixer T2 Vlaunch Rocket Hover
|
||||||
|
Metal 450 up from 445
|
||||||
|
Buildtime 13500 up from 13350
|
||||||
|
Health 950 down from 990
|
||||||
|
|
||||||
|
Arm Hovercraft Platform
|
||||||
|
Metal 755 up from 715
|
||||||
|
Build Time 7550 up from 7150
|
||||||
|
Arm Floating Hovercraft Platform
|
||||||
|
Metal 787 up from 747
|
||||||
|
Build Time 7870 up from 7470
|
||||||
|
Core Hovercraft Platform
|
||||||
|
Metal 750M up from 710
|
||||||
|
Build Time 7500 up from 7100
|
||||||
|
Core Floating Hovercraft Platform
|
||||||
|
Metal 780 up from 740
|
||||||
|
Build Time 7800 up from 7400
|
||||||
|
|
||||||
|
**T2 Updates**
|
||||||
|
|
||||||
|
Arm Panther
|
||||||
|
Health 1320 down from 1400
|
||||||
|
Core Leveler
|
||||||
|
Health 1440 down from 1560
|
||||||
|
|
||||||
|
Arm Triton
|
||||||
|
Metal 342 down from 349
|
||||||
|
Build time 6156 up from 5520
|
||||||
|
Health 2030 down from 2142
|
||||||
|
Core Crock
|
||||||
|
Metal 339M down from 342
|
||||||
|
Build time 6048 up from 5472
|
||||||
|
Health 2120 down from 2230
|
||||||
|
|
||||||
|
Arm Luger
|
||||||
|
Metal 276 down from 284
|
||||||
|
Buildtime 4416 down from 4544
|
||||||
|
Health 1040 up from 930
|
||||||
|
Damage 216 down from 240
|
||||||
|
Reload 3s (unchanged)
|
||||||
|
DPS 72 down from 80
|
||||||
|
OTA/ProTA: 130/2.75s 47.3 DPS
|
||||||
|
Core Pillager
|
||||||
|
Metal 284 down from 296
|
||||||
|
Build time 4544 down from 4736
|
||||||
|
Health 1130 up from 1010
|
||||||
|
Damage 245 down from 280
|
||||||
|
Reload 3.5s (unchanged)
|
||||||
|
DPS 70 down from 80
|
||||||
|
OTA/ProTA: 140/2.95s 47.46 DPS
|
||||||
|
|
||||||
|
Arm Cipher Fast Stealth Tank
|
||||||
|
Energy 8020 down from 8620
|
||||||
|
Health 1780 down from 1880
|
||||||
|
Speed 1.72 (unchanged)
|
||||||
|
Core Cremator
|
||||||
|
- changed description to "Flame Assault Tank"
|
||||||
|
Energy 7200 up from 6400
|
||||||
|
Metal 528 down from 548
|
||||||
|
Buildtime 12672 up from 10960
|
||||||
|
Health 2100 down from 2400
|
||||||
|
Speed 1.68 up from 1.64
|
||||||
|
Turnrate 390 up from 350
|
||||||
|
|
||||||
|
Core Replenisher Mobile Air Repair pad
|
||||||
|
Health 1100 down from 1150
|
||||||
|
Speed 0.92 up from 0.78
|
||||||
|
|
||||||
|
Arm Warrior
|
||||||
|
Changed description to "Heavy Infantry Kbot"
|
||||||
|
(was "Medium Infantry Kbot)
|
||||||
|
Health 1400 down from 1480
|
||||||
|
Speed 1.45 down from 1.54
|
||||||
|
turnrate 850 up from 750
|
||||||
|
Core Pyro - Assault Kbot (was "Fast Assault Kbot")
|
||||||
|
Health 1280 down from 1350
|
||||||
|
Speed 1.6 down from 1.65
|
||||||
|
|
||||||
|
Arm Zeus
|
||||||
|
changed description to "Armored Infantry Kbot"
|
||||||
|
(was "Heavy Assault Kbot")
|
||||||
|
Health 2560 up from 2500
|
||||||
|
Speed 1.02 down from 1.05
|
||||||
|
Core The Can - Armored Assault Kbot
|
||||||
|
Health 2940 (unchanged)
|
||||||
|
Speed 0.88 up from 0.85
|
||||||
|
|
||||||
|
Core Gimp
|
||||||
|
Changed description to "Underwater Amphib Kbot"
|
||||||
|
Health 1540 down from 1660
|
||||||
|
Removed ballistic cannon, added torpedo launcher
|
||||||
|
Changed laser to 2-barrel
|
||||||
|
Laser Damage 120 reload 1.3s DPS 92.3 (was 128/1.6s 80 DPS)
|
||||||
|
Torpedo range 320 damage 116 reload 3.2s DPS 36.25
|
||||||
|
|
||||||
|
Arm Maverick
|
||||||
|
Health 1750 down from 1900
|
||||||
|
Speed 1.4 (unchanged)
|
||||||
|
Range 330 up from 320
|
||||||
|
Core Reiver T2 Riot Kbot
|
||||||
|
Energy 10295 up from 9695
|
||||||
|
Metal 639 up from 599
|
||||||
|
Build time 19170 up from 17970
|
||||||
|
Health 2200 down from 2250
|
||||||
|
Speed 1.3 up from 1.25
|
||||||
|
Range 320 up from 310
|
||||||
|
|
||||||
|
Arm Fido Burst Artillery Kbot
|
||||||
|
Energy 3950 down from 4250
|
||||||
|
Speed 1.35 down from 1.45
|
||||||
|
Turnrate 720 down from 800
|
||||||
|
Acceleration 0.06 down from 0.1
|
||||||
|
Range 720 down from 750
|
||||||
|
Damage 45 down from 48 (burst 4)
|
||||||
|
Sprayangle 720 down from 800
|
||||||
|
DPS 72 down from 76.8
|
||||||
|
Core Morty
|
||||||
|
Energy 3700 up from 3500
|
||||||
|
Speed 1.2 (unchanged)
|
||||||
|
Damage 96 down from 105
|
||||||
|
DPS 66 down from 72.4
|
||||||
|
Range 800 (unchanged)
|
||||||
|
Improved script:
|
||||||
|
- maximum time to fire while walking 0.2s (was 1.23s)
|
||||||
|
|
||||||
|
Arm Kodiak Ballistic Rocket Kbot
|
||||||
|
Health 1290 up from 1120
|
||||||
|
Core Dominator Ballistic Rocket Kbot
|
||||||
|
Health 1380 up from 1180
|
||||||
|
|
||||||
|
Arm Odin - Fast Assault Kbot
|
||||||
|
Energy 9800 up from 8800
|
||||||
|
Metal 770 up from 730
|
||||||
|
Buildtime 18480 up from 17520
|
||||||
|
Health 2300 down from 2700
|
||||||
|
Speed 1.7 up from 1.65
|
||||||
|
|
||||||
|
Bertha and Intimidator: Made descriptions only show the energy/shot
|
||||||
|
Same for Vulcan, Buzzsaw, Dora, Terminator
|
||||||
|
|
||||||
|
**T3 Updates**
|
||||||
|
|
||||||
|
Arm Indra Amphibious crawler
|
||||||
|
Metal 4210M up from 3910
|
||||||
|
Build time 84200 down from 93840
|
||||||
|
Health 11000 up from 9400
|
||||||
|
Damage 320 (unchanged)
|
||||||
|
Reload 0.56s down from 0.7
|
||||||
|
DPS 571 up from 457
|
||||||
|
AOE 24 (unchanged)
|
||||||
|
Core Boss Amphibious kbot
|
||||||
|
Metal 4120 up from 3820
|
||||||
|
Build time 82400 down from 91680
|
||||||
|
Health 12000 up from 10200
|
||||||
|
Damage 640 up from 450
|
||||||
|
Reload 1.22s up from 1.1s
|
||||||
|
DPS 525 up from 409
|
||||||
|
AOE 108 (unchanged)
|
||||||
|
|
||||||
|
Arm Razorback Heavy Assault Kbot
|
||||||
|
Energy 95000 up from 89000
|
||||||
|
Metal 6650 up from 6350
|
||||||
|
Build time 159600 up from 152400
|
||||||
|
Main weapon:
|
||||||
|
Range 400 down from 420
|
||||||
|
Noexplode weapon:
|
||||||
|
Range 560 down from 640
|
||||||
|
Damage 540+ up from 480+
|
||||||
|
Reload 6.5s up from 6s
|
||||||
|
DPS 83+ up from 80
|
||||||
|
vlaunch AA missile (new):
|
||||||
|
Range 800, DPS: 56 to ground 300 to air, AOE 64
|
||||||
|
Core Ketzer Heavy Assault Kbot
|
||||||
|
Energy 93600 up from 85600
|
||||||
|
Metal 6740M up from 6240
|
||||||
|
Build time 161760 up from 149760
|
||||||
|
Main weapon:
|
||||||
|
Range 408 down from 428
|
||||||
|
noexplode weapon (new):
|
||||||
|
Range 560, Damage 480+, Reload 5.8s, DPS 82.8+, AOE 48
|
||||||
|
|
||||||
|
Arm Zephyr AA kbot
|
||||||
|
Health 10560 up from 10000
|
||||||
|
Core Jupiter AA kbot
|
||||||
|
Health 11200 up from 10760
|
||||||
|
Max speed 0.95 up from 0.9
|
||||||
|
|
||||||
|
Arm Wolf - Amphibious Sniper doggo Kbot
|
||||||
|
Health 15000 up from 13500
|
||||||
|
Core Krab - Amphibious Energy Weapon (noexplode) Kbot
|
||||||
|
Health 17200 up from 16000
|
||||||
|
|
||||||
|
Arm Tiger - Heavy Assault Tank (with flak)
|
||||||
|
Health 20800 up from 20200
|
||||||
|
Core Rattlesnake - Rapid Laser Assault Tank
|
||||||
|
Health 21600 up from 21200
|
||||||
|
|
||||||
|
Arm Impala - Energy weapon (noexplode) Tank
|
||||||
|
Health 14000 up from 13200
|
||||||
|
Core War Machine - Energy Weapon Tank
|
||||||
|
Health 15900 up from 14900
|
||||||
|
|
||||||
|
Arm G2 - Rapid Artillery Tank
|
||||||
|
149000E down from 156000E
|
||||||
|
Health 23600 up from 21800
|
||||||
|
Core Smasher - Heavy Artillery Tank
|
||||||
|
144000E down from 150000E
|
||||||
|
Health 24800 up from 23000
|
||||||
|
|
||||||
|
Arm Scudd - Mobile Tactical Nuke Launcher
|
||||||
|
Health 4250 down from 4800
|
||||||
|
Turnrate 200 down from 210
|
||||||
|
Core Precluder - Mobile Tactical Nuke Launcher
|
||||||
|
Health 4500 down from 5400
|
||||||
|
Turnrate 215 down from 230
|
||||||
|
|
||||||
|
Arm Invincible
|
||||||
|
Gauss weapon Damage 450 down from 480
|
||||||
|
Reload 0.45s down from 0.55s
|
||||||
|
DPS 1000 up from 872.7
|
||||||
|
Range 820 (unchanged)
|
||||||
|
AOE 32 (unchanged)
|
||||||
|
Ballistic Rocket:
|
||||||
|
|
||||||
|
Core Excelsior - Battlecruiser
|
||||||
|
Riot weapon Damage 640 up from 450
|
||||||
|
Reload 0.7s up from 0.5s
|
||||||
|
DPS 914 up from 900
|
||||||
|
Range 800 (unchanged)
|
||||||
|
AOE 108 (unchanged)
|
||||||
|
|
||||||
|
Arm Samurai - Dreadnaught Hovercraft
|
||||||
|
499100E, 22500M, 540000 BT up from 459100E 21200M 508800 BT
|
||||||
|
Health 42000 up from 37000
|
||||||
|
Damage 450 reload 0.35 1286DPS up from 480/0.4 1200 DPS
|
||||||
|
Core Broadsword - Dreadnaught Hovercraft
|
||||||
|
520600E, 23100M, 554400 BT up from 480600E 21800M 523200 BT
|
||||||
|
Health 45000 up from 40000
|
||||||
|
Damage 1000 reload 0.8 1250DPS up from 1000/0.92 1087 DPS
|
||||||
|
|
||||||
|
**Eco Updates**
|
||||||
|
Moho Metal makers: reduced costs, big reduction in build time
|
||||||
|
Reduced production, and slightly reduced energy to metal conversion efficiency
|
||||||
|
Arm Moho Metal Maker
|
||||||
|
Energy 16360 down from 19635
|
||||||
|
Metal 50 down from 55
|
||||||
|
Buildtime 30000 down from 44000
|
||||||
|
Energy use 800 down from 900
|
||||||
|
Metal production 14 down from 16
|
||||||
|
(Efficiency 57.2E/1M, was 56.25)
|
||||||
|
OTA/ProTA: -800E/+16M, efficiency 50E/1M
|
||||||
|
Death Explosion ESTOR_BUILDINGEX (900 damage 220 AOE) was ESTOR_BUILDING (1900 damage 420 AOE)
|
||||||
|
Self-D explosion ESTOR_BUILDING (unchanged)
|
||||||
|
|
||||||
|
Core Moho Metal Maker
|
||||||
|
Energy 15845 down from 17680
|
||||||
|
Metal 46 down from 50
|
||||||
|
Buildtime 27600 down from 40000
|
||||||
|
Energy use 700 down from 800
|
||||||
|
Metal production 12 down from 14
|
||||||
|
(efficiency 58.3E/1M, was 57.2E/1M)
|
||||||
|
OTA/ProTA: -625E/12M, efficiency 52.1E/1M
|
||||||
|
Death Explosion ESTOR_BUILDINGEX (900 damage 220 AOE) was LARGE_BUILDING (1800 damage 400 AOE)
|
||||||
|
Self-D explosion LARGE_BUILDING (unchanged)
|
||||||
|
|
||||||
|
Arm Underwater Moho Metal Maker
|
||||||
|
Energy 18200 down from 21051
|
||||||
|
Metal 85 down from 120
|
||||||
|
Buildtime 34000 down from 48000
|
||||||
|
Energy use 916 down from 1020
|
||||||
|
Metal production 16 down from 18
|
||||||
|
(efficiency 57.25E/1M, was 56.67)
|
||||||
|
Death and self-d explosion same as land version (was LARGE_BUILDING/LARGE_BUILDING)
|
||||||
|
|
||||||
|
Core Underwater Moho Metal Maker
|
||||||
|
Energy 17800 down from 18077
|
||||||
|
Metal 80 down from 108
|
||||||
|
Buildtime 32000 down from 43200
|
||||||
|
Energy Use 860 up from 850
|
||||||
|
Metal production 15 (unchanged)
|
||||||
|
(efficiency 57.33E/1M, was 56.67)
|
||||||
|
Death and self-d explosion same as land version (was LARGE_BUILDING/LARGE_BUILDING)
|
||||||
|
|
||||||
|
Arm Cloaking Fusion
|
||||||
|
Energy 73816 up from 72816
|
||||||
|
Metal 6275 down from 6845
|
||||||
|
Build Time 150600 up from 136900
|
||||||
|
Energy Production 1500 down from 1600
|
||||||
|
Cloak Cost 300 down from 320
|
||||||
|
|
||||||
|
Core Cloaking Fusion
|
||||||
|
Energy 79850 (unchanged)
|
||||||
|
Metal 6784 down from 7582
|
||||||
|
Build time 162816 up from 151640
|
||||||
|
Energy Production 1700 down from 1900
|
||||||
|
Cloak Cost 350 down from 400
|
||||||
|
|
||||||
|
Arm Underwater Fusion
|
||||||
|
Energy 56787 down from 63787
|
||||||
|
Metal 7085 up from 6785
|
||||||
|
Build time 141700 up from 135700
|
||||||
|
Energy production 1400 down from 1500
|
||||||
|
|
||||||
|
Core Underwater Fusion
|
||||||
|
Energy 62849 down from 69849
|
||||||
|
Metal 7520 up from 7460
|
||||||
|
Buildtime 150400 up from 149200
|
||||||
|
Energy Production 1600 down from 1800
|
||||||
|
|
||||||
|
Arm Metal Making Super Fusion
|
||||||
|
Energy 629900 up from 599900
|
||||||
|
Metal 43800 up from 40800
|
||||||
|
Build time 876000 up from 816000
|
||||||
|
Makes 10500 energy up from 10k
|
||||||
|
turned on trades -5k for +90 metal down from +96
|
||||||
|
Cloaks for 1000E (unchanged)
|
||||||
|
|
||||||
|
Core Metal Making Uber Fusion
|
||||||
|
Energy 699800 up from 679800
|
||||||
|
Metal 47700M u from 45200
|
||||||
|
Build time 954000 up from 904000
|
||||||
|
Makes 12k energy (unchanged)
|
||||||
|
turned on trades -6k for +108 metal down from +115
|
||||||
|
Cloaks for 1100E (unchanged)
|
||||||
@ -0,0 +1,785 @@
|
|||||||
|
Version 11.3 changelog (from 11.2)
|
||||||
|
- fixed crashing on water maps due to sfx issue
|
||||||
|
- fixed shipyard buildpic on some core cons units
|
||||||
|
- fixed swapped shipyard and airplant build buttons on some arm cons units
|
||||||
|
- updated buildpics for Arm Assassin, Arm Samurai and Core Adonis T3 hovers
|
||||||
|
- more tweaked/improved sounds
|
||||||
|
- small increase in metal cost and buildtime for T3 fusions
|
||||||
|
|
||||||
|
Version 11.2 changelog (from 10.92)
|
||||||
|
- included new dplayx/tplayx setup from FunkyFr3sh
|
||||||
|
- included new tdraw.dll with many fixes and features by Axle1975
|
||||||
|
**Engine Updates** thanks to Axle1975
|
||||||
|
- Set start positions based on teams (or alliances) set in battleroom
|
||||||
|
- Repair battleroom team icons so they can be used to create teams before launching
|
||||||
|
- Add +autoteam battleroom and in-game commands (host only) to automatically assign teams (in battleroom: by skill level. Ingame: by map position.)
|
||||||
|
- Add +randomteam battleroom command (host only) to automatically assign random teams
|
||||||
|
- Add gui buttons for common commands on H sharing dialog: +shootall, +noshake, .ready
|
||||||
|
- Add gui button for .autopause in battleroom (active for host only)
|
||||||
|
- ClickSnap to snap to nearest mex, geo or reclaimable feature (mayhem default/maximum: mex 3, reclaim 1)
|
||||||
|
- add clicksnap settings to ctrl-F2 ingame dialog
|
||||||
|
- Show clock and weather report (wind and tidal strength) on top resource panel (no need for +clock)
|
||||||
|
- Sync wind speed across all players
|
||||||
|
- Add .exereport, .tdreport, .tpreport, .gp3report, .crcreport battleroom commands to report CRC32 of each player's totala.exe, tdraw.dll, tplayx.dll, mayhem.gp3 or all of them respectively
|
||||||
|
- Add ability to move queued orders
|
||||||
|
- Con units patrol behaviour - hold position: reclaim only
|
||||||
|
- Enable start button in multiplayer lobby if only one player + AI are present
|
||||||
|
- Fix Allied victory if more than 2 players on a team still ingame
|
||||||
|
- Fix the "ghost commander" bug (remote commanders appear in top left of map during first 50sec of game)
|
||||||
|
- Fix the "units exploding in factories" bug by holding back recycling of deceased units' IDs for 5 seconds
|
||||||
|
- Option to render DTs and fortwalls that belong to the map (not built by a player)
|
||||||
|
- Supress "qqqqqq" whiteboard marker lables when "q" is used as the whiteboard key
|
||||||
|
- Set default resolution on new installs to 1024x768
|
||||||
|
- Disable relay of F11 chatmacro text to other players (watchers can no longer exploit this to chat to players)
|
||||||
|
- Prevent +logo commands from affecting other players - changes colour for local only
|
||||||
|
- Change whiteboard, mappos and resource indicator colours in response to +logo commands
|
||||||
|
- Ctrl-B selects only construction units, not mobile repair pads or carriers
|
||||||
|
- Ctrl-F centres view on idle factory, selects only factories not silos etc
|
||||||
|
- Set +lostype as a cheatcode (not available unless cheats enabled)
|
||||||
|
- Increase megamap FPS. Add FPS counter to megamap (in F10 dev mode with cheats enabled)
|
||||||
|
- Grey background on mega map to distinguish from unmapped area
|
||||||
|
- Prevent Ctrl-F2 dialog and allies resource bar from moving off screen
|
||||||
|
- Improve responsiveness of whiteboard marker movements sent to remote players
|
||||||
|
- Render cursor while in megamap
|
||||||
|
- Fix crash when removing markers
|
||||||
|
- Fix crash on simultaneous whiteboard marker move and delete
|
||||||
|
- Fix rare crash on TA Hook line drawing
|
||||||
|
- Radar and sonar jammers no longer jam your own radar and sonar in >3 player multiplayer
|
||||||
|
|
||||||
|
**Highlights and Bugfixes**
|
||||||
|
- fixed sfx issues on water maps - hovers, subs, ships, amphib units
|
||||||
|
- reduced commander animation at game start to 5 seconds from 52 seconds (because ghost commander bug is fixed!)
|
||||||
|
- Arm and Core Construction Kbot faster open/close
|
||||||
|
- fixes to all mobile constructor building logic, no random interruption with rapid-building (eg nanoblocking with dts etc)
|
||||||
|
...this makes them more consistent but actually means nanoframes may not hang around for as long, because the construction unit will get out its nanolathe faster and start building - a nanoframe that hasn't been started on lasts longer than one that has.
|
||||||
|
- changed self-destruct countdown on solars, wind generators and tidal generators (basic ones) to 3 secs instead of 5. - Changed self-d explosion to much smaller weapon that doesn't damage neighbouring units (small_unitex instead of small_building).
|
||||||
|
- reduced durability of most corpses, especially T3 ones
|
||||||
|
- fixed footprint sizes of of many corpses to match the unit - to avoid overlapping when resurrected
|
||||||
|
- reduced health of corpses back to OTA levels - in some case lower than OTA.
|
||||||
|
- drastically reduced health of T3 corpses
|
||||||
|
- added more team colour to all hovercraft platforms at all tech levels
|
||||||
|
- fixed core antinuke cloak button
|
||||||
|
- fixed Core Mammoth torp and missing sonar
|
||||||
|
- changed Gimp to 2-barrel laser, removed ballistic cannon, added small torpedo launcher, add short-range sonar
|
||||||
|
- Updated Arm Huntsman and Core Slingshot models, both now pop down turret(s) when not firing
|
||||||
|
- improved Arm Bulldog model
|
||||||
|
- added basic build menus to Decoy Commanders (just resource/storage, radar/sonar)
|
||||||
|
- improved Ranger model, improved Ranger and Hydra firing animation
|
||||||
|
- reverted Hawk and Vamp to have 2 missile launchers (this was supposed to happen long ago)...
|
||||||
|
- increased build distances for T2 constructors from 120-150 to 150-180
|
||||||
|
- increased build distances for T3 constructors from 160-200 to 224-270
|
||||||
|
- increased build speeds for T3 constructors
|
||||||
|
- changed all T3 constructor names to say construction unit instead of giving them individual unit names. Updated all translations also
|
||||||
|
- fixed intermittent crash bug with Orca/Proteus
|
||||||
|
- updated buildpics: Arm Boa, Huntsman, Odin, Pike, Banisher, G2, Impala, Invincible, Mofo, Orca, T3 Metal-making fusion; Core Raider, Slingshot, Harbinger, Neptune, Proteus, Smasher
|
||||||
|
- improved walking/aiming script for Razorback and Ketzer so they are ready to fire immediately instead of waiting for the current walk cycle to complete (~2.5 seconds)
|
||||||
|
- fixed non-functional Damascus nuke bomber bomb (was dropping way too early)
|
||||||
|
- adjusted accuracy of Arm Orion nuke bomber so it doesn't overshoot its target (still does slightly, but within its area of effect)
|
||||||
|
- increased Shiva cannon animation speed to keep up with fire rate
|
||||||
|
- changed Arm Impala to 3-barrel gattling style, faster reload
|
||||||
|
- changed Arm MoFo to 2-barrel main weapon, faster reload
|
||||||
|
- changed Arm Wolf to 2-barrel annihilator weapon, faster reload
|
||||||
|
- changed Arm Orca to 2-barrel main weapon, faster reload
|
||||||
|
- changed Core Harbinger to 3-barrel main weapon, faster reload
|
||||||
|
- changed Orca to 3-barrel main weapon, faster reload
|
||||||
|
- changed Core Walking Construction Ship to a Walking Construction Sub (walks on land)
|
||||||
|
- reduced footprint of T3 super fusions
|
||||||
|
- Updated Arm Samurai model to 8-barrel main weapon (2x4-barrel gattling) from 6 barrels (2x3)
|
||||||
|
- Updated Core Broadsword model (thanks M1Garland)
|
||||||
|
- Updated Arm T3 Construction Kbot model and script for increased readability
|
||||||
|
- updated bomb drop sounds
|
||||||
|
- added new sound schemes for most T3 land units
|
||||||
|
- added new cannon sounds for many units
|
||||||
|
- Arm Ghost T3 Amphibious Jammer added shootme=1
|
||||||
|
|
||||||
|
|
||||||
|
**T1 updates**
|
||||||
|
|
||||||
|
Rocko
|
||||||
|
Damage 110 down from 115
|
||||||
|
Reload 3.8s up from 3.7s
|
||||||
|
DPS 28.9 down from 31.1
|
||||||
|
OTA for reference: 105/4s 26.25 DPS
|
||||||
|
Storm
|
||||||
|
Damage 100 (unchanged)
|
||||||
|
Reload 3.4s up from 3.2s
|
||||||
|
DPS 29.3 down from 31.25
|
||||||
|
OTA for reference: 100/3.7s 27 DPS
|
||||||
|
|
||||||
|
Stumpy
|
||||||
|
Health 1140 down from 1200
|
||||||
|
OTA: 992 ProTA: 1200
|
||||||
|
Speed 1.64 up from 1.6
|
||||||
|
OTA: 1.7 ProTA: 1.65
|
||||||
|
Raider
|
||||||
|
Health 1200 health down from 1260
|
||||||
|
OTA: 1058 ProTA: 1250
|
||||||
|
Speed 1.58 up from 1.55
|
||||||
|
OTA: 1.6 ProTA: 1.55
|
||||||
|
|
||||||
|
|
||||||
|
**Defence Updates**
|
||||||
|
|
||||||
|
Shark's Teeth: increased height of core one, was only 19 and arm's was 26. Both 26 now (both also waterline 3)
|
||||||
|
|
||||||
|
Light Laser Towers:
|
||||||
|
Arm
|
||||||
|
Health 810 down from 860
|
||||||
|
Core Health 840 down from 890
|
||||||
|
OTA for reference: Health 700 and 710
|
||||||
|
|
||||||
|
Floating Light Laser Towers:
|
||||||
|
Arm Shrimp
|
||||||
|
Energy 1740 down from 1840
|
||||||
|
Metal 178 down from 195
|
||||||
|
Build time 3660 down from 3900
|
||||||
|
Health 695 down from 700
|
||||||
|
Core Floater
|
||||||
|
Energy 1750 down from 1850
|
||||||
|
Metal 176 down from 190
|
||||||
|
Build time 3620 down from 3800
|
||||||
|
Health 710 down from 720
|
||||||
|
|
||||||
|
Arm Sunspot (EMG Tower)
|
||||||
|
Health 1050 down from 1100
|
||||||
|
Core Immolator
|
||||||
|
Health 1100 down from 1150
|
||||||
|
|
||||||
|
Arm Radical short-range plasma cannon
|
||||||
|
Health 2010 down from 2109
|
||||||
|
Core Blocker short-range plasma cannon
|
||||||
|
Health 2060 down from 2160
|
||||||
|
|
||||||
|
Arm Sentinel
|
||||||
|
Health 1550 down from 1630
|
||||||
|
OTA: 1230 ProTA: 1250
|
||||||
|
Core GAAT gun
|
||||||
|
Health 1600 down from 1680
|
||||||
|
OTA: 1200 ProTA: 1280
|
||||||
|
Arm Stingray (Floating HLT)
|
||||||
|
Health 1480 down from 1530
|
||||||
|
OTA: 1325
|
||||||
|
Core Thunderbolt (Floating HLT)
|
||||||
|
Health 1540 down from 1590
|
||||||
|
OTA: 1385
|
||||||
|
|
||||||
|
Arm Guardian
|
||||||
|
Health 2848 down from 3017
|
||||||
|
OTA: 2477
|
||||||
|
Damage 384 up from 380
|
||||||
|
Reload 3s up from 2.9s
|
||||||
|
DPS 128 down from 131
|
||||||
|
Core Punisher
|
||||||
|
Health 2921 down from 3080
|
||||||
|
OTA: 2540
|
||||||
|
Reload 2.8s up from 2.7s
|
||||||
|
DPS 121.43 down from 125.9
|
||||||
|
|
||||||
|
Arm Ambusher
|
||||||
|
new gun sound
|
||||||
|
Health 2940 down from 3540
|
||||||
|
Double health when closed (was 2.5x)
|
||||||
|
OTA: 1658 ProTA: 2477
|
||||||
|
Range 1350 (unchanged) ProTA: 1350
|
||||||
|
Damage 520 up from 460
|
||||||
|
Reload 3.65s up from 3.2s
|
||||||
|
DPS 142.5 down from 143.75 ProTA: 120
|
||||||
|
AOE 96 (unchanged) ProTA: 100
|
||||||
|
Core Toaster
|
||||||
|
new gun sound
|
||||||
|
Health 3020 down from 3592
|
||||||
|
Double health when closed (was 2.5x)
|
||||||
|
OTA: 1877 ProTA: 2540
|
||||||
|
Range 1350 (unchanged) ProTA: 1350
|
||||||
|
Damage 465 down from 490
|
||||||
|
Reload 3.4s down from 3.5s
|
||||||
|
DPS 136.8 down from 140 ProTA: 114.29
|
||||||
|
AOE: 108 (unchanged) ProTA: 100
|
||||||
|
|
||||||
|
Rapid fire medium range plasma cannons:
|
||||||
|
Arm Archgun
|
||||||
|
new gun sound
|
||||||
|
Metal 3036 down from 3136
|
||||||
|
Build time 30360 up from 25088
|
||||||
|
Health 2423 down from 2723
|
||||||
|
Range 1480 (unchanged)
|
||||||
|
Damage 260 (was 270)
|
||||||
|
Reload 0.591s (was 0.55s)
|
||||||
|
DPS 440 (was 540)
|
||||||
|
AOE 64 (unchanged)
|
||||||
|
Core Chainsaw
|
||||||
|
new gun sound
|
||||||
|
Metal 3112 down from 3212
|
||||||
|
Build time 31120 up from 25696
|
||||||
|
Health 2482 down from 2782
|
||||||
|
Range 1450 (unchanged)
|
||||||
|
Damage 310 (unchanged)
|
||||||
|
Reload 0.72s (was 0.66s)
|
||||||
|
DPS 430.6 (was 469.7)
|
||||||
|
AOE 80 (unchanged)
|
||||||
|
|
||||||
|
Arm Annihilator
|
||||||
|
Health 3520 down from 3620
|
||||||
|
Core Doomsday Machine
|
||||||
|
Health 3800 down from 3925
|
||||||
|
|
||||||
|
T2 pop-up missile towers:
|
||||||
|
Arm Warden
|
||||||
|
Energy 3430 down from 3830
|
||||||
|
Metal 330 up from 320
|
||||||
|
Build Time 6600 down from 7680
|
||||||
|
Armored state when closed 50% (1800 health) instead of 40% (2250)
|
||||||
|
DPS 59.72 to ground/323.6 to air, was 53.75/293.75
|
||||||
|
Core Smiter
|
||||||
|
Energy 3405 down from 3905
|
||||||
|
Metal 322 up from 312
|
||||||
|
Buildtime 6440 down from 7488
|
||||||
|
Armored state when closed 50% (1840 health) instead of 40% (2300)
|
||||||
|
DPS 60 to ground/324 to air, was 40.54/218.9
|
||||||
|
|
||||||
|
T2 Submersible missile towers:
|
||||||
|
Arm Pantheon
|
||||||
|
Energy 3687 down from 4287
|
||||||
|
Metal 358 (unchanged)
|
||||||
|
buildtime 7160 down from 8592
|
||||||
|
Health 840 down from 860
|
||||||
|
DPS 59.72 to ground/323.6 to air, was 53.75/293.75
|
||||||
|
Core Duster
|
||||||
|
Energy 3624 down from 4324
|
||||||
|
Metal 348 (unchanged)
|
||||||
|
buildtime 6960 down from 8352
|
||||||
|
Health 850 down from 870
|
||||||
|
DPS 60 to ground/324 to air, was 48.93/264.3
|
||||||
|
|
||||||
|
Arm Moho Mine Health 1440 down from 1572
|
||||||
|
Upgrade Health 3600 down from 3930
|
||||||
|
Core Moho Mine health 1460 down from 1536
|
||||||
|
Upgrade health 3650 down from 3840
|
||||||
|
|
||||||
|
|
||||||
|
**Hover updates**
|
||||||
|
|
||||||
|
Arm Anaconda
|
||||||
|
Metal 199 up from 195
|
||||||
|
Buildtime 3980 up from 3900
|
||||||
|
Health 1040 down from 1110
|
||||||
|
Core Snapper
|
||||||
|
Metal 195 up from 192
|
||||||
|
Buildtime 3900 up from 3840
|
||||||
|
Health 1080 down from 1150
|
||||||
|
|
||||||
|
Arm Mongoose T1 Assault Hover
|
||||||
|
Metal 154 up from 150
|
||||||
|
Buildtime 3696 up from 3600
|
||||||
|
Core Gharial T1 Assault Hover
|
||||||
|
Metal 158 up from 155
|
||||||
|
Buildtime 3792 up from 3700
|
||||||
|
|
||||||
|
Arm Grizzly T2 Skirmish/Antisub Hover
|
||||||
|
Health 1920 down from 1960
|
||||||
|
Speed 1.72 down from 1.8
|
||||||
|
Gauss weapon reload 1.7s up from 1.5s
|
||||||
|
Damage 220 up from 210
|
||||||
|
DPS 129.4 down from 140
|
||||||
|
Core Kendo T2 Skirmish/Antisub Hover
|
||||||
|
Health 2010 down from 2180
|
||||||
|
Speed 1.68 down from 1.7
|
||||||
|
Script error fixed - reload was 0.85s, 211.8 DPS should have been 1.3s, 138.5 DPS
|
||||||
|
New reload 1.44s, 125 DPS
|
||||||
|
new laser weapon sound
|
||||||
|
|
||||||
|
Arm Hippo T2 Heavy Hovertank
|
||||||
|
New cannon sound
|
||||||
|
Health 3230 down from 3346
|
||||||
|
Core Crusher T2 Heavy Hovertank
|
||||||
|
New cannon sound
|
||||||
|
Health 3620 down from 3775
|
||||||
|
|
||||||
|
Arm Moose T2 Rapid Artillery Hover
|
||||||
|
Energy 5589 Metal 428, up from 5389/418
|
||||||
|
Build time 10272 up from 10032
|
||||||
|
Damage 63 reload 0.75s 84 DPS down from 70/0.72s 97.2 DPS
|
||||||
|
Health 1150 up from 1038
|
||||||
|
Core Viceroy T2 Artillery Hover
|
||||||
|
Energy 5962 Metal 441, up from 5562/431
|
||||||
|
Build time 10584 up from 10344
|
||||||
|
Damage/shot 96 reload 1.25s 76.8 DPS up from 105/1.45s 72.4 DPS
|
||||||
|
Laser Damage 40 reload 0.8s 50 DPS down from 44/0.8 55 DPS
|
||||||
|
Health 1360 (unchanged)
|
||||||
|
|
||||||
|
Arm Wombat T2 Vlaunch Rocket Hover
|
||||||
|
Metal 455 up from 435
|
||||||
|
Buildtime 13650 up from 13050
|
||||||
|
Health 905 down from 925
|
||||||
|
Core Nixer T2 Vlaunch Rocket Hover
|
||||||
|
Metal 450 up from 445
|
||||||
|
Buildtime 13500 up from 13350
|
||||||
|
Health 950 down from 990
|
||||||
|
|
||||||
|
Arm Hovercraft Platform
|
||||||
|
Metal 755 up from 715
|
||||||
|
Build Time 7550 up from 7150
|
||||||
|
Arm Floating Hovercraft Platform
|
||||||
|
Metal 787 up from 747
|
||||||
|
Build Time 7870 up from 7470
|
||||||
|
Core Hovercraft Platform
|
||||||
|
Metal 750M up from 710
|
||||||
|
Build Time 7500 up from 7100
|
||||||
|
Core Floating Hovercraft Platform
|
||||||
|
Metal 780 up from 740
|
||||||
|
Build Time 7800 up from 7400
|
||||||
|
|
||||||
|
|
||||||
|
**T2 Updates**
|
||||||
|
|
||||||
|
Arm Panther
|
||||||
|
Health 1320 down from 1400
|
||||||
|
Core Leveler
|
||||||
|
Health 1440 down from 1560
|
||||||
|
|
||||||
|
Arm Triton
|
||||||
|
Metal 342 down from 349
|
||||||
|
Build time 6156 up from 5520
|
||||||
|
Health 2030 down from 2142
|
||||||
|
Core Crock
|
||||||
|
New cannon sound
|
||||||
|
Metal 339M down from 342
|
||||||
|
Build time 6048 up from 5472
|
||||||
|
Health 2120 down from 2230
|
||||||
|
|
||||||
|
Arm Luger
|
||||||
|
New cannon sound
|
||||||
|
Health 1040 up from 930
|
||||||
|
Damage 225 down from 240
|
||||||
|
Reload 3s (unchanged)
|
||||||
|
DPS 75 down from 80
|
||||||
|
OTA/ProTA: 130/2.75s 47.3 DPS
|
||||||
|
Core Pillager
|
||||||
|
New cannon sound
|
||||||
|
Health 1130 up from 1010
|
||||||
|
Damage 262 down from 280
|
||||||
|
Reload 3.5s (unchanged)
|
||||||
|
DPS 74.9 down from 80
|
||||||
|
OTA/ProTA: 140/2.95s 47.46 DPS
|
||||||
|
|
||||||
|
Arm Cipher Fast Stealth Tank
|
||||||
|
Energy 8020 down from 8620
|
||||||
|
Health 1780 down from 1880
|
||||||
|
Speed 1.72 (unchanged)
|
||||||
|
Core Cremator
|
||||||
|
- changed description to "Flame Assault Tank"
|
||||||
|
Energy 7200 up from 6400
|
||||||
|
Metal 528 down from 548
|
||||||
|
Buildtime 12672 up from 10960
|
||||||
|
Health 2100 down from 2400
|
||||||
|
Speed 1.68 up from 1.64
|
||||||
|
Turnrate 390 up from 350
|
||||||
|
|
||||||
|
Core Replenisher Mobile Air Repair pad
|
||||||
|
Health 1100 down from 1150
|
||||||
|
Speed 0.92 up from 0.78
|
||||||
|
|
||||||
|
Arm Warrior
|
||||||
|
Changed description to "Heavy Infantry Kbot"
|
||||||
|
(was "Medium Infantry Kbot)
|
||||||
|
Health 1400 down from 1480
|
||||||
|
Speed 1.45 down from 1.54
|
||||||
|
turnrate 850 up from 750
|
||||||
|
Core Pyro - Assault Kbot (was "Fast Assault Kbot")
|
||||||
|
Health 1280 down from 1350
|
||||||
|
Speed 1.6 down from 1.65
|
||||||
|
|
||||||
|
Arm Zeus
|
||||||
|
changed description to "Armored Infantry Kbot"
|
||||||
|
(was "Heavy Assault Kbot")
|
||||||
|
Health 2560 up from 2500
|
||||||
|
Speed 1.02 down from 1.05
|
||||||
|
Core The Can - Armored Assault Kbot
|
||||||
|
Health 2940 (unchanged)
|
||||||
|
Speed 0.88 up from 0.85
|
||||||
|
|
||||||
|
Core Gimp
|
||||||
|
Changed description to "Underwater Amphib Kbot"
|
||||||
|
New laser sound
|
||||||
|
Health 1540 down from 1660
|
||||||
|
Removed ballistic cannon, added torpedo launcher
|
||||||
|
Changed laser to 2-barrel
|
||||||
|
Laser Damage 120 reload 1.3s DPS 92.3 (was 128/1.6s 80 DPS)
|
||||||
|
Torpedo range 320 damage 116 reload 3.2s DPS 36.25
|
||||||
|
|
||||||
|
Arm Maverick
|
||||||
|
Health 1750 down from 1900
|
||||||
|
Speed 1.4 (unchanged)
|
||||||
|
Range 330 up from 320
|
||||||
|
Core Reiver T2 Riot Kbot
|
||||||
|
Energy 10295 up from 9695
|
||||||
|
Metal 639 up from 599
|
||||||
|
Build time 19170 up from 17970
|
||||||
|
Health 2200 down from 2250
|
||||||
|
Speed 1.3 up from 1.25
|
||||||
|
Range 320 up from 310
|
||||||
|
|
||||||
|
Arm Fido Burst Artillery Kbot
|
||||||
|
New cannon sound
|
||||||
|
Energy 3950 down from 4250
|
||||||
|
Speed 1.35 down from 1.45
|
||||||
|
Turnrate 720 down from 800
|
||||||
|
Acceleration 0.06 down from 0.1
|
||||||
|
Range 720 down from 750
|
||||||
|
Damage 45 down from 48 (burst 4)
|
||||||
|
Sprayangle 720 down from 800
|
||||||
|
DPS 72 down from 76.8
|
||||||
|
Core Morty
|
||||||
|
New cannon sound
|
||||||
|
Energy 3600 up from 3500
|
||||||
|
Speed 1.2 (unchanged)
|
||||||
|
Damage 96 down from 105
|
||||||
|
DPS 66 down from 72.4
|
||||||
|
Range 800 (unchanged)
|
||||||
|
Improved script:
|
||||||
|
- maximum time to fire while walking 0.2s (was 1.23s)
|
||||||
|
|
||||||
|
Arm Kodiak Ballistic Rocket Kbot
|
||||||
|
Health 1290 up from 1120
|
||||||
|
Core Dominator Ballistic Rocket Kbot
|
||||||
|
Health 1380 up from 1180
|
||||||
|
|
||||||
|
Arm Odin - Fast Assault Kbot
|
||||||
|
Energy 9800 up from 8800
|
||||||
|
Metal 770 up from 730
|
||||||
|
Buildtime 18480 up from 17520
|
||||||
|
Health 2300 down from 2700
|
||||||
|
Weapon range 260 down from 284
|
||||||
|
|
||||||
|
T2 AA Kbots
|
||||||
|
- both have pop-up turrets now
|
||||||
|
Arm Huntsman
|
||||||
|
Energy 3700 up from 3500
|
||||||
|
Metal 360 up from 340
|
||||||
|
Buildtime 7200 up from 6800
|
||||||
|
Added armored state: takes 75% damage (1520 health) when closed.
|
||||||
|
1140 health when opened to fire (unchanged)
|
||||||
|
Reload 0.85s down from 1s
|
||||||
|
DPS 50.6 vs ground 274 vs air, up from 42/235
|
||||||
|
Core Slingshot
|
||||||
|
Energy 3800 up from 3600
|
||||||
|
Metal 370 up from 350
|
||||||
|
Buildtime 7400 up from 7000
|
||||||
|
Added armored state: takes 75% damage (1760 health) when closed.
|
||||||
|
1320 health when opened to fire (unchanged)
|
||||||
|
Reload 1.5s down from 1.8s
|
||||||
|
DPS 50 vs ground 270 vs air, up from 41.67/225
|
||||||
|
|
||||||
|
Arm Hawk, Core Vamp
|
||||||
|
Reverted back to 2 missile launchers instead of 1 with half the reload
|
||||||
|
|
||||||
|
Arm Brawler, Core Rapier
|
||||||
|
Death Explosion SMALL_UNITEX (was BIG_UNITEX)
|
||||||
|
- less chain reaction from multiple aircraft deaths close together
|
||||||
|
|
||||||
|
Arm Millenium
|
||||||
|
New cannon sound
|
||||||
|
Increased delay between cannon salvos to 4.5 seconds (was 4s)
|
||||||
|
260 per shot (was 270)
|
||||||
|
3 shots per 5.5 secs, 141.8 DPS (was 270*3/5s 162 DPS)
|
||||||
|
|
||||||
|
Core Warlord
|
||||||
|
New cannon sound
|
||||||
|
Increased delay between cannon salvos to 4.95 seconds (was 4.3s)
|
||||||
|
310 per shot (unchanged)
|
||||||
|
3 shots per 6.6 secs, 140.9 DPS (was 310*3/5.6 166.1 DPS)
|
||||||
|
|
||||||
|
Bertha and Intimidator: Made descriptions only show the energy/shot
|
||||||
|
Same for Vulcan, Buzzsaw, Dora, Terminator
|
||||||
|
|
||||||
|
|
||||||
|
**T3 Updates**
|
||||||
|
|
||||||
|
T3 Construction Kbots:
|
||||||
|
build speed 480 up from 420
|
||||||
|
build range 224 up from 160
|
||||||
|
|
||||||
|
T3 Construction Vehicles:
|
||||||
|
build speed 600 up from 480
|
||||||
|
Build range 270 up from 180
|
||||||
|
|
||||||
|
T3 Construction Subs:
|
||||||
|
build speed 720 up from 540
|
||||||
|
Build range 300 up from 200
|
||||||
|
|
||||||
|
T3 Construction Hovercraft:
|
||||||
|
Build speed 540 up from 420
|
||||||
|
Build range 256 up from 190
|
||||||
|
|
||||||
|
T3 Construction Aircraft:
|
||||||
|
Build speed 360 up from 270
|
||||||
|
Build range 200 up from 120
|
||||||
|
|
||||||
|
T3 Resurrection Kbots (Kali, Dante)
|
||||||
|
Build speed 600 up from 480
|
||||||
|
(also applies to resurrect speed)
|
||||||
|
Build range 256 up from 180
|
||||||
|
- also reduced footprint to 2x2 (same as commander, construction kbots)
|
||||||
|
|
||||||
|
Arm Indra Amphibious crawler
|
||||||
|
Metal 4210M up from 3910
|
||||||
|
Build time 84200 down from 93840
|
||||||
|
Health 11000 up from 9400
|
||||||
|
Damage 320 (unchanged)
|
||||||
|
Reload 0.6s down from 0.7
|
||||||
|
DPS 533.3 up from 457
|
||||||
|
AOE 24 (unchanged)
|
||||||
|
Core Boss Amphibious kbot
|
||||||
|
Metal 4120 up from 3820
|
||||||
|
Build time 82400 down from 91680
|
||||||
|
Health 12000 up from 10200
|
||||||
|
Damage 640 up from 450
|
||||||
|
Reload 1.22s up from 1.1s
|
||||||
|
DPS 525 up from 409
|
||||||
|
AOE 108 (unchanged)
|
||||||
|
|
||||||
|
Arm Razorback Heavy Assault Kbot
|
||||||
|
Energy 95000 up from 89000
|
||||||
|
Metal 6650 up from 6350
|
||||||
|
Build time 159600 up from 152400
|
||||||
|
Main weapon:
|
||||||
|
Range 400 down from 420
|
||||||
|
Noexplode weapon:
|
||||||
|
Range 560 down from 640
|
||||||
|
Damage 540+ up from 480+
|
||||||
|
Reload 6.5s up from 6s
|
||||||
|
DPS 83+ up from 80
|
||||||
|
vlaunch AA missile (new):
|
||||||
|
Range 800, DPS: 56 to ground 300 to air, AOE 64
|
||||||
|
Core Ketzer Heavy Assault Kbot
|
||||||
|
Energy 93600 up from 85600
|
||||||
|
Metal 6740M up from 6240
|
||||||
|
Build time 161760 up from 149760
|
||||||
|
Main weapon:
|
||||||
|
Range 408 down from 428
|
||||||
|
noexplode weapon (new):
|
||||||
|
Range 560, Damage 480+, Reload 5.8s, DPS 82.8+, AOE 48
|
||||||
|
|
||||||
|
Arm Zephyr AA kbot
|
||||||
|
Health 10560 up from 10000
|
||||||
|
Core Jupiter AA kbot
|
||||||
|
Health 11200 up from 10760
|
||||||
|
Max speed 0.95 up from 0.9
|
||||||
|
|
||||||
|
Arm Wolf - Amphibious Sniper doggo Kbot
|
||||||
|
Health 15000 up from 13500
|
||||||
|
Core Krab - Amphibious Energy Weapon (noexplode) Kbot
|
||||||
|
Health 17200 up from 16000
|
||||||
|
|
||||||
|
Arm Tiger - Heavy Assault Tank (with flak)
|
||||||
|
Health 20800 up from 20200
|
||||||
|
Core Rattlesnake - Rapid Laser Assault Tank
|
||||||
|
Health 21600 up from 21200
|
||||||
|
|
||||||
|
Arm Impala - Energy weapon (noexplode) Tank
|
||||||
|
Health 14000 up from 13200
|
||||||
|
Core War Machine - Energy Weapon Tank
|
||||||
|
Health 15900 up from 14900
|
||||||
|
|
||||||
|
Arm G2 - Rapid Artillery Tank
|
||||||
|
149000E down from 156000E
|
||||||
|
Health 23600 up from 21800
|
||||||
|
Core Smasher - Heavy Artillery Tank
|
||||||
|
144000E down from 150000E
|
||||||
|
Health 24800 up from 23000
|
||||||
|
|
||||||
|
Arm Scudd - Mobile Tactical Nuke Launcher
|
||||||
|
Health 4250 down from 4800
|
||||||
|
Turnrate 200 down from 210
|
||||||
|
Core Precluder - Mobile Tactical Nuke Launcher
|
||||||
|
Health 4500 down from 5400
|
||||||
|
Turnrate 215 down from 230
|
||||||
|
|
||||||
|
Arm Invincible
|
||||||
|
Gauss weapon Damage 450 down from 480
|
||||||
|
Reload 0.45s down from 0.55s
|
||||||
|
DPS 1000 up from 872.7
|
||||||
|
Range 820 (unchanged)
|
||||||
|
AOE 32 (unchanged)
|
||||||
|
Core Excelsior - Battlecruiser
|
||||||
|
Riot weapon Damage 640 up from 450
|
||||||
|
Reload 0.7s up from 0.5s
|
||||||
|
DPS 914 up from 900
|
||||||
|
Range 800 (unchanged)
|
||||||
|
AOE 108 (unchanged)
|
||||||
|
|
||||||
|
T3 Aircraft carriers - changed description to "Aircraft Repair and Antinuke with Radar and Sonar"
|
||||||
|
Arm Longreach
|
||||||
|
Metal 7220 up from 7020
|
||||||
|
Buildtime 144400 up from 140400
|
||||||
|
Energy production 1250 up from 800
|
||||||
|
Core Fulcrum
|
||||||
|
Metal 7400 up from 7200
|
||||||
|
Buildtime 148000 up from 144000
|
||||||
|
Energy production 1320 up from 900
|
||||||
|
|
||||||
|
Arm Prophet - Capital Ship
|
||||||
|
Radar range 2800 down from 3000 (to match main gun range)
|
||||||
|
Energy production 1500 up from 450
|
||||||
|
Energy storage 2500 (unchanged)
|
||||||
|
Long range cannon range 2800 (unchanged)
|
||||||
|
Faster reload between shots, longer delay between salvos
|
||||||
|
- reload 0.4s from 0.54s
|
||||||
|
damage 1080 down from 1140
|
||||||
|
delay between 8-shot salvos 3.463s up from 2.928s
|
||||||
|
8 shots per 6.263s down from 6.708s
|
||||||
|
DPS 1379.5 up from 1359.6
|
||||||
|
Energy per shot 1200 up from 1000
|
||||||
|
Energy/sec average 1532.8
|
||||||
|
Core Omen - Capital Ship
|
||||||
|
Radar range 2980 down from 3100 (to match main gun range)
|
||||||
|
Energy production 1600 up from 480
|
||||||
|
Energy storage 3000 up from 2500
|
||||||
|
Long range cannon Range 2980 (unchanged)
|
||||||
|
Faster reload between shots, longer delay between salvos
|
||||||
|
- reload 0.56s from 0.72s
|
||||||
|
damage 1440 (unchanged)
|
||||||
|
delay between 6-shot salvos 3.483s up from 2.65s
|
||||||
|
6 shots per 6.283s down from 6.4s
|
||||||
|
DPS 1375 up from 1350
|
||||||
|
Energy per shot 1600 up from 1250
|
||||||
|
Energy/sec average 1528
|
||||||
|
|
||||||
|
Arm Samurai - Dreadnaught Hovercraft
|
||||||
|
499100E, 22500M, 540000 BT up from 459100E 21200M 508800 BT
|
||||||
|
Health 42000 up from 37000
|
||||||
|
Main weapon range 820 (unchanged)
|
||||||
|
Damage 450 reload 0.32 1406 DPS up from 480/0.4 1200 DPS
|
||||||
|
Core Broadsword - Dreadnaught Hovercraft
|
||||||
|
520600E, 23100M, 554400 BT up from 480600E 21800M 523200 BT
|
||||||
|
Health 45000 up from 40000
|
||||||
|
Main weapon range 820 (up from 810)
|
||||||
|
Damage 1000 reload 0.75 1333 DPS up from 1000/0.92 1087 DPS
|
||||||
|
|
||||||
|
|
||||||
|
**T3 Defence updates**
|
||||||
|
|
||||||
|
Arm Vulcan
|
||||||
|
reload 0.3 (was 0.32)
|
||||||
|
4 second delay between 8-shot salvos (was 5.2s)
|
||||||
|
DPS 1521.3 up from 1288.9
|
||||||
|
Energy to fire: 3000/shot, average 3934/sec
|
||||||
|
Core Buzzsaw
|
||||||
|
4.7 second delay between 6-shot salvos (was 6 seconds)
|
||||||
|
DPS 1500 up from 1270.6
|
||||||
|
Energy to fire: 5000/shot, average 4167/sec
|
||||||
|
Note: with veterancy, energy/sec will increase
|
||||||
|
|
||||||
|
Arm RAAMS T3 AA missile tower
|
||||||
|
Reload 0.45 (was 0.5) - 2209 DPS vs air, was 1988
|
||||||
|
Startvelocity 740 up from 540
|
||||||
|
Added edgeeffectiveness=0.9 same as flak (was 0) - big effective damage area increase
|
||||||
|
Smokedelay 0.01 from 0.1 (more smoketrail)
|
||||||
|
removed unitsonly tag
|
||||||
|
Core Screamer T3 AA missile tower
|
||||||
|
Reload 1.4 (was 1.6) - 2164 DPS vs air, was 1894
|
||||||
|
Startvelocity 700 up from 500
|
||||||
|
Added edgeeffectiveness=0.9 same as flak (was 0) - big effective damage area increase
|
||||||
|
Smokedelay 0.01 from 0.1 (more smoketrail)
|
||||||
|
removed unitsonly tag
|
||||||
|
|
||||||
|
|
||||||
|
**Eco Updates**
|
||||||
|
|
||||||
|
Moho Metal makers: reduced costs, big reduction in build time
|
||||||
|
Reduced production, and slightly reduced energy to metal conversion efficiency (still better than T1 60E/1M)
|
||||||
|
Arm Moho Metal Maker
|
||||||
|
Energy 16360 down from 19635
|
||||||
|
Metal 50 down from 55
|
||||||
|
Buildtime 30000 down from 44000
|
||||||
|
Energy use 800 down from 900
|
||||||
|
Metal production 14 down from 16
|
||||||
|
Efficiency 57.2E/1M, was 56.25
|
||||||
|
OTA/ProTA: -800E/+16M, efficiency 50E/1M
|
||||||
|
Death Explosion ESTOR_BUILDINGEX (900 damage 220 AOE) was ESTOR_BUILDING (1900 damage 420 AOE)
|
||||||
|
Self-D explosion ESTOR_BUILDING (unchanged)
|
||||||
|
|
||||||
|
Core Moho Metal Maker
|
||||||
|
Energy 15845 down from 17680
|
||||||
|
Metal 46 down from 50
|
||||||
|
Buildtime 27600 down from 40000
|
||||||
|
Energy use 690 down from 800
|
||||||
|
Metal production 12 down from 14
|
||||||
|
Efficiency 57.5E/1M, was 57.2
|
||||||
|
OTA/ProTA: -625E/12M, efficiency 52.1E/1M
|
||||||
|
Death Explosion ESTOR_BUILDINGEX (900 damage 220 AOE) was LARGE_BUILDING (1800 damage 400 AOE)
|
||||||
|
Self-D explosion LARGE_BUILDING (unchanged)
|
||||||
|
|
||||||
|
Arm Underwater Moho Metal Maker
|
||||||
|
Energy 18200 down from 21051
|
||||||
|
Metal 85 down from 120
|
||||||
|
Buildtime 34000 down from 48000
|
||||||
|
Energy use 912 down from 1020
|
||||||
|
Metal production 16 down from 18
|
||||||
|
(efficiency 57.0E/1M, was 56.67)
|
||||||
|
Death and self-d explosion same as land version (was LARGE_BUILDING/LARGE_BUILDING)
|
||||||
|
|
||||||
|
Core Underwater Moho Metal Maker
|
||||||
|
Energy 17800 down from 18077
|
||||||
|
Metal 80 down from 108
|
||||||
|
Buildtime 32000 down from 43200
|
||||||
|
Energy Use 860 up from 850
|
||||||
|
Metal production 15 (unchanged)
|
||||||
|
(efficiency 57.33E/1M, was 56.67)
|
||||||
|
Death and self-d explosion same as land version (was LARGE_BUILDING/LARGE_BUILDING)
|
||||||
|
|
||||||
|
Arm Fusion
|
||||||
|
Energy 39865 down from 42865
|
||||||
|
Metal 5180 (unchanged)
|
||||||
|
Build time 102600 (unchanged)
|
||||||
|
Energy production 1050 (up from 1000)
|
||||||
|
|
||||||
|
Core Fusion
|
||||||
|
Energy 43725 down from 48225
|
||||||
|
Metal 5592 down from 5804
|
||||||
|
Buildtime 111840 down from 116080
|
||||||
|
Energy production 1200 (unchanged)
|
||||||
|
|
||||||
|
Arm Cloaking Fusion
|
||||||
|
Energy 67816 down from 72816
|
||||||
|
Metal 6575 down from 6845
|
||||||
|
Build Time 157800 up from 136900
|
||||||
|
Energy Production 1500 down from 1600
|
||||||
|
Cloak Cost 280 down from 320
|
||||||
|
|
||||||
|
Core Cloaking Fusion
|
||||||
|
Energy 73850 down from 79850
|
||||||
|
Metal 7074 down from 7582
|
||||||
|
Build time 169776 up from 151640
|
||||||
|
Energy Production 1700 down from 1900
|
||||||
|
Cloak Cost 300 down from 400
|
||||||
|
|
||||||
|
Arm Underwater Fusion
|
||||||
|
Energy 54787 down from 63787
|
||||||
|
Metal 6885 up from 6785
|
||||||
|
Build time 137700 up from 135700
|
||||||
|
Energy production 1400 down from 1500
|
||||||
|
|
||||||
|
Core Underwater Fusion
|
||||||
|
Energy 60849 down from 69849
|
||||||
|
Metal 7480 up from 7460
|
||||||
|
Buildtime 149600 up from 149200
|
||||||
|
Energy Production 1600 down from 1800
|
||||||
|
|
||||||
|
Arm Metal Making Super Fusion
|
||||||
|
Makes 10500 energy up from 10k
|
||||||
|
turned on trades -5k E for +90 metal down from +96
|
||||||
|
Metal conversion efficiency: 55.6E/1M (was 52.1)
|
||||||
|
Cloaks for 1000E (unchanged)
|
||||||
|
Reduced footprint to 12x7 from 14x8
|
||||||
|
Metal cost 42800 up from 40800
|
||||||
|
Buildtime 856000 up from 816000
|
||||||
|
|
||||||
|
Core Metal Making Uber Fusion
|
||||||
|
Makes 12k energy (unchanged)
|
||||||
|
turned on trades -6K E for +107 metal down from +115
|
||||||
|
Metal conversion efficiency: 56.1E/1m (was 52.2)
|
||||||
|
Cloaks for 1100E (unchanged)
|
||||||
|
Reduced footprint to 10x10 from 12x12
|
||||||
|
Metal cost 46200 up from 44200
|
||||||
|
Buildtime 924000 up from 884000
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,23 @@
|
|||||||
|
; Megamap Icon Settings
|
||||||
|
|
||||||
|
[Option] ; General Settings
|
||||||
|
|
||||||
|
FillColor=245; ; The color that will be replaced by the player color
|
||||||
|
TransparentColor=9; ; The color that will be replaced by transparency
|
||||||
|
SelectedColor=255; ; The color that will be shown only when the unit is selected
|
||||||
|
HoverColor=84; ; The color that will show when the icon is hovered on
|
||||||
|
UseCircleHover=FALSE; ; Enable or disable a drawn ring when hovered on, disabled by default
|
||||||
|
UseDefaultIcon=TRUE; ; Enable to use default icons, disable to use custom icons
|
||||||
|
|
||||||
|
[ICON] ; Custom Icons
|
||||||
|
|
||||||
|
Unknow=UNKNOWN.PCX;
|
||||||
|
Nothing=NONE.pcx;
|
||||||
|
NukeIcon=NUKEICON.pcx;
|
||||||
|
|
||||||
|
; When custom icons are enabled, set them below using the category tags from unit fbi files
|
||||||
|
; You can use your own custom icon files, they must be in the TA color palette and PCX format
|
||||||
|
; A disabled example of the syntax is provided below
|
||||||
|
; In the example, any unit with KBOT as a category will use KBOT.pcx as the icon (not provided)
|
||||||
|
|
||||||
|
;KBOT=KBOT.pcx
|
||||||
Binary file not shown.
@ -0,0 +1,79 @@
|
|||||||
|
# TA Demo Recorder and Community Patch
|
||||||
|
|
||||||
|
## LICENSE
|
||||||
|
|
||||||
|
### TA Community Patch (original filename: tdraw.dll; source directory: src/DDRaw)
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2023 Axle1975, FunkyFr3sh
|
||||||
|
Copyright (c) 2019 Xpoy
|
||||||
|
Copyright (c) 2003 SJ, Yeha
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
### TA Demo Recorder (original filename: tplayx.dll; source directory: src/Recorder)
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Rime
|
||||||
|
Copyright (c) 2003 SJ, Yeha
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
### TA Demo Replayer (original filename: SERVER.EXE, source directory: src/Server)
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Chaos
|
||||||
|
Copyright (c) 2003 Fnordia
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@ -0,0 +1,701 @@
|
|||||||
|
//_____________________________/\_______________________________
|
||||||
|
//==============================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// [CRTS] PUBLIC DOMAIN CRT-STYLED SCALAR - 20180120b
|
||||||
|
//
|
||||||
|
// by Timothy Lottes
|
||||||
|
// https://www.shadertoy.com/view/MtSfRK
|
||||||
|
// adapted for RetroArch by hunterk
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//==============================================================
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
//_____________________________/\_______________________________
|
||||||
|
//==============================================================
|
||||||
|
//
|
||||||
|
// WHAT'S NEW
|
||||||
|
//
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Evolution of prior shadertoy example
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// This one is semi-optimized
|
||||||
|
// - Less texture fetches
|
||||||
|
// - Didn't get to instruction level optimization
|
||||||
|
// - Could likely use texture fetch to generate phosphor mask
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Added options to disable unused features
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Added in exposure matching
|
||||||
|
// - Given scan-line effect and mask always darkens image
|
||||||
|
// - Uses generalized tonemapper to boost mid-level
|
||||||
|
// - Note this can compress highlights
|
||||||
|
// - And won't get back peak brightness
|
||||||
|
// - But best option if one doesn't want as much darkening
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Includes option saturation and contrast controls
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Added in subtractive aperture grille
|
||||||
|
// - This is a bit brighter than prior
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Make sure input to this filter is already low-resolution
|
||||||
|
// - This is not designed to work on titles doing the following
|
||||||
|
// - Rendering to hi-res with nearest sampling
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Added a fast and more pixely option for 2 tap/pixel
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Improved the vignette when WARP is enabled
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Didn't test HLSL or CPU options
|
||||||
|
// - Will incorportate patches if they are broken
|
||||||
|
// - But out of time to try them myself
|
||||||
|
//==============================================================
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
//_____________________________/\_______________________________
|
||||||
|
//==============================================================
|
||||||
|
//
|
||||||
|
// LICENSE = UNLICENSE (aka PUBLIC DOMAIN)
|
||||||
|
//
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// This is free and unencumbered software released into the
|
||||||
|
// public domain.
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Anyone is free to copy, modify, publish, use, compile, sell,
|
||||||
|
// or distribute this software, either in source code form or as
|
||||||
|
// a compiled binary, for any purpose, commercial or
|
||||||
|
// non-commercial, and by any means.
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// In jurisdictions that recognize copyright laws, the author or
|
||||||
|
// authors of this software dedicate any and all copyright
|
||||||
|
// interest in the software to the public domain. We make this
|
||||||
|
// dedication for the benefit of the public at large and to the
|
||||||
|
// detriment of our heirs and successors. We intend this
|
||||||
|
// dedication to be an overt act of relinquishment in perpetuity
|
||||||
|
// of all present and future rights to this software under
|
||||||
|
// copyright law.
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||||||
|
// KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||||
|
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||||
|
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
|
||||||
|
// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// For more information, please refer to
|
||||||
|
// <http://unlicense.org/>
|
||||||
|
//==============================================================
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#pragma parameter MASK "Mask Type" 1.0 0.0 3.0 1.0
|
||||||
|
#pragma parameter MASK_INTENSITY "Mask Intensity" 0.5 0.0 1.0 0.05
|
||||||
|
#pragma parameter SCANLINE_THINNESS "Scanline Intensity" 0.5 0.0 1.0 0.1
|
||||||
|
#pragma parameter SCAN_BLUR "Sharpness" 2.5 1.0 3.0 0.1
|
||||||
|
#pragma parameter CURVATURE "Curvature" 0.02 0.0 0.25 0.01
|
||||||
|
#pragma parameter TRINITRON_CURVE "Trinitron-style Curve" 0.0 0.0 1.0 1.0
|
||||||
|
#pragma parameter CORNER "Corner Round" 3.0 0.0 11.0 1.0
|
||||||
|
#pragma parameter CRT_GAMMA "CRT Gamma" 2.4 0.0 51.0 0.1
|
||||||
|
|
||||||
|
#if defined(VERTEX)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING out
|
||||||
|
#define COMPAT_ATTRIBUTE in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define COMPAT_ATTRIBUTE attribute
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
COMPAT_ATTRIBUTE vec4 VertexCoord;
|
||||||
|
COMPAT_ATTRIBUTE vec4 COLOR;
|
||||||
|
COMPAT_ATTRIBUTE vec4 TexCoord;
|
||||||
|
COMPAT_VARYING vec4 COL0;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
vec4 _oPosition1;
|
||||||
|
uniform mat4 MVPMatrix;
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
|
||||||
|
// compatibility #defines
|
||||||
|
#define vTexCoord TEX0.xy
|
||||||
|
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
|
||||||
|
#define OutSize vec4(OutputSize, 1.0 / OutputSize)
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = MVPMatrix * VertexCoord;
|
||||||
|
TEX0.xy = TexCoord.xy;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(FRAGMENT)
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||||
|
precision highp float;
|
||||||
|
#else
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
out COMPAT_PRECISION vec4 FragColor;
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define FragColor gl_FragColor
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
uniform sampler2D Texture;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
// compatibility #defines
|
||||||
|
#define Source Texture
|
||||||
|
#define vTexCoord TEX0.xy
|
||||||
|
|
||||||
|
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
|
||||||
|
#define OutSize vec4(OutputSize, 1.0 / OutputSize)
|
||||||
|
|
||||||
|
#ifdef PARAMETER_UNIFORM
|
||||||
|
uniform COMPAT_PRECISION float CRT_GAMMA;
|
||||||
|
uniform COMPAT_PRECISION float SCANLINE_THINNESS;
|
||||||
|
uniform COMPAT_PRECISION float SCAN_BLUR;
|
||||||
|
uniform COMPAT_PRECISION float MASK_INTENSITY;
|
||||||
|
uniform COMPAT_PRECISION float CURVATURE;
|
||||||
|
uniform COMPAT_PRECISION float CORNER;
|
||||||
|
uniform COMPAT_PRECISION float MASK;
|
||||||
|
uniform COMPAT_PRECISION float TRINITRON_CURVE;
|
||||||
|
#else
|
||||||
|
#define CRT_GAMMA 2.4
|
||||||
|
#define SCANLINE_THINNESS 0.5
|
||||||
|
#define SCAN_BLUR 2.5
|
||||||
|
#define MASK_INTENSITY 0.54
|
||||||
|
#define CURVATURE 0.00
|
||||||
|
#define CORNER 3.0
|
||||||
|
#define MASK 1.0
|
||||||
|
#define TRINITRON_CURVE 0.0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//_____________________________/\_______________________________
|
||||||
|
//==============================================================
|
||||||
|
//
|
||||||
|
// GAMMA FUNCTIONS
|
||||||
|
//
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Since shadertoy doesn't have sRGB textures
|
||||||
|
// And we need linear input into shader
|
||||||
|
// Don't do this in your code
|
||||||
|
float FromSrgb1(float c){
|
||||||
|
return (c<=0.04045)?c*(1.0/12.92):
|
||||||
|
pow(c*(1.0/1.055)+(0.055/1.055),CRT_GAMMA);}
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
vec3 FromSrgb(vec3 c){return vec3(
|
||||||
|
FromSrgb1(c.r),FromSrgb1(c.g),FromSrgb1(c.b));}
|
||||||
|
|
||||||
|
// Convert from linear to sRGB
|
||||||
|
// Since shader toy output is not linear
|
||||||
|
float ToSrgb1(float c){
|
||||||
|
return(c<0.0031308?c*12.92:1.055*pow(c,0.41666)-0.055);}
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
vec3 ToSrgb(vec3 c){return vec3(
|
||||||
|
ToSrgb1(c.r),ToSrgb1(c.g),ToSrgb1(c.b));}
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
//_____________________________/\_______________________________
|
||||||
|
//==============================================================
|
||||||
|
//
|
||||||
|
// DEFINES
|
||||||
|
//
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// CRTS_CPU - CPU code
|
||||||
|
// CRTS_GPU - GPU code
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// CRTS_GLSL - GLSL
|
||||||
|
// CRTS_HLSL - HLSL (not tested yet)
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// CRTS_DEBUG - Define to see on/off split screen
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// CRTS_WARP - Apply screen warp
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// CRTS_2_TAP - Faster very pixely 2-tap filter (off is 8)
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// CRTS_MASK_GRILLE - Aperture grille (aka Trinitron)
|
||||||
|
// CRTS_MASK_GRILLE_LITE - Brighter (subtractive channels)
|
||||||
|
// CRTS_MASK_NONE - No mask
|
||||||
|
// CRTS_MASK_SHADOW - Horizontally stretched shadow mask
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// CRTS_TONE - Normalize mid-level and process color
|
||||||
|
// CRTS_CONTRAST - Process color - enable contrast control
|
||||||
|
// CRTS_SATURATION - Process color - enable saturation control
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#define CRTS_STATIC
|
||||||
|
#define CrtsPow
|
||||||
|
#define CRTS_RESTRICT
|
||||||
|
//==============================================================
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//==============================================================
|
||||||
|
// SETUP FOR CRTS
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
//==============================================================
|
||||||
|
//#define CRTS_DEBUG 1
|
||||||
|
#define CRTS_GPU 1
|
||||||
|
#define CRTS_GLSL 1
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
//#define CRTS_2_TAP 1
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#define CRTS_TONE 1
|
||||||
|
#define CRTS_CONTRAST 0
|
||||||
|
#define CRTS_SATURATION 0
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#define CRTS_WARP 1
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Try different masks -> moved to runtime parameters
|
||||||
|
//#define CRTS_MASK_GRILLE 1
|
||||||
|
//#define CRTS_MASK_GRILLE_LITE 1
|
||||||
|
//#define CRTS_MASK_NONE 1
|
||||||
|
//#define CRTS_MASK_SHADOW 1
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Scanline thinness
|
||||||
|
// 0.50 = fused scanlines
|
||||||
|
// 0.70 = recommended default
|
||||||
|
// 1.00 = thinner scanlines (too thin)
|
||||||
|
#define INPUT_THIN 0.5 + (0.5 * SCANLINE_THINNESS)
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Horizonal scan blur
|
||||||
|
// -3.0 = pixely
|
||||||
|
// -2.5 = default
|
||||||
|
// -2.0 = smooth
|
||||||
|
// -1.0 = too blurry
|
||||||
|
#define INPUT_BLUR -1.0 * SCAN_BLUR
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Shadow mask effect, ranges from,
|
||||||
|
// 0.25 = large amount of mask (not recommended, too dark)
|
||||||
|
// 0.50 = recommended default
|
||||||
|
// 1.00 = no shadow mask
|
||||||
|
#define INPUT_MASK 1.0 - MASK_INTENSITY
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#define INPUT_X InputSize.x
|
||||||
|
#define INPUT_Y InputSize.y
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Setup the function which returns input image color
|
||||||
|
vec3 CrtsFetch(vec2 uv){
|
||||||
|
// For shadertoy, scale to get native texels in the image
|
||||||
|
uv*=vec2(INPUT_X,INPUT_Y)/TextureSize.xy;
|
||||||
|
// Move towards intersting parts
|
||||||
|
// uv+=vec2(0.5,0.5);
|
||||||
|
// Non-shadertoy case would not have the color conversion
|
||||||
|
return FromSrgb(COMPAT_TEXTURE(Texture,uv.xy,-16.0).rgb);}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
//_____________________________/\_______________________________
|
||||||
|
//==============================================================
|
||||||
|
//
|
||||||
|
// GPU CODE
|
||||||
|
//
|
||||||
|
//==============================================================
|
||||||
|
#ifdef CRTS_GPU
|
||||||
|
//_____________________________/\_______________________________
|
||||||
|
//==============================================================
|
||||||
|
// PORTABILITY
|
||||||
|
//==============================================================
|
||||||
|
#ifdef CRTS_GLSL
|
||||||
|
#define CrtsF1 float
|
||||||
|
#define CrtsF2 vec2
|
||||||
|
#define CrtsF3 vec3
|
||||||
|
#define CrtsF4 vec4
|
||||||
|
#define CrtsFractF1 fract
|
||||||
|
#define CrtsRcpF1(x) (1.0/(x))
|
||||||
|
#define CrtsSatF1(x) clamp((x),0.0,1.0)
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
CrtsF1 CrtsMax3F1(CrtsF1 a,CrtsF1 b,CrtsF1 c){
|
||||||
|
return max(a,max(b,c));}
|
||||||
|
#endif
|
||||||
|
//==============================================================
|
||||||
|
#ifdef CRTS_HLSL
|
||||||
|
#define CrtsF1 float
|
||||||
|
#define CrtsF2 float2
|
||||||
|
#define CrtsF3 float3
|
||||||
|
#define CrtsF4 float4
|
||||||
|
#define CrtsFractF1 frac
|
||||||
|
#define CrtsRcpF1(x) (1.0/(x))
|
||||||
|
#define CrtsSatF1(x) saturate(x)
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
CrtsF1 CrtsMax3F1(CrtsF1 a,CrtsF1 b,CrtsF1 c){
|
||||||
|
return max(a,max(b,c));}
|
||||||
|
#endif
|
||||||
|
//_____________________________/\_______________________________
|
||||||
|
//==============================================================
|
||||||
|
// TONAL CONTROL CONSTANT GENERATION
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// This is in here for rapid prototyping
|
||||||
|
// Please use the CPU code and pass in as constants
|
||||||
|
//==============================================================
|
||||||
|
CrtsF4 CrtsTone(
|
||||||
|
CrtsF1 contrast,
|
||||||
|
CrtsF1 saturation,
|
||||||
|
CrtsF1 thin,
|
||||||
|
CrtsF1 mask){
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
if(MASK == 0.0) mask=1.0;
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
if(MASK == 1.0){
|
||||||
|
// Normal R mask is {1.0,mask,mask}
|
||||||
|
// LITE R mask is {mask,1.0,1.0}
|
||||||
|
mask=0.5+mask*0.5;
|
||||||
|
}
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
CrtsF4 ret;
|
||||||
|
CrtsF1 midOut=0.18/((1.5-thin)*(0.5*mask+0.5));
|
||||||
|
CrtsF1 pMidIn=pow(0.18,contrast);
|
||||||
|
ret.x=contrast;
|
||||||
|
ret.y=((-pMidIn)+midOut)/((1.0-pMidIn)*midOut);
|
||||||
|
ret.z=((-pMidIn)*midOut+pMidIn)/(midOut*(-pMidIn)+midOut);
|
||||||
|
ret.w=contrast+saturation;
|
||||||
|
return ret;}
|
||||||
|
//_____________________________/\_______________________________
|
||||||
|
//==============================================================
|
||||||
|
// MASK
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Letting LCD/OLED pixel elements function like CRT phosphors
|
||||||
|
// So "phosphor" resolution scales with display resolution
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Not applying any warp to the mask (want high frequency)
|
||||||
|
// Real aperture grille has a mask which gets wider on ends
|
||||||
|
// Not attempting to be "real" but instead look the best
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Shadow mask is stretched horizontally
|
||||||
|
// RRGGBB
|
||||||
|
// GBBRRG
|
||||||
|
// RRGGBB
|
||||||
|
// This tends to look better on LCDs than vertical
|
||||||
|
// Also 2 pixel width is required to get triad centered
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// The LITE version of the Aperture Grille is brighter
|
||||||
|
// Uses {dark,1.0,1.0} for R channel
|
||||||
|
// Non LITE version uses {1.0,dark,dark}
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// 'pos' - This is 'fragCoord.xy'
|
||||||
|
// Pixel {0,0} should be {0.5,0.5}
|
||||||
|
// Pixel {1,1} should be {1.5,1.5}
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// 'dark' - Exposure of of masked channel
|
||||||
|
// 0.0=fully off, 1.0=no effect
|
||||||
|
//==============================================================
|
||||||
|
CrtsF3 CrtsMask(CrtsF2 pos,CrtsF1 dark){
|
||||||
|
if(MASK == 2.0){
|
||||||
|
CrtsF3 m=CrtsF3(dark,dark,dark);
|
||||||
|
CrtsF1 x=CrtsFractF1(pos.x*(1.0/3.0));
|
||||||
|
if(x<(1.0/3.0))m.r=1.0;
|
||||||
|
else if(x<(2.0/3.0))m.g=1.0;
|
||||||
|
else m.b=1.0;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
if(MASK == 1.0){
|
||||||
|
CrtsF3 m=CrtsF3(1.0,1.0,1.0);
|
||||||
|
CrtsF1 x=CrtsFractF1(pos.x*(1.0/3.0));
|
||||||
|
if(x<(1.0/3.0))m.r=dark;
|
||||||
|
else if(x<(2.0/3.0))m.g=dark;
|
||||||
|
else m.b=dark;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
if(MASK == 0.0){
|
||||||
|
return CrtsF3(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
if(MASK == 3.0){
|
||||||
|
pos.x+=pos.y*2.9999;
|
||||||
|
CrtsF3 m=CrtsF3(dark,dark,dark);
|
||||||
|
CrtsF1 x=CrtsFractF1(pos.x*(1.0/6.0));
|
||||||
|
if(x<(1.0/3.0))m.r=1.0;
|
||||||
|
else if(x<(2.0/3.0))m.g=1.0;
|
||||||
|
else m.b=1.0;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//_____________________________/\_______________________________
|
||||||
|
//==============================================================
|
||||||
|
// FILTER ENTRY
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Input must be linear
|
||||||
|
// Output color is linear
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Must have fetch function setup: CrtsF3 CrtsFetch(CrtsF2 uv)
|
||||||
|
// - The 'uv' range is {0.0 to 1.0} for input texture
|
||||||
|
// - Output of this must be linear color
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// SCANLINE MATH & AUTO-EXPOSURE NOTES
|
||||||
|
// ===================================
|
||||||
|
// Each output line has contribution from at most 2 scanlines
|
||||||
|
// Scanlines are shaped by a windowed cosine function
|
||||||
|
// This shape blends together well with only 2 lines of overlap
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Base scanline intensity is as follows
|
||||||
|
// which leaves output intensity range from {0 to 1.0}
|
||||||
|
// --------
|
||||||
|
// thin := range {thick 0.5 to thin 1.0}
|
||||||
|
// off := range {0.0 to <1.0},
|
||||||
|
// sub-pixel offset between two scanlines
|
||||||
|
// --------
|
||||||
|
// a0=cos(min(0.5, off *thin)*2pi)*0.5+0.5;
|
||||||
|
// a1=cos(min(0.5,(1.0-off)*thin)*2pi)*0.5+0.5;
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// This leads to a image darkening factor of roughly:
|
||||||
|
// {(1.5-thin)/1.0}
|
||||||
|
// This is further reduced by the mask:
|
||||||
|
// {1.0/2.0+mask*1.0/2.0}
|
||||||
|
// Reciprocal of combined effect is used for auto-exposure
|
||||||
|
// to scale up the mid-level in the tonemapper
|
||||||
|
//==============================================================
|
||||||
|
CrtsF3 CrtsFilter(
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// SV_POSITION, fragCoord.xy
|
||||||
|
CrtsF2 ipos,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// inputSize / outputSize (in pixels)
|
||||||
|
CrtsF2 inputSizeDivOutputSize,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// 0.5 * inputSize (in pixels)
|
||||||
|
CrtsF2 halfInputSize,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// 1.0 / inputSize (in pixels)
|
||||||
|
CrtsF2 rcpInputSize,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// 1.0 / outputSize (in pixels)
|
||||||
|
CrtsF2 rcpOutputSize,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// 2.0 / outputSize (in pixels)
|
||||||
|
CrtsF2 twoDivOutputSize,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// inputSize.y
|
||||||
|
CrtsF1 inputHeight,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Warp scanlines but not phosphor mask
|
||||||
|
// 0.0 = no warp
|
||||||
|
// 1.0/64.0 = light warping
|
||||||
|
// 1.0/32.0 = more warping
|
||||||
|
// Want x and y warping to be different (based on aspect)
|
||||||
|
CrtsF2 warp,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Scanline thinness
|
||||||
|
// 0.50 = fused scanlines
|
||||||
|
// 0.70 = recommended default
|
||||||
|
// 1.00 = thinner scanlines (too thin)
|
||||||
|
// Shared with CrtsTone() function
|
||||||
|
CrtsF1 thin,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Horizonal scan blur
|
||||||
|
// -3.0 = pixely
|
||||||
|
// -2.5 = default
|
||||||
|
// -2.0 = smooth
|
||||||
|
// -1.0 = too blurry
|
||||||
|
CrtsF1 blur,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Shadow mask effect, ranges from,
|
||||||
|
// 0.25 = large amount of mask (not recommended, too dark)
|
||||||
|
// 0.50 = recommended default
|
||||||
|
// 1.00 = no shadow mask
|
||||||
|
// Shared with CrtsTone() function
|
||||||
|
CrtsF1 mask,
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Tonal curve parameters generated by CrtsTone()
|
||||||
|
CrtsF4 tone
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
){
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#ifdef CRTS_DEBUG
|
||||||
|
CrtsF2 uv=ipos*rcpOutputSize;
|
||||||
|
// Show second half processed, and first half un-processed
|
||||||
|
if(uv.x<0.5){
|
||||||
|
// Force nearest to get squares
|
||||||
|
uv*=1.0/rcpInputSize;
|
||||||
|
uv=floor(uv)+CrtsF2(0.5,0.5);
|
||||||
|
uv*=rcpInputSize;
|
||||||
|
CrtsF3 color=CrtsFetch(uv);
|
||||||
|
return color;}
|
||||||
|
#endif
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Optional apply warp
|
||||||
|
CrtsF2 pos;
|
||||||
|
#ifdef CRTS_WARP
|
||||||
|
// Convert to {-1 to 1} range
|
||||||
|
pos=ipos*twoDivOutputSize-CrtsF2(1.0,1.0);
|
||||||
|
// Distort pushes image outside {-1 to 1} range
|
||||||
|
pos*=CrtsF2(
|
||||||
|
1.0+(pos.y*pos.y)*warp.x,
|
||||||
|
1.0+(pos.x*pos.x)*warp.y);
|
||||||
|
// TODO: Vignette needs optimization
|
||||||
|
CrtsF1 vin=(1.0-(
|
||||||
|
(1.0-CrtsSatF1(pos.x*pos.x))*(1.0-CrtsSatF1(pos.y*pos.y)))) * (0.998 + (0.001 * CORNER));
|
||||||
|
vin=CrtsSatF1((-vin)*inputHeight+inputHeight);
|
||||||
|
// Leave in {0 to inputSize}
|
||||||
|
pos=pos*halfInputSize+halfInputSize;
|
||||||
|
#else
|
||||||
|
pos=ipos*inputSizeDivOutputSize;
|
||||||
|
#endif
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Snap to center of first scanline
|
||||||
|
CrtsF1 y0=floor(pos.y-0.5)+0.5;
|
||||||
|
#ifdef CRTS_2_TAP
|
||||||
|
// Using Inigo's "Improved Texture Interpolation"
|
||||||
|
// http://iquilezles.org/www/articles/texture/texture.htm
|
||||||
|
pos.x+=0.5;
|
||||||
|
CrtsF1 xi=floor(pos.x);
|
||||||
|
CrtsF1 xf=pos.x-xi;
|
||||||
|
xf=xf*xf*xf*(xf*(xf*6.0-15.0)+10.0);
|
||||||
|
CrtsF1 x0=xi+xf-0.5;
|
||||||
|
CrtsF2 p=CrtsF2(x0*rcpInputSize.x,y0*rcpInputSize.y);
|
||||||
|
// Coordinate adjusted bilinear fetch from 2 nearest scanlines
|
||||||
|
CrtsF3 colA=CrtsFetch(p);
|
||||||
|
p.y+=rcpInputSize.y;
|
||||||
|
CrtsF3 colB=CrtsFetch(p);
|
||||||
|
#else
|
||||||
|
// Snap to center of one of four pixels
|
||||||
|
CrtsF1 x0=floor(pos.x-1.5)+0.5;
|
||||||
|
// Inital UV position
|
||||||
|
CrtsF2 p=CrtsF2(x0*rcpInputSize.x,y0*rcpInputSize.y);
|
||||||
|
// Fetch 4 nearest texels from 2 nearest scanlines
|
||||||
|
CrtsF3 colA0=CrtsFetch(p);
|
||||||
|
p.x+=rcpInputSize.x;
|
||||||
|
CrtsF3 colA1=CrtsFetch(p);
|
||||||
|
p.x+=rcpInputSize.x;
|
||||||
|
CrtsF3 colA2=CrtsFetch(p);
|
||||||
|
p.x+=rcpInputSize.x;
|
||||||
|
CrtsF3 colA3=CrtsFetch(p);
|
||||||
|
p.y+=rcpInputSize.y;
|
||||||
|
CrtsF3 colB3=CrtsFetch(p);
|
||||||
|
p.x-=rcpInputSize.x;
|
||||||
|
CrtsF3 colB2=CrtsFetch(p);
|
||||||
|
p.x-=rcpInputSize.x;
|
||||||
|
CrtsF3 colB1=CrtsFetch(p);
|
||||||
|
p.x-=rcpInputSize.x;
|
||||||
|
CrtsF3 colB0=CrtsFetch(p);
|
||||||
|
#endif
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Vertical filter
|
||||||
|
// Scanline intensity is using sine wave
|
||||||
|
// Easy filter window and integral used later in exposure
|
||||||
|
CrtsF1 off=pos.y-y0;
|
||||||
|
CrtsF1 pi2=6.28318530717958;
|
||||||
|
CrtsF1 hlf=0.5;
|
||||||
|
CrtsF1 scanA=cos(min(0.5, off *thin )*pi2)*hlf+hlf;
|
||||||
|
CrtsF1 scanB=cos(min(0.5,(-off)*thin+thin)*pi2)*hlf+hlf;
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#ifdef CRTS_2_TAP
|
||||||
|
#ifdef CRTS_WARP
|
||||||
|
// Get rid of wrong pixels on edge
|
||||||
|
scanA*=vin;
|
||||||
|
scanB*=vin;
|
||||||
|
#endif
|
||||||
|
// Apply vertical filter
|
||||||
|
CrtsF3 color=(colA*scanA)+(colB*scanB);
|
||||||
|
#else
|
||||||
|
// Horizontal kernel is simple gaussian filter
|
||||||
|
CrtsF1 off0=pos.x-x0;
|
||||||
|
CrtsF1 off1=off0-1.0;
|
||||||
|
CrtsF1 off2=off0-2.0;
|
||||||
|
CrtsF1 off3=off0-3.0;
|
||||||
|
CrtsF1 pix0=exp2(blur*off0*off0);
|
||||||
|
CrtsF1 pix1=exp2(blur*off1*off1);
|
||||||
|
CrtsF1 pix2=exp2(blur*off2*off2);
|
||||||
|
CrtsF1 pix3=exp2(blur*off3*off3);
|
||||||
|
CrtsF1 pixT=CrtsRcpF1(pix0+pix1+pix2+pix3);
|
||||||
|
#ifdef CRTS_WARP
|
||||||
|
// Get rid of wrong pixels on edge
|
||||||
|
pixT*=vin;
|
||||||
|
#endif
|
||||||
|
scanA*=pixT;
|
||||||
|
scanB*=pixT;
|
||||||
|
// Apply horizontal and vertical filters
|
||||||
|
CrtsF3 color=
|
||||||
|
(colA0*pix0+colA1*pix1+colA2*pix2+colA3*pix3)*scanA +
|
||||||
|
(colB0*pix0+colB1*pix1+colB2*pix2+colB3*pix3)*scanB;
|
||||||
|
#endif
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Apply phosphor mask
|
||||||
|
color*=CrtsMask(ipos,mask);
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Optional color processing
|
||||||
|
#ifdef CRTS_TONE
|
||||||
|
// Tonal control, start by protecting from /0
|
||||||
|
CrtsF1 peak=max(1.0/(256.0*65536.0),
|
||||||
|
CrtsMax3F1(color.r,color.g,color.b));
|
||||||
|
// Compute the ratios of {R,G,B}
|
||||||
|
CrtsF3 ratio=color*CrtsRcpF1(peak);
|
||||||
|
// Apply tonal curve to peak value
|
||||||
|
#ifdef CRTS_CONTRAST
|
||||||
|
peak=pow(peak,tone.x);
|
||||||
|
#endif
|
||||||
|
peak=peak*CrtsRcpF1(peak*tone.y+tone.z);
|
||||||
|
// Apply saturation
|
||||||
|
#ifdef CRTS_SATURATION
|
||||||
|
ratio=pow(ratio,CrtsF3(tone.w,tone.w,tone.w));
|
||||||
|
#endif
|
||||||
|
// Reconstruct color
|
||||||
|
return ratio*peak;
|
||||||
|
#else
|
||||||
|
return color;
|
||||||
|
#endif
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec2 warp_factor;
|
||||||
|
warp_factor.x = CURVATURE;
|
||||||
|
warp_factor.y = (3.0 / 4.0) * warp_factor.x; // assume 4:3 aspect
|
||||||
|
warp_factor.x *= (1.0 - TRINITRON_CURVE);
|
||||||
|
FragColor.rgb = CrtsFilter(vTexCoord.xy * OutputSize.xy*(TextureSize.xy / InputSize.xy),
|
||||||
|
InputSize.xy / OutputSize.xy,
|
||||||
|
InputSize.xy * vec2(0.5,0.5),
|
||||||
|
1.0/InputSize.xy,
|
||||||
|
1.0/OutputSize.xy,
|
||||||
|
2.0/OutputSize.xy,
|
||||||
|
InputSize.y,
|
||||||
|
warp_factor,
|
||||||
|
INPUT_THIN,
|
||||||
|
INPUT_BLUR,
|
||||||
|
INPUT_MASK,
|
||||||
|
CrtsTone(1.0,0.0,INPUT_THIN,INPUT_MASK));
|
||||||
|
|
||||||
|
// Shadertoy outputs non-linear color
|
||||||
|
FragColor.rgb=ToSrgb(FragColor.rgb);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
The following code is licensed under the MIT license: https://gist.github.com/TheRealMJP/bc503b0b87b643d3505d41eab8b332ae
|
||||||
|
Ported from code: https://gist.github.com/TheRealMJP/c83b8c0f46b63f3a88a5986f4fa982b1
|
||||||
|
Samples a texture with Catmull-Rom filtering, using 9 texture fetches instead of 16.
|
||||||
|
See http://vec3.ca/bicubic-filtering-in-fewer-taps/ for more details
|
||||||
|
ATENTION: This code only work using LINEAR filter sampling set on Retroarch!
|
||||||
|
Modified to use 5 texture fetches
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(VERTEX)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING out
|
||||||
|
#define COMPAT_ATTRIBUTE in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define COMPAT_ATTRIBUTE attribute
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
precision COMPAT_PRECISION float;
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
COMPAT_ATTRIBUTE vec4 VertexCoord;
|
||||||
|
COMPAT_ATTRIBUTE vec4 COLOR;
|
||||||
|
COMPAT_ATTRIBUTE vec4 TexCoord;
|
||||||
|
COMPAT_VARYING vec4 COL0;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
uniform mat4 MVPMatrix;
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = MVPMatrix * VertexCoord;
|
||||||
|
COL0 = COLOR;
|
||||||
|
TEX0.xy = TexCoord.xy;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(FRAGMENT)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
out mediump vec4 FragColor;
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define FragColor gl_FragColor
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||||
|
precision highp float;
|
||||||
|
#else
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
uniform sampler2D Texture;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
// compatibility #defines
|
||||||
|
#define Source Texture
|
||||||
|
#define vTexCoord TEX0.xy
|
||||||
|
|
||||||
|
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
|
||||||
|
#define outsize vec4(OutputSize, 1.0 / OutputSize)
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// We're going to sample a a 4x4 grid of texels surrounding the target UV coordinate. We'll do this by rounding
|
||||||
|
// down the sample location to get the exact center of our "starting" texel. The starting texel will be at
|
||||||
|
// location [1, 1] in the grid, where [0, 0] is the top left corner.
|
||||||
|
vec2 samplePos = vTexCoord * SourceSize.xy;
|
||||||
|
vec2 texPos1 = floor(samplePos - 0.5) + 0.5;
|
||||||
|
|
||||||
|
// Compute the fractional offset from our starting texel to our original sample location, which we'll
|
||||||
|
// feed into the Catmull-Rom spline function to get our filter weights.
|
||||||
|
vec2 f = samplePos - texPos1;
|
||||||
|
|
||||||
|
// Compute the Catmull-Rom weights using the fractional offset that we calculated earlier.
|
||||||
|
// These equations are pre-expanded based on our knowledge of where the texels will be located,
|
||||||
|
// which lets us avoid having to evaluate a piece-wise function.
|
||||||
|
vec2 w0 = f * (-0.5 + f * (1.0 - 0.5 * f));
|
||||||
|
vec2 w1 = 1.0 + f * f * (-2.5 + 1.5 * f);
|
||||||
|
vec2 w2 = f * (0.5 + f * (2.0 - 1.5 * f));
|
||||||
|
vec2 w3 = f * f * (-0.5 + 0.5 * f);
|
||||||
|
|
||||||
|
// Work out weighting factors and sampling offsets that will let us use bilinear filtering to
|
||||||
|
// simultaneously evaluate the middle 2 samples from the 4x4 grid.
|
||||||
|
vec2 w12 = w1 + w2;
|
||||||
|
vec2 offset12 = w2 / (w1 + w2);
|
||||||
|
|
||||||
|
// Compute the final UV coordinates we'll use for sampling the texture
|
||||||
|
vec2 texPos0 = texPos1 - 1.;
|
||||||
|
vec2 texPos3 = texPos1 + 2.;
|
||||||
|
vec2 texPos12 = texPos1 + offset12;
|
||||||
|
|
||||||
|
texPos0 *= SourceSize.zw;
|
||||||
|
texPos3 *= SourceSize.zw;
|
||||||
|
texPos12 *= SourceSize.zw;
|
||||||
|
|
||||||
|
float wtm = w12.x * w0.y;
|
||||||
|
float wml = w0.x * w12.y;
|
||||||
|
float wmm = w12.x * w12.y;
|
||||||
|
float wmr = w3.x * w12.y;
|
||||||
|
float wbm = w12.x * w3.y;
|
||||||
|
|
||||||
|
vec3 result = vec3(0.0f);
|
||||||
|
|
||||||
|
result += COMPAT_TEXTURE(Source, vec2(texPos12.x, texPos0.y)).rgb * wtm;
|
||||||
|
result += COMPAT_TEXTURE(Source, vec2(texPos0.x, texPos12.y)).rgb * wml;
|
||||||
|
result += COMPAT_TEXTURE(Source, vec2(texPos12.x, texPos12.y)).rgb * wmm;
|
||||||
|
result += COMPAT_TEXTURE(Source, vec2(texPos3.x, texPos12.y)).rgb * wmr;
|
||||||
|
result += COMPAT_TEXTURE(Source, vec2(texPos12.x, texPos3.y)).rgb * wbm;
|
||||||
|
|
||||||
|
FragColor = vec4(result * (1./(wtm+wml+wmm+wmr+wbm)), 1.0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
#if defined(VERTEX)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING out
|
||||||
|
#define COMPAT_ATTRIBUTE in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define COMPAT_ATTRIBUTE attribute
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
COMPAT_ATTRIBUTE vec4 VertexCoord;
|
||||||
|
COMPAT_ATTRIBUTE vec4 COLOR;
|
||||||
|
COMPAT_ATTRIBUTE vec4 TexCoord;
|
||||||
|
COMPAT_VARYING vec4 COL0;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
uniform mat4 MVPMatrix;
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = VertexCoord.x * MVPMatrix[0] + VertexCoord.y * MVPMatrix[1] + VertexCoord.z * MVPMatrix[2] + VertexCoord.w * MVPMatrix[3];
|
||||||
|
TEX0.xy = TexCoord.xy;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(FRAGMENT)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
out vec4 FragColor;
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define FragColor gl_FragColor
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||||
|
precision highp float;
|
||||||
|
#else
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
uniform sampler2D Texture;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
FragColor = COMPAT_TEXTURE(Texture, TEX0.xy);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
#if defined(VERTEX)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING out
|
||||||
|
#define COMPAT_ATTRIBUTE in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define COMPAT_ATTRIBUTE attribute
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
COMPAT_ATTRIBUTE vec4 VertexCoord;
|
||||||
|
COMPAT_ATTRIBUTE vec4 COLOR;
|
||||||
|
COMPAT_ATTRIBUTE vec4 TexCoord;
|
||||||
|
COMPAT_VARYING vec4 COL0;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
uniform mat4 MVPMatrix;
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = VertexCoord.x * MVPMatrix[0] + VertexCoord.y * MVPMatrix[1] + VertexCoord.z * MVPMatrix[2] + VertexCoord.w * MVPMatrix[3];
|
||||||
|
TEX0.xy = TexCoord.xy;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(FRAGMENT)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
out vec4 FragColor;
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define FragColor gl_FragColor
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||||
|
precision highp float;
|
||||||
|
#else
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
uniform sampler2D Texture;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
FragColor = COMPAT_TEXTURE(Texture, TEX0.xy);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
This is a package of pixel shaders intended for old school emulators.
|
||||||
|
Copyrights are held by the respective authors.
|
||||||
|
|
||||||
|
https://github.com/libretro/glsl-shaders
|
||||||
|
|
||||||
|
|
||||||
|
Note: Filename must end with "bilinear.glsl" to enable bilinear hardware filtering (GL_LINEAR)
|
||||||
|
|
||||||
|
|
||||||
|
Extract shader-package.zip to unlock 100+ additional shaders
|
||||||
@ -0,0 +1,106 @@
|
|||||||
|
// Parameter lines go here:
|
||||||
|
#pragma parameter SCANLINE_BASE_BRIGHTNESS "Scanline Base Brightness" 0.95 0.0 1.0 0.01
|
||||||
|
#pragma parameter SCANLINE_SINE_COMP_A "Scanline Sine Comp A" 0.0 0.0 0.10 0.01
|
||||||
|
#pragma parameter SCANLINE_SINE_COMP_B "Scanline Sine Comp B" 0.15 0.0 1.0 0.05
|
||||||
|
|
||||||
|
#define pi 3.141592654
|
||||||
|
|
||||||
|
#if defined(VERTEX)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING out
|
||||||
|
#define COMPAT_ATTRIBUTE in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define COMPAT_ATTRIBUTE attribute
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
COMPAT_ATTRIBUTE vec4 VertexCoord;
|
||||||
|
COMPAT_ATTRIBUTE vec4 COLOR;
|
||||||
|
COMPAT_ATTRIBUTE vec4 TexCoord;
|
||||||
|
COMPAT_VARYING vec4 COL0;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
COMPAT_VARYING vec2 omega;
|
||||||
|
|
||||||
|
vec4 _oPosition1;
|
||||||
|
uniform mat4 MVPMatrix;
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = MVPMatrix * VertexCoord;
|
||||||
|
COL0 = COLOR;
|
||||||
|
TEX0.xy = TexCoord.xy;
|
||||||
|
omega = vec2(pi * OutputSize.x, 2.0 * pi * TextureSize.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(FRAGMENT)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
out vec4 FragColor;
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define FragColor gl_FragColor
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||||
|
precision highp float;
|
||||||
|
#else
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
uniform sampler2D Texture;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
COMPAT_VARYING vec2 omega;
|
||||||
|
|
||||||
|
// compatibility #defines
|
||||||
|
#define Source Texture
|
||||||
|
#define vTexCoord TEX0.xy
|
||||||
|
|
||||||
|
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
|
||||||
|
#define OutputSize vec4(OutputSize, 1.0 / OutputSize)
|
||||||
|
|
||||||
|
#ifdef PARAMETER_UNIFORM
|
||||||
|
// All parameter floats need to have COMPAT_PRECISION in front of them
|
||||||
|
uniform COMPAT_PRECISION float SCANLINE_BASE_BRIGHTNESS;
|
||||||
|
uniform COMPAT_PRECISION float SCANLINE_SINE_COMP_A;
|
||||||
|
uniform COMPAT_PRECISION float SCANLINE_SINE_COMP_B;
|
||||||
|
#else
|
||||||
|
#define SCANLINE_BASE_BRIGHTNESS 0.95
|
||||||
|
#define SCANLINE_SINE_COMP_A 0.0
|
||||||
|
#define SCANLINE_SINE_COMP_B 0.15
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec2 sine_comp = vec2(SCANLINE_SINE_COMP_A, SCANLINE_SINE_COMP_B);
|
||||||
|
vec3 res = COMPAT_TEXTURE(Source, vTexCoord).xyz;
|
||||||
|
vec3 scanline = res * (SCANLINE_BASE_BRIGHTNESS + dot(sine_comp * sin(vTexCoord * omega), vec2(1.0, 1.0)));
|
||||||
|
FragColor = vec4(scanline.x, scanline.y, scanline.z, 1.0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
Binary file not shown.
@ -0,0 +1,148 @@
|
|||||||
|
/*
|
||||||
|
Fast Sharpen Shader
|
||||||
|
|
||||||
|
Copyright (C) 2005 - 2019 guest(r) - guest.r@gmail.com
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma parameter SHARPEN "Sharpen strength" 1.00 0.0 2.00 0.05
|
||||||
|
#pragma parameter CONTR "Ammount of sharpening" 0.07 0.0 0.25 0.01
|
||||||
|
#pragma parameter DETAILS "Details sharpened " 1.00 0.0 1.00 0.05
|
||||||
|
|
||||||
|
#if defined(VERTEX)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING out
|
||||||
|
#define COMPAT_ATTRIBUTE in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define COMPAT_ATTRIBUTE attribute
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
COMPAT_ATTRIBUTE vec4 VertexCoord;
|
||||||
|
COMPAT_ATTRIBUTE vec4 TexCoord;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
vec4 _oPosition1;
|
||||||
|
uniform mat4 MVPMatrix;
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
COMPAT_VARYING vec2 g10;
|
||||||
|
COMPAT_VARYING vec2 g01;
|
||||||
|
COMPAT_VARYING vec2 g12;
|
||||||
|
COMPAT_VARYING vec2 g21;
|
||||||
|
|
||||||
|
// compatibility #defines
|
||||||
|
#define vTexCoord TEX0.xy
|
||||||
|
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
|
||||||
|
#define OutSize vec4(OutputSize, 1.0 / OutputSize)
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = MVPMatrix * VertexCoord;
|
||||||
|
TEX0.xy = TexCoord.xy * 1.00001;
|
||||||
|
g10 = vec2( 0.3333,-1.0)*SourceSize.zw;
|
||||||
|
g01 = vec2(-1.0,-0.3333)*SourceSize.zw;
|
||||||
|
g12 = vec2(-0.3333, 1.0)*SourceSize.zw;
|
||||||
|
g21 = vec2( 1.0, 0.3333)*SourceSize.zw;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(FRAGMENT)
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||||
|
precision highp float;
|
||||||
|
#else
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
out COMPAT_PRECISION vec4 FragColor;
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define FragColor gl_FragColor
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
uniform sampler2D Texture;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
COMPAT_VARYING vec2 g10;
|
||||||
|
COMPAT_VARYING vec2 g01;
|
||||||
|
COMPAT_VARYING vec2 g12;
|
||||||
|
COMPAT_VARYING vec2 g21;
|
||||||
|
|
||||||
|
// compatibility #defines
|
||||||
|
#define Source Texture
|
||||||
|
#define vTexCoord TEX0.xy
|
||||||
|
|
||||||
|
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
|
||||||
|
#define OutSize vec4(OutputSize, 1.0 / OutputSize)
|
||||||
|
|
||||||
|
#ifdef PARAMETER_UNIFORM
|
||||||
|
uniform COMPAT_PRECISION float SHARPEN;
|
||||||
|
uniform COMPAT_PRECISION float CONTR;
|
||||||
|
uniform COMPAT_PRECISION float DETAILS;
|
||||||
|
#else
|
||||||
|
#define SHARPEN 1.2
|
||||||
|
#define CONTR 0.08
|
||||||
|
#define DETAILS 1.0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec3 c10 = COMPAT_TEXTURE(Source, vTexCoord + g10).rgb;
|
||||||
|
vec3 c01 = COMPAT_TEXTURE(Source, vTexCoord + g01).rgb;
|
||||||
|
vec3 c21 = COMPAT_TEXTURE(Source, vTexCoord + g21).rgb;
|
||||||
|
vec3 c12 = COMPAT_TEXTURE(Source, vTexCoord + g12).rgb;
|
||||||
|
vec3 c11 = COMPAT_TEXTURE(Source, vTexCoord ).rgb;
|
||||||
|
vec3 b11 = (c10+c01+c12+c21)*0.25;
|
||||||
|
|
||||||
|
float contrast = max(max(c11.r,c11.g),c11.b);
|
||||||
|
contrast = mix(2.0*CONTR, CONTR, contrast);
|
||||||
|
|
||||||
|
vec3 mn1 = min(min(c10,c01),min(c12,c21)); mn1 = min(mn1,c11*(1.0-contrast));
|
||||||
|
vec3 mx1 = max(max(c10,c01),max(c12,c21)); mx1 = max(mx1,c11*(1.0+contrast));
|
||||||
|
|
||||||
|
vec3 dif = pow(mx1-mn1+0.0001, vec3(0.75,0.75,0.75));
|
||||||
|
vec3 sharpen = mix(vec3(SHARPEN*DETAILS), vec3(SHARPEN), dif);
|
||||||
|
|
||||||
|
c11 = clamp(mix(c11,b11,-sharpen), mn1,mx1);
|
||||||
|
|
||||||
|
FragColor = vec4(c11,1.0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,205 @@
|
|||||||
|
/*
|
||||||
|
Hyllian's jinc windowed-jinc 2-lobe sharper with anti-ringing Shader
|
||||||
|
|
||||||
|
Copyright (C) 2011-2016 Hyllian/Jararaca - sergiogdb@gmail.com
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define JINC2_WINDOW_SINC 0.5
|
||||||
|
#define JINC2_SINC 1.0
|
||||||
|
#define JINC2_AR_STRENGTH 0.8
|
||||||
|
|
||||||
|
#define texCoord TEX0
|
||||||
|
|
||||||
|
#if defined(VERTEX)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define OUT out
|
||||||
|
#define IN in
|
||||||
|
#define tex2D texture
|
||||||
|
#else
|
||||||
|
#define OUT varying
|
||||||
|
#define IN attribute
|
||||||
|
#define tex2D texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
IN vec4 VertexCoord;
|
||||||
|
IN vec4 Color;
|
||||||
|
IN vec2 TexCoord;
|
||||||
|
OUT vec4 color;
|
||||||
|
OUT vec2 texCoord;
|
||||||
|
|
||||||
|
uniform mat4 MVPMatrix;
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = MVPMatrix * VertexCoord;
|
||||||
|
color = Color;
|
||||||
|
texCoord = TexCoord;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(FRAGMENT)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define IN in
|
||||||
|
#define tex2D texture
|
||||||
|
out vec4 FragColor;
|
||||||
|
#else
|
||||||
|
#define IN varying
|
||||||
|
#define FragColor gl_FragColor
|
||||||
|
#define tex2D texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||||
|
precision highp float;
|
||||||
|
#else
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
uniform sampler2D s_p;
|
||||||
|
IN vec2 texCoord;
|
||||||
|
|
||||||
|
const float halfpi = 1.5707963267948966192313216916398;
|
||||||
|
const float pi = 3.1415926535897932384626433832795;
|
||||||
|
const float wa = JINC2_WINDOW_SINC*pi;
|
||||||
|
const float wb = JINC2_SINC*pi;
|
||||||
|
|
||||||
|
// Calculates the distance between two points
|
||||||
|
float d(vec2 pt1, vec2 pt2)
|
||||||
|
{
|
||||||
|
vec2 v = pt2 - pt1;
|
||||||
|
return sqrt(dot(v,v));
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 min4(vec3 a, vec3 b, vec3 c, vec3 d)
|
||||||
|
{
|
||||||
|
return min(a, min(b, min(c, d)));
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 max4(vec3 a, vec3 b, vec3 c, vec3 d)
|
||||||
|
{
|
||||||
|
return max(a, max(b, max(c, d)));
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 resampler(vec4 x)
|
||||||
|
{
|
||||||
|
vec4 res;
|
||||||
|
|
||||||
|
res.x = (x.x==0.0) ? wa*wb : sin(x.x*wa)*sin(x.x*wb)/(x.x*x.x);
|
||||||
|
res.y = (x.y==0.0) ? wa*wb : sin(x.y*wa)*sin(x.y*wb)/(x.y*x.y);
|
||||||
|
res.z = (x.z==0.0) ? wa*wb : sin(x.z*wa)*sin(x.z*wb)/(x.z*x.z);
|
||||||
|
res.w = (x.w==0.0) ? wa*wb : sin(x.w*wa)*sin(x.w*wb)/(x.w*x.w);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
|
||||||
|
vec3 color;
|
||||||
|
vec4 weights[4];
|
||||||
|
|
||||||
|
vec2 dx = vec2(1.0, 0.0);
|
||||||
|
vec2 dy = vec2(0.0, 1.0);
|
||||||
|
|
||||||
|
vec2 pc = texCoord*TextureSize;
|
||||||
|
|
||||||
|
vec2 tc = (floor(pc-vec2(0.5,0.5))+vec2(0.5,0.5));
|
||||||
|
|
||||||
|
weights[0] = resampler(vec4(d(pc, tc -dx -dy), d(pc, tc -dy), d(pc, tc +dx -dy), d(pc, tc+2.0*dx -dy)));
|
||||||
|
weights[1] = resampler(vec4(d(pc, tc -dx ), d(pc, tc ), d(pc, tc +dx ), d(pc, tc+2.0*dx )));
|
||||||
|
weights[2] = resampler(vec4(d(pc, tc -dx +dy), d(pc, tc +dy), d(pc, tc +dx +dy), d(pc, tc+2.0*dx +dy)));
|
||||||
|
weights[3] = resampler(vec4(d(pc, tc -dx+2.0*dy), d(pc, tc +2.0*dy), d(pc, tc +dx+2.0*dy), d(pc, tc+2.0*dx+2.0*dy)));
|
||||||
|
|
||||||
|
dx = dx/TextureSize;
|
||||||
|
dy = dy/TextureSize;
|
||||||
|
tc = tc/TextureSize;
|
||||||
|
|
||||||
|
vec3 c00 = tex2D(s_p, tc -dx -dy).xyz;
|
||||||
|
vec3 c10 = tex2D(s_p, tc -dy).xyz;
|
||||||
|
vec3 c20 = tex2D(s_p, tc +dx -dy).xyz;
|
||||||
|
vec3 c30 = tex2D(s_p, tc+2.0*dx -dy).xyz;
|
||||||
|
vec3 c01 = tex2D(s_p, tc -dx ).xyz;
|
||||||
|
vec3 c11 = tex2D(s_p, tc ).xyz;
|
||||||
|
vec3 c21 = tex2D(s_p, tc +dx ).xyz;
|
||||||
|
vec3 c31 = tex2D(s_p, tc+2.0*dx ).xyz;
|
||||||
|
vec3 c02 = tex2D(s_p, tc -dx +dy).xyz;
|
||||||
|
vec3 c12 = tex2D(s_p, tc +dy).xyz;
|
||||||
|
vec3 c22 = tex2D(s_p, tc +dx +dy).xyz;
|
||||||
|
vec3 c32 = tex2D(s_p, tc+2.0*dx +dy).xyz;
|
||||||
|
vec3 c03 = tex2D(s_p, tc -dx+2.0*dy).xyz;
|
||||||
|
vec3 c13 = tex2D(s_p, tc +2.0*dy).xyz;
|
||||||
|
vec3 c23 = tex2D(s_p, tc +dx+2.0*dy).xyz;
|
||||||
|
vec3 c33 = tex2D(s_p, tc+2.0*dx+2.0*dy).xyz;
|
||||||
|
|
||||||
|
color = tex2D(s_p, texCoord).xyz;
|
||||||
|
|
||||||
|
// Get min/max samples
|
||||||
|
vec3 min_sample = min4(c11, c21, c12, c22);
|
||||||
|
vec3 max_sample = max4(c11, c21, c12, c22);
|
||||||
|
/*
|
||||||
|
color = mat4x3(c00, c10, c20, c30) * weights[0];
|
||||||
|
color+= mat4x3(c01, c11, c21, c31) * weights[1];
|
||||||
|
color+= mat4x3(c02, c12, c22, c32) * weights[2];
|
||||||
|
color+= mat4x3(c03, c13, c23, c33) * weights[3];
|
||||||
|
mat4 wgts = mat4(weights[0], weights[1], weights[2], weights[3]);
|
||||||
|
vec4 wsum = wgts * vec4(1.0,1.0,1.0,1.0);
|
||||||
|
color = color/(dot(wsum, vec4(1.0,1.0,1.0,1.0)));
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
color = vec3(dot(weights[0], vec4(c00.x, c10.x, c20.x, c30.x)), dot(weights[0], vec4(c00.y, c10.y, c20.y, c30.y)), dot(weights[0], vec4(c00.z, c10.z, c20.z, c30.z)));
|
||||||
|
color+= vec3(dot(weights[1], vec4(c01.x, c11.x, c21.x, c31.x)), dot(weights[1], vec4(c01.y, c11.y, c21.y, c31.y)), dot(weights[1], vec4(c01.z, c11.z, c21.z, c31.z)));
|
||||||
|
color+= vec3(dot(weights[2], vec4(c02.x, c12.x, c22.x, c32.x)), dot(weights[2], vec4(c02.y, c12.y, c22.y, c32.y)), dot(weights[2], vec4(c02.z, c12.z, c22.z, c32.z)));
|
||||||
|
color+= vec3(dot(weights[3], vec4(c03.x, c13.x, c23.x, c33.x)), dot(weights[3], vec4(c03.y, c13.y, c23.y, c33.y)), dot(weights[3], vec4(c03.z, c13.z, c23.z, c33.z)));
|
||||||
|
color = color/(dot(weights[0], vec4(1,1,1,1)) + dot(weights[1], vec4(1,1,1,1)) + dot(weights[2], vec4(1,1,1,1)) + dot(weights[3], vec4(1,1,1,1)));
|
||||||
|
|
||||||
|
// Anti-ringing
|
||||||
|
vec3 aux = color;
|
||||||
|
color = clamp(color, min_sample, max_sample);
|
||||||
|
color = mix(aux, color, JINC2_AR_STRENGTH);
|
||||||
|
|
||||||
|
// final sum and weight normalization
|
||||||
|
FragColor.xyz = color;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,300 @@
|
|||||||
|
#version 130
|
||||||
|
|
||||||
|
/*
|
||||||
|
Hyllian's xBR-lv2-noblend Shader
|
||||||
|
|
||||||
|
Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
Incorporates some of the ideas from SABR shader. Thanks to Joshua Street.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma parameter XBR_EQ_THRESHOLD "Eq Threshold" 0.6 0.0 2.0 0.1
|
||||||
|
#pragma parameter XBR_LV2_COEFFICIENT "Lv2 Coefficient" 2.0 1.0 3.0 0.1
|
||||||
|
|
||||||
|
#define mul(a,b) (b*a)
|
||||||
|
|
||||||
|
// Uncomment just one of the three params below to choose the corner detection
|
||||||
|
#define CORNER_A
|
||||||
|
//#define CORNER_B
|
||||||
|
//#define CORNER_C
|
||||||
|
//#define CORNER_D
|
||||||
|
|
||||||
|
#define lv2_cf XBR_LV2_COEFFICIENT
|
||||||
|
|
||||||
|
#define texCoord TEX0
|
||||||
|
#define t1 TEX1
|
||||||
|
#define t2 TEX2
|
||||||
|
#define t3 TEX3
|
||||||
|
#define t4 TEX4
|
||||||
|
#define t5 TEX5
|
||||||
|
#define t6 TEX6
|
||||||
|
#define t7 TEX7
|
||||||
|
|
||||||
|
#if defined(VERTEX)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define OUT out
|
||||||
|
#define IN in
|
||||||
|
#define tex2D texture
|
||||||
|
#else
|
||||||
|
#define OUT varying
|
||||||
|
#define IN attribute
|
||||||
|
#define tex2D texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#define PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
IN vec4 VertexCoord;
|
||||||
|
IN vec4 Color;
|
||||||
|
IN vec2 TexCoord;
|
||||||
|
|
||||||
|
OUT vec4 color;
|
||||||
|
OUT vec2 texCoord;
|
||||||
|
OUT vec4 t1;
|
||||||
|
OUT vec4 t2;
|
||||||
|
OUT vec4 t3;
|
||||||
|
OUT vec4 t4;
|
||||||
|
OUT vec4 t5;
|
||||||
|
OUT vec4 t6;
|
||||||
|
OUT vec4 t7;
|
||||||
|
|
||||||
|
uniform mat4 MVPMatrix;
|
||||||
|
uniform PRECISION int FrameDirection;
|
||||||
|
uniform PRECISION int FrameCount;
|
||||||
|
uniform PRECISION vec2 OutputSize;
|
||||||
|
uniform PRECISION vec2 TextureSize;
|
||||||
|
uniform PRECISION vec2 InputSize;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = MVPMatrix * VertexCoord;
|
||||||
|
color = Color;
|
||||||
|
|
||||||
|
float dx = (1.0/TextureSize.x);
|
||||||
|
float dy = (1.0/TextureSize.y);
|
||||||
|
|
||||||
|
texCoord = TexCoord;
|
||||||
|
texCoord.x *= 1.00000001;
|
||||||
|
t1 = TexCoord.xxxy + vec4( -dx, 0, dx,-2.0*dy); // A1 B1 C1
|
||||||
|
t2 = TexCoord.xxxy + vec4( -dx, 0, dx, -dy); // A B C
|
||||||
|
t3 = TexCoord.xxxy + vec4( -dx, 0, dx, 0); // D E F
|
||||||
|
t4 = TexCoord.xxxy + vec4( -dx, 0, dx, dy); // G H I
|
||||||
|
t5 = TexCoord.xxxy + vec4( -dx, 0, dx, 2.0*dy); // G5 H5 I5
|
||||||
|
t6 = TexCoord.xyyy + vec4(-2.0*dx,-dy, 0, dy); // A0 D0 G0
|
||||||
|
t7 = TexCoord.xyyy + vec4( 2.0*dx,-dy, 0, dy); // C4 F4 I4
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(FRAGMENT)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define IN in
|
||||||
|
#define tex2D texture
|
||||||
|
out vec4 FragColor;
|
||||||
|
#else
|
||||||
|
#define IN varying
|
||||||
|
#define FragColor gl_FragColor
|
||||||
|
#define tex2D texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||||
|
precision highp float;
|
||||||
|
#else
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
#define PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform PRECISION int FrameDirection;
|
||||||
|
uniform PRECISION int FrameCount;
|
||||||
|
uniform PRECISION vec2 OutputSize;
|
||||||
|
uniform PRECISION vec2 TextureSize;
|
||||||
|
uniform PRECISION vec2 InputSize;
|
||||||
|
uniform sampler2D decal;
|
||||||
|
IN vec2 texCoord;
|
||||||
|
IN vec4 t1;
|
||||||
|
IN vec4 t2;
|
||||||
|
IN vec4 t3;
|
||||||
|
IN vec4 t4;
|
||||||
|
IN vec4 t5;
|
||||||
|
IN vec4 t6;
|
||||||
|
IN vec4 t7;
|
||||||
|
|
||||||
|
#ifdef PARAMETER_UNIFORM
|
||||||
|
uniform PRECISION float XBR_EQ_THRESHOLD;
|
||||||
|
uniform PRECISION float XBR_LV2_COEFFICIENT;
|
||||||
|
#else
|
||||||
|
#define XBR_EQ_THRESHOLD 0.6
|
||||||
|
#define XBR_LV2_COEFFICIENT 2.0
|
||||||
|
#endif
|
||||||
|
// END PARAMETERS //
|
||||||
|
|
||||||
|
const vec3 Y = vec3(0.2126, 0.7152, 0.0722);
|
||||||
|
|
||||||
|
// Difference between vector components.
|
||||||
|
vec4 df(vec4 A, vec4 B)
|
||||||
|
{
|
||||||
|
return vec4(abs(A-B));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compare two vectors and return their components are different.
|
||||||
|
vec4 diff(vec4 A, vec4 B)
|
||||||
|
{
|
||||||
|
return vec4(notEqual(A, B));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine if two vector components are equal based on a threshold.
|
||||||
|
vec4 eq(vec4 A, vec4 B)
|
||||||
|
{
|
||||||
|
return (step(df(A, B), vec4(XBR_EQ_THRESHOLD)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine if two vector components are NOT equal based on a threshold.
|
||||||
|
vec4 neq(vec4 A, vec4 B)
|
||||||
|
{
|
||||||
|
return (vec4(1.0, 1.0, 1.0, 1.0) - eq(A, B));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Weighted distance.
|
||||||
|
vec4 wd(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h)
|
||||||
|
{
|
||||||
|
return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h));
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h, vec4 i, vec4 j, vec4 k, vec4 l)
|
||||||
|
{
|
||||||
|
return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + df(i,j) + df(k,l) + 2.0*df(g,h));
|
||||||
|
}
|
||||||
|
|
||||||
|
float c_df(vec3 c1, vec3 c2)
|
||||||
|
{
|
||||||
|
vec3 df = abs(c1 - c2);
|
||||||
|
return df.r + df.g + df.b;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec4 edri, edr, edr_l, edr_u; // px = pixel, edr = edge detection rule
|
||||||
|
vec4 irlv1, irlv2l, irlv2u, block_3d;
|
||||||
|
bvec4 nc, px;
|
||||||
|
vec4 fx, fx_l, fx_u; // inequations of straight lines.
|
||||||
|
|
||||||
|
vec2 fp = fract(texCoord*TextureSize);
|
||||||
|
|
||||||
|
vec3 A1 = tex2D(decal, t1.xw ).xyz;
|
||||||
|
vec3 B1 = tex2D(decal, t1.yw ).xyz;
|
||||||
|
vec3 C1 = tex2D(decal, t1.zw ).xyz;
|
||||||
|
vec3 A = tex2D(decal, t2.xw ).xyz;
|
||||||
|
vec3 B = tex2D(decal, t2.yw ).xyz;
|
||||||
|
vec3 C = tex2D(decal, t2.zw ).xyz;
|
||||||
|
vec3 D = tex2D(decal, t3.xw ).xyz;
|
||||||
|
vec3 E = tex2D(decal, t3.yw ).xyz;
|
||||||
|
vec3 F = tex2D(decal, t3.zw ).xyz;
|
||||||
|
vec3 G = tex2D(decal, t4.xw ).xyz;
|
||||||
|
vec3 H = tex2D(decal, t4.yw ).xyz;
|
||||||
|
vec3 I = tex2D(decal, t4.zw ).xyz;
|
||||||
|
vec3 G5 = tex2D(decal, t5.xw ).xyz;
|
||||||
|
vec3 H5 = tex2D(decal, t5.yw ).xyz;
|
||||||
|
vec3 I5 = tex2D(decal, t5.zw ).xyz;
|
||||||
|
vec3 A0 = tex2D(decal, t6.xy ).xyz;
|
||||||
|
vec3 D0 = tex2D(decal, t6.xz ).xyz;
|
||||||
|
vec3 G0 = tex2D(decal, t6.xw ).xyz;
|
||||||
|
vec3 C4 = tex2D(decal, t7.xy ).xyz;
|
||||||
|
vec3 F4 = tex2D(decal, t7.xz ).xyz;
|
||||||
|
vec3 I4 = tex2D(decal, t7.xw ).xyz;
|
||||||
|
|
||||||
|
vec4 b = mul( mat4x3(B, D, H, F), Y );
|
||||||
|
vec4 c = mul( mat4x3(C, A, G, I), Y );
|
||||||
|
vec4 e = mul( mat4x3(E, E, E, E), Y );
|
||||||
|
vec4 d = b.yzwx;
|
||||||
|
vec4 f = b.wxyz;
|
||||||
|
vec4 g = c.zwxy;
|
||||||
|
vec4 h = b.zwxy;
|
||||||
|
vec4 i = c.wxyz;
|
||||||
|
|
||||||
|
vec4 i4 = mul( mat4x3(I4, C1, A0, G5), Y );
|
||||||
|
vec4 i5 = mul( mat4x3(I5, C4, A1, G0), Y );
|
||||||
|
vec4 h5 = mul( mat4x3(H5, F4, B1, D0), Y );
|
||||||
|
vec4 f4 = h5.yzwx;
|
||||||
|
|
||||||
|
vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||||
|
vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 );
|
||||||
|
vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
|
||||||
|
vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||||
|
vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 );
|
||||||
|
vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
|
||||||
|
vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||||
|
vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 );
|
||||||
|
vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
|
||||||
|
|
||||||
|
// These inequations define the line below which interpolation occurs.
|
||||||
|
fx = vec4(greaterThan(Ao*fp.y+Bo*fp.x, Co));
|
||||||
|
fx_l = vec4(greaterThan(Ax*fp.y+Bx*fp.x, Cx));
|
||||||
|
fx_u = vec4(greaterThan(Ay*fp.y+By*fp.x, Cy));
|
||||||
|
|
||||||
|
#ifdef CORNER_A
|
||||||
|
irlv1 = diff(e,f) * diff(e,h);
|
||||||
|
#endif
|
||||||
|
#ifdef CORNER_B
|
||||||
|
irlv1 = (neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c));
|
||||||
|
#endif
|
||||||
|
#ifdef CORNER_D
|
||||||
|
vec4 c1 = i4.yzwx;
|
||||||
|
vec4 g0 = i5.wxyz;
|
||||||
|
irlv1 = (neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) * (diff(f,f4) * diff(f,i) + diff(h,h5) * diff(h,i) + diff(h,g) + diff(f,c) + eq(b,c1) * eq(d,g0));
|
||||||
|
#endif
|
||||||
|
#ifdef CORNER_C
|
||||||
|
irlv1 = (neq(f,b) * neq(f,c) + neq(h,d) * neq(h,g) + eq(e,i) * (neq(f,f4) * neq(f,i4) + neq(h,h5) * neq(h,i5)) + eq(e,g) + eq(e,c));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
irlv2l = diff(e,g) * diff(d,g);
|
||||||
|
irlv2u = diff(e,c) * diff(b,c);
|
||||||
|
|
||||||
|
vec4 wd1 = wd( e, c, g, i, h5, f4, h, f);
|
||||||
|
vec4 wd2 = wd( h, d, i5, f, i4, b, e, i);
|
||||||
|
|
||||||
|
edri = step(wd1, wd2) * irlv1;
|
||||||
|
edr = step(wd1 + vec4(0.1, 0.1, 0.1, 0.1), wd2) * step(vec4(0.5, 0.5, 0.5, 0.5), irlv1);
|
||||||
|
edr_l = step( lv2_cf*df(f,g), df(h,c) ) * irlv2l * edr;
|
||||||
|
edr_u = step( lv2_cf*df(h,c), df(f,g) ) * irlv2u * edr;
|
||||||
|
|
||||||
|
nc = bvec4( edr * ( fx + edr_l * (fx_l)) + edr_u * fx_u);
|
||||||
|
|
||||||
|
px = lessThanEqual(df(e, f), df(e, h));
|
||||||
|
|
||||||
|
vec3 res1 = nc.x ? px.x ? F : H : nc.y ? px.y ? B : F : nc.z ? px.z ? D : B : E;
|
||||||
|
vec3 res2 = nc.w ? px.w ? H : D : nc.z ? px.z ? D : B : nc.y ? px.y ? B : F : E;
|
||||||
|
|
||||||
|
vec2 df12 = abs( mul( mat2x3(res1, res2), Y ) - e.xy);
|
||||||
|
|
||||||
|
vec3 res = mix(res1, res2, step(df12.x, df12.y));
|
||||||
|
|
||||||
|
FragColor.xyz = res;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,375 @@
|
|||||||
|
/*
|
||||||
|
Hyllian's xBR-vertex code and texel mapping
|
||||||
|
|
||||||
|
Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This shader also uses code and/or concepts from xBRZ as it appears
|
||||||
|
// in the Desmume source code. The license for which is as follows:
|
||||||
|
|
||||||
|
// ****************************************************************************
|
||||||
|
// * This file is part of the HqMAME project. It is distributed under *
|
||||||
|
// * GNU General Public License: http://www.gnu.org/licenses/gpl-3.0 *
|
||||||
|
// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *
|
||||||
|
// * *
|
||||||
|
// * Additionally and as a special exception, the author gives permission *
|
||||||
|
// * to link the code of this program with the MAME library (or with modified *
|
||||||
|
// * versions of MAME that use the same license as MAME), and distribute *
|
||||||
|
// * linked combinations including the two. You must obey the GNU General *
|
||||||
|
// * Public License in all respects for all of the code used other than MAME. *
|
||||||
|
// * If you modify this file, you may extend this exception to your version *
|
||||||
|
// * of the file, but you are not obligated to do so. If you do not wish to *
|
||||||
|
// * do so, delete this exception statement from your version. *
|
||||||
|
// ****************************************************************************
|
||||||
|
|
||||||
|
#if defined(VERTEX)
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING out
|
||||||
|
#define COMPAT_ATTRIBUTE in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define COMPAT_ATTRIBUTE attribute
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
COMPAT_ATTRIBUTE vec4 VertexCoord;
|
||||||
|
COMPAT_ATTRIBUTE vec4 COLOR;
|
||||||
|
COMPAT_ATTRIBUTE vec4 TexCoord;
|
||||||
|
COMPAT_VARYING vec4 COL0;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
vec4 _oPosition1;
|
||||||
|
uniform mat4 MVPMatrix;
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
|
||||||
|
// compatibility #defines
|
||||||
|
#define vTexCoord TEX0.xy
|
||||||
|
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
|
||||||
|
#define OutSize vec4(OutputSize, 1.0 / OutputSize)
|
||||||
|
|
||||||
|
#ifdef PARAMETER_UNIFORM
|
||||||
|
uniform COMPAT_PRECISION float WHATEVER;
|
||||||
|
#else
|
||||||
|
#define WHATEVER 0.0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = MVPMatrix * VertexCoord;
|
||||||
|
TEX0.xy = TexCoord.xy * 1.0001;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(FRAGMENT)
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||||
|
precision highp float;
|
||||||
|
#else
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
#define COMPAT_PRECISION mediump
|
||||||
|
#else
|
||||||
|
#define COMPAT_PRECISION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
#define COMPAT_VARYING in
|
||||||
|
#define COMPAT_TEXTURE texture
|
||||||
|
out COMPAT_PRECISION vec4 FragColor;
|
||||||
|
#else
|
||||||
|
#define COMPAT_VARYING varying
|
||||||
|
#define FragColor gl_FragColor
|
||||||
|
#define COMPAT_TEXTURE texture2D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform COMPAT_PRECISION int FrameDirection;
|
||||||
|
uniform COMPAT_PRECISION int FrameCount;
|
||||||
|
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||||
|
uniform COMPAT_PRECISION vec2 InputSize;
|
||||||
|
uniform sampler2D Texture;
|
||||||
|
COMPAT_VARYING vec4 TEX0;
|
||||||
|
|
||||||
|
// compatibility #defines
|
||||||
|
#define Source Texture
|
||||||
|
#define vTexCoord TEX0.xy
|
||||||
|
|
||||||
|
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
|
||||||
|
#define OutSize vec4(OutputSize, 1.0 / OutputSize)
|
||||||
|
|
||||||
|
#define BLEND_NONE 0
|
||||||
|
#define BLEND_NORMAL 1
|
||||||
|
#define BLEND_DOMINANT 2
|
||||||
|
#define LUMINANCE_WEIGHT 1.0
|
||||||
|
#define EQUAL_COLOR_TOLERANCE 30.0/255.0
|
||||||
|
#define STEEP_DIRECTION_THRESHOLD 2.2
|
||||||
|
#define DOMINANT_DIRECTION_THRESHOLD 3.6
|
||||||
|
|
||||||
|
float DistYCbCr(vec3 pixA, vec3 pixB)
|
||||||
|
{
|
||||||
|
const vec3 w = vec3(0.2627, 0.6780, 0.0593);
|
||||||
|
const float scaleB = 0.5 / (1.0 - w.b);
|
||||||
|
const float scaleR = 0.5 / (1.0 - w.r);
|
||||||
|
vec3 diff = pixA - pixB;
|
||||||
|
float Y = dot(diff.rgb, w);
|
||||||
|
float Cb = scaleB * (diff.b - Y);
|
||||||
|
float Cr = scaleR * (diff.r - Y);
|
||||||
|
|
||||||
|
return sqrt(((LUMINANCE_WEIGHT * Y) * (LUMINANCE_WEIGHT * Y)) + (Cb * Cb) + (Cr * Cr));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsPixEqual(const vec3 pixA, const vec3 pixB)
|
||||||
|
{
|
||||||
|
return (DistYCbCr(pixA, pixB) < EQUAL_COLOR_TOLERANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
float get_left_ratio(vec2 center, vec2 origin, vec2 direction, vec2 scale)
|
||||||
|
{
|
||||||
|
vec2 P0 = center - origin;
|
||||||
|
vec2 proj = direction * (dot(P0, direction) / dot(direction, direction));
|
||||||
|
vec2 distv = P0 - proj;
|
||||||
|
vec2 orth = vec2(-direction.y, direction.x);
|
||||||
|
float side = sign(dot(P0, orth));
|
||||||
|
float v = side * length(distv * scale);
|
||||||
|
|
||||||
|
// return step(0, v);
|
||||||
|
return smoothstep(-sqrt(2.0)/2.0, sqrt(2.0)/2.0, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define eq(a,b) (a == b)
|
||||||
|
#define neq(a,b) (a != b)
|
||||||
|
|
||||||
|
#define P(x,y) COMPAT_TEXTURE(Source, coord + SourceSize.zw * vec2(x, y)).rgb
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
//---------------------------------------
|
||||||
|
// Input Pixel Mapping: -|x|x|x|-
|
||||||
|
// x|A|B|C|x
|
||||||
|
// x|D|E|F|x
|
||||||
|
// x|G|H|I|x
|
||||||
|
// -|x|x|x|-
|
||||||
|
|
||||||
|
vec2 scale = OutputSize.xy * SourceSize.zw;
|
||||||
|
vec2 pos = fract(vTexCoord * SourceSize.xy) - vec2(0.5, 0.5);
|
||||||
|
vec2 coord = vTexCoord - pos * SourceSize.zw;
|
||||||
|
|
||||||
|
vec3 A = P(-1.,-1.);
|
||||||
|
vec3 B = P( 0.,-1.);
|
||||||
|
vec3 C = P( 1.,-1.);
|
||||||
|
vec3 D = P(-1., 0.);
|
||||||
|
vec3 E = P( 0., 0.);
|
||||||
|
vec3 F = P( 1., 0.);
|
||||||
|
vec3 G = P(-1., 1.);
|
||||||
|
vec3 H = P( 0., 1.);
|
||||||
|
vec3 I = P( 1., 1.);
|
||||||
|
|
||||||
|
// blendResult Mapping: x|y|
|
||||||
|
// w|z|
|
||||||
|
ivec4 blendResult = ivec4(BLEND_NONE,BLEND_NONE,BLEND_NONE,BLEND_NONE);
|
||||||
|
|
||||||
|
// Preprocess corners
|
||||||
|
// Pixel Tap Mapping: -|-|-|-|-
|
||||||
|
// -|-|B|C|-
|
||||||
|
// -|D|E|F|x
|
||||||
|
// -|G|H|I|x
|
||||||
|
// -|-|x|x|-
|
||||||
|
if (!((eq(E,F) && eq(H,I)) || (eq(E,H) && eq(F,I))))
|
||||||
|
{
|
||||||
|
float dist_H_F = DistYCbCr(G, E) + DistYCbCr(E, C) + DistYCbCr(P(0,2), I) + DistYCbCr(I, P(2.,0.)) + (4.0 * DistYCbCr(H, F));
|
||||||
|
float dist_E_I = DistYCbCr(D, H) + DistYCbCr(H, P(1,2)) + DistYCbCr(B, F) + DistYCbCr(F, P(2.,1.)) + (4.0 * DistYCbCr(E, I));
|
||||||
|
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_H_F) < dist_E_I;
|
||||||
|
blendResult.z = ((dist_H_F < dist_E_I) && neq(E,F) && neq(E,H)) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Pixel Tap Mapping: -|-|-|-|-
|
||||||
|
// -|A|B|-|-
|
||||||
|
// x|D|E|F|-
|
||||||
|
// x|G|H|I|-
|
||||||
|
// -|x|x|-|-
|
||||||
|
if (!((eq(D,E) && eq(G,H)) || (eq(D,G) && eq(E,H))))
|
||||||
|
{
|
||||||
|
float dist_G_E = DistYCbCr(P(-2.,1.) , D) + DistYCbCr(D, B) + DistYCbCr(P(-1.,2.), H) + DistYCbCr(H, F) + (4.0 * DistYCbCr(G, E));
|
||||||
|
float dist_D_H = DistYCbCr(P(-2.,0.) , G) + DistYCbCr(G, P(0.,2.)) + DistYCbCr(A, E) + DistYCbCr(E, I) + (4.0 * DistYCbCr(D, H));
|
||||||
|
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_D_H) < dist_G_E;
|
||||||
|
blendResult.w = ((dist_G_E > dist_D_H) && neq(E,D) && neq(E,H)) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pixel Tap Mapping: -|-|x|x|-
|
||||||
|
// -|A|B|C|x
|
||||||
|
// -|D|E|F|x
|
||||||
|
// -|-|H|I|-
|
||||||
|
// -|-|-|-|-
|
||||||
|
if (!((eq(B,C) && eq(E,F)) || (eq(B,E) && eq(C,F))))
|
||||||
|
{
|
||||||
|
float dist_E_C = DistYCbCr(D, B) + DistYCbCr(B, P(1.,-2.)) + DistYCbCr(H, F) + DistYCbCr(F, P(2.,-1.)) + (4.0 * DistYCbCr(E, C));
|
||||||
|
float dist_B_F = DistYCbCr(A, E) + DistYCbCr(E, I) + DistYCbCr(P(0.,-2.), C) + DistYCbCr(C, P(2.,0.)) + (4.0 * DistYCbCr(B, F));
|
||||||
|
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_B_F) < dist_E_C;
|
||||||
|
blendResult.y = ((dist_E_C > dist_B_F) && neq(E,B) && neq(E,F)) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pixel Tap Mapping: -|x|x|-|-
|
||||||
|
// x|A|B|C|-
|
||||||
|
// x|D|E|F|-
|
||||||
|
// -|G|H|-|-
|
||||||
|
// -|-|-|-|-
|
||||||
|
if (!((eq(A,B) && eq(D,E)) || (eq(A,D) && eq(B,E))))
|
||||||
|
{
|
||||||
|
float dist_D_B = DistYCbCr(P(-2.,0.), A) + DistYCbCr(A, P(0.,-2.)) + DistYCbCr(G, E) + DistYCbCr(E, C) + (4.0 * DistYCbCr(D, B));
|
||||||
|
float dist_A_E = DistYCbCr(P(-2.,-1.), D) + DistYCbCr(D, H) + DistYCbCr(P(-1.,-2.), B) + DistYCbCr(B, F) + (4.0 * DistYCbCr(A, E));
|
||||||
|
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_D_B) < dist_A_E;
|
||||||
|
blendResult.x = ((dist_D_B < dist_A_E) && neq(E,D) && neq(E,B)) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 res = E;
|
||||||
|
|
||||||
|
// Pixel Tap Mapping: -|-|-|-|-
|
||||||
|
// -|-|B|C|-
|
||||||
|
// -|D|E|F|x
|
||||||
|
// -|G|H|I|x
|
||||||
|
// -|-|x|x|-
|
||||||
|
if(blendResult.z != BLEND_NONE)
|
||||||
|
{
|
||||||
|
float dist_F_G = DistYCbCr(F, G);
|
||||||
|
float dist_H_C = DistYCbCr(H, C);
|
||||||
|
bool doLineBlend = (blendResult.z == BLEND_DOMINANT ||
|
||||||
|
!((blendResult.y != BLEND_NONE && !IsPixEqual(E, G)) || (blendResult.w != BLEND_NONE && !IsPixEqual(E, C)) ||
|
||||||
|
(IsPixEqual(G, H) && IsPixEqual(H, I) && IsPixEqual(I, F) && IsPixEqual(F, C) && !IsPixEqual(E, I))));
|
||||||
|
|
||||||
|
vec2 origin = vec2(0.0, 1.0 / sqrt(2.0));
|
||||||
|
vec2 direction = vec2(1.0, -1.0);
|
||||||
|
if(doLineBlend)
|
||||||
|
{
|
||||||
|
bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_F_G <= dist_H_C) && neq(E,G) && neq(D,G);
|
||||||
|
bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_H_C <= dist_F_G) && neq(E,C) && neq(B,C);
|
||||||
|
origin = haveShallowLine? vec2(0.0, 0.25) : vec2(0.0, 0.5);
|
||||||
|
direction.x += haveShallowLine? 1.0: 0.0;
|
||||||
|
direction.y -= haveSteepLine? 1.0: 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 blendPix = mix(H,F, step(DistYCbCr(E, F), DistYCbCr(E, H)));
|
||||||
|
res = mix(res, blendPix, get_left_ratio(pos, origin, direction, scale));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pixel Tap Mapping: -|-|-|-|-
|
||||||
|
// -|A|B|-|-
|
||||||
|
// x|D|E|F|-
|
||||||
|
// x|G|H|I|-
|
||||||
|
// -|x|x|-|-
|
||||||
|
if(blendResult.w != BLEND_NONE)
|
||||||
|
{
|
||||||
|
float dist_H_A = DistYCbCr(H, A);
|
||||||
|
float dist_D_I = DistYCbCr(D, I);
|
||||||
|
bool doLineBlend = (blendResult.w == BLEND_DOMINANT ||
|
||||||
|
!((blendResult.z != BLEND_NONE && !IsPixEqual(E, A)) || (blendResult.x != BLEND_NONE && !IsPixEqual(E, I)) ||
|
||||||
|
(IsPixEqual(A, D) && IsPixEqual(D, G) && IsPixEqual(G, H) && IsPixEqual(H, I) && !IsPixEqual(E, G))));
|
||||||
|
|
||||||
|
vec2 origin = vec2(-1.0 / sqrt(2.0), 0.0);
|
||||||
|
vec2 direction = vec2(1.0, 1.0);
|
||||||
|
if(doLineBlend)
|
||||||
|
{
|
||||||
|
bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_H_A <= dist_D_I) && neq(E,A) && neq(B,A);
|
||||||
|
bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_D_I <= dist_H_A) && neq(E,I) && neq(F,I);
|
||||||
|
origin = haveShallowLine? vec2(-0.25, 0.0) : vec2(-0.5, 0.0);
|
||||||
|
direction.y += haveShallowLine? 1.0: 0.0;
|
||||||
|
direction.x += haveSteepLine? 1.0: 0.0;
|
||||||
|
}
|
||||||
|
origin = origin;
|
||||||
|
direction = direction;
|
||||||
|
|
||||||
|
vec3 blendPix = mix(H,D, step(DistYCbCr(E, D), DistYCbCr(E, H)));
|
||||||
|
res = mix(res, blendPix, get_left_ratio(pos, origin, direction, scale));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pixel Tap Mapping: -|-|x|x|-
|
||||||
|
// -|A|B|C|x
|
||||||
|
// -|D|E|F|x
|
||||||
|
// -|-|H|I|-
|
||||||
|
// -|-|-|-|-
|
||||||
|
if(blendResult.y != BLEND_NONE)
|
||||||
|
{
|
||||||
|
float dist_B_I = DistYCbCr(B, I);
|
||||||
|
float dist_F_A = DistYCbCr(F, A);
|
||||||
|
bool doLineBlend = (blendResult.y == BLEND_DOMINANT ||
|
||||||
|
!((blendResult.x != BLEND_NONE && !IsPixEqual(E, I)) || (blendResult.z != BLEND_NONE && !IsPixEqual(E, A)) ||
|
||||||
|
(IsPixEqual(I, F) && IsPixEqual(F, C) && IsPixEqual(C, B) && IsPixEqual(B, A) && !IsPixEqual(E, C))));
|
||||||
|
|
||||||
|
vec2 origin = vec2(1.0 / sqrt(2.0), 0.0);
|
||||||
|
vec2 direction = vec2(-1.0, -1.0);
|
||||||
|
|
||||||
|
if(doLineBlend)
|
||||||
|
{
|
||||||
|
bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_B_I <= dist_F_A) && neq(E,I) && neq(H,I);
|
||||||
|
bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_F_A <= dist_B_I) && neq(E,A) && neq(D,A);
|
||||||
|
origin = haveShallowLine? vec2(0.25, 0.0) : vec2(0.5, 0.0);
|
||||||
|
direction.y -= haveShallowLine? 1.0: 0.0;
|
||||||
|
direction.x -= haveSteepLine? 1.0: 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 blendPix = mix(F,B, step(DistYCbCr(E, B), DistYCbCr(E, F)));
|
||||||
|
res = mix(res, blendPix, get_left_ratio(pos, origin, direction, scale));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pixel Tap Mapping: -|x|x|-|-
|
||||||
|
// x|A|B|C|-
|
||||||
|
// x|D|E|F|-
|
||||||
|
// -|G|H|-|-
|
||||||
|
// -|-|-|-|-
|
||||||
|
if(blendResult.x != BLEND_NONE)
|
||||||
|
{
|
||||||
|
float dist_D_C = DistYCbCr(D, C);
|
||||||
|
float dist_B_G = DistYCbCr(B, G);
|
||||||
|
bool doLineBlend = (blendResult.x == BLEND_DOMINANT ||
|
||||||
|
!((blendResult.w != BLEND_NONE && !IsPixEqual(E, C)) || (blendResult.y != BLEND_NONE && !IsPixEqual(E, G)) ||
|
||||||
|
(IsPixEqual(C, B) && IsPixEqual(B, A) && IsPixEqual(A, D) && IsPixEqual(D, G) && !IsPixEqual(E, A))));
|
||||||
|
|
||||||
|
vec2 origin = vec2(0.0, -1.0 / sqrt(2.0));
|
||||||
|
vec2 direction = vec2(-1.0, 1.0);
|
||||||
|
if(doLineBlend)
|
||||||
|
{
|
||||||
|
bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_D_C <= dist_B_G) && neq(E,C) && neq(F,C);
|
||||||
|
bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_B_G <= dist_D_C) && neq(E,G) && neq(H,G);
|
||||||
|
origin = haveShallowLine? vec2(0.0, -0.25) : vec2(0.0, -0.5);
|
||||||
|
direction.x -= haveShallowLine? 1.0: 0.0;
|
||||||
|
direction.y += haveSteepLine? 1.0: 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 blendPix = mix(D,B, step(DistYCbCr(E, B), DistYCbCr(E, D)));
|
||||||
|
res = mix(res, blendPix, get_left_ratio(pos, origin, direction, scale));
|
||||||
|
}
|
||||||
|
|
||||||
|
FragColor = vec4(res, 1.0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,67 @@
|
|||||||
|
;
|
||||||
|
; Default list of maps that the Random Map Selector (tm) will chose from, with weightings.
|
||||||
|
; Thanks to Xeno for making the list of mapnames!
|
||||||
|
;
|
||||||
|
; Structure of this file (quite simple)
|
||||||
|
;
|
||||||
|
; +Group_name
|
||||||
|
; <weight> <mapname>
|
||||||
|
; <weight> <mapname>
|
||||||
|
; ...
|
||||||
|
; +Group_name
|
||||||
|
; ...
|
||||||
|
;
|
||||||
|
; NOTE: If you want to disable a group, just remove the + since all lines that doesn't start with either an
|
||||||
|
; integer or a + will be considered as groups to ignore. (and no +10 won't count as an integer). If you want
|
||||||
|
; to disable a specific map, just delete the line or perhaps set the weight to 0.
|
||||||
|
;
|
||||||
|
; About the weightings: They are an INTEGER, and the chance for getting a certain map is proportional to
|
||||||
|
; <map_weighting> / <sum_of_all>.
|
||||||
|
|
||||||
|
+ORIGINAL TA MAPS
|
||||||
|
|
||||||
|
100 Brilliant Cut Lake
|
||||||
|
100 Cluster Freak
|
||||||
|
100 Comet Catcher
|
||||||
|
100 Gasplant Plain
|
||||||
|
100 [V] Aelston
|
||||||
|
100 [V] Anarky
|
||||||
|
100 [V] Apache Canyon
|
||||||
|
100 [V] Aramon Shores
|
||||||
|
100 [V] Astral Arena
|
||||||
|
100 [V] Back to War
|
||||||
|
100 [V] Brain Coral
|
||||||
|
100 [V] Bullet Holes
|
||||||
|
100 [V] Burnt Hills
|
||||||
|
100 [V] Capacitor
|
||||||
|
100 [V] Cappa
|
||||||
|
100 [V] Celestial
|
||||||
|
100 [V] Death Valley
|
||||||
|
100 [V] Duel - Acid
|
||||||
|
100 [V] Duel - Aramon
|
||||||
|
100 [V] Duel - Crystal
|
||||||
|
100 [V] Duel - Green
|
||||||
|
100 [V] Flasheller
|
||||||
|
100 [V] Gods of War 2
|
||||||
|
100 [V] Gods of Adaman
|
||||||
|
100 [V] Great Divide x2
|
||||||
|
100 [V] Green Ace Extended
|
||||||
|
100 [V] Irish Desert
|
||||||
|
100 [V] Island Stretch
|
||||||
|
100 [V] King of the Hill
|
||||||
|
100 [V] Matty's Clutch
|
||||||
|
100 [V] Matty's Pass
|
||||||
|
100 [V] Mesopotania
|
||||||
|
100 [V] Molten Floods
|
||||||
|
100 [V] Nuggenland
|
||||||
|
100 [V] Plains of Salt 2
|
||||||
|
100 [V] Sail Here
|
||||||
|
100 [V] Slate Meltdown
|
||||||
|
100 [V] Slated Hatred
|
||||||
|
100 [V] This Type of Thinking
|
||||||
|
100 [V] Utopia
|
||||||
|
100 [V] Volcano
|
||||||
|
100 [V] Water Corridor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
@ -0,0 +1,99 @@
|
|||||||
|
;
|
||||||
|
; TA Demo Recoder 0.90ß.
|
||||||
|
;
|
||||||
|
; This file describes different groups of units.
|
||||||
|
; You can therefore add 3rd party units etc to this list if you feel like.
|
||||||
|
;
|
||||||
|
; The hex-number <unitid> is the same number that is saved in a unit restrictions file. Don't know
|
||||||
|
; how that is related to the unit, or if it can be found in the unit's file somewhere. So if
|
||||||
|
; you know, feel free to enlighten me.
|
||||||
|
;
|
||||||
|
; If you add stuff to the file, you could always send it to me so that future releases of TA Demo can
|
||||||
|
; recognize what 3rd-party units was used. (If there should happen to be a nice easy way to get the unit
|
||||||
|
; names from those id numbers, this file might become obsolete)
|
||||||
|
;
|
||||||
|
; Edited by Fnordia 990220
|
||||||
|
; 991027
|
||||||
|
; 000219
|
||||||
|
; 010318
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; Syntax: (very simple)
|
||||||
|
;
|
||||||
|
; = <group name / unit name>
|
||||||
|
; <unitid>
|
||||||
|
; <unitid>
|
||||||
|
; <...>
|
||||||
|
;
|
||||||
|
; = <group name>
|
||||||
|
;
|
||||||
|
; etc..
|
||||||
|
;
|
||||||
|
; update: only units in one of the +-groups will show. with the group furthest down takes presedence.
|
||||||
|
; however, the units before the first +-group will be tested for all groups
|
||||||
|
|
||||||
|
; I just added one unit to CC cuz I'm lazy. Btw, it's inclusive, so if any unit in the groups list were
|
||||||
|
; enabled in the game, this group's name will be listed under used units.
|
||||||
|
|
||||||
|
=BAI
|
||||||
|
6da73737
|
||||||
|
|
||||||
|
=Queller
|
||||||
|
; albatross
|
||||||
|
62cc5579
|
||||||
|
|
||||||
|
=Counterstrike
|
||||||
|
; fluxor
|
||||||
|
9a34465c
|
||||||
|
|
||||||
|
+regular ta
|
||||||
|
=Core Contingency
|
||||||
|
|
||||||
|
; it's the nixter btw. :)
|
||||||
|
848ebee6
|
||||||
|
|
||||||
|
=ARM Flea
|
||||||
|
371d264a
|
||||||
|
|
||||||
|
=ARM Scarab
|
||||||
|
6b81b8be
|
||||||
|
|
||||||
|
=CORE Hedgehog
|
||||||
|
763476f4
|
||||||
|
|
||||||
|
=CORE Immolator
|
||||||
|
3fcf5935
|
||||||
|
|
||||||
|
=ARM Fast Attack-Repair Kbot
|
||||||
|
d6d867f3
|
||||||
|
|
||||||
|
=CORE Necro
|
||||||
|
f4c81832
|
||||||
|
|
||||||
|
+uberhack 1.0
|
||||||
|
=UberHack 1.0 TAEC
|
||||||
|
; The anemone
|
||||||
|
b9f36d39
|
||||||
|
|
||||||
|
+uberhack 1.1
|
||||||
|
=Uberhack 1.1
|
||||||
|
; the gimp
|
||||||
|
16b40f07
|
||||||
|
|
||||||
|
=TAEC units
|
||||||
|
; the thumper hehe
|
||||||
|
a89cec32
|
||||||
|
|
||||||
|
+uberhack 3.0
|
||||||
|
=Uberhack 3.0
|
||||||
|
;centurion
|
||||||
|
3b978743
|
||||||
|
|
||||||
|
+xta 0.8
|
||||||
|
=XTA 0.8
|
||||||
|
f804eafe
|
||||||
|
|
||||||
|
+xta betas
|
||||||
|
=XTA pre1.0
|
||||||
|
; fortwall
|
||||||
|
6d197dcf
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,899 @@
|
|||||||
|
; cnc-ddraw - https://github.com/FunkyFr3sh/cnc-ddraw
|
||||||
|
|
||||||
|
[ddraw]
|
||||||
|
; ### Optional settings ###
|
||||||
|
; Use the following settings to adjust the look and feel to your liking
|
||||||
|
|
||||||
|
|
||||||
|
; Stretch to custom resolution, 0 = defaults to the size game requests
|
||||||
|
width=0
|
||||||
|
height=0
|
||||||
|
|
||||||
|
; Override the width/height settings shown above and always stretch to fullscreen
|
||||||
|
; Note: Can be combined with 'windowed=true' to get windowed-fullscreen aka borderless mode
|
||||||
|
fullscreen=true
|
||||||
|
|
||||||
|
; Run in windowed mode rather than going fullscreen
|
||||||
|
windowed=true
|
||||||
|
|
||||||
|
; Maintain aspect ratio
|
||||||
|
maintas=false
|
||||||
|
|
||||||
|
; Windowboxing / Integer Scaling
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Real rendering rate, -1 = screen rate, 0 = unlimited, n = cap
|
||||||
|
; Note: Does not have an impact on the game speed, to limit your game speed use 'maxgameticks='
|
||||||
|
maxfps=-1
|
||||||
|
|
||||||
|
; Vertical synchronization, enable if you get tearing - (Requires 'renderer=auto/opengl*/direct3d9*')
|
||||||
|
; Note: vsync=true can fix tearing but it will cause input lag
|
||||||
|
vsync=false
|
||||||
|
|
||||||
|
; Automatic mouse sensitivity scaling
|
||||||
|
; Note: Only works if stretching is enabled. Sensitivity will be adjusted according to the size of the window
|
||||||
|
adjmouse=false
|
||||||
|
|
||||||
|
; Preliminary libretro shader support - (Requires 'renderer=opengl*') https://github.com/libretro/glsl-shaders
|
||||||
|
; 2x scaling example: https://imgur.com/a/kxsM1oY - 4x scaling example: https://imgur.com/a/wjrhpFV
|
||||||
|
; You can specify a full path to a .glsl shader file here or use one of the values listed below
|
||||||
|
; Possible values: Nearest neighbor, Bilinear, Bicubic, Lanczos, xBR-lv2
|
||||||
|
shader=Shaders\cubic\catmull-rom-bilinear.glsl
|
||||||
|
|
||||||
|
; Window position, -32000 = center to screen
|
||||||
|
posX=-32000
|
||||||
|
posY=-32000
|
||||||
|
|
||||||
|
; Renderer, possible values: auto, opengl, openglcore, gdi, direct3d9, direct3d9on12 (auto = try direct3d9/opengl, fallback = gdi)
|
||||||
|
renderer=opengl
|
||||||
|
|
||||||
|
; Developer mode (don't lock the cursor)
|
||||||
|
devmode=false
|
||||||
|
|
||||||
|
; Show window borders in windowed mode
|
||||||
|
border=true
|
||||||
|
|
||||||
|
; Save window position/size/state on game exit and restore it automatically on next game start
|
||||||
|
; Possible values: 0 = disabled, 1 = save to global 'ddraw' section, 2 = save to game specific section
|
||||||
|
savesettings=1
|
||||||
|
|
||||||
|
; Should the window be resizable by the user in windowed mode?
|
||||||
|
resizable=true
|
||||||
|
|
||||||
|
; Upscaling filter for the direct3d9* renderers
|
||||||
|
; Possible values: 0 = nearest-neighbor, 1 = bilinear, 2 = bicubic, 3 = lanczos (bicubic/lanczos only support 16/32bit color depth games)
|
||||||
|
d3d9_filter=2
|
||||||
|
|
||||||
|
; Enable upscale hack for high resolution patches (Supports C&C1, Red Alert 1 and KKND Xtreme)
|
||||||
|
vhack=false
|
||||||
|
|
||||||
|
; Where should screenshots be saved
|
||||||
|
screenshotdir=.\Screenshots\
|
||||||
|
|
||||||
|
; Switch between windowed/borderless modes with alt+enter rather than windowed/fullscreen modes
|
||||||
|
toggle_borderless=true
|
||||||
|
|
||||||
|
; Switch between windowed/fullscreen upscaled modes with alt+enter rather than windowed/fullscreen modes
|
||||||
|
toggle_upscaled=false
|
||||||
|
|
||||||
|
|
||||||
|
; ### Compatibility settings ###
|
||||||
|
; Use the following settings in case there are any issues with the game
|
||||||
|
|
||||||
|
|
||||||
|
; Hide WM_ACTIVATEAPP and WM_NCACTIVATE messages to prevent problems on alt+tab
|
||||||
|
noactivateapp=false
|
||||||
|
|
||||||
|
; Max game ticks per second, possible values: -1 = disabled, -2 = refresh rate, 0 = emulate 60hz vblank, 1-1000 = custom game speed
|
||||||
|
; Note: Can be used to slow down a too fast running game, fix flickering or too fast animations
|
||||||
|
; Note: Usually one of the following values will work: 60 / 30 / 25 / 20 / 15 (lower value = slower game speed)
|
||||||
|
maxgameticks=0
|
||||||
|
|
||||||
|
; Force minimum FPS, possible values: 0 = disabled, -1 = use 'maxfps=' value, -2 = same as -1 but force full redraw, 1-1000 = custom FPS
|
||||||
|
; Note: Set this to a low value such as 5 or 10 if some parts of the game are not being displayed (e.g. menus or loading screens)
|
||||||
|
minfps=0
|
||||||
|
|
||||||
|
; Disable fullscreen-exclusive mode for the direct3d9*/opengl* renderers
|
||||||
|
; Note: Can be used in case some GUI elements like buttons/textboxes/videos/etc.. are invisible
|
||||||
|
nonexclusive=false
|
||||||
|
|
||||||
|
; Force CPU0 affinity, avoids crashes/freezing, *might* have a performance impact
|
||||||
|
; Note: Disable this if the game is not running smooth or there are sound issues
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Available resolutions, possible values: 0 = Small list, 1 = Very small list, 2 = Full list
|
||||||
|
; Note: Set this to 2 if your chosen resolution is not working or does not show up in the list
|
||||||
|
; Note: Set this to 1 if the game is crashing on startup
|
||||||
|
resolutions=0
|
||||||
|
|
||||||
|
; Child window handling, possible values: 0 = Disabled, 1 = Display top left, 2 = Display top left + repaint, 3 = Hide
|
||||||
|
; Note: Disables upscaling if a child window was detected (to ensure the game is fully playable, may look weird though)
|
||||||
|
fixchilds=2
|
||||||
|
|
||||||
|
; Enable one of the following settings if your cursor doesn't work properly when upscaling is enabled
|
||||||
|
hook_peekmessage=false
|
||||||
|
hook_getmessage=false
|
||||||
|
|
||||||
|
|
||||||
|
; Undocumented settings - You may or may not change these (You should rather focus on the settings above)
|
||||||
|
releasealt=false
|
||||||
|
game_handles_close=true
|
||||||
|
fixnotresponding=false
|
||||||
|
hook=4
|
||||||
|
guard_lines=200
|
||||||
|
max_resolutions=32
|
||||||
|
limit_bltfast=false
|
||||||
|
lock_surfaces=true
|
||||||
|
allow_wmactivate=false
|
||||||
|
flipclear=false
|
||||||
|
fixmousehook=false
|
||||||
|
rgb555=false
|
||||||
|
no_dinput_hook=false
|
||||||
|
refresh_rate=0
|
||||||
|
anti_aliased_fonts_min_size=13
|
||||||
|
custom_width=0
|
||||||
|
custom_height=0
|
||||||
|
min_font_size=0
|
||||||
|
direct3d_passthrough=false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ### Hotkeys ###
|
||||||
|
; Use the following settings to configure your hotkeys, 0x00 = disabled
|
||||||
|
; Virtual-Key Codes: https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
|
||||||
|
|
||||||
|
|
||||||
|
; Switch between windowed and fullscreen mode = [Alt] + ???
|
||||||
|
keytogglefullscreen=0x0D
|
||||||
|
|
||||||
|
; Maximize window = [Alt] + ???
|
||||||
|
keytogglemaximize=0x22
|
||||||
|
|
||||||
|
; Unlock cursor 1 = [Ctrl] + ???
|
||||||
|
keyunlockcursor1=0x09
|
||||||
|
|
||||||
|
; Unlock cursor 2 = [Right Alt] + ???
|
||||||
|
keyunlockcursor2=0xA3
|
||||||
|
|
||||||
|
; Screenshot
|
||||||
|
keyscreenshot=0x2C
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ### Config program settings ###
|
||||||
|
; The following settings are for cnc-ddraw config.exe
|
||||||
|
|
||||||
|
|
||||||
|
; cnc-ddraw config program language, possible values: auto, english, chinese, german, spanish, russian, hungarian, french, italian
|
||||||
|
configlang=auto
|
||||||
|
|
||||||
|
; cnc-ddraw config program theme, possible values: Windows10, Cobalt XEMedia
|
||||||
|
configtheme=Windows10
|
||||||
|
|
||||||
|
; Hide the 'Compatibility Settings' tab in cnc-ddraw config
|
||||||
|
hide_compat_tab=false
|
||||||
|
|
||||||
|
; Allow the users to 'Restore default settings' via cnc-ddraw config
|
||||||
|
allow_reset=true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ### Game specific settings ###
|
||||||
|
; The following settings override all settings shown above, section name = executable name
|
||||||
|
|
||||||
|
|
||||||
|
; Atrox
|
||||||
|
[Atrox]
|
||||||
|
fixchilds=0
|
||||||
|
allow_wmactivate=true
|
||||||
|
|
||||||
|
; Atomic Bomberman
|
||||||
|
[BM]
|
||||||
|
maxgameticks=60
|
||||||
|
|
||||||
|
; Age of Empires
|
||||||
|
[empires]
|
||||||
|
nonexclusive=true
|
||||||
|
adjmouse=true
|
||||||
|
resolutions=2
|
||||||
|
|
||||||
|
; Age of Empires: The Rise of Rome
|
||||||
|
[empiresx]
|
||||||
|
nonexclusive=true
|
||||||
|
adjmouse=true
|
||||||
|
resolutions=2
|
||||||
|
|
||||||
|
; Age of Empires II
|
||||||
|
[EMPIRES2]
|
||||||
|
nonexclusive=true
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Age of Empires II: The Conquerors
|
||||||
|
[age2_x1]
|
||||||
|
nonexclusive=true
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; American Conquest / Cossacks
|
||||||
|
[DMCR]
|
||||||
|
resolutions=2
|
||||||
|
guard_lines=300
|
||||||
|
minfps=-2
|
||||||
|
|
||||||
|
; Age of Wonders 2
|
||||||
|
[AoW2]
|
||||||
|
resolutions=2
|
||||||
|
renderer=opengl
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Age of Wonders 2
|
||||||
|
[AoW2Compat]
|
||||||
|
resolutions=2
|
||||||
|
renderer=opengl
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Age of Wonders 2 Config Tool
|
||||||
|
[aow2Setup]
|
||||||
|
resolutions=2
|
||||||
|
|
||||||
|
; Age of Wonders: Shadow Magic
|
||||||
|
[AoWSM]
|
||||||
|
resolutions=2
|
||||||
|
renderer=opengl
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Age of Wonders: Shadow Magic
|
||||||
|
[AoWSMCompat]
|
||||||
|
resolutions=2
|
||||||
|
renderer=opengl
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Age of Wonders: Shadow Magic Config Tool
|
||||||
|
[AoWSMSetup]
|
||||||
|
resolutions=2
|
||||||
|
|
||||||
|
; Anstoss 3
|
||||||
|
[anstoss3]
|
||||||
|
renderer=gdi
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Anno 1602
|
||||||
|
[1602]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Alien Nations
|
||||||
|
[AN]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Atlantis
|
||||||
|
[ATLANTIS]
|
||||||
|
renderer=opengl
|
||||||
|
maxgameticks=60
|
||||||
|
|
||||||
|
; Airline Tycoon Deluxe
|
||||||
|
[AT]
|
||||||
|
fixchilds=0
|
||||||
|
|
||||||
|
; Baldur's Gate II
|
||||||
|
; Note: 'Use 3D Acceleration' must be disabled and 'Full Screen' must be enabled in BGConfig.exe
|
||||||
|
[BGMain]
|
||||||
|
resolutions=2
|
||||||
|
|
||||||
|
; BALDR FORCE EXE
|
||||||
|
[BaldrForce]
|
||||||
|
noactivateapp=true
|
||||||
|
|
||||||
|
; Blade & Sword
|
||||||
|
[comeon]
|
||||||
|
maxgameticks=60
|
||||||
|
fixchilds=3
|
||||||
|
|
||||||
|
; Blood II - The Chosen / Shogo - Mobile Armor Division
|
||||||
|
[Client]
|
||||||
|
checkfile=.\SOUND.REZ
|
||||||
|
noactivateapp=true
|
||||||
|
|
||||||
|
; Carmageddon
|
||||||
|
[CARMA95]
|
||||||
|
noactivateapp=true
|
||||||
|
flipclear=true
|
||||||
|
|
||||||
|
; Carmageddon
|
||||||
|
[CARM95]
|
||||||
|
noactivateapp=true
|
||||||
|
flipclear=true
|
||||||
|
|
||||||
|
; Carmageddon 2
|
||||||
|
[Carma2_SW]
|
||||||
|
noactivateapp=true
|
||||||
|
|
||||||
|
; Captain Claw
|
||||||
|
[claw]
|
||||||
|
adjmouse=true
|
||||||
|
noactivateapp=true
|
||||||
|
nonexclusive=true
|
||||||
|
|
||||||
|
; Command & Conquer: Sole Survivor
|
||||||
|
[SOLE]
|
||||||
|
maxgameticks=120
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
|
||||||
|
; Command & Conquer Gold - CnCNet
|
||||||
|
[cnc95]
|
||||||
|
maxfps=125
|
||||||
|
|
||||||
|
; Command & Conquer Gold
|
||||||
|
[C&C95]
|
||||||
|
maxgameticks=120
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
|
||||||
|
; Command & Conquer: Red Alert - CnCNet
|
||||||
|
[ra95-spawn]
|
||||||
|
maxfps=125
|
||||||
|
|
||||||
|
; Command & Conquer: Red Alert
|
||||||
|
[ra95]
|
||||||
|
maxgameticks=120
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
|
||||||
|
; Command & Conquer: Red Alert
|
||||||
|
[ra95_Mod-Launcher]
|
||||||
|
maxgameticks=120
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
|
||||||
|
; Command & Conquer: Red Alert
|
||||||
|
[ra95p]
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
|
||||||
|
; Command & Conquer: Tiberian Sun / Command & Conquer: Red Alert 2
|
||||||
|
[game]
|
||||||
|
checkfile=.\blowfish.dll
|
||||||
|
tshack=true
|
||||||
|
noactivateapp=true
|
||||||
|
adjmouse=true
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Command & Conquer: Tiberian Sun Demo
|
||||||
|
[SUN]
|
||||||
|
noactivateapp=true
|
||||||
|
tshack=true
|
||||||
|
adjmouse=true
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Command & Conquer: Tiberian Sun - CnCNet
|
||||||
|
[ts-spawn]
|
||||||
|
noactivateapp=true
|
||||||
|
tshack=true
|
||||||
|
adjmouse=true
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Command & Conquer: Red Alert 2 - XWIS
|
||||||
|
[ra2]
|
||||||
|
noactivateapp=true
|
||||||
|
tshack=true
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Command & Conquer: Red Alert 2 - XWIS
|
||||||
|
[Red Alert 2]
|
||||||
|
noactivateapp=true
|
||||||
|
tshack=true
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Command & Conquer: Red Alert 2: Yuri's Revenge
|
||||||
|
[gamemd]
|
||||||
|
noactivateapp=true
|
||||||
|
tshack=true
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Command & Conquer: Red Alert 2: Yuri's Revenge - ?ModExe?
|
||||||
|
[ra2md]
|
||||||
|
noactivateapp=true
|
||||||
|
tshack=true
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Command & Conquer: Red Alert 2: Yuri's Revenge - CnCNet
|
||||||
|
[gamemd-spawn]
|
||||||
|
noactivateapp=true
|
||||||
|
tshack=true
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Command & Conquer: Red Alert 2: Yuri's Revenge - XWIS
|
||||||
|
[Yuri's Revenge]
|
||||||
|
noactivateapp=true
|
||||||
|
tshack=true
|
||||||
|
maxfps=60
|
||||||
|
minfps=-1
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Commandos
|
||||||
|
[comandos]
|
||||||
|
maxgameticks=-1
|
||||||
|
|
||||||
|
; Commandos
|
||||||
|
[comandos_w10]
|
||||||
|
maxgameticks=-1
|
||||||
|
|
||||||
|
; Caesar III
|
||||||
|
[c3]
|
||||||
|
nonexclusive=true
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Chris Sawyer's Locomotion
|
||||||
|
[LOCO]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Cultures 2
|
||||||
|
[Cultures2]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Cultures 2 MP
|
||||||
|
[Cultures2MP]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Close Combat 2: A Bridge Too Far
|
||||||
|
[cc2]
|
||||||
|
adjmouse=true
|
||||||
|
nonexclusive=true
|
||||||
|
|
||||||
|
; Close Combat 3: The Russian Front
|
||||||
|
[cc3]
|
||||||
|
adjmouse=true
|
||||||
|
nonexclusive=true
|
||||||
|
|
||||||
|
; Close Combat 4: The Battle of the Bulge
|
||||||
|
[cc4]
|
||||||
|
adjmouse=true
|
||||||
|
nonexclusive=true
|
||||||
|
|
||||||
|
; Close Combat 5: Invasion: Normandy
|
||||||
|
[cc5]
|
||||||
|
adjmouse=true
|
||||||
|
nonexclusive=true
|
||||||
|
|
||||||
|
; Call To Power 2
|
||||||
|
[ctp2]
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Corsairs Gold
|
||||||
|
[corsairs]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Divine Divinity
|
||||||
|
[div]
|
||||||
|
resolutions=2
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Dragon Throne: Battle of Red Cliffs
|
||||||
|
[AdSanguo]
|
||||||
|
maxgameticks=60
|
||||||
|
noactivateapp=true
|
||||||
|
limit_bltfast=true
|
||||||
|
|
||||||
|
; Dark Reign: The Future of War
|
||||||
|
[DKReign]
|
||||||
|
maxgameticks=60
|
||||||
|
|
||||||
|
; Dungeon Keeper 2
|
||||||
|
[DKII]
|
||||||
|
maxgameticks=60
|
||||||
|
noactivateapp=true
|
||||||
|
|
||||||
|
; Deadlock 2
|
||||||
|
[DEADLOCK]
|
||||||
|
fixchilds=0
|
||||||
|
adjmouse=false
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Diablo
|
||||||
|
[Diablo]
|
||||||
|
devmode=true
|
||||||
|
|
||||||
|
; Diablo: Hellfire
|
||||||
|
[hellfire]
|
||||||
|
devmode=true
|
||||||
|
|
||||||
|
; Escape Velocity Nova
|
||||||
|
[EV Nova]
|
||||||
|
hook_peekmessage=true
|
||||||
|
rgb555=true
|
||||||
|
keytogglefullscreen=0x46
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Economic War
|
||||||
|
[EcoW]
|
||||||
|
maxgameticks=60
|
||||||
|
fixnotresponding=true
|
||||||
|
|
||||||
|
; Enemy Infestation
|
||||||
|
[EI]
|
||||||
|
hook_getmessage=true
|
||||||
|
|
||||||
|
; Fairy Tale About Father Frost, Ivan and Nastya
|
||||||
|
[mrazik]
|
||||||
|
guard_lines=0
|
||||||
|
|
||||||
|
; Future Cop - L.A.P.D.
|
||||||
|
[FCopLAPD]
|
||||||
|
nonexclusive=true
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; G-Police
|
||||||
|
[GPOLICE]
|
||||||
|
maxgameticks=60
|
||||||
|
|
||||||
|
; Gangsters: Organized Crime
|
||||||
|
[gangsters]
|
||||||
|
adjmouse=true
|
||||||
|
nonexclusive=true
|
||||||
|
|
||||||
|
; Grand Theft Auto
|
||||||
|
[Grand Theft Auto]
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Grand Theft Auto: London 1969
|
||||||
|
[gta_uk]
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Grand Theft Auto: London 1961
|
||||||
|
[Gta_61]
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Gruntz
|
||||||
|
[GRUNTZ]
|
||||||
|
adjmouse=true
|
||||||
|
noactivateapp=true
|
||||||
|
nonexclusive=true
|
||||||
|
; Heroes of Might and Magic II: The Succession Wars
|
||||||
|
[HEROES2W]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Heroes of Might and Magic III
|
||||||
|
[Heroes3]
|
||||||
|
game_handles_close=true
|
||||||
|
|
||||||
|
; Heroes of Might and Magic III HD Mod
|
||||||
|
[Heroes3 HD]
|
||||||
|
game_handles_close=true
|
||||||
|
|
||||||
|
; Hard Truck: Road to Victory
|
||||||
|
[htruck]
|
||||||
|
maxgameticks=25
|
||||||
|
renderer=opengl
|
||||||
|
noactivateapp=true
|
||||||
|
|
||||||
|
; Icewind Dale 2
|
||||||
|
; Note: 'Full Screen' must be enabled in Config.exe
|
||||||
|
; Note: 1070x602 is the lowest possible 16:9 resolution for the Widescreen patch (600/601 height will crash)
|
||||||
|
[iwd2]
|
||||||
|
resolutions=2
|
||||||
|
custom_width=1070
|
||||||
|
custom_height=602
|
||||||
|
|
||||||
|
; Invictus
|
||||||
|
[Invictus]
|
||||||
|
adjmouse=true
|
||||||
|
renderer=opengl
|
||||||
|
|
||||||
|
; Interstate 76
|
||||||
|
[i76]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Infantry Online
|
||||||
|
[infantry]
|
||||||
|
devmode=true
|
||||||
|
resolutions=2
|
||||||
|
infantryhack=true
|
||||||
|
max_resolutions=90
|
||||||
|
|
||||||
|
; Jagged Alliance 2
|
||||||
|
[ja2]
|
||||||
|
singlecpu=false
|
||||||
|
fixmousehook=true
|
||||||
|
noactivateapp=true
|
||||||
|
releasealt=true
|
||||||
|
|
||||||
|
; Jagged Alliance 2: Unfinished Business
|
||||||
|
[JA2UB]
|
||||||
|
singlecpu=false
|
||||||
|
fixmousehook=true
|
||||||
|
noactivateapp=true
|
||||||
|
releasealt=true
|
||||||
|
|
||||||
|
; Jagged Alliance 2: Wildfire
|
||||||
|
[WF6]
|
||||||
|
singlecpu=false
|
||||||
|
fixmousehook=true
|
||||||
|
noactivateapp=true
|
||||||
|
releasealt=true
|
||||||
|
|
||||||
|
; Jagged Alliance 2 - UC mod
|
||||||
|
[JA2_UC]
|
||||||
|
singlecpu=false
|
||||||
|
fixmousehook=true
|
||||||
|
noactivateapp=true
|
||||||
|
releasealt=true
|
||||||
|
|
||||||
|
; Jagged Alliance 2 - Vengeance Reloaded mod
|
||||||
|
[JA2_Vengeance]
|
||||||
|
singlecpu=false
|
||||||
|
fixmousehook=true
|
||||||
|
noactivateapp=true
|
||||||
|
releasealt=true
|
||||||
|
|
||||||
|
; Jedi Knight Dark Forces 2
|
||||||
|
[JK]
|
||||||
|
direct3d_passthrough=true
|
||||||
|
|
||||||
|
; Kings Quest 8
|
||||||
|
[Mask]
|
||||||
|
renderer=opengl
|
||||||
|
|
||||||
|
; Konung
|
||||||
|
[konung]
|
||||||
|
fixchilds=0
|
||||||
|
|
||||||
|
; Konung 2
|
||||||
|
[Konung2]
|
||||||
|
fixchilds=0
|
||||||
|
|
||||||
|
; KKND Xtreme (With high resolution patch)
|
||||||
|
[KKNDgame]
|
||||||
|
vhack=true
|
||||||
|
|
||||||
|
; KKND2: Krossfire
|
||||||
|
[KKND2]
|
||||||
|
noactivateapp=true
|
||||||
|
|
||||||
|
; Lionheart
|
||||||
|
[Lionheart]
|
||||||
|
hook_peekmessage=true
|
||||||
|
|
||||||
|
; Majesty Gold
|
||||||
|
[Majesty]
|
||||||
|
minfps=-2
|
||||||
|
|
||||||
|
; Majesty Gold HD
|
||||||
|
[MajestyHD]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Majesty Gold HD
|
||||||
|
[MajestyHD - Old]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Mech Warrior 3
|
||||||
|
[Mech3]
|
||||||
|
nonexclusive=true
|
||||||
|
|
||||||
|
; Moorhuhn 2
|
||||||
|
[Moorhuhn2]
|
||||||
|
releasealt=true
|
||||||
|
|
||||||
|
; New Robinson
|
||||||
|
[ROBY]
|
||||||
|
adjmouse=true
|
||||||
|
hook_peekmessage=true
|
||||||
|
|
||||||
|
; Nox
|
||||||
|
[NOX]
|
||||||
|
checkfile=.\NOX.ICD
|
||||||
|
renderer=direct3d9
|
||||||
|
nonexclusive=false
|
||||||
|
windowed=false
|
||||||
|
maxgameticks=125
|
||||||
|
|
||||||
|
; Nox Reloaded
|
||||||
|
[NoxReloaded]
|
||||||
|
maxgameticks=125
|
||||||
|
|
||||||
|
; Nox GOG
|
||||||
|
[Game/2]
|
||||||
|
checkfile=.\nox.cfg
|
||||||
|
maxgameticks=125
|
||||||
|
|
||||||
|
; Outlaws
|
||||||
|
[olwin]
|
||||||
|
noactivateapp=true
|
||||||
|
maxgameticks=60
|
||||||
|
adjmouse=true
|
||||||
|
renderer=gdi
|
||||||
|
|
||||||
|
; Pharaoh
|
||||||
|
[Pharaoh]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Pax Imperia
|
||||||
|
[Pax Imperia]
|
||||||
|
nonexclusive=true
|
||||||
|
|
||||||
|
; Railroad Tycoon II
|
||||||
|
[RT2]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; ROAD RASH
|
||||||
|
[RoadRash]
|
||||||
|
adjmouse=true
|
||||||
|
fixchilds=1
|
||||||
|
|
||||||
|
; Sim Copter
|
||||||
|
[SimCopter]
|
||||||
|
nonexclusive=true
|
||||||
|
|
||||||
|
; Settlers 3
|
||||||
|
[s3]
|
||||||
|
nonexclusive=true
|
||||||
|
|
||||||
|
; Star Trek - Armada
|
||||||
|
[Armada]
|
||||||
|
armadahack=true
|
||||||
|
nonexclusive=true
|
||||||
|
adjmouse=true
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Star Wars: Galactic Battlegrounds
|
||||||
|
[battlegrounds]
|
||||||
|
nonexclusive=true
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Star Wars: Galactic Battlegrounds: Clone Campaigns
|
||||||
|
[battlegrounds_x1]
|
||||||
|
nonexclusive=true
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Starcraft
|
||||||
|
[StarCraft]
|
||||||
|
game_handles_close=true
|
||||||
|
|
||||||
|
; Space Rangers
|
||||||
|
[Rangers]
|
||||||
|
hook_peekmessage=true
|
||||||
|
|
||||||
|
; Stronghold Crusader HD
|
||||||
|
[Stronghold Crusader]
|
||||||
|
resolutions=2
|
||||||
|
stronghold_hack=true
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Stronghold Crusader Extreme HD
|
||||||
|
[Stronghold_Crusader_Extreme]
|
||||||
|
resolutions=2
|
||||||
|
stronghold_hack=true
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Stronghold HD
|
||||||
|
[Stronghold]
|
||||||
|
resolutions=2
|
||||||
|
stronghold_hack=true
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Sim City 3000
|
||||||
|
[SC3]
|
||||||
|
minfps=-2
|
||||||
|
|
||||||
|
; Shadow Watch
|
||||||
|
[sw]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Shadow Flare
|
||||||
|
[ShadowFlare]
|
||||||
|
nonexclusive=true
|
||||||
|
adjmouse=true
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Total Annihilation (Unofficial Beta Patch v3.9.02)
|
||||||
|
[TotalA]
|
||||||
|
max_resolutions=32
|
||||||
|
lock_surfaces=true
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Total Annihilation Replay Viewer (Unofficial Beta Patch v3.9.02)
|
||||||
|
[Viewer]
|
||||||
|
max_resolutions=32
|
||||||
|
lock_surfaces=true
|
||||||
|
singlecpu=false
|
||||||
|
|
||||||
|
; Total Annihilation: Kingdoms
|
||||||
|
[Kingdoms]
|
||||||
|
game_handles_close=true
|
||||||
|
max_resolutions=32
|
||||||
|
|
||||||
|
; Three Kingdoms: Fate of the Dragon
|
||||||
|
[sanguo]
|
||||||
|
maxgameticks=60
|
||||||
|
noactivateapp=true
|
||||||
|
limit_bltfast=true
|
||||||
|
|
||||||
|
; RollerCoaster Tycoon
|
||||||
|
[rct]
|
||||||
|
no_dinput_hook=true
|
||||||
|
singlecpu=false
|
||||||
|
maxfps=0
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Twisted Metal
|
||||||
|
[TWISTED]
|
||||||
|
nonexclusive=true
|
||||||
|
maxgameticks=25
|
||||||
|
minfps=5
|
||||||
|
|
||||||
|
; Twisted Metal 2
|
||||||
|
[Tm2]
|
||||||
|
nonexclusive=true
|
||||||
|
maxgameticks=60
|
||||||
|
adjmouse=true
|
||||||
|
fixchilds=1
|
||||||
|
maintas=false
|
||||||
|
boxing=false
|
||||||
|
|
||||||
|
; Tzar: The Burden of the Crown
|
||||||
|
; Note: Must set 'DIRECTXDEVICE=0' in 'Tzar.ini'
|
||||||
|
[Tzar]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Uprising
|
||||||
|
[uprising]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Uprising 2
|
||||||
|
[Uprising 2]
|
||||||
|
renderer=opengl
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
|
; Vermeer
|
||||||
|
[vermeer]
|
||||||
|
adjmouse=true
|
||||||
|
vermeer_hack=true
|
||||||
|
|
||||||
|
; Wizardry 8
|
||||||
|
[Wiz8]
|
||||||
|
fixmousehook=true
|
||||||
|
noactivateapp=true
|
||||||
|
releasealt=true
|
||||||
|
|
||||||
|
; Worms Armageddon
|
||||||
|
[WA]
|
||||||
|
adjmouse=true
|
||||||
|
width=0
|
||||||
|
height=0
|
||||||
|
resizable=false
|
||||||
|
|
||||||
|
; War Wind
|
||||||
|
[WW]
|
||||||
|
minfps=-1
|
||||||
|
|
||||||
|
; Zeus and Poseidon
|
||||||
|
[Zeus]
|
||||||
|
adjmouse=true
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,273 @@
|
|||||||
|
[Settings]
|
||||||
|
|
||||||
|
OptimizeDTEnabled=1
|
||||||
|
|
||||||
|
FullRingsEnabled=1
|
||||||
|
|
||||||
|
WhiteboardKey=220
|
||||||
|
|
||||||
|
MegaMapKey=115
|
||||||
|
|
||||||
|
BuildLinesRingsKey=88
|
||||||
|
|
||||||
|
MegaMapEmptyRegionColor=92
|
||||||
|
|
||||||
|
IncomePosX=1587
|
||||||
|
|
||||||
|
IncomePosY=32
|
||||||
|
|
||||||
|
IncomeBackgroundEnabled=1
|
||||||
|
|
||||||
|
IncomeBackgroundColor=0
|
||||||
|
|
||||||
|
IncomeTextBackgroundEnabled=0
|
||||||
|
|
||||||
|
IncomeTextBackgroundColor=0
|
||||||
|
|
||||||
|
; Total Mayhem advanced settings
|
||||||
|
|
||||||
|
; Windowed mode will disable many Total Mayhem features (including some of these) and is not recommended
|
||||||
|
|
||||||
|
[Preferences] ; custom settings, if any entry is disabled the "Total Mayhem default" values will be used
|
||||||
|
|
||||||
|
; Display minimum resolution
|
||||||
|
DisplayModeMinHeight768=TRUE;
|
||||||
|
|
||||||
|
; This is a setting for the hotfix to fix performance on certain GPUs
|
||||||
|
; If you weren't affected by the crash and downloaded the fix anyway and it broke your game...
|
||||||
|
; ...you should set this to FALSE and everything should be fine
|
||||||
|
;UseVideoMemory=TRUE; Disabled in mdraw.dll
|
||||||
|
|
||||||
|
; Unit limit per player
|
||||||
|
; Set from 20 - 6553 (setting higher than 1500 may cause instability)
|
||||||
|
; TA v3.1 default is 250
|
||||||
|
; Total Mayhem default is 1500
|
||||||
|
|
||||||
|
UnitLimit = 1500;
|
||||||
|
|
||||||
|
; Pathfinding cycles
|
||||||
|
; Setting too low (such as TA v3.1 default) ruins pathfinding but setting extremely high lowers fps
|
||||||
|
; TA v3.1 default is 1333
|
||||||
|
; Total Mayhem default is 66650
|
||||||
|
|
||||||
|
AISearchMapEntries = 66650;
|
||||||
|
|
||||||
|
; Special effects limit (smoke, etc.)
|
||||||
|
; Setting too low (such as TA v3.1 default) will degrade visual quality
|
||||||
|
; This setting is still experimental, if you experience visual issues set to 400
|
||||||
|
; TA v3.1 default is 400
|
||||||
|
; Total Mayhem default is 20480
|
||||||
|
|
||||||
|
SfxLimit = 20480;
|
||||||
|
|
||||||
|
; Unit model size limit
|
||||||
|
; Set max width and height for unit model drawing buffer
|
||||||
|
; TA v3.1 default is 600x600
|
||||||
|
; Total Mayhem default is 1280x1280
|
||||||
|
|
||||||
|
X_CompositeBuf = 1280;
|
||||||
|
Y_CompositeBuf = 1280;
|
||||||
|
|
||||||
|
; Unit ID limit
|
||||||
|
; Set the maximum number of unique unit IDs
|
||||||
|
; TA v3.1 default is 512
|
||||||
|
; Total Mayhem default is 16000
|
||||||
|
|
||||||
|
UnitType = 16000;
|
||||||
|
|
||||||
|
; Weapon ID limit
|
||||||
|
; Set the maximum number of unique weapon IDs
|
||||||
|
; TA v3.1 default is 256
|
||||||
|
; Total Mayhem default is 16000
|
||||||
|
|
||||||
|
WeaponType = 16000;
|
||||||
|
|
||||||
|
; Weapon ID multiplayer patch
|
||||||
|
; Set to TRUE to enable increased Weapon ID limit in multiplayer
|
||||||
|
; Set to FALSE to allow increased Weapon ID limit only in single player
|
||||||
|
; TA v3.1 default is FALSE
|
||||||
|
; Total Mayhem default is FALSE (Weapon ID limit increase not yet compatible with Replayer)
|
||||||
|
|
||||||
|
MultiGameWeapon = FALSE;
|
||||||
|
|
||||||
|
; Double-click selection
|
||||||
|
; Enable or disable the new "double-click to select all units of the same type on screen" feature
|
||||||
|
; TA v3.1 default is FALSE
|
||||||
|
; Total Mayhem default is TRUE
|
||||||
|
|
||||||
|
DoubleClick = TRUE;
|
||||||
|
|
||||||
|
; Expanded Multiplayer Sharing Menu
|
||||||
|
; Enable or disable the new expanded multiplayer sharing menu
|
||||||
|
; TA v3.1 default is FALSE
|
||||||
|
; Total Mayhem default is TRUE
|
||||||
|
|
||||||
|
ShareDialogExpand = TRUE;
|
||||||
|
|
||||||
|
; Main menu resolution adjuster
|
||||||
|
; Set to FALSE to keep main menu resolution at the default 640x480
|
||||||
|
; Set to TRUE to match main menu resolution to the in-game resolution set via options menu
|
||||||
|
; If TRUE, the main menu will not be upscaled to fit increased output resolution
|
||||||
|
; If resolution is not valid, the game will not start (use resolution overrider below to fix)
|
||||||
|
; TA v3.1 default is FALSE
|
||||||
|
; Total Mayhem default is FALSE
|
||||||
|
|
||||||
|
MenuResolution = FALSE;
|
||||||
|
|
||||||
|
; Megamap
|
||||||
|
; Enable or disable the new megamap
|
||||||
|
; TA v3.1 default is FALSE
|
||||||
|
; Total Mayhem default is TRUE
|
||||||
|
|
||||||
|
FullScreenMinimap = TRUE;
|
||||||
|
|
||||||
|
; Megamap FPS Limit
|
||||||
|
|
||||||
|
MegamapFpsLimit = 1000;
|
||||||
|
|
||||||
|
; Megamap Icon Configuration File
|
||||||
|
; Set the location of the megamap's icon configuration file
|
||||||
|
; Total Mayhem default is .\Icon\iconcfg.ini
|
||||||
|
|
||||||
|
MegaMapConfig = .\Icon\iconcfg.ini;
|
||||||
|
|
||||||
|
; Megamap Configuration Settings
|
||||||
|
; Use the fields below to customize the megamap
|
||||||
|
|
||||||
|
; Megamap Mouse Wheel Zooming
|
||||||
|
; Enable or disable ability to zoom in and out of the megamap with the mouse wheel
|
||||||
|
; Total Mayhem default is TRUE;
|
||||||
|
|
||||||
|
WheelZoom = TRUE;
|
||||||
|
|
||||||
|
; Megamap Mouse Wheel Zoom In Mode
|
||||||
|
; Set to TRUE to zoom to the cursor location when rolling the wheel up from the megamap
|
||||||
|
; Set to FALSE to zoom to the previous camera location when rolling the wheel up from the megamap
|
||||||
|
; Total Mayhem default is TRUE;
|
||||||
|
|
||||||
|
WheelMoveMegaMap = TRUE;
|
||||||
|
|
||||||
|
; Megamap Double-Click to Zoom Option
|
||||||
|
; Enable or disable the option to zoom to the cursor location...
|
||||||
|
; ...when double-clicking terrain on the megamap
|
||||||
|
; Total Mayhem default is FALSE;
|
||||||
|
|
||||||
|
DoubleClickMoveMegamap = FALSE;
|
||||||
|
|
||||||
|
; Megamap Unit Icon Flashing When Under Attack
|
||||||
|
; Enable or disable megamap unit icon flashing when under attack
|
||||||
|
|
||||||
|
UnderAttackFlash=TRUE;
|
||||||
|
|
||||||
|
; Megamap Minimum Sensor Range Ring Distances
|
||||||
|
; Set the minimum sensor values required to display range rings on the megamap
|
||||||
|
; These settings could be helpful if you want to eliminate clutter from short-ranged rings
|
||||||
|
; Total Mayhem default is 0 for all sensors
|
||||||
|
|
||||||
|
MegamapRadarMinimum = 128;
|
||||||
|
MegamapSonarMinimum = 128;
|
||||||
|
MegamapSonarJamMinimum = 64;
|
||||||
|
MegamapRadarJamMinimum = 64;
|
||||||
|
MegamapAntiNukeMinimum = 512;
|
||||||
|
|
||||||
|
; Player Icon and Line Marker Colors
|
||||||
|
; Customize the colors of the player minimap/megamap icons and line markers
|
||||||
|
; Set from 0 to 255 to select colors from the TA indexed color palette
|
||||||
|
; These settings are disabled by default (remove the semicolons to enable)
|
||||||
|
|
||||||
|
Player1DotColors=227; ;Blue
|
||||||
|
Player2DotColors=202; ;Red
|
||||||
|
Player3DotColors=251; ;Yellow
|
||||||
|
Player4DotColors=233; ;Green
|
||||||
|
Player5DotColors=36; ;Teal
|
||||||
|
Player6DotColors=253; ;Purple/Magenta
|
||||||
|
Player7DotColors=81; ;White
|
||||||
|
Player8DotColors=94; ;Black
|
||||||
|
Player9DotColors=210; ;Orange
|
||||||
|
Player10DotColors=67; ;Tan
|
||||||
|
|
||||||
|
; Player Dot Marker Colors
|
||||||
|
; Customize the colors of player dot markers by setting a custom icon file
|
||||||
|
; Edit the example smallcircle.pcx file or create a new icon file
|
||||||
|
; The icon file must contain all 10 player markers from left to right
|
||||||
|
; The icon width and height settings must match the dimensions of your icons
|
||||||
|
; These settings are disabled by default (remove the semicolons to enable)
|
||||||
|
|
||||||
|
; Player Dot Marker Colors
|
||||||
|
; Customize the colors of player dot markers by setting a custom icon file
|
||||||
|
; Edit the example smallcircle.pcx file or create a new icon file
|
||||||
|
; The icon file must contain all 10 player markers from left to right
|
||||||
|
; The icon width and height settings must match the dimensions of your icons
|
||||||
|
; These settings are disabled by default (remove the semicolons to enable)
|
||||||
|
PerPlayerMarkerWidth=10;
|
||||||
|
PerPlayerMarkerHeight=10;
|
||||||
|
PlayerMarkerPcx=Icon\smallcircle.pcx;
|
||||||
|
|
||||||
|
[REG] ; registry override settings, if any entry is disabled the last value used will be remembered
|
||||||
|
|
||||||
|
; Sound mode
|
||||||
|
; Set to 0 for no sound, 1 for mono sound, and 2 for 3D positional sound
|
||||||
|
; When set to 3D, the speaker layout is read from the Windows control panel
|
||||||
|
; All speaker layouts are supported by the 3D sound engine (stereo, 5.1, 7.1, etc.)
|
||||||
|
; TA v3.1 default is Mono (dword:1)
|
||||||
|
; Total Mayhem default is 3D (dword:2)
|
||||||
|
|
||||||
|
"Sound Mode" = dword:2
|
||||||
|
|
||||||
|
; Max number of simultaneous sounds before sounds are cut off
|
||||||
|
; Set from 2 - 32 for specific limits or 33 or higher for unlimited
|
||||||
|
; TA v3.1 default is 8 (dword:8)
|
||||||
|
; Total Mayhem default is 128 / unlimited (dword:128)
|
||||||
|
|
||||||
|
"MixingBuffers" = dword:128
|
||||||
|
|
||||||
|
; Default game speed
|
||||||
|
; Set from 0 - 20 (corresponding to game speed -10 to +10)
|
||||||
|
; Use plus and minus keys to adjust while playing
|
||||||
|
; TA and Total Mayhem default is 10 which is equivalent to Normal game speed (dword:10)
|
||||||
|
|
||||||
|
"GameSpeed" = dword:10
|
||||||
|
|
||||||
|
; Group selection hotkey modifier
|
||||||
|
; Set to 1 to select unit groups with number key and build menus with ALT + number key
|
||||||
|
; Set to 0 to select build menus with number key and unit groups with ALT + number key
|
||||||
|
; TA v3.1 default is 0 (dword:0)
|
||||||
|
; Total Mayhem default is 1 (dword:1)
|
||||||
|
|
||||||
|
"SwitchAlt" = dword:1
|
||||||
|
|
||||||
|
; Max number of players in skirmish mode
|
||||||
|
; Set from 2 - 10
|
||||||
|
; TA v3.1 default is 4 (dword:4)
|
||||||
|
; Total Mayhem default is 10 (dword:10)
|
||||||
|
|
||||||
|
"NumSkirmishPlayers" = dword:10
|
||||||
|
|
||||||
|
; Default setting for display of chat messages from other players
|
||||||
|
; Set to 1 to enable and 0 to disable
|
||||||
|
; Use "+screenchat" command in-game to toggle setting for the current game
|
||||||
|
; TA and Total Mayhem default is 1
|
||||||
|
|
||||||
|
"ScreenChat" = dword:1
|
||||||
|
|
||||||
|
; Music playback mode
|
||||||
|
; Set to 1 for Play All, 2 for Random, 3 for Repeat, and 4 for Custom.
|
||||||
|
; When set to Custom, the game will attempt to use the dynamic build/battle system...
|
||||||
|
; ...however this mode is buggy and almost never works correctly on modern systems...
|
||||||
|
; ...resulting in only a single track being played, either stopping thereafter (CD version)...
|
||||||
|
; ...or looping forever (MP3 version), therefore Random is best for most people
|
||||||
|
; TA v3.1 default is Custom (dword:4)
|
||||||
|
; Total Mayhem default is Random (dword:2)
|
||||||
|
|
||||||
|
"CDMode" = dword:2
|
||||||
|
|
||||||
|
; Resolution overrider (disabled by default)
|
||||||
|
; Use this to override the resolution set in the options menu (remove semicolons to enable)
|
||||||
|
; All resolutions and aspect ratios supported by your setup are supported by the game...
|
||||||
|
; ...as long as they are available in 8-bit color depth (if not, create a custom resolution)
|
||||||
|
; If you set a resolution not supported by your setup (driver or display) the game will crash
|
||||||
|
; The override is set at game launch, using options menu will defeat override until next launch
|
||||||
|
; Example: dword:1920 x dword:1080 (1920x1080)
|
||||||
|
|
||||||
|
;"DisplayModeWidth" = dword:1920
|
||||||
|
;"DisplayModeHeight" = dword:1080
|
||||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,13 @@
|
|||||||
|
[Settings]
|
||||||
|
;Accepted file formats
|
||||||
|
;0 wav
|
||||||
|
;1 mp3
|
||||||
|
;2 ogg
|
||||||
|
;3 flac
|
||||||
|
;4 aiff
|
||||||
|
FileFormat=1
|
||||||
|
;Accepted music playback modes
|
||||||
|
;0 CD
|
||||||
|
;1 Folder
|
||||||
|
PlaybackMode=1
|
||||||
|
MusicFolder=tamus
|
||||||
Loading…
Reference in new issue