parent
cbcbe34c41
commit
3c3ec67ab3
Binary file not shown.
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,632 @@
|
|||||||
|
ProTA 4.6 changelog
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Gameplay notes:
|
||||||
|
|
||||||
|
- Added new units: Arm/Core Underwater Moho Mine
|
||||||
|
- Added new units: Arm/Core Underwater Moho Metal Maker
|
||||||
|
- Added auto unload scripts for sea/hover transports
|
||||||
|
- Added rotated versions of Arm Big Bertha/Core Intimidator to improve balance when turning to aim the first shot
|
||||||
|
- Added rotated versions of Arm Vulcan/Core Buzzsaw to improve balance when turning to aim the first shot
|
||||||
|
- Fixed incorrect footprint for Arm/Core Advanced Construction Sub which stopped them moving close to each other
|
||||||
|
- Added Commander build menus to Decoy Commanders
|
||||||
|
- Added .exe hacks:
|
||||||
|
- Allow weapons to acquire targets while reclaiming a unit
|
||||||
|
- Allow weapons to acquire targets while capturing a unit
|
||||||
|
- Allow weapons to acquire targets while repairing a unit
|
||||||
|
- Allow weapons to acquire targets while assist-nanolating a new unit
|
||||||
|
- Allow weapons to acquire targets while building a new unit
|
||||||
|
- Patches main rendering function to draw player 11 features regardless of LOS (see engine notes)
|
||||||
|
- Enable mex snap and set its default (3) and maximum (3) radius (see engine notes)
|
||||||
|
- Enable wreck snap and set its default (1) and maximum (1) radius (see engine notes)
|
||||||
|
- Removed units from CTRL+S/CTRL+W hotkeys (see engine notes):
|
||||||
|
- Arm Bear
|
||||||
|
- Arm Eraser
|
||||||
|
- Arm Escort
|
||||||
|
- Arm Fibber
|
||||||
|
- Arm Hulk
|
||||||
|
- Arm Infiltrator
|
||||||
|
- Arm Invader
|
||||||
|
- Arm Jammer
|
||||||
|
- Arm Marky
|
||||||
|
- Arm Scarab
|
||||||
|
- Arm Seer
|
||||||
|
- Core Deleter
|
||||||
|
- Core Envoy
|
||||||
|
- Core Hedgehog
|
||||||
|
- Core Informer
|
||||||
|
- Core Parasite
|
||||||
|
- Core Phantom
|
||||||
|
- Core Roach
|
||||||
|
- Core Spectre
|
||||||
|
- Core Turtle
|
||||||
|
- Core Voyeur
|
||||||
|
- Removed units from CTRL+F hotkey (see engine notes):
|
||||||
|
- Arm Protector
|
||||||
|
- Arm Retaliator
|
||||||
|
- Arm Stunner
|
||||||
|
- Core Fortitude
|
||||||
|
- Core Neutron
|
||||||
|
- Core Silencer
|
||||||
|
|
||||||
|
GUI notes:
|
||||||
|
|
||||||
|
- Added arrows to Arm Big Bertha/Core Intimidator build pictures to build rotated versions
|
||||||
|
- Added arrows to Arm Vulcan/Core Buzzsaw build pictures to build rotated versions
|
||||||
|
- Fixed cursor animation speed
|
||||||
|
- Added +noshake and .ready buttons to sharing menu (see engine notes)
|
||||||
|
- Added .autopause button to battleroom screen (see engine notes)
|
||||||
|
- Added clock and weather report (wind and tidal strength) on top resource panel (see engine notes)
|
||||||
|
|
||||||
|
Engine notes:
|
||||||
|
|
||||||
|
- Updated to new TA engine v2024.3.25 (see tdraw.txt for new features in detail)
|
||||||
|
|
||||||
|
NEW FEATURES IN BRIEF:
|
||||||
|
|
||||||
|
- Set start positions based on battleroom teams (or alliances)
|
||||||
|
- Repair battleroom team icons so they can be used to create teams before launching game
|
||||||
|
- Add +autoteam battleroom and in-game commands to automatically assign teams
|
||||||
|
- Add +randomteam battleroom command to automatically assign random teams
|
||||||
|
- Add .exereport battleroom command to report CRC32 of each player's totala.exe
|
||||||
|
- Add .tdreport battleroom command to report CRC32 of each player's tdraw.dll
|
||||||
|
- Add .tpreport battleroom command to report CRC32 of each player's tplayx.dll
|
||||||
|
- Add .gp3report battleroom command to report CRC32 of each player's rev31.gp3
|
||||||
|
- Add .crcreport battleroom command to report fingerprints of each player's totala.exe, tdraw.dll, tplayx.dll and rev31.gp3 file all at once
|
||||||
|
- ClickSnap to snap to nearest mex, geo or reclaimable feature
|
||||||
|
- Add ability to drag queued orders around the map
|
||||||
|
- Con units patrol behaviour - hold position: reclaim only
|
||||||
|
- Fix the "ghost com" 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
|
||||||
|
- Show clock and weather report (wind and tidal strength) on top resource panel
|
||||||
|
- Sync wind speed across all players
|
||||||
|
- Set default resolution on new installs to 1024x768 (.ini setting "DisplayModeMinHeight768 = TRUE/FALSE")
|
||||||
|
- Disable relay of F11 chatmacro text to other players
|
||||||
|
- Enable start button in multiplayer lobby if only one player + AI are present
|
||||||
|
- Add +noshake and .ready buttons to sharing menu
|
||||||
|
- Add .autopause button to battleroom screen
|
||||||
|
- Change whiteboard, mappos and resource indicator colours in response to +logo commands
|
||||||
|
- Prevent +logo commands from affecting other players
|
||||||
|
- Ctrl-B doesn't select aircraft carriers
|
||||||
|
- Ctrl-F centres view on selected factory
|
||||||
|
- Ctrl-S works correctly with mobile-units-can-build-mobile-units hack
|
||||||
|
- Set +lostype as a cheatcode (not available unless cheats enabled)
|
||||||
|
- Look for ddraw.dll in current working directory as backend, or failing that use system ddraw.dll
|
||||||
|
- Use the same .ini file as TotalA.exe
|
||||||
|
- Use the same registry path as TotalA.exe
|
||||||
|
- Add FPS counter to megamap, increase megamap FPS
|
||||||
|
- Fix blue background on scoreboard
|
||||||
|
- 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
|
||||||
|
- Use CTRL_F and CTRL_B unit category tags for CTRL+F and CTRL+B hotkeys in preference to heuristics
|
||||||
|
- Change CTRL+S to use CTRL_W and NOTAIR/NAIR categories so as not to select jammers etc
|
||||||
|
|
||||||
|
Other notes:
|
||||||
|
|
||||||
|
- CnC-DDraw 6.3 by FunkyFr3sh included in install (updated from 5.1.0.0)
|
||||||
|
- WGMUS 0.0.23 by MnHebi included in install (updated from 0.0.17)
|
||||||
|
|
||||||
|
|
||||||
|
Buildings
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Arm Wind Generator:
|
||||||
|
- Fixed build angle shading glitch
|
||||||
|
|
||||||
|
Arm Sentinel:
|
||||||
|
- Increased weapon velocity (800->900)
|
||||||
|
|
||||||
|
Core Gaat Gun:
|
||||||
|
- Increased weapon velocity (800->900)
|
||||||
|
|
||||||
|
Core Viper:
|
||||||
|
- Increased weapon velocity (800->900)
|
||||||
|
|
||||||
|
Arm Guardian:
|
||||||
|
- Reduced metal cost (1946->1751)
|
||||||
|
- Reduced health (2477->2230)
|
||||||
|
|
||||||
|
Core Punisher:
|
||||||
|
- Reduced metal cost (1887->1698)
|
||||||
|
- Reduced health (2540->2285)
|
||||||
|
|
||||||
|
Arm Underwater Metal Extractor:
|
||||||
|
- Reduced self destruct countdown (5->0)
|
||||||
|
- Added sound on self destruct
|
||||||
|
|
||||||
|
Core Underwater Metal Extractor:
|
||||||
|
- Reduced self destruct countdown (5->0)
|
||||||
|
- Added sound on self destruct
|
||||||
|
|
||||||
|
Arm Sonar Station:
|
||||||
|
- Increased sonar distance (1180->1250)
|
||||||
|
|
||||||
|
Core Sonar Station:
|
||||||
|
- Increased sonar distance (1180->1250)
|
||||||
|
|
||||||
|
Arm Defender - NS:
|
||||||
|
- Increased health (252->335)
|
||||||
|
|
||||||
|
Core Stinger:
|
||||||
|
- Reduced build time (2357->2239)
|
||||||
|
- Increased health (290->340)
|
||||||
|
|
||||||
|
Arm Stingray:
|
||||||
|
- Reduced range (550->500)
|
||||||
|
- Increased weapon velocity (800->900)
|
||||||
|
|
||||||
|
Core Thunderbolt:
|
||||||
|
- Reduced range (550->500)
|
||||||
|
- Increased weapon velocity (800->900)
|
||||||
|
|
||||||
|
Arm Seaplane Platform:
|
||||||
|
- Added Arm Peeper to build menu
|
||||||
|
- Reduced energy cost (3777->3597)
|
||||||
|
- Reduced metal cost (1556->1482)
|
||||||
|
- Reduced build time (13473->12832)
|
||||||
|
|
||||||
|
Core Seaplane Platform:
|
||||||
|
- Added Core Fink to build menu
|
||||||
|
- Reduced energy cost (3757->3578)
|
||||||
|
- Reduced metal cost (1613->1537)
|
||||||
|
- Reduced build time (14071->13401)
|
||||||
|
|
||||||
|
|
||||||
|
Mines
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Arm Tiny:
|
||||||
|
- Reduced build time (1322->661)
|
||||||
|
- Reduced energy cost (1017->509)
|
||||||
|
- Reduced cloak cost (7->3)
|
||||||
|
- Reduced edge effectiveness (1->0.1)
|
||||||
|
|
||||||
|
Arm Area Mine:
|
||||||
|
- Reduced build time (2481->1241)
|
||||||
|
- Reduced energy cost (1909->955)
|
||||||
|
- Reduced cloak cost (14->6)
|
||||||
|
- Reduced edge effectiveness (1->0.05)
|
||||||
|
|
||||||
|
Arm Focused Mine:
|
||||||
|
- Reduced build time (3494->1747)
|
||||||
|
- Reduced energy cost (2688->1344)
|
||||||
|
- Reduced cloak cost (19->9)
|
||||||
|
- Reduced edge effectiveness (1->0.1)
|
||||||
|
|
||||||
|
Arm HE Area Mine:
|
||||||
|
- Reduced build time (5582->2791)
|
||||||
|
- Reduced energy cost (4294->2147)
|
||||||
|
- Reduced cloak cost (31->15)
|
||||||
|
- Reduced edge effectiveness (1->0.05)
|
||||||
|
|
||||||
|
Arm Precision Mine:
|
||||||
|
- Reduced build time (5375->2688)
|
||||||
|
- Reduced energy cost (4135->2068)
|
||||||
|
- Reduced health (200->100)
|
||||||
|
- Reduced cloak cost (30->15)
|
||||||
|
- Reduced edge effectiveness (1->0.1)
|
||||||
|
|
||||||
|
Arm Nuclear Mine:
|
||||||
|
- Reduced build time (28953->14477)
|
||||||
|
- Reduced energy cost (22272->11136)
|
||||||
|
- Reduced cloak cost (79->40)
|
||||||
|
- Reduced edge effectiveness (1->0.15)
|
||||||
|
|
||||||
|
Core M-104:
|
||||||
|
- Reduced build time (665->333)
|
||||||
|
- Reduced energy cost (532->266)
|
||||||
|
- Reduced health (200->100)
|
||||||
|
- Reduced cloak cost (5->2)
|
||||||
|
- Reduced edge effectiveness (1->0.1)
|
||||||
|
|
||||||
|
Core M-209:
|
||||||
|
- Reduced build time (1445->723)
|
||||||
|
- Reduced energy cost (1156->578)
|
||||||
|
- Reduced health (200->100)
|
||||||
|
- Reduced cloak cost (11->5)
|
||||||
|
- Reduced edge effectiveness (1->0.05)
|
||||||
|
|
||||||
|
Core M-303:
|
||||||
|
- Reduced build time (2130->1065)
|
||||||
|
- Reduced energy cost (1704->852)
|
||||||
|
- Reduced health (200->100)
|
||||||
|
- Reduced cloak cost (15->8)
|
||||||
|
- Reduced edge effectiveness (1->0.1)
|
||||||
|
|
||||||
|
Core M-420:
|
||||||
|
- Reduced build time (2927->1464)
|
||||||
|
- Reduced energy cost (2342->1171)
|
||||||
|
- Reduced health (200->100)
|
||||||
|
- Reduced cloak cost (21->11)
|
||||||
|
- Reduced edge effectiveness (1->0.05)
|
||||||
|
|
||||||
|
Core M-515:
|
||||||
|
- Reduced build time (9508->4754)
|
||||||
|
- Reduced energy cost (7607->3804)
|
||||||
|
- Reduced health (200->100)
|
||||||
|
- Reduced cloak cost (70->35)
|
||||||
|
- Reduced edge effectiveness (1->0.1)
|
||||||
|
|
||||||
|
Core M-610:
|
||||||
|
- Reduced build time (32715->16358)
|
||||||
|
- Reduced energy cost (26172->13086)
|
||||||
|
- Reduced health (200->100)
|
||||||
|
- Reduced cloak cost (123->50)
|
||||||
|
- Reduced edge effectiveness (1->0.15)
|
||||||
|
|
||||||
|
|
||||||
|
Kbots
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Arm Construction Kbot:
|
||||||
|
- Fixed opening/closing animation glitch
|
||||||
|
|
||||||
|
Core Storm:
|
||||||
|
- Increased acceleration (0.091552734->0.1)
|
||||||
|
|
||||||
|
Arm Jethro:
|
||||||
|
- Reduced energy cost (1036->975)
|
||||||
|
- Reduced metal cost (109->102)
|
||||||
|
- Reduced build time (2104->1973)
|
||||||
|
|
||||||
|
Core Crasher:
|
||||||
|
- Reduced energy cost (1040->979)
|
||||||
|
- Reduced metal cost (110->103)
|
||||||
|
- Reduced build time (2108->1977)
|
||||||
|
|
||||||
|
|
||||||
|
Vehicles
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Arm Jeffy:
|
||||||
|
- Increased weapon velocity (700->900)
|
||||||
|
|
||||||
|
Core Weasel:
|
||||||
|
- Increased weapon velocity (700->900)
|
||||||
|
|
||||||
|
Arm Podger:
|
||||||
|
- Increased build time (1519->3038)
|
||||||
|
- Increased energy cost (1031->2062)
|
||||||
|
- Increased speed (1.2->1.5)
|
||||||
|
- Reduced worker time (120->90)
|
||||||
|
|
||||||
|
Core Spoiler:
|
||||||
|
- Increased build time (1740->3480)
|
||||||
|
- Increased energy cost (1117->2234)
|
||||||
|
- Increased speed (1.1->1.4)
|
||||||
|
- Reduced worker time (120->90)
|
||||||
|
|
||||||
|
|
||||||
|
Ships
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Arm Skeeter:
|
||||||
|
- Increased weapon velocity (laser) (700->900)
|
||||||
|
|
||||||
|
Core Searcher:
|
||||||
|
- Fixed incorrect wake
|
||||||
|
- Increased weapon velocity (laser) (700->900)
|
||||||
|
|
||||||
|
Arm Hulk:
|
||||||
|
- Added auto unload script
|
||||||
|
|
||||||
|
Core Envoy:
|
||||||
|
- Added auto unload script
|
||||||
|
|
||||||
|
|
||||||
|
Hovercraft
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Arm Skimmer:
|
||||||
|
- Increased weapon velocity (450->900)
|
||||||
|
|
||||||
|
Core Scrubber:
|
||||||
|
- Increased weapon velocity (400->900)
|
||||||
|
|
||||||
|
Arm Swatter:
|
||||||
|
- Reduced opening animation time
|
||||||
|
- Changed primary weapon bad target category (VTOL->NOTAIR)
|
||||||
|
- Removed NoChaseCategory tag
|
||||||
|
- Reduced metal cost (256->240)
|
||||||
|
- Increased health (775->844)
|
||||||
|
- Increased speed (1.9->2)
|
||||||
|
- Increased aim speed (250->350)
|
||||||
|
|
||||||
|
Core Slinger:
|
||||||
|
- Reduced opening animation time
|
||||||
|
- Changed primary weapon bad target category (VTOL->NOTAIR)
|
||||||
|
- Removed NoChaseCategory tag
|
||||||
|
- Reduced metal cost (250->230)
|
||||||
|
- Increased health (795->888)
|
||||||
|
- Increased speed (1.9->2)
|
||||||
|
- Increased range (600->650)
|
||||||
|
- Increased aim speed (250->350)
|
||||||
|
|
||||||
|
Arm Wombat:
|
||||||
|
- Reduced weapon timer (3->2)
|
||||||
|
- Reduced flight time (10->4)
|
||||||
|
- Increased start velocity (100->250)
|
||||||
|
|
||||||
|
Core Nixer:
|
||||||
|
- Reduced weapon timer (3->2)
|
||||||
|
- Reduced flight time (10->4)
|
||||||
|
- Increased start velocity (100->250)
|
||||||
|
|
||||||
|
Arm Bear:
|
||||||
|
- Added auto unload script
|
||||||
|
|
||||||
|
Core Turtle:
|
||||||
|
- Added auto unload script
|
||||||
|
|
||||||
|
|
||||||
|
Advanced Buildings
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Core Moho Metal Maker:
|
||||||
|
- Fixed bug where unit wouldn't turn off when hit
|
||||||
|
- Reduced opening/closing animation speed
|
||||||
|
|
||||||
|
Arm Flakker:
|
||||||
|
- Added improved fire and hit sounds
|
||||||
|
- Changed from ballistic weapon to line of sight
|
||||||
|
- Increased tolerance (1000->4000)
|
||||||
|
- Added selfprop tag (1)
|
||||||
|
- Added unitsonly tag (1)
|
||||||
|
- Added pitchtolerance tag (6000)
|
||||||
|
- Added guidance tag (1)
|
||||||
|
- Added turnrate tag (3000)
|
||||||
|
|
||||||
|
Core Cobra:
|
||||||
|
- Added improved fire and hit sounds
|
||||||
|
- Changed from ballistic weapon to line of sight
|
||||||
|
- Increased tolerance (1000->4000)
|
||||||
|
- Added selfprop tag (1)
|
||||||
|
- Added unitsonly tag (1)
|
||||||
|
- Added pitchtolerance tag (6000)
|
||||||
|
- Added guidance tag (1)
|
||||||
|
- Added turnrate tag (3000)
|
||||||
|
|
||||||
|
Arm Big Bertha:
|
||||||
|
- Added rotated versions
|
||||||
|
- Reduced accuracy (500->562) (lower is better)
|
||||||
|
|
||||||
|
Core Intimidator:
|
||||||
|
- Added rotated versions
|
||||||
|
- Reduced range (5120->4608)
|
||||||
|
|
||||||
|
Arm Vulcan:
|
||||||
|
- Added rotated versions
|
||||||
|
- Fixed build angle shading glitch and added more team colour
|
||||||
|
|
||||||
|
Core Buzzsaw:
|
||||||
|
- Added rotated versions
|
||||||
|
|
||||||
|
Arm Stunner:
|
||||||
|
- Added special damages for new units
|
||||||
|
- Reduced area of effect (640->512)
|
||||||
|
- Increased reload time (130->150)
|
||||||
|
|
||||||
|
Core Neutron:
|
||||||
|
- Added special damages for new units
|
||||||
|
- Reduced area of effect (640->512)
|
||||||
|
- Increased reload time (130->150)
|
||||||
|
|
||||||
|
Arm Protector:
|
||||||
|
- Reduced energy cost (88000->79200)
|
||||||
|
- Reduced build time (95678->86110)
|
||||||
|
- Changed death explosion (ATOMIC_BLAST -> ATOMIC_BLASTSML) (2000 damage, 516 AOE -> 1000 damage, 260 AOE)
|
||||||
|
|
||||||
|
Core Fortitude:
|
||||||
|
- Reduced energy cost (92321->83089)
|
||||||
|
- Reduced build time (96450->86805)
|
||||||
|
- Changed death explosion (ATOMIC_BLAST -> ATOMIC_BLASTSML) (2000 damage, 516 AOE -> 1000 damage, 260 AOE)
|
||||||
|
|
||||||
|
Arm Retaliator:
|
||||||
|
- Increased build time (143517->160608)
|
||||||
|
|
||||||
|
Core Silencer:
|
||||||
|
- Increased build time (144675->163119)
|
||||||
|
|
||||||
|
Arm Adv. Aircraft Plant:
|
||||||
|
- Increased metal cost (2431->2542)
|
||||||
|
|
||||||
|
Core Adv. Aircraft Plant:
|
||||||
|
- Increased metal cost (2410->2520)
|
||||||
|
|
||||||
|
Arm Adv. Shipyard:
|
||||||
|
- Reduced metal cost (2524->2272)
|
||||||
|
|
||||||
|
Core Adv. Shipyard:
|
||||||
|
- Reduced metal cost (2460->2214)
|
||||||
|
|
||||||
|
Arm Advanced Sonar Station:
|
||||||
|
- Increased sonar distance (2360->2500)
|
||||||
|
|
||||||
|
Arm Advanced Sonar Station:
|
||||||
|
- Increased sonar distance (2360->2500)
|
||||||
|
|
||||||
|
|
||||||
|
Advanced Kbots
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Arm Warrior:
|
||||||
|
- Reduced health (1550->1395)
|
||||||
|
|
||||||
|
Core Pyro:
|
||||||
|
- Reduced health (1350->1215)
|
||||||
|
|
||||||
|
Core Gimp:
|
||||||
|
- Increased weapon velocity (laser) (700->900)
|
||||||
|
|
||||||
|
Arm Zeus:
|
||||||
|
- Reduced health (2450->2330)
|
||||||
|
|
||||||
|
Core Can:
|
||||||
|
- Reduced health (2800->2660)
|
||||||
|
- Increased weapon velocity (700->900)
|
||||||
|
|
||||||
|
Arm Fido:
|
||||||
|
- Edited model to lower barrel
|
||||||
|
- Converted to single shot weapon
|
||||||
|
- Increased weapon velocity (350->400)
|
||||||
|
- Increased damage per shot (65->150)
|
||||||
|
- Reduced DPS (75->57.69)
|
||||||
|
- Reduced health (1300->1250)
|
||||||
|
- Reduced turn rate (900->800)
|
||||||
|
- Reduced speed (1.4->1.25)
|
||||||
|
|
||||||
|
Core Morty:
|
||||||
|
- Reduced health (1150->1100)
|
||||||
|
- Reduced speed (1.13->1.1)
|
||||||
|
- Increased brake rate (0.183105469->0.19)
|
||||||
|
- Reduced range (770->720)
|
||||||
|
|
||||||
|
Core Dominator:
|
||||||
|
- Reduced range (500->450)
|
||||||
|
|
||||||
|
Arm Marky:
|
||||||
|
- Increased speed (0.94->1)
|
||||||
|
|
||||||
|
Core Sumo:
|
||||||
|
- Increased weapon velocity (800->900)
|
||||||
|
- Reduced energy storage (100->0)
|
||||||
|
|
||||||
|
Arm FARK:
|
||||||
|
- Fixed opening/closing animation glitch
|
||||||
|
- Increased build time (7931->8922)
|
||||||
|
- Increased energy cost (3219->4024)
|
||||||
|
- Increased energy storage (0->50)
|
||||||
|
- Increased metal storage (0->50)
|
||||||
|
|
||||||
|
Core Necro:
|
||||||
|
- Increased build time (8562->9133)
|
||||||
|
- Increased energy production (0.4->19)
|
||||||
|
- Increased metal production (0->0.5)
|
||||||
|
|
||||||
|
Arm Infiltrator:
|
||||||
|
- Increased metal cost (128->154)
|
||||||
|
- Increased speed (1.9->2.1)
|
||||||
|
- Reduced minimum cloak distance (80->60)
|
||||||
|
|
||||||
|
Core Parasite:
|
||||||
|
- Reduced energy cost (13452->9416)
|
||||||
|
- Reduced build time (12711->12005)
|
||||||
|
- Reduced minimum cloak distance (80->60)
|
||||||
|
|
||||||
|
Arm Decoy Commander:
|
||||||
|
- Reduced death explosion AOE (950->580)
|
||||||
|
- Added Commander build menu
|
||||||
|
|
||||||
|
Core Decoy Commander:
|
||||||
|
- Reduced death explosion AOE (950->580)
|
||||||
|
- Added Commander build menu
|
||||||
|
|
||||||
|
|
||||||
|
Advanced Vehicles
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Arm Adv. Construction Vehicle:
|
||||||
|
- Reduced build time (10397->9357)
|
||||||
|
|
||||||
|
Core Adv. Construction Vehicle:
|
||||||
|
- Reduced build time (10806->9725)
|
||||||
|
|
||||||
|
Arm Bulldog:
|
||||||
|
- Added barrels from TA Mayhem model and retextured to add more team colour
|
||||||
|
|
||||||
|
Arm Spider:
|
||||||
|
- Scaled model down by 15% and added team colour
|
||||||
|
- Changed footprint from 3x3 to 2x2
|
||||||
|
- Increased speed (1.6->1.7)
|
||||||
|
- Increased range (220->240)
|
||||||
|
- Increased weapon velocity (700->900)
|
||||||
|
|
||||||
|
Arm Merl:
|
||||||
|
- Reduced reload time (12->10)
|
||||||
|
- Increased DPS (50->60)
|
||||||
|
- Reduced weapon timer (3->2)
|
||||||
|
- Reduced flight time (5->4)
|
||||||
|
- Increased start velocity (100->250)
|
||||||
|
|
||||||
|
Core Diplomat:
|
||||||
|
- Reduced reload time (13->11)
|
||||||
|
- Increased DPS (46.15->54.55)
|
||||||
|
- Reduced weapon timer (3->2)
|
||||||
|
- Reduced flight time (5->4)
|
||||||
|
- Increased start velocity (100->250)
|
||||||
|
|
||||||
|
Arm Scarab:
|
||||||
|
- Reduced energy cost (88000->79200)
|
||||||
|
- Reduced build time (95678->86110)
|
||||||
|
- Changed death explosion (ATOMIC_BLAST -> ATOMIC_BLASTSML) (2000 damage, 516 AOE -> 1000 damage, 260 AOE)
|
||||||
|
|
||||||
|
Core Hedgehog:
|
||||||
|
- Reduced energy cost (92321->83089)
|
||||||
|
- Reduced build time (96450->86805)
|
||||||
|
- Changed death explosion (ATOMIC_BLAST -> ATOMIC_BLASTSML) (2000 damage, 516 AOE -> 1000 damage, 260 AOE)
|
||||||
|
|
||||||
|
|
||||||
|
Advanced Aircraft
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Arm Phoenix:
|
||||||
|
- Reduced health (520->470)
|
||||||
|
|
||||||
|
Core Hurricane:
|
||||||
|
- Reduced health (530->480)
|
||||||
|
|
||||||
|
|
||||||
|
Advanced Ships
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Arm Advanced Construction Sub:
|
||||||
|
- Changed footprint from 6x6 to 4x4
|
||||||
|
- Increased speed (2.15->2.35)
|
||||||
|
|
||||||
|
Core Advanced Construction Sub:
|
||||||
|
- Changed footprint from 6x6 to 4x4
|
||||||
|
- Increased speed (2.05->2.25)
|
||||||
|
|
||||||
|
Arm Ranger:
|
||||||
|
- Fixed radar not activating
|
||||||
|
- Added radar dish to unit model
|
||||||
|
- Added script from TA Mayhem
|
||||||
|
- Reduced weapon timer (3->2)
|
||||||
|
- Reduced flight time (5->4)
|
||||||
|
- Increased start velocity (100->250)
|
||||||
|
|
||||||
|
Core Hydra:
|
||||||
|
- Added script from TA Mayhem
|
||||||
|
- Reduced weapon timer (3->2)
|
||||||
|
- Reduced flight time (5->4)
|
||||||
|
- Increased start velocity (100->250)
|
||||||
|
|
||||||
|
Arm Pirahna:
|
||||||
|
- Increased damage per shot (300->350)
|
||||||
|
- Increased DPS (130.43->152.17)
|
||||||
|
- Increased special damage (double) to Arm Lurker and Core Snake (580->700)
|
||||||
|
- Increased special damage (double) to Core Leviathan (580->700)
|
||||||
|
- Increased special damage (double) to Arm Triton and Core Crock (600->700)
|
||||||
|
|
||||||
|
Core Shark:
|
||||||
|
- Increased damage per shot (310->370)
|
||||||
|
- Increased DPS (135.96->162.28)
|
||||||
|
- Increased special damage (double) to Arm Lurker and Core Snake (600->740)
|
||||||
|
- Increased special damage (double) to Core Leviathan (600->740)
|
||||||
|
- Increased special damage (double) to Arm Triton and Core Crock (600->740)
|
||||||
|
|
||||||
|
Arm Fibber:
|
||||||
|
- Increased sight distance (150->200)
|
||||||
|
- Increased sonar jamming distance (150->200)
|
||||||
|
|
||||||
|
Core Warlord:
|
||||||
|
- Increased weapon velocity (laser) (800->900)
|
||||||
|
- Reduced range (laser) (810->770)
|
||||||
@ -1,278 +0,0 @@
|
|||||||
; ProTA 4.5 settings
|
|
||||||
|
|
||||||
[Settings]
|
|
||||||
|
|
||||||
; Use a different order for autoclick queues when the footprint is set to 2
|
|
||||||
; Construction units will spend ever so slightly less time building lines of Dragon Teeth this way
|
|
||||||
OptimizeDTEnabled=1
|
|
||||||
|
|
||||||
; Creates a full ring queue when the footprints of the structure being queued and the structure you
|
|
||||||
; are queuing around don't match up
|
|
||||||
FullRingsEnabled=0
|
|
||||||
|
|
||||||
; The code for the key that controls the whiteboard features
|
|
||||||
WhiteboardKey=220
|
|
||||||
|
|
||||||
; The code for the key that toggles the full screen megamap mode
|
|
||||||
MegaMapKey=115
|
|
||||||
|
|
||||||
; The code for the key that controls the autoclick features
|
|
||||||
BuildLinesRingsKey=88
|
|
||||||
|
|
||||||
; The color of the regions outside of the megamap area
|
|
||||||
; Setting this to anything other than black highlights the edge of the playable area when unmapped
|
|
||||||
; Set to 95 as default which is a dark grey
|
|
||||||
MegaMapEmptyRegionColor=95
|
|
||||||
|
|
||||||
; The position of the income display box
|
|
||||||
; This will update itself when moved in game
|
|
||||||
IncomePosX=1749
|
|
||||||
IncomePosY=32
|
|
||||||
|
|
||||||
; Fully solid background color behind the income display box
|
|
||||||
IncomeBackgroundEnabled=0
|
|
||||||
|
|
||||||
; Change the color of the fully solid background colour behind the income display box
|
|
||||||
IncomeBackgroundColor=95
|
|
||||||
|
|
||||||
; Text only background behind the income display box
|
|
||||||
IncomeTextBackgroundEnabled=1
|
|
||||||
|
|
||||||
; Change the color of the text only background behind the income display box
|
|
||||||
IncomeTextBackgroundColor=95
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
; ProTA 4.5 advanced settings
|
|
||||||
|
|
||||||
; Windowed mode will disable many TA v3.9.02 features (including some of these) and is not recommended
|
|
||||||
|
|
||||||
[Preferences] ; custom settings, if any entry is disabled the "TA v3.9.02 default" values will be used
|
|
||||||
|
|
||||||
; Disabled in tdraw.dll
|
|
||||||
;UseVideoMemory = TRUE;
|
|
||||||
|
|
||||||
; Unit limit per player
|
|
||||||
; Set from 20 - 6553 (setting higher than 1500 may cause instability)
|
|
||||||
; TA v3.1 default is 250
|
|
||||||
; TA v3.9.02 default is 1500
|
|
||||||
; ProTA 4.5 default is 1500
|
|
||||||
; Broken atm (*playx overwrites this setting forcibly to 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
|
|
||||||
; TA v3.9.02 default is 66650
|
|
||||||
; ProTA 4.5 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
|
|
||||||
; TA v3.9.02 default is 20480
|
|
||||||
; ProTA 4.5 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
|
|
||||||
; TA v3.9.02 default is 1280x1280
|
|
||||||
; ProTA 4.5 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
|
|
||||||
; TA v3.9.02 default is 16000
|
|
||||||
; ProTA 4.5 default is 16000
|
|
||||||
UnitType = 16000;
|
|
||||||
|
|
||||||
; Weapon ID limit
|
|
||||||
; Set the maximum number of unique weapon IDs
|
|
||||||
; TA v3.1 default is 256
|
|
||||||
; TA v3.9.02 default is 16000
|
|
||||||
; ProTA 4.5 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
|
|
||||||
; TA v3.9.02 default is FALSE (Weapon ID limit increase not yet compatible with Replayer)
|
|
||||||
; ProTA 4.5 default is FALSE
|
|
||||||
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
|
|
||||||
; TA v3.9.02 default is TRUE
|
|
||||||
; ProTA 4.5 default is TRUE
|
|
||||||
DoubleClick = TRUE;
|
|
||||||
|
|
||||||
; Expanded Multiplayer Sharing Menu
|
|
||||||
; Enable or disable the new expanded multiplayer sharing menu
|
|
||||||
; TA v3.1 default is FALSE
|
|
||||||
; TA v3.9.02 default is TRUE
|
|
||||||
; ProTA 4.5 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
|
|
||||||
; TA v3.9.02 default is FALSE
|
|
||||||
; ProTA 4.5 default is FALSE
|
|
||||||
MenuResolution = FALSE;
|
|
||||||
|
|
||||||
; Megamap
|
|
||||||
; Enable or disable the new megamap
|
|
||||||
; TA v3.1 default is FALSE
|
|
||||||
; TA v3.9.02 default is TRUE
|
|
||||||
; ProTA 4.5 default is TRUE
|
|
||||||
FullScreenMinimap = TRUE;
|
|
||||||
|
|
||||||
; Megamap FPS Limit
|
|
||||||
MegamapFpsLimit = 1000;
|
|
||||||
|
|
||||||
; Megamap Icon Configuration File
|
|
||||||
; Set the location of the megamap's icon configuration file
|
|
||||||
; TA v3.9.02 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
|
|
||||||
; TA v3.9.02 default is TRUE
|
|
||||||
; ProTA 4.5 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
|
|
||||||
; TA v3.9.02 default is TRUE
|
|
||||||
; ProTA 4.5 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
|
|
||||||
; TA v3.9.02 default is FALSE
|
|
||||||
; ProTA 4.5 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
|
|
||||||
; TA v3.9.02 default is 0 for all sensors
|
|
||||||
; ProTA 4.5 default is 0 for all sensors
|
|
||||||
MegamapRadarMinimum = 0;
|
|
||||||
MegamapSonarMinimum = 0;
|
|
||||||
MegamapSonarJamMinimum = 0;
|
|
||||||
MegamapRadarJamMinimum = 0;
|
|
||||||
MegamapAntiNukeMinimum = 0;
|
|
||||||
|
|
||||||
; 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=252; ;Default is 227 ProTA 4.5 default is 252
|
|
||||||
Player2DotColors=249; ;Default is 212 ProTA 4.5 default is 249
|
|
||||||
Player3DotColors=80; ;Default is 80 ProTA 4.5 default is 80
|
|
||||||
Player4DotColors=250; ;Default is 235 ProTA 4.5 default is 250
|
|
||||||
Player5DotColors=66; ;Default is 108 ProTA 4.5 default is 66
|
|
||||||
Player6DotColors=148; ;Default is 219 ProTA 4.5 default is 148
|
|
||||||
Player7DotColors=208; ;Default is 208 ProTA 4.5 default is 208
|
|
||||||
Player8DotColors=0; ;Default is 93 ProTA 4.5 default is 0
|
|
||||||
Player9DotColors=210; ;Default is 130 ProTA 4.5 default is 210
|
|
||||||
Player10DotColors=33; ;Default is 67 ProTA 4.5 default is 33
|
|
||||||
|
|
||||||
; 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)
|
|
||||||
; TA v3.9.02 default is 3D (dword:2)
|
|
||||||
; ProTA 4.5 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)
|
|
||||||
; TA v3.9.02 default is 128 / unlimited (dword:128)
|
|
||||||
; ProTA 4.5 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 TA v3.9.02 default is 10 which is equivalent to Normal game speed (dword:10)
|
|
||||||
; ProTA 4.5 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)
|
|
||||||
; TA v3.9.02 default is 1 (dword:1)
|
|
||||||
; ProTA 4.5 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)
|
|
||||||
; TA v3.9.02 default is 10 (dword:10)
|
|
||||||
; ProTA 4.5 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 TA v3.9.02 default is 1
|
|
||||||
; ProTA 4.5 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)
|
|
||||||
; TA v3.9.02 default is Random (dword:2)
|
|
||||||
; ProTA 4.5 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
|
|
||||||
@ -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,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,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,202 @@
|
|||||||
|
/*
|
||||||
|
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.405
|
||||||
|
#define JINC2_SINC 0.79
|
||||||
|
#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 * 1.0001;
|
||||||
|
}
|
||||||
|
|
||||||
|
#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==vec4(0.0, 0.0, 0.0, 0.0)) ? vec4(wa*wb) : sin(x*wa)*sin(x*wb)/(x*x);
|
||||||
|
|
||||||
|
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,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,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,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
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,139 @@
|
|||||||
|
;
|
||||||
|
; 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 Anteer Strait
|
||||||
|
100 Ashap Plateau
|
||||||
|
100 Caldera's Rim
|
||||||
|
100 Coast to Coast
|
||||||
|
100 Dark Side
|
||||||
|
100 Etorrep Glacier
|
||||||
|
100 Evad River Confluence
|
||||||
|
100 Fox Holes
|
||||||
|
100 Full Moon
|
||||||
|
100 Gods of War
|
||||||
|
100 Great Divide
|
||||||
|
100 Greenhaven
|
||||||
|
100 Hundred Isles
|
||||||
|
100 Kill the Middle
|
||||||
|
100 King of the Hill
|
||||||
|
100 Lava & Two Hills
|
||||||
|
100 Lava Alley
|
||||||
|
100 Lava Highground
|
||||||
|
100 Lava Mania
|
||||||
|
100 Lava Run
|
||||||
|
100 Metal Heck
|
||||||
|
100 Over Crude Water
|
||||||
|
100 Painted Desert
|
||||||
|
100 Pincushion
|
||||||
|
100 Red Hot Lava
|
||||||
|
100 Red Planet
|
||||||
|
100 Red Triangle
|
||||||
|
100 Ring Atoll
|
||||||
|
100 Rock Alley
|
||||||
|
100 Seven Islands
|
||||||
|
100 Sherwood
|
||||||
|
100 Shore to Shore
|
||||||
|
100 The Cold Place
|
||||||
|
100 The Desert Triad
|
||||||
|
100 The Pass
|
||||||
|
100 Two Continents
|
||||||
|
100 Yerrot Mountains
|
||||||
|
|
||||||
|
|
||||||
|
+CORE CONTINGENCY MAPS
|
||||||
|
|
||||||
|
100 Acid Foursome
|
||||||
|
100 Acid Pools
|
||||||
|
100 Acid Trip
|
||||||
|
100 Assault on Suburbia
|
||||||
|
100 Biggie Biggs
|
||||||
|
100 Block Wars
|
||||||
|
100 Brain Coral
|
||||||
|
100 Cavedog Links CC
|
||||||
|
100 Checker Ponds
|
||||||
|
100 Cluster Freak
|
||||||
|
100 Comet Catcher
|
||||||
|
100 Core Prime Industrial Area
|
||||||
|
100 Crater Islands
|
||||||
|
100 Crystal Cracked
|
||||||
|
100 Crystal Isles
|
||||||
|
100 Crystal Maze
|
||||||
|
100 Crystal Treasure Island
|
||||||
|
100 Dire Straits
|
||||||
|
100 East Indeez
|
||||||
|
100 Eastside Westside
|
||||||
|
100 Expanded Confluence
|
||||||
|
100 Flooded Glaciers
|
||||||
|
100 Gasbag Forests
|
||||||
|
100 Gasplant Plain
|
||||||
|
100 Higher Ground
|
||||||
|
100 Ice Scream
|
||||||
|
100 Icy Bergs
|
||||||
|
100 John's Pass
|
||||||
|
100 Lake Shore
|
||||||
|
100 Lusch Puppy
|
||||||
|
100 Luschaven
|
||||||
|
100 Metal Isles
|
||||||
|
100 Moon Quartet
|
||||||
|
100 Ooooweeee
|
||||||
|
100 Pillopeens
|
||||||
|
100 Plains and Passes
|
||||||
|
100 Polar Range
|
||||||
|
100 Polyp Fields
|
||||||
|
100 Red River North
|
||||||
|
100 Red River
|
||||||
|
100 Ror Shock
|
||||||
|
100 Sail Away
|
||||||
|
100 Sector 410b
|
||||||
|
100 Show Down
|
||||||
|
100 Slate Gordon
|
||||||
|
100 Slated Fate
|
||||||
|
100 Steel Jungle
|
||||||
|
100 Surface Meltdown
|
||||||
|
100 Temblorian Mist
|
||||||
|
100 The Barrier Reef
|
||||||
|
100 The Bayou
|
||||||
|
100 Town & Country
|
||||||
|
100 Trout Farm
|
||||||
|
|
||||||
|
|
||||||
|
+BATTLE TACTICS MAPS
|
||||||
|
|
||||||
|
100 Aqua Verdigris
|
||||||
|
100 Brilliant Cut Lake
|
||||||
|
100 Canal Crossing
|
||||||
|
100 Coremageddon
|
||||||
|
100 Metal Gridlock
|
||||||
|
100 Wretched Ridges
|
||||||
|
|
||||||
|
|
||||||
|
+ONLINE CAVEDOG MAPS
|
||||||
|
|
||||||
|
100 Ancient Issaquah
|
||||||
|
100 Evad River Delta
|
||||||
|
100 Luschie
|
||||||
|
100 Luschinfloggen
|
||||||
|
100 Mounds of Mars
|
||||||
|
100 ThundurLok Rok
|
||||||
|
100 Tropical Paradise
|
||||||
|
|
||||||
|
|
||||||
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,24 @@
|
|||||||
|
bind 'p' Pause
|
||||||
|
bind pause Pause
|
||||||
|
bind 't' Chat
|
||||||
|
bind enter Chat
|
||||||
|
bind 'b' Debug
|
||||||
|
bind up moveforward
|
||||||
|
bind down moveback
|
||||||
|
bind right moveright
|
||||||
|
bind left moveleft
|
||||||
|
bind ctrl movefast
|
||||||
|
bind shift moveslow
|
||||||
|
bind esc quit
|
||||||
|
bind pageup increaseViewRadius
|
||||||
|
bind pagedown decreaseViewRadius
|
||||||
|
bind f6 DrawTrees
|
||||||
|
bind f7 dynamicSky
|
||||||
|
bind f11 screenshot
|
||||||
|
bind numpad+ speedup
|
||||||
|
bind numpad- speeddown
|
||||||
|
bind 'k' drawkills
|
||||||
|
bind 'n' drawnames
|
||||||
|
bind 'h' drawhealth
|
||||||
|
bind 'r' DrawResources
|
||||||
|
bind 'm' DrawMap
|
||||||
@ -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,906 @@
|
|||||||
|
; 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\interpolation\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=-1
|
||||||
|
|
||||||
|
; 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=false
|
||||||
|
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=Cobalt XEMedia
|
||||||
|
|
||||||
|
; 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=false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ### 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]
|
||||||
|
nonexclusive=true
|
||||||
|
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 2
|
||||||
|
[worms2]
|
||||||
|
game_handles_close=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.
Loading…
Reference in new issue